學(xué)生學(xué)籍信息管理系統(tǒng)C++_第1頁
學(xué)生學(xué)籍信息管理系統(tǒng)C++_第2頁
學(xué)生學(xué)籍信息管理系統(tǒng)C++_第3頁
學(xué)生學(xué)籍信息管理系統(tǒng)C++_第4頁
學(xué)生學(xué)籍信息管理系統(tǒng)C++_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、一、學(xué)生學(xué)籍信息管理系統(tǒng)設(shè)計(jì)1、需求分析學(xué)生基本信息、學(xué)生成績(jī)基本信息要存入文件當(dāng)中,因而要提供文件的輸入輸出操作;查詢功能要求提供查找和顯示操作;刪除功能要求實(shí)現(xiàn)刪除操作;排序功能要求實(shí)現(xiàn)排序操作;另外還應(yīng)該提供鍵盤式選擇菜單以實(shí)現(xiàn)功能選擇。2、總體設(shè)計(jì) 整個(gè)系統(tǒng)可以設(shè)計(jì)為數(shù)據(jù)錄入模塊、數(shù)據(jù)修改模塊、數(shù)據(jù)查詢模塊、數(shù)據(jù)刪除模塊和數(shù)據(jù)排序模塊。成績(jī)包括數(shù)學(xué)、英語、程序設(shè)計(jì)基礎(chǔ)三門課成績(jī)基本信息存放在一個(gè)文件,成績(jī)信息存放在另一個(gè)文件。(1)數(shù)據(jù)錄入模塊學(xué)生基本信息文件可以在磁盤建立,采用寫文件方式錄入學(xué)生基本信息、各門課程的成績(jī)單。綜合成績(jī)通過平時(shí)成績(jī)和卷面成績(jī)獲得計(jì)算得到(平時(shí)30%,卷面7

2、0%)。(2)數(shù)據(jù)修改模塊采用讀文件方式讀入學(xué)生成績(jī)基本信息,進(jìn)行修改后,以寫文件方式寫回原文件中。修改時(shí),首先詢問要修改信息學(xué)生的姓名或?qū)W號(hào),然后選擇要修改的內(nèi)容,并輸入新的數(shù)據(jù)進(jìn)行修改。(3)查詢模塊通過菜單選擇查詢功能,再選擇學(xué)生基本情況查詢和成績(jī)查詢,若選擇前者,再通過菜單選擇學(xué)號(hào)、姓名或宿舍號(hào)碼,然后把查找結(jié)果輸出。若選擇后者,則先查找學(xué)號(hào)對(duì)應(yīng)的姓名,再查找該學(xué)生的課程情況,并統(tǒng)計(jì)科目和實(shí)得總學(xué)分,輸出結(jié)果。(3)刪除模塊通過菜單選擇刪除學(xué)生的功能,輸入要?jiǎng)h除學(xué)生的學(xué)號(hào),則分別在兩個(gè)文件中查找該生信息,刪除之。(4)排序模塊通過菜單選擇排序依據(jù),采用排序算法(冒泡、插入、選擇等)對(duì)數(shù)

3、據(jù)進(jìn)行排序并輸出結(jié)果,排序標(biāo)準(zhǔn)包括總分、某課成績(jī)、某課卷面成績(jī)等。 (5)追加模塊追加學(xué)生信息#include<iostream.h>#include<fstream.h>#include<string.h>#include<stdlib.h>#include<iomanip.h>#define N 80struct StuInfo int stuNo; /學(xué)號(hào) char name20; /姓名 char sex3; /性別 int domNum; /宿舍號(hào) char tel12; /電話號(hào)碼 ; /學(xué)生基本信息結(jié)構(gòu)體struct S

