學(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頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

一、學(xué)生學(xué)籍信息管理系統(tǒng)設(shè)計1、需求分析學(xué)生基本信息、學(xué)生成績基本信息要存入文件當(dāng)中,因而要提供文件的輸入輸出操作;查詢功能要求提供查找和顯示操作;刪除功能要求實現(xiàn)刪除操作;排序功能要求實現(xiàn)排序操作;另外還應(yīng)該提供鍵盤式選擇菜單以實現(xiàn)功能選擇。2、總體設(shè)計整個系統(tǒng)可以設(shè)計為數(shù)據(jù)錄入模塊、數(shù)據(jù)修改模塊、數(shù)據(jù)查詢模塊、數(shù)據(jù)刪除模塊和數(shù)據(jù)排序模塊。成績包括數(shù)學(xué)、英語、程序設(shè)計基礎(chǔ)三門課成績基本信息存放在一個文件,成績信息存放在另一個文件。(1)數(shù)據(jù)錄入模塊學(xué)生基本信息文件可以在磁盤建立,采用寫文件方式錄入學(xué)生基本信息、各門課程的成績單。綜合成績通過平時成績和卷面成績獲得計算得到(平時30%,卷面70%).(2)數(shù)據(jù)修改模塊采用讀文件方式讀入學(xué)生成績基本信息,進行修改后,以寫文件方式寫回原文件中。修改時,首先詢問要修改信息學(xué)生的姓名或?qū)W號,然后選擇要修改的內(nèi)容,并輸入新的數(shù)據(jù)進行修改.(3)查詢模塊通過菜單選擇查詢功能,再選擇學(xué)生基本情況查詢和成績查詢,若選擇前者,再通過菜單選擇學(xué)號、姓名或宿舍號碼,然后把查找結(jié)果輸出.若選擇后者,則先查找學(xué)號對應(yīng)的姓名,再查找該學(xué)生的課程情況,并統(tǒng)計科目和實得總學(xué)分,輸出結(jié)果。(3)刪除模塊通過菜單選擇刪除學(xué)生的功能,輸入要刪除學(xué)生的學(xué)號,則分別在兩個文件中查找該生信息,刪除之.(4)排序模塊通過菜單選擇排序依據(jù),采用排序算法(冒泡、插入、選擇等)對數(shù)據(jù)進行排序并輸出結(jié)果,排序標(biāo)準(zhǔn)包括總分、某課成績、某課卷面成績等.(5)追加模塊追加學(xué)生信息#includeviostream。h>#include〈fstream。h>#include〈string。h〉#include〈stdlib.h>includeviomanip。h〉defineN80structStuInfo{intstuNo;〃學(xué)號charname[20];//姓名charsex[3];〃性別intdomNum;//宿舍號chartel[12];〃電話號碼};〃學(xué)生基本信息結(jié)構(gòu)體structStuGraInfo(charcourseName[10];〃課程名稱intcourseNo;〃課程編號intcreditHour;〃學(xué)分structscore{intstuNo;〃學(xué)號floattriGrade;//平時成績floatexamGrade;//卷面成績floattotalGrade;〃綜合總評成績}score_talbe[N];};//成績單基本信息結(jié)構(gòu)體voidcreate();voidsearch();voidinsert();voidrepin();voiddel();voidhelp();voidrecreate();StuGraInfop[3];StuInfod[N];intstuNum=0;intmain(){charch;do{cout<〈setw(60)〈<””<〈endl;cout〈〈setw(60)<<”-—-—-—--—歡迎進入系統(tǒng)!—-—-”〈<endl;cout〈〈setw(40)<〈"1:創(chuàng)建”<〈endl<〈setw(40)〈〈"2:查詢”<<endl<〈setw(40)〈〈”3:修改”<〈endl<〈setw(40)〈〈"4:排序"<<endl<<setw(40)〈<"5:刪除”〈<endl〈<setw(40)<<”6:添加"<〈endl〈〈setw(40)〈〈”7:幫助"〈<endl<<setw(40)<〈”0:退出”<<endl;cout<<setw(60)〈〈"”〈<endl;cout〈〈”請選擇(0?7):";cin〉>ch;while(!(chv='7'&&ch〉=’0’))/大輸入不在0到5之間無效*/{cout〈<”數(shù)據(jù)輸入錯誤,請重新選擇(0?7):”;cin〉〉ch;}switch(ch){case’1':create();break;case'2':search();break;case'3':insert();break;case'4’:repin();break;case’5’:del();break;case’6’:recreate();break;case'7':help();}}while(ch!='0’);return0;}voidcreate(){//模塊一錄入學(xué)生信息inti,j,t=0;charm;StuGraInfos[3]={{”數(shù)學(xué)”,10,5},{”英語”,11,4},{”程序設(shè)計”,12,4}};fstreamfile;for(i=0;i<N;i++)〃輸入學(xué)生基本信息到內(nèi)存{cout<〈”請輸入學(xué)號”〈〈endl;cin〉>d[i].stuNo;for(intk=0;;k++){for(j=0;j<i;j++)if(d[i].stuNo==d[j]。stuNo){coutvv”此學(xué)號已存在,請重新輸入!"<<endl;t=1;cin〉〉d[i]。stuNo;break;}if(d[i].stuNo==0){cout〈〈”學(xué)號不能為0,請重新輸入!”<〈endl;cin〉〉d[i].stuNo;t=1;break;}if(t==0)break;}cout<〈”請輸入姓名”〈〈endl;cin>〉d[i]。name;cout<〈”請輸入性別”〈vendl;cin>〉d[i].sex;cout〈〈”請輸入宿舍號”<〈endl;cin〉>d[i]。domNum;cout〈〈”請輸入電話號”vvendl;cin>>d[i]。tel;stuNum++;cout<〈”是否繼續(xù)?是y,否n"〈〈endl;cin>〉m;if(m!=’y’)break;}〃輸入學(xué)生的成績信息到內(nèi)存s[i]中for(i=0;i〈3;i++){cout〈<”請開始輸入”〈<s[i]。courseName〈〈"成績”〈<endl;for(j=0;j〈stuNum;j++){cout<〈"學(xué)號”〈〈endl;cin>〉s[i]。score_talbe[j].stuNo;cout<〈s[i].courseName〈<”平時成績”<〈endl;cin〉>s[i].score_talbe[j]。triGrade;cout〈<s[i].courseName<<”卷面成績”〈〈endl;cin>〉s[i]。score_talbe[j]。examGrade;s[i].score_talbe[j].totalGrade=s[i]。score_talbe[j].triGrade*0.3+s[i].score_talbe[j]。examGrade*0.7;}}〃聲明文件流對象ofstreamoutFile;//將基本信息寫入文件testoutFile.open(”D:\\test。txt”,ios::outIios::binary);if(!outFile)//使用錯誤流對象輸出錯誤信息{cout〈<”文件無法打開”vvendl;abort();}else{//將內(nèi)存中從a[i]地址開始的sizeof(d[i])的內(nèi)容寫入文件中for(i=0;i<stuNum;i++)outFile.write((char大)&d[i],sizeof(StuInfo));outFileoclose();//關(guān)閉文件}outFileoopen(''D:\\data.txt'',ios::outlios::binary);if(!outFile)//使用錯誤流對象輸出錯誤信息{cout<<”文件無法打開”〈〈endl;abort();}else{for(i=0;i<3;i++)outFile。write((char*)&s[i],sizeof(StuGraInfo));outFile.close();〃關(guān)閉文件}}voidsearch(){intn,k,i,j,sum=0,t=0;charm,a[20];ifstreaminfile;cout<<setw(40)<<”1:查詢基本信息”〈<endl<<setw(40)〈〈”2:查詢成績"<<endl〈〈setw(40)<〈”3:退出”〈<endl;cout<<setw(60)<〈""<〈endl;cin〉>n;while(!(n<=3&&n>=1))/*輸入不在1到3之間無效*/{cout〈<"數(shù)據(jù)輸入錯誤,請重新選擇(1?3):";cin>〉n;}infile.open(”D:\\test。txt”,ios::inIios::binary);if(!infile){cout<〈"test.txt文件不能打開”〈<endl;abort();}else{for(i=0;infile。peek()!=EOF;i++)//將文件中的數(shù)據(jù)讀出放在d[i]〃從文件中讀字節(jié)到指定的存儲器區(qū)域。infile。read((char大)&d[i],sizeof(StuInfo));infile.close();//關(guān)閉文件}switch(n){case1:cout<<”按學(xué)號查詢請輸入a,按姓名查詢輸入b,按宿舍號查詢輸入c”〈<endl;cin〉〉m;if(m=='a’){cout〈〈”請輸入學(xué)號”〈<endl;cin>>k;for(i=0;i〈stuNum;i++)if(d[i].stuNo==k){cout〈<”該學(xué)生學(xué)號:”〈<d[i].stuNo〈<endl;cout〈〈”該學(xué)生姓名:”〈〈d[i]。name<〈endl;cout〈〈”該學(xué)生性別:"〈<d[i].sex〈<endl;cout<<"該學(xué)生宿舍號:"<<d[i]。domNum〈<endl;cout〈〈”該學(xué)生電話:"<〈d[i].tel〈<endl;t=1;}if(t==0)〃容錯處理cout<<"沒找到"<〈endl;}elseif(m=='b'){cout<〈”請輸入要查找學(xué)生的姓名”〈<endl;cin〉〉a;for(i=0;i〈stuNum;i++)if(strcmp(d[i].name,a)==0){cout〈〈”該學(xué)生學(xué)號:"<〈d[i]。stuNo〈〈endl;cout〈<”該學(xué)生姓名:”〈<d[i]。name〈<endl;cout〈〈”該學(xué)生性別:"<〈d[i].sex〈<endl;cout〈〈”該學(xué)生宿舍號:”〈<d[i]。domNum<<endl;cout〈〈”該學(xué)生電話:"〈<d[i].tel〈<endl;t=1;}if(t==0)〃容錯處理cout〈<"沒找到”<〈endl;}else{cout〈<”請輸入好查找的學(xué)生的宿舍號"<<endl;cin〉〉k;for(i=0;i<stuNum;i++)if(d[i].domNum==k){cout<<”該學(xué)生學(xué)號:”<<d[i].stuNo〈〈endl;cout<<”該學(xué)生姓名:"〈<d[i].name<<endl;cout〈〈”該學(xué)生性別:”<<d[i]。sex<<endl;cout〈〈”該學(xué)生宿舍號:"<<d[i]。domNum<<endl;cout〈〈”該學(xué)生電話:”<〈d[i].tel〈<endl;t=1;}if(t==0)〃容錯處理cout〈〈"沒找到”〈〈endl;}break;case2:infile.open(\data.txt”,ios::inlios::binary);if(!infile){cout<<"data。txt文件不能打開”<〈endl;abort();}else{for(i=0;i〈3;i++)//將文件中的數(shù)據(jù)讀出放在p[i]內(nèi)〃從文件中讀字節(jié)到指定的存儲器區(qū)域。infile。read((char大)&p[i],sizeof(StuGraInfo));infile.close();cout〈<”請輸入要查找的學(xué)生的學(xué)號”<〈endl;cin〉>k;for(i=0;i<stuNum;i++)if(d[i]。stuNo==k){cout<<"該學(xué)生姓名為:”<〈d[i]。name<<endl;t=1;}if(t==0)〃容錯處理cout〈<"沒找到"<〈endl;for(i=0;i〈3;i++)//找到該學(xué)生,輸出成績信息并記錄實得學(xué)分for(j=0;j<stuNum;j++){if(p[i].score_talbe[j].stuNo==k){cout<<p[i]。courseName〈<"\t”〈<"平時成績:”〈<p.score_talbe[j].triGrade;cout〈〈"\t"<〈”卷面成績:"<〈p[i].score_talbe[j].examGrade;cout<〈"\t"<〈"總分:"<<p[i]。score_talbe[j].totalGrade〈〈endl;if(p[i].score_talbe[j]。totalGrade〉=60)sum+=p[i]。creditHour;//用sum記錄及格科目的學(xué)分}cout〈<”該學(xué)生實得學(xué)分為"<<sum<〈endl;}case3:break;}}voidinsert(){//模塊三修改學(xué)生信息fstreaminfile,outFile;intn,i,j,t=0;charcourse[10];infile。open(”D:\\data。txt”,ios::inIios::binary);if(!infile){cout〈<"data.txt文件不能打開”〈〈endl;abort();}else{for(i=0;i<3;i++)//將文件中的數(shù)據(jù)讀出放在p[i]內(nèi),并輸出//從文件中讀字節(jié)到指定的存儲器區(qū)域。infile。read((char大)&p[i],sizeof(StuGraInfo));infile.close();〃關(guān)閉文件cout<<”請輸入要修改學(xué)生的學(xué)號:"<〈endl;cin〉〉n;for(i=0;i<3;i++)for(j=0;j〈stuNum;j++)if(p[i]。score_talbe[j].stuNo==n){t=1;break;}if(t==0){cout〈<”找不到該學(xué)生!"<<endl;return;}cout<<"輸入要修改的科目的課程名稱”<<endl;cout<〈”課程包括數(shù)學(xué)、英語、程序設(shè)計”〈〈endl;cin〉〉course;for(i=0;i〈3;i++)if(strcmp(p[i].courseName,course)==0){t=0;break;}if(t==1)〃容錯處理{cout<〈”沒找到該科目!"<<endl;return;}for(j=0;j<N;j++)if(p[i]。score_talbe[j]。stuNo==n){cout<〈”請輸入該學(xué)生平時成績”<<endl;cin〉>p[i].score_talbe[j].triGrade;cout<<”請輸入該學(xué)生卷面成績”<<endl;cin>>p[i].score_talbe[j].examGrade;p[i].score_talbe[j].totalGrade=p[i]。score_talbe[j]。triGrade大0.3+p[i]。score_talbe[j]。examGrade大0.7;}outFile.open("D:\\data。txt",ios::out|ios::binary);〃打開文件if(!outFile)//使用錯誤流對象輸出錯誤信息{cout〈<”文件無法打開"<<endl;abort();}else〃輸出數(shù)據(jù)到與對象outFile關(guān)聯(lián)的文件中{//把新信息寫入文件for(i=0;i<3;i++)outFile.write((char大)&p[i],sizeof(StuGraInfo));outFile.close();〃關(guān)閉文件cout<<"修改成功!"〈<endl;}}}voiddel(){intnum,i=0,j=0,t=0;fstreaminfile,outFile;cout〈〈”請輸入要輸入學(xué)生的學(xué)號"<〈endl;cin〉>num;infile.open("D:\\test。txt”ios::in|ios::binary);if(!infile){//提示錯誤信息cout〈〈”test.txt文件不能打開”〈〈endl;abort()//提示錯誤信息}else{for(i=0;i<3;i++)//將文件中的數(shù)據(jù)讀出放在p[i]內(nèi),并輸出//從文件中讀字節(jié)到指定的存儲器區(qū)域.infile。read((char大)&d[i],sizeof(StuInfo));infile.close();for(i=0;i<stuNum;i++)if(d[i]。stuNo==num){t=1;d[i].stuNo=0;d[i]。domNum=0;strcpy(d[i].sex,"\0”);for(j=0;j<12;j++)d[i]。tel[j]=0;strcpy(d[i]。name,”\0”);}if(t==0){cout<〈”未找到該學(xué)生!”〈〈endl;}}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ù)讀出放在p[i]內(nèi)//從文件中讀字節(jié)到指定的存儲器區(qū)域。infile.read((char*)&p[i],sizeof(StuGraInfo));infile.close();for(i=0;i〈3;i++)for(j=0;j<stuNum;j++)if(p[i]。score_talbe[j]。stuNo==num){p[i]。score_talbe[j].examGrade=0;p[i].score_talbe[j].stuNo=0;p[i]。score_talbe[j]。totalGrade=0;p[i].score_talbe[j].triGrade=0;}}outFile。open("D:\\test.txt”,ios::out|ios::binary);if(!outFile)//使用錯誤流對象輸出錯誤信息{cout<〈"文件無法打開”<〈endl;abort();}else{//將內(nèi)存中從d[i]地址開始的sizeof(d[i])的內(nèi)容寫入文件中for(i=0;i<3;i++)outFile.write((char*)&d[i],sizeof(StuInfo));outFile.close();//關(guān)閉文件cout<<"基本信息刪除成功!"〈<endl;}outFile.open("D:\\data.txt",ios::out|ios::binary);if(!outFile)//使用錯誤流對象輸出錯誤信息{cout<<”文件無法打開”〈<endl;abort();}else{//將內(nèi)存中從p[i]地址開始的sizeof(p[i])的內(nèi)容寫入文件中for(i=0;i<3;i++)outFile。write((char大)&p[i],sizeof(StuGraInfo));outFile。close();//關(guān)閉文件cout<<”成績信息刪除成功!"<〈endl;}return;}voidrepin(){ifstreamfile;inti,j,max,courseNo,n,k=0;doubleq[N]={0},t;intstu[N],num;charname[N][20],stuName[20];file。open(”D:\\data.txt”,ios::inIios::binary);for(i=0;i<3;i++)file.read((char大)&p[i],sizeof(StuGraInfo));file.close();file。open(''D:\\test.txt'',ios::in|ios::binary);for(i=0;i〈stuNum;i++)file。read((char大)&d[i],sizeof(StuInfo));file。close();cout〈〈setw(40)〈<”1:按總分查詢”〈〈endl<<setw(40)〈<"2:按某課成績查詢”<〈endl<〈setw(40)<〈"3:按某課卷面成績查詢”<<endl〈〈setw(40)<<”4:退出”<〈endl;cout<〈setw(60)<”〈〈endl;cin>>n;switch(n){case1:for(i=0;i<3;i++)for(j=0;j<stuNum;j++){q[j]=q[j]+p[i].score_talbe[j].totalGrade;〃計算學(xué)生各自三門成績總分和stu[j]=p[i].score_talbe[j].stuNo;〃同時記錄學(xué)生學(xué)號strcpy(name[j],d[j]。name);}for(i=0;i<N;i++){max=i;for(j=i+1;j〈N;j++)if(q[max]<q[j])max=j;if(max!=i)//分?jǐn)?shù)排序的同時,學(xué)號隨著分?jǐn)?shù)動{t=q[max];num=stu[max];strcpy(stuName,name[max]);q[max]=q[i];stu[max]=stu[i];strcpy(name[max],name[i]);q[i]=t;stu[i]=num;strcpy(name[i],stuName);}}cout〈<”按總分排序結(jié)果為:"〈<endl;cout〈<”學(xué)號"<〈"\t”〈<”姓名”<<"\t"<〈”分?jǐn)?shù)”<〈endl;for(i=0;i〈stuNum;i++)cout〈<stu[i]〈<”\t”〈〈name[i]<<”\t”〈〈q[i]〈〈endl;cout<<endl;break;case2:cout<〈”如按某課排序,請輸入要排序課程的課程號”<〈endl;cin>〉courseNo;for(i=0;i<stuNum;i++)if(p[i]。courseNo==courseNo){k=1;break;}if(k==0)〃容錯處理{cout<<"找不到該課程!”〈<endl;return;}for(j=0;j(stuNum;j++){q[j]=p[i]。score_talbe[j]。totalGrade;stu[j]=p[i].score_talbe[j].stuNo;}for(i=0;i<stuNum;i++){max=i;for(j=i+1;j〈stuNum;j++)if(q[max]〈q[j])

