C++課程設計報告——學生信息管理系統_第1頁
C++課程設計報告——學生信息管理系統_第2頁
C++課程設計報告——學生信息管理系統_第3頁
C++課程設計報告——學生信息管理系統_第4頁
C++課程設計報告——學生信息管理系統_第5頁
已閱讀5頁,還剩14頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、C+課程設計報告學 院 計算機科學與信息工程學院 專 業 計算機科學與技術年 級 指 導 老 師 學 生 姓 名 完 成 時 間 2021 年08月23 日 編寫一個小型的學生信息管理系統,可以對中學生、大學生和研究生的信息進行簡單的管理。每一類的學生包括學生名、成績1、成績2、成績3和平均成績。,其中平均成績=成績1+成績2+成績3/3。每類學生還有區別于其他類學生的特殊信息,例如中學生有家長。大學生有專業,研究生有導師。要求通過本系統實現以下功能: 1輸入學生的根本信息; 2根據學生名查詢學生的成績; 3計算并顯示某個學生的平均成績。 對于本系統中的的3種不同種類的對象:中學生、大學生和研

2、究生,抽取其共同特性形成一個基類:根本信息類Record。然后再這個基類的根底上分別派生出3個類:中學生類Student、大學生類U_student和研究生類Graduate。各類信息存放到文件中。 根本信息類Record中的數據成員是num學生類別編號、name(學生名)、score1(成績1)、score2(成績2)、score3(成績3)、average(平均成績)。3個學生類除了繼承Record的數據外,類Student(中學生類)還增加了數據成員patriarch(家長),類U_student(大學生類)增加了數據成員specialty(專業),類Graduate(研究生類)數據成員

3、增加了mentor(導師)。 在基類中定義了構造函數和對所有類型學生的相同操作,成員函數Get_num負責取出學生類別編號,成員函數Get_score1負責取出成績1,成員函數Get_score2負責取出成績2,成員函數Get_score3負責取出成績3,成員函數Computer_average負責取出平均成績,成員函數Input負責數據輸入,成員函數Output負責數據輸出。 系統管理類(System)的主要操作是:成員函數In_information負責輸入學生信息,成員函數Search負責查詢學生信息,成員函數Out_average負責計算并顯示平均成績,成員函數Interface負責界

4、面輸出。class Record /根本信息類protected:int num;char name20;float score1;float score2;float score3;float average;public:Record(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0);Record()int Get_num();float Get_score1();float Get_score2();float Get_score3();float Get_average();char *Getname(

5、);void Compute_average();void Input();void Output();class Student:public Record /中學生類char patriarch20;public:Student(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0,char *tea=" ");Student()void Input();void Output();class U_student:public Record /大學生類char specialty20;publ

6、ic:U_student(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0,char *spe=" ");U_student()void Input();void Output();class Graduate:public Record /研究生類char mentor20;public:Graduate(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0,char *men=" ");Gra

7、duate()void Input();void Output();class System /系統管理類Record A;Student B10;U_student C10;Graduate D10;static int j1,j2,j3;void infor1();void infor2();void infor3();void save();void Search1(int h,char ch20);void Out_average1(int h,char* name);void Interface1();public:System();void In_information();voi

8、d Search();void Out_average();void Interface();1將數據文件中信息讀入內存對象數組當系統啟動成功后,系統管理類System的構造函數自動調用函數save,將學生信息從數據文件中讀入內存各對象數組中。每次從數據文件中讀取積累大小的一條信息存入基類對象中,并獲得這條信息的種類編號,通過學生類別編號可以判定學生的類別,然后將指針指回到這條信息的開頭,存入對應的對象數組中。就拿中學生類來舉例子:根本信息類Record的對象是A,中學生類Student的對象是B【j1】,將數據文件里有關數據讀出并存放到對象B【j1】中,有關程序段如下:fstream dat