4、tuGraInfo char courseName10; /課程名稱 int courseNo; /課程編號(hào) int creditHour; /學(xué)分 struct score int stuNo; /學(xué)號(hào) float triGrade; /平時(shí)成績(jī) float examGrade; /卷面成績(jī) float totalGrade; /綜合總評(píng)成績(jī) score_talbeN; /成績(jī)單基本信息結(jié)構(gòu)體 void create();void search();void insert();void repin();void del();void help();void recreate();StuGra

5、Info p3;StuInfo dN;int stuNum=0;int main( )char ch;do cout<<setw(60)<<" "<<endl;cout<<setw(60)<<"- 歡迎進(jìn)入系統(tǒng)!-"<<endl;cout<<setw(40)<<"1:創(chuàng)建"<<endl<<setw(40)<<"2:查詢"<<endl<<setw(40)<&

6、lt;"3:修改"<<endl<<setw(40)<<"4:排序"<<endl<<setw(40)<<"5:刪除"<<endl<<setw(40)<<"6:添加"<<endl<<setw(40)<<"7:幫助"<<endl<<setw(40)<<"0:退出"<<endl; cout<

7、;<setw(60)<<"-"<<endl;cout<<" 請(qǐng)選擇(07): "cin>>ch;while(!(ch<='7'&&ch>='0') /*輸入不在0到5之間無效*/cout<<" 數(shù)據(jù)輸入錯(cuò)誤,請(qǐng)重新選擇(07):"cin>>ch; switch(ch) case '1': create(); break; case '2': search(); bre

8、ak; case '3': insert(); break; case '4': repin(); break; case '5': del(); break; case '6': recreate(); break; case '7': help(); while(ch!='0');return 0;void create() /模塊一錄入學(xué)生信息int i,j,t=0;char m;StuGraInfo s3="數(shù)學(xué)",10,5,"英語",11,4,&qu

9、ot;程序設(shè)計(jì)",12,4;fstream file;for(i=0;i<N;i+) /輸入學(xué)生基本信息到內(nèi)存cout<<"請(qǐng)輸入學(xué)號(hào)"<<endl;cin>>di.stuNo;for(int k=0;k+)for(j=0;j<i;j+) if(di.stuNo=dj.stuNo) cout<<"此學(xué)號(hào)已存在,請(qǐng)重新輸入!"<<endl; t=1; cin>>di.stuNo; break; if(di.stuNo=0) cout<<"學(xué)號(hào)

10、不能為0,請(qǐng)重新輸入!"<<endl; cin>>di.stuNo; t=1; break;if(t=0)break;cout<<"請(qǐng)輸入姓名"<<endl;cin>>;cout<<"請(qǐng)輸入性別"<<endl;cin>>di.sex;cout<<"請(qǐng)輸入宿舍號(hào)"<<endl;cin>>di.domNum;cout<<"請(qǐng)輸入電話號(hào)"<<e

11、ndl;cin>>di.tel;stuNum+;cout<<"是否繼續(xù)?是y,否n"<<endl;cin>>m;if(m!='y')break; /輸入學(xué)生的成績(jī)信息到內(nèi)存si中for(i=0;i<3;i+)cout<<"請(qǐng)開始輸入"<<si.courseName<<"成績(jī)"<<endl;for(j=0;j<stuNum;j+) cout<<"學(xué)號(hào)"<<endl; ci

12、n>>si. score_talbej.stuNo; cout<<si.courseName<<"平時(shí)成績(jī)"<<endl; cin>>si. score_talbej. triGrade; cout<<si.courseName<<"卷面成績(jī)"<<endl; cin>>si. score_talbej. examGrade; si. score_talbej. totalGrade=si. score_talbej. triGrade*0.3+ s

13、i. score_talbej. examGrade*0.7; /聲明文件流對(duì)象ofstream outFile; /將基本信息寫入文件testoutFile.open("D:test.txt",ios:out|ios:binary); if(!outFile) /使用錯(cuò)誤流對(duì)象輸出錯(cuò)誤信息cout<<"文件無法打開"<<endl;abort();else /將內(nèi)存中從ai地址開始的sizeof(di)的內(nèi)容寫入文件中 for(i=0;i<stuNum;i+) outFile.write(char*)&di,size

14、of(StuInfo); outFile.close ();/關(guān)閉文件 outFile.open("D:data.txt",ios:out|ios:binary); if(!outFile) /使用錯(cuò)誤流對(duì)象輸出錯(cuò)誤信息cout<<"文件無法打開"<<endl;abort();else for(i=0;i<3;i+)outFile.write(char*)&si,sizeof(StuGraInfo);outFile.close ();/關(guān)閉文件 void search() int n,k,i,j,sum=0,t=0;

15、 char m,a20; ifstream infile;cout<<setw(40)<<"1:查詢基本信息"<<endl<<setw(40)<<"2:查詢成績(jī)"<<endl<<setw(40)<<"3:退出"<<endl; cout<<setw(60)<<"-"<<endl;cin>>n;while(!(n<=3&&n>=1) /*

16、輸入不在1到3之間無效*/cout<<" 數(shù)據(jù)輸入錯(cuò)誤,請(qǐng)重新選擇(13):"cin>>n;infile.open ("D:test.txt",ios:in|ios:binary); if(!infile) cout<<"test.txt文件不能打開"<<endl; abort(); elsefor( i=0;infile.peek() != EOF;i+) /將文件中的數(shù)據(jù)讀出放在di /從文件中讀字節(jié)到指定的存儲(chǔ)器區(qū)域。 infile.read (char*)&di,size

17、of(StuInfo);infile.close ();/關(guān)閉文件switch(n)case 1: cout<<"按學(xué)號(hào)查詢請(qǐng)輸入a,按姓名查詢輸入b,按宿舍號(hào)查詢輸入c"<<endl;cin>>m; if(m='a') cout<<"請(qǐng)輸入學(xué)號(hào)"<<endl; cin>>k;for(i=0;i<stuNum;i+) if(di.stuNo=k) cout<<"該學(xué)生學(xué)號(hào):"<<di.stuNo<<endl

18、;cout<<"該學(xué)生姓名:"<<<<endl;cout<<"該學(xué)生性別:"<<di.sex<<endl;cout<<"該學(xué)生宿舍號(hào):"<<di.domNum<<endl;cout<<"該學(xué)生電話:"<<di.tel<<endl;t=1; if(t=0) /容錯(cuò)處理 cout<<"沒找到"<<endl; else i

19、f(m='b')cout<<"請(qǐng)輸入要查找學(xué)生的姓名"<<endl; cin>>a;for(i=0;i<stuNum;i+)if(strcmp(,a)=0) cout<<"該學(xué)生學(xué)號(hào):"<<di.stuNo<<endl;cout<<"該學(xué)生姓名:"<<<<endl; cout<<"該學(xué)生性別:"<<di.sex<<endl;

20、cout<<"該學(xué)生宿舍號(hào):"<<di.domNum<<endl;cout<<"該學(xué)生電話:"<<di.tel<<endl;t=1;if(t=0) /容錯(cuò)處理 cout<<"沒找到"<<endl; elsecout<<"請(qǐng)輸入好查找的學(xué)生的宿舍號(hào)"<<endl;cin>>k;for(i=0;i<stuNum;i+) if(di.domNum=k) cout<<&quo

21、t;該學(xué)生學(xué)號(hào):"<<di.stuNo<<endl; cout<<"該學(xué)生姓名:"<<<<endl; cout<<"該學(xué)生性別:"<<di.sex<<endl; cout<<"該學(xué)生宿舍號(hào):"<<di.domNum<<endl; cout<<"該學(xué)生電話:"<<di.tel<<endl; t=1;if(t=0) /容錯(cuò)處理 c

22、out<<"沒找到"<<endl; break;case 2:infile.open ("D:data.txt",ios:in|ios:binary); if(!infile) cout<<"data.txt文件不能打開"<<endl; abort(); else for(i=0;i<3;i+) /將文件中的數(shù)據(jù)讀出放在pi內(nèi) /從文件中讀字節(jié)到指定的存儲(chǔ)器區(qū)域。 infile.read (char*)&pi,sizeof(StuGraInfo);infile.close(

23、); cout<<"請(qǐng)輸入要查找的學(xué)生的學(xué)號(hào)"<<endl;cin>>k;for(i=0;i<stuNum;i+)if(di.stuNo=k)cout<<"該學(xué)生姓名為:"<<<<endl;t=1;if(t=0) /容錯(cuò)處理cout<<"沒找到"<<endl;for(i=0;i<3;i+) /找到該學(xué)生,輸出成績(jī)信息并記錄實(shí)得學(xué)分for(j=0;j<stuNum;j+) if(pi.score_talbej.

24、stuNo=k) cout<<pi.courseName<<"t"<<"平時(shí)成績(jī):"<<pi.score_talbej.triGrade; cout<<"t"<<"卷面成績(jī):"<<pi.score_talbej.examGrade; cout<<"t"<<"總分:"<<pi.score_talbej.totalGrade<<endl; if(pi

25、.score_talbej.totalGrade>=60) sum+=pi.creditHour; /用sum記錄及格科目的學(xué)分 cout<<"該學(xué)生實(shí)得學(xué)分為"<<sum<<endl;case 3:break; void insert() /模塊三修改學(xué)生信息fstream infile,outFile; int n,i,j,t=0;char course10;infile.open ("D:data.txt",ios:in|ios:binary);if(!infile)cout<<"da

26、ta.txt文件不能打開"<<endl;abort();elsefor(i=0;i<3;i+) /將文件中的數(shù)據(jù)讀出放在pi內(nèi),并輸出/從文件中讀字節(jié)到指定的存儲(chǔ)器區(qū)域。infile.read (char*)&pi,sizeof(StuGraInfo);infile.close ();/關(guān)閉文件cout<<"請(qǐng)輸入要修改學(xué)生的學(xué)號(hào):"<<endl;cin>>n;for(i=0;i<3;i+)for(j=0;j<stuNum;j+) if(pi.score_talbej.stuNo=n)t=1

27、;break;if(t=0)cout<<"找不到該學(xué)生!"<<endl;return;cout<<"輸入要修改的科目的課程名稱"<<endl;cout<<"課程包括 數(shù)學(xué)、英語、程序設(shè)計(jì)"<<endl;cin>>course;for(i=0;i<3;i+)if(strcmp(pi.courseName,course)=0)t=0;break; if(t=1) /容錯(cuò)處理cout<<"沒找到該科目!"<<

28、endl; return;for(j=0;j<N;j+)if(pi.score_talbej.stuNo=n) cout<<"請(qǐng)輸入該學(xué)生平時(shí)成績(jī)"<<endl;cin>>pi.score_talbej.triGrade;cout<<"請(qǐng)輸入該學(xué)生卷面成績(jī)"<<endl;cin>>pi.score_talbej.examGrade;pi. score_talbej. totalGrade=pi. score_talbej. triGrade*0.3+ pi. score_tal

29、bej. examGrade*0.7;outFile.open("D:data.txt",ios:out|ios:binary);/打開文件if(!outFile) /使用錯(cuò)誤流對(duì)象輸出錯(cuò)誤信息cout<<"文件無法打開"<<endl;abort(); else /輸出數(shù)據(jù)到與對(duì)象outFile關(guān)聯(lián)的文件中/把新信息寫入文件 for(i=0;i<3;i+)outFile.write(char*)&pi,sizeof(StuGraInfo);outFile.close ();/關(guān)閉文件cout<<"

30、;修改成功!"<<endl; void del() int num,i=0,j=0,t=0; fstream infile,outFile;cout<<"請(qǐng)輸入要輸入學(xué)生的學(xué)號(hào)"<<endl;cin>>num;infile.open ("D:test.txt",ios:in|ios:binary); if(!infile) cout<<"test.txt文件不能打開"<<endl; /提示錯(cuò)誤信息 abort();else for( i=0;i<3

31、;i+) /將文件中的數(shù)據(jù)讀出放在pi內(nèi),并輸出 /從文件中讀字節(jié)到指定的存儲(chǔ)器區(qū)域。 infile.read (char*)&di,sizeof(StuInfo); infile.close();for(i=0;i<stuNum;i+)if(di.stuNo=num) t=1;di.stuNo=0;di.domNum=0;strcpy(di.sex,"0");for(j=0;j<12;j+) di.telj=0;strcpy(,"0");if(t=0)cout<<"未找到該學(xué)生!"<

32、;<endl;infile.open ("D:data.txt",ios:in|ios:binary); if(!infile) cout<<"data.txt文件不能打開"<<endl; /提示錯(cuò)誤信息 abort();else for( i=0;i<3;i+) /將文件中的數(shù)據(jù)讀出放在pi內(nèi) /從文件中讀字節(jié)到指定的存儲(chǔ)器區(qū)域。 infile.read (char*)&pi,sizeof(StuGraInfo); infile.close();for(i=0;i<3;i+)for(j=0;j<s

33、tuNum;j+)if(pi.score_talbej.stuNo=num)pi.score_talbej.examGrade=0; pi.score_talbej.stuNo=0; pi.score_talbej.totalGrade=0;pi.score_talbej.triGrade=0;outFile.open("D:test.txt",ios:out|ios:binary); if(!outFile) /使用錯(cuò)誤流對(duì)象輸出錯(cuò)誤信息cout<<"文件無法打開"<<endl;abort();else/將內(nèi)存中從di地址開始的

34、sizeof(di)的內(nèi)容寫入文件中 for(i=0;i<3;i+) outFile.write(char*)&di,sizeof(StuInfo); outFile.close ();/關(guān)閉文件cout<<"基本信息刪除成功!"<<endl;outFile.open("D:data.txt",ios:out|ios:binary); if(!outFile) /使用錯(cuò)誤流對(duì)象輸出錯(cuò)誤信息cout<<"文件無法打開"<<endl;abort();else/將內(nèi)存中從pi地址

35、開始的sizeof(pi)的內(nèi)容寫入文件中 for(i=0;i<3;i+) outFile.write(char*)&pi,sizeof(StuGraInfo); outFile.close ();/關(guān)閉文件cout<<"成績(jī)信息刪除成功!"<<endl;return;void repin()ifstream file;int i,j,max,courseNo,n,k=0;double qN=0,t;int stuN,num;char nameN20,stuName20;file.open("D:data.txt",

36、ios:in|ios:binary);for(i=0;i<3;i+)file.read(char *) &pi,sizeof(StuGraInfo);file.close();file.open("D:test.txt",ios:in|ios:binary);for(i=0;i<stuNum;i+)file.read(char *) &di,sizeof(StuInfo);file.close();cout<<setw(40)<<"1:按總分查詢"<<endl<<setw(40)

37、<<"2:按某課成績(jī)查詢"<<endl<<setw(40)<<"3:按某課卷面成績(jī)查詢"<<endl<<setw(40)<<"4:退出"<<endl; cout<<setw(60)<<"-"<<endl;cin>>n;switch(n) case 1: for(i=0;i<3;i+) for(j=0;j<stuNum;j+) qj=qj+pi.score_tal

38、bej.totalGrade; /計(jì)算學(xué)生各自三門成績(jī)總分和 stuj=pi.score_talbej.stuNo; /同時(shí)記錄學(xué)生學(xué)號(hào)strcpy(namej,); for(i=0;i<N;i+) max=i; for(j=i+1;j<N;j+) if(qmax<qj) max=j; if(max!=i) /分?jǐn)?shù)排序的同時(shí),學(xué)號(hào)隨著分?jǐn)?shù)動(dòng) t=qmax;num=stumax; strcpy(stuName,namemax); qmax=qi;stumax=stui; strcpy(namemax,namei); qi=t; stui=num; strcpy(n

39、amei,stuName); cout<<"按總分排序結(jié)果為:"<<endl; cout<<"學(xué)號(hào)"<<"t"<<"姓名"<<"t"<<"分?jǐn)?shù)"<<endl; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<namei<<"t"<<qi<<