max=j;if(max!=i){t=q[max];num=stu[max];q[max]=q[i];stu[max]=stu[i];q[i]=t;stu[i]=num;}}cout<<”按該課程排序結(jié)果為:"<<endl;cout〈〈"學(xué)號"〈<”\t"〈<”分?jǐn)?shù)”<<endl;for(i=0;i〈stuNum;i++)cout〈<stu[i]<<”\t"<〈q[i]〈〈endl;cout〈<endl;break;case3:cout〈〈”如按某課卷面成績排序,請輸入要排序課程的課程號"〈<endl;cin〉>courseNo;for(i=0;i〈stuNum;i++)if(p[i]。courseNo==courseNo){k=1;break;}if(k==0)〃容錯處理{cout〈〈”找不到該課程!”<<endl;return;}for(j=0;j<stuNum;j++){q[j]=p[i].score_talbe[j].examGrade;〃計算各個學(xué)生該門課總分stu[j]=p[i].score_talbe[j]。stuNo;}for(i=0;i〈stuNum;i++)//分?jǐn)?shù)排序,學(xué)號跟著分?jǐn)?shù)動{max=i;for(j=i+1;j<N;j++)if(q[max]〈q[j])max=j;if(max!=i){t=q[max];num=stu[max];q[max]=q[i];stu[max]=stu[i];q[i]=t;stu[i]=num;}}cout〈〈"按該課程卷面成績排序結(jié)果為:”〈<endl;cout<<”學(xué)號”〈<"\t”〈<"分?jǐn)?shù)"<<endl;for(i=0;i<stuNum;i++)cout<〈stu[i]〈<”\t”<<q[i]<<endl;cout〈〈endl;case4:break;}}voidhelp(){cout<<”此系統(tǒng)具有存儲學(xué)生數(shù)據(jù),比你更有查詢、修改、排序、刪除、添加的功能”<<endl;;cout<<”初次使用時首先請選擇’創(chuàng)建'菜單,進行寫入文件,用于保存數(shù)據(jù)"<〈endl;cout<〈”已創(chuàng)建后看菜單進行查詢、修改等功能!”<〈endl;}voidrecreate(){fstreaminfile,outFile;intn,i,j,k;cout〈<"請輸入添加人數(shù)"〈<endl;〃鍵入添加人數(shù)cin〉>n;〃讀出文件信息infile。open(”D:\\test。txt”,ios::inIios::binary);for(i=0;i<stuNum;i++)infile。read((char*)&d[i],sizeof(StuInfo));infile。close();j=stuNum;stuNum=stuNum+n;〃通過添加人數(shù)修改全局變量cout<〈”開始添加基本信息:”<〈endl;for(i=j;i<stuNum;i++){cout〈〈”請輸入學(xué)號”〈〈endl;cin>〉d[i].stu

溫馨提示

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

最新文檔

評論

0/150

提交評論