9、afile(fileName,ios:in|ios:out|ios:binary); datafile.read(char*)&A,sizeof(Record); while(!datafile.eof() a=A.Get_num(); switch(a) case 1: datafile.seekp(-1* sizeof(class Record),ios:cur); datafile.read(char*)&Bj1,sizeof(Student); j1+; break; 2信息的輸入 信息的輸入功能由成員函數In_information來完成,它根據要輸入的學生類別分別調

10、用對應的學生信息輸入功能函數來完本錢類學生的輸入。有3個類別的學生信息輸入函數:Void infor1();/輸入中學生類對象數據Void infor2();/輸入大學生類對象數據Void infor3();/輸入研究生類對象數據下面以infor1為例說明一條學生信息輸入的實現過程:void System:infor1() Student A; fstream datafile(fileName,ios:in|ios:out|ios:binary); datafile.seekp(0,ios:end); A.Input(); datafile.write(char*)&A,sizeof

11、(class Student); Bj1=A; datafile.close(); (3)信息的查詢信息查詢功能有成員函數Search來完成。如查詢中學生信息的程序段如下:if(strcmp(ch,Bs.Getname()=0) Bs.Output(); cout<<"ttt*"<<endl; found=1; 4平均成績計算和顯示 平均成績的計算和顯示也是按照學生名來進行。先接收從鍵盤輸入的學生類別編號和學生名,找到后通過調用對象的平均成績計算函數來計算平均成績并顯示,以中學生的程序段為例: if(strcmp(name,Bs.Getname()=

12、0) Bs.Compute_average(); average=Bs.Get_average(); found=1; 5界面設計和實現程序運行主要由System類中的Interface來完成。程序段如下:void System:Interface() int rev; cout<<"tt *歡迎使用" cout<<"*"<<endl; cout<<"tt *小型學生信息管理系統" cout<<"*"<<endl; cout<<&q

13、uot;tt 1.輸入學生信息 "<<endl; cout<<"tt 2.查詢學生信息 "<<endl; cout<<"tt 3.計算平均成績 "<<endl; cout<<"tt 4.退出 "<<endl; cout<<"tt 請您選擇(1-4): " cin>>rev; switch(rev) case 1: In_information(); break; case 2: Search();

14、break; case 3: Out_average(); break; case 4: exit(0); 完整程序如下:class Recordprotected:int num;char name20;float score1;float score2;float score3;float average;public:Record(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0);Record()int Get_num();float Get_score1();float Get_score2();flo

15、at Get_score3();float Get_average();char *Getname();void Compute_average();void Input();void Output();class Student:public Recordchar patriarch20;public:Student(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0,char *tea=" ");Student()void Input();void Output();class U_stud

16、ent:public Recordchar specialty20;public:U_student(char* R_name=" ",float sco1=0,float sco2=0,float sco3=0,char *spe=" ");U_student()void Input();void Output();class Graduate:public Recordchar mentor20;public:Graduate(char* R_name=" ",float sco1=0,float sco2=0,float sco

17、3=0,char *men=" ");Graduate()void Input();void Output();class SystemRecord A;Student B10;U_student C10;Graduate D10;static int j1,j2,j3;void infor1();void infor2();void infor3();void save();void Search1(int h,char ch20);void Out_average1(int h,char* name);void Interface1();public:System();

18、void In_information();void Search();void Out_average();void Interface();#include <iostream>#include <string>#include <fstream>#include "Record.h"using namespace std;#define N 30char fileName="super.dat"Record:Record(char* R_name,float sco1,float sco2,float sco3)

19、 strcpy(name,R_name); score1=sco1; score2=sco2; score3=sco3; int Record:Get_num() return num; float Record:Get_score1() return score1; float Record:Get_score2() return score2; float Record:Get_score3() return score3; float Record:Get_average() return average; char*Record:Getname() return name; void

20、Record:Compute_average() average=(score1+score2+score3)/3; void Record:Input() cout<<"tt 學生名:" cin>>name; cout<<"tt 成績1:" cin>>score1;cout<<"tt 成績2:" cin>>score2;cout<<"tt 成績3:" cin>>score3; void Record:Output()

21、cout<<endl; cout<<"tt 所要查看的學生信息:"<<endl;cout<<"tt 學生類別號:"<<num<<endl;cout<<"tt 學生名: "<<name<<endl;cout<<"tt 成績1 : "<<score1<<endl;cout<<"tt 成績2 : "<<score2<<end

22、l;cout<<"tt 成績3 : "<<score3<<endl; Student:Student(char* R_name,float sco1,float sco2,float sco3,char*tea):Record(R_name,sco1,sco2,sco3) num=1; strcpy(patriarch,tea); void Student:Input() Record:Input(); cout<<"tt 家長:"cin>>patriarch; void Student:Out

23、put() Record:Output(); cout<<"tt 家長:"<<patriarch<<endl; U_student:U_student(char* R_name,float sco1,float sco2,float sco3,char* spe):Record(R_name,sco1,sco2,sco3) num=2; strcpy(specialty,spe); void U_student:Input() Record:Input(); cout<<"tt 專業:"cin>>

24、;specialty; void U_student:Output() Record:Output(); cout<<"tt 專業:"<<specialty<<endl; Graduate:Graduate(char* R_name,float sco1,float sco2,float sco3,char* men):Record(R_name,sco1,sco2,sco3) num=4; strcpy(mentor,men); void Graduate:Input() Record:Input(); cout<<&quo

25、t;tt 導師:"cin>>mentor; void Graduate:Output() Record:Output(); cout<<"tt 導師:"<<mentor<<endl; int System:j1=0; int System:j2=0; int System:j3=0; System:System() save(); void System:Interface1() cout<<"nnn" cout<<"tt *按學生類別進行管理*"<

26、;<endl;cout<<"tt *學生類別選擇*"<<endl;類 "<<endl;cout<<"tt 2.大學生類 "<<endl;cout<<"tt 3.研究生類 "<<endl;cout<<"tt 4.退出 "<<endl;cout<<"tt 請您選擇學生類別: " void System:In_information() int rev1; int a

27、gain=1;char t;while(again)Interface1(); cin>>rev1; switch(rev1) case 1: infor1(); break; case 2: infor2(); break; case 3: infor3(); break; case 4: Interface(); break; default: cout<<"ttt 沒有此類學生!"<<endl; continue; cout<<"ttt 信息存儲成功! "<<endl; cout<&

28、lt;"ttt 是否繼續輸入(y/n)?" cin>>t; cout<<endl; if(!(t='Y'|t='y') again=0;Interface(); void System:infor1() Student A; fstream datafile(fileName,ios:in|ios:out|ios:binary); datafile.seekp(0,ios:end); A.Input(); datafile.write(char*)&A,sizeof(class Student); Bj1=A;

29、 datafile.close(); void System:infor2() U_student A; fstream datafile(fileName,ios:in|ios:out|ios:binary); datafile.seekp(0,ios:end); A.Input(); datafile.write(char*)&A,sizeof(class U_student); Cj2=A; datafile.close(); void System:infor3() Graduate A; fstream datafile(fileName,ios:in|ios:out|ios

30、:binary); datafile.seekp(0,ios:end); A.Input(); datafile.write(char*)&A,sizeof(class Graduate); Dj3=A; datafile.close(); void System:save() int a; fstream datafile(fileName,ios:in|ios:out|ios:binary); datafile.read(char*)&A,sizeof(Record); while(!datafile.eof() a=A.Get_num(); switch(a) case

31、1: datafile.seekp(-1* sizeof(class Record),ios:cur); datafile.read(char*)&Bj1,sizeof(Student); j1+; break; case 2: datafile.seekp(-1* sizeof(class Record),ios:cur); datafile.read(char*)&Cj2,sizeof(U_student); j2+; break; case 3: datafile.seekp(-1* sizeof(class Record),ios:cur); datafile.read

32、(char*)&Dj3,sizeof(Graduate); j3+; break; default: break; datafile.read(char*)&A,sizeof(Record); datafile.close(); void System:Search1(int h,char ch20) int s=0,found=0; switch(h) case 1: while(s<N) if(strcmp(ch,Bs.Getname()=0) Bs.Output(); cout<<"ttt*"<<endl; found=1

33、; s+; break; case 2: while(s<N) if(strcmp(ch,Cs.Getname()=0) Cs.Output(); cout<<"ttt*"<<endl; found=1; s+; break; case 3: while(s<N) if(strcmp(ch,Ds.Getname()=0) Ds.Output(); cout<<"ttt*"<<endl; found=1; s+; break; if(found=0) cout<<"nntt

34、對不起,該類別中沒有您所要查詢的學生!"<<endl; void System:Search() int rev; char name20;int again=1;char t;while(again)Interface1();cin>>rev;cout<<"tt 請輸入要查詢的學生名:"cin>>name;Search1(rev,name);cout<<"ttt 是否繼續查詢(y/n)?"cin>>t;cout<<endl;if(!(t='Y'

35、|t='y')again=0;Interface(); void System:Out_average1(int h,char* name) int s=0,found=0; float average;switch(h)case 1:while(s<N) if(strcmp(name,Bs.Getname()=0) Bs.Compute_average(); average=Bs.Get_average(); found=1; s+; break;case 2:while(s<N) if(strcmp(name,Cs.Getname()=0) Cs.Compute_average(); average=Cs.Get_average(); found=1; s+; break;case 3:while(s<N) if(strcmp(name,Ds.Getname()=0) Ds.Compute_average(); average=Ds.Get_average(); found=1; s+; break;if(found=0)cout<<"nntt 對不起,該類別中沒有您所要查看平時成績的學生!"<<e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論