40、;endl; cout<<endl; break; case 2: cout<<"如按某課排序,請(qǐng)輸入要排序課程的課程號(hào)"<<endl; cin>>courseNo; for(i=0;i<stuNum;i+) if(pi.courseNo=courseNo) k=1; break; if(k=0) /容錯(cuò)處理cout<<"找不到該課程!"<<endl;return; for(j=0;j<stuNum;j+) qj=pi.score_talbej.totalGrade; s

41、tuj=pi.score_talbej.stuNo; for(i=0;i<stuNum;i+) max=i; for(j=i+1;j<stuNum;j+) if(qmax<qj) max=j; if(max!=i) t=qmax;num=stumax; qmax=qi;stumax=stui; qi=t;stui=num; cout<<"按該課程排序結(jié)果為:"<<endl; cout<<"學(xué)號(hào)"<<"t"<<"分?jǐn)?shù)"<<end

42、l; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<qi<<endl; cout<<endl; break; case 3: cout<<"如按某課卷面成績(jī)排序,請(qǐng)輸入要排序課程的課程號(hào)"<<endl; cin>>courseNo; for(i=0;i<stuNum;i+) if(pi.courseNo=courseNo) k=1; break; if(k=0) /容錯(cuò)處理cout<<"找不到該課

43、程!"<<endl;return; for(j=0;j<stuNum;j+) qj=pi.score_talbej.examGrade; /計(jì)算各個(gè)學(xué)生該門課總分 stuj=pi.score_talbej.stuNo; for(i=0;i<stuNum;i+) /分?jǐn)?shù)排序,學(xué)號(hào)跟著分?jǐn)?shù)動(dòng) max=i; for(j=i+1;j<N;j+) if(qmax<qj)max=j; if(max!=i) t=qmax;num=stumax; qmax=qi;stumax=stui; qi=t;stui=num; cout<<"按該課程卷

44、面成績(jī)排序結(jié)果為:"<<endl; cout<<"學(xué)號(hào)"<<"t"<<"分?jǐn)?shù)"<<endl; for(i=0;i<stuNum;i+) cout<<stui<<"t"<<qi<<endl; cout<<endl; case 4: break;void help()cout<<"此系統(tǒng)具有存儲(chǔ)學(xué)生數(shù)據(jù),比你更有查詢、修改、排序、刪除、添加的功能。"&l

45、t;<endl; cout<<"初次使用時(shí)首先請(qǐng)選擇' 創(chuàng)建'菜單,進(jìn)行寫入文件,用于保存數(shù)據(jù)"<<endl;cout<<"已創(chuàng)建后看菜單進(jìn)行查詢、修改等功能!"<<endl;void recreate()fstream infile,outFile;int n,i,j,k;cout<<"請(qǐng)輸入添加人數(shù)"<<endl; /鍵入添加人數(shù)cin>>n;/讀出文件信息infile.open("D:test.txt",ios:in|ios:binary);for(i=0;i<stuNum;i+)infile.read(char *) &di,sizeof(StuInfo);infile.close();j=stuNum;stuNum=stuNum+n; /通過添加人數(shù)修改全局變量cout<<"開始添加基本信息:"<<endl;for(i=j;i<stuNum;i+)cout<<"請(qǐng)輸入學(xué)號(hào)"<<endl;cin>>di.stuNo

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論