![學(xué)生成績管理系統(tǒng)C++程序設(shè)計(jì)_第1頁](http://file4.renrendoc.com/view10/M00/0B/1A/wKhkGWWHxm-ABuG0AANULeJ9DSs668.jpg)
![學(xué)生成績管理系統(tǒng)C++程序設(shè)計(jì)_第2頁](http://file4.renrendoc.com/view10/M00/0B/1A/wKhkGWWHxm-ABuG0AANULeJ9DSs6682.jpg)
![學(xué)生成績管理系統(tǒng)C++程序設(shè)計(jì)_第3頁](http://file4.renrendoc.com/view10/M00/0B/1A/wKhkGWWHxm-ABuG0AANULeJ9DSs6683.jpg)
![學(xué)生成績管理系統(tǒng)C++程序設(shè)計(jì)_第4頁](http://file4.renrendoc.com/view10/M00/0B/1A/wKhkGWWHxm-ABuG0AANULeJ9DSs6684.jpg)
![學(xué)生成績管理系統(tǒng)C++程序設(shè)計(jì)_第5頁](http://file4.renrendoc.com/view10/M00/0B/1A/wKhkGWWHxm-ABuG0AANULeJ9DSs6685.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
工程設(shè)計(jì)題目〔學(xué)生成績管理系統(tǒng)〕學(xué)號:姓名:自評成績:成績:1.選題意義、依據(jù)學(xué)生成績系統(tǒng)的設(shè)計(jì)從學(xué)生的應(yīng)用中而來,學(xué)生了解該系統(tǒng)的組成和運(yùn)行過程,它貼近學(xué)生的生活能使學(xué)生更加方便的使用各個語句、函數(shù)、結(jié)構(gòu)體等。依據(jù)學(xué)生期末成績表的格式。2.系統(tǒng)功能設(shè)計(jì)與分析〔功能模塊說明〕系統(tǒng)主要用于從一個文件夾讀入學(xué)生信息(101張三857887102李斯575960103王紅847987104趙子龍727576105李洪磊889889),包括學(xué)生學(xué)號、姓名、成績〔數(shù)學(xué)、英語、數(shù)據(jù)庫〕,程序中引用了八個函數(shù)voidCscore(int);voidRank(intave);voidListnumber(inti);voidListscore(inti);voidLookup(int);voidAlter(int);voidDele(int&i);voidInsert(int&i);系統(tǒng)主要實(shí)現(xiàn)的功能有:查詢、修改、刪除、插入、成績單〔以學(xué)號排名〕和成績單〔以名次排名〕。Cscore函數(shù)主要是對學(xué)生進(jìn)行排名。具有相同總分的學(xué)生具有相同的名次,例如:第三名和第四名具有相同的總分那么在表中不會出現(xiàn)第四名,將出現(xiàn)兩個第三名緊接著出現(xiàn)第五名學(xué)生的情況。Rank函數(shù)主要用于按平均分對學(xué)生進(jìn)行備注。把學(xué)生分為四個等級:>90分為excellent,80—90分為medium,60—80分為qualified,<60分為disqualified。Listnumber函數(shù)主要用于把學(xué)生的信息〔學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注〕以學(xué)號排名的順序用表的形式輸出,方便學(xué)生查看。Listnumber函數(shù)中還調(diào)用了Cscore和Rank函數(shù)。Listscore函數(shù)是把學(xué)生的信息以總成績排名的形式輸出。Lookup函數(shù)主要運(yùn)用學(xué)號或姓名形式查詢單個學(xué)生信息,如果存在那么輸出該學(xué)生信息〔學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注〕,否那么輸出“Inputmessageiserror.〞。Alter函數(shù)是修改指定學(xué)號的學(xué)生信息。主要用于修改指定學(xué)號學(xué)生的各科成績并輸出修改后的學(xué)生信息〔學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注〕。Delete函數(shù)用于刪除指定學(xué)生的信息。可用兩種方式刪除:以學(xué)號形式刪除學(xué)生信息,以姓名形式刪除學(xué)生信息。假設(shè)要刪除了學(xué)生不存在那么輸出“messageerror.〞。Insert函數(shù)用來插入學(xué)生的信息,一次調(diào)用Insert函數(shù)可以添加多個學(xué)生的信息。Insert函數(shù)中還調(diào)用了Cscore和Rank函數(shù)?!?〕系統(tǒng)主要運(yùn)用了函數(shù)的聲明、定義、調(diào)用〔值調(diào)用和地址調(diào)用〕。對文件的讀入操作。在平均分的求取上采用四舍五入的方式,運(yùn)用了類型轉(zhuǎn)換。屢次運(yùn)用if和for嵌套,在for嵌套中又運(yùn)用了break語句。運(yùn)用了switch。對字符數(shù)組的比擬中運(yùn)用了strcmp,還運(yùn)用toupper把小寫字母轉(zhuǎn)換成大寫。對學(xué)生信息進(jìn)行的插入和有序刪除操作。運(yùn)用iomanip對輸出進(jìn)行美觀。創(chuàng)新性說明〔怎么解決〕創(chuàng)新性:系統(tǒng)可以對具有相同總分學(xué)生的學(xué)生輸出相同的名次。假設(shè)存在三個相同的分?jǐn)?shù)都為第二名,那么在輸出時出現(xiàn)三個第二名不會出現(xiàn)第三、四名,緊接著出現(xiàn)第五名。解決方法:〔1〕用一個數(shù)組記錄具有相同分?jǐn)?shù)的人數(shù),數(shù)組下標(biāo)和學(xué)生信息所具有的下標(biāo)相同;〔2〕刪除相同的總分只保存其中一個分?jǐn)?shù);〔3〕對刪除相同總分的分?jǐn)?shù)按從高到底進(jìn)行排序;〔4〕對各個學(xué)生的總分進(jìn)行排名。源代碼//******************************************************************//Studentachievementprogram//Thisprogramhaseightfunctionsofstudentsgrade,includinglist//scoreranking,lookup,alter,delete,insertandrank.Fromthefilereadin//studentachievement.Scoresofpeoplehavethesamesameplace.//******************************************************************#include<iostream>#include<string>#include<cctype>#include<cstring>#include<iomanip>#include<fstream>voidCscore(int);voidRank(intave);voidListnumber(inti);voidListscore(inti);voidLookup(int);voidAlter(int);voidDele(int&i);voidInsert(int&i);usingnamespacestd;constintMAX=100;structstudent//定義學(xué)生信息結(jié)構(gòu)體{intnum; charname[8]; intmath; intenglish; intdatabase; intsum; intaverage; intscore;}stu[MAX];intmain()//主函數(shù){ inti,k; charch; stringfilename; ifstreaminfile; cout<<"Pleaseinputthefilenames:"; cin>>filename; infile.open(filename.c_str()); if(!infile) { cout<<"Can'topentheinputfile."<<endl;return1; } for(i=0;i<MAX&&infile;i++) { infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database; stu[i].sum=stu[i].math+stu[i].english+stu[i].database; stu[i].average=int(float(stu[i].sum)/3+0.5); } i=i-1;cout<<endl<<"Welcometo學(xué)生成績管理系統(tǒng)"<<endl;cout<<"YorN進(jìn)入菜單欄"<<endl;cin>>ch;ch=toupper(ch);while(ch=='Y'){ cout<<endl<<"菜單:"<<endl<<"1)查詢"<<endl<<"2)修改"<<endl<<"3)刪除"<<endl<<"4)插入"<<endl <<"5)成績單(以學(xué)號排名)"<<endl<<"6)成績單(以名次排名)"<<endl;cout<<"***請選擇1--4中任何一個:"<<endl;cin>>k;cout<<endl;switch(k) { case1:Lookup(i);break;case2:Alter(i);break;case3:Dele(i);break;case4:Insert(i);break; case5:Listnumber(i);break; case6:Listscore(i);break;default:cout<<"errorinput!"<<endl; }cout<<endl<<"繼續(xù)選擇YorN?"<<endl;cin>>ch;ch=toupper(ch);}cout<<"Thankyouforusing!"<<endl<<"Byebye!"<<endl; infile.close(); return0;}//endmainvoidCscore(inti)//對學(xué)生分?jǐn)?shù)進(jìn)行排名{ inth[MAX],b[MAX],score[MAX+1],n,k,j; intsum0[MAX],s; n=i; for(j=0;j<i;j++) { sum0[j]=stu[j].sum; } for(j=0;j<i;j++) { h[j]=0; for(k=0;k<i;k++) { if(sum0[j]==sum0[k]) { h[j]++;//具有同一分?jǐn)?shù)的人數(shù) } }//endfor }//endfor for(j=0;j<i;j++)//刪除多個同一分?jǐn)?shù)只保存其中一個分?jǐn)?shù) { for(k=j+1;k<i;k++) { if(sum0[j]==sum0[k]) { sum0[k]=sum0[i-1]; i--; k--; } } }//endfor for(j=0;j<i;j++)//按從高到底的順序?qū)偡诌M(jìn)行排名 { for(k=j+1;k<i;k++) { if(sum0[j]<sum0[k]) { s=sum0[j]; sum0[j]=sum0[k]; sum0[k]=s; }//endif}//endfor }//endfor b[0]=0; score[0]=1; for(j=0;j<i;j++)//對學(xué)生成績進(jìn)行排名 { for(k=0;k<n;k++) { if(sum0[j]==stu[k].sum) { score[j+1]=score[j]+b[j]; stu[k].score=score[j+1]; b[j+1]=h[k]; }//endif }//endfor }//endfor}voidRank(intave)//對學(xué)生等級輸出{ if(ave>=90) { cout<<"excellent"; } elseif(ave>=80) { cout<<"medium"; } elseif(ave>=60) { cout<<"qualified"; } else { cout<<"disqualified"; } cout<<endl;}voidListnumber(inti){ intj; Cscore(i); cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注"<<endl; for(j=0;j<i;j++) { cout<<setw(1)<<stu[j].num<<setw(9)<<stu[j].name<<setw(4)<<stu[j].math<<setw(6) <<stu[j].english<<setw(6)<<stu[j].database; cout<<setw(8)<<stu[j].sum<<setw(7)<<stu[j].average; cout<<setw(7); cout<<stu[j].score<<""; Rank(stu[j].average); }}voidListscore(inti){ intj,k; Cscore(i); cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注"<<endl; for(j=1;j<i+1;j++) { for(k=0;k<i;k++) { if(stu[k].score==j) { cout<<setw(1)<<stu[k].num<<setw(9)<<stu[k].name<<setw(4)<<stu[k].math<<setw(6) <<stu[k].english<<setw(6)<<stu[k].database; cout<<setw(8)<<stu[k].sum<<setw(7)<<stu[k].average; cout<<setw(7); cout<<stu[k].score<<""; Rank(stu[k].average); } } }}voidLookup(inti)//運(yùn)用學(xué)號或姓名形式查詢單個學(xué)生信息{ intj,k,n,numb; charname1[8];cout<<"Pleaseselectyoucheckscoreways."<<endl; cout<<"1isusenumber,0isusename."<<endl; cin>>n; if(n)//以學(xué)號形式查詢學(xué)生信息 { cout<<"Pleaseinputstudentnumber:"; cin>>numb; for(j=0;j<i;j++) { if(numb==stu[j].num) { k=j; break; } } } else//以姓名形式查詢學(xué)生信息 { cout<<"Pleaseinputstudentname:"; cin>>name1; for(j=0;j<i;j++) if(strcmp(stu[j].name,name1)==0) { k=j; break; } } if(k==MAX) { cout<<"Inputmessageiserror."<<endl; } else//如果學(xué)生存在那么輸出學(xué)生信息 { Cscore(i); cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注"<<endl; cout<<setw(1)<<stu[j].num<<setw(9)<<stu[j].name<<setw(4)<<stu[j].math<<setw(6) <<stu[j].english<<setw(6)<<stu[j].database; cout<<setw(8)<<stu[j].sum<<setw(7)<<stu[j].average; cout<<setw(7); cout<<stu[j].score<<""; Rank(stu[j].average); }}voidAlter(inti)//修改指定學(xué)號的學(xué)生信息{ intnumb,j;cout<<"alterbegin..."<<endl;cout<<"Pleaseinputnumber:";cin>>numb;for(j=0;j<i;j++){ if(numb==stu[j].num) { cout<<"findout:"<<endl;cout<<"學(xué)號:"<<stu[j].num<<"姓名:"<<stu[j].name<<endl;cout<<"Pleaseinputnewresult:數(shù)學(xué)英語數(shù)據(jù)庫"<<endl;cin>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/3.0+0.5); Cscore(i); //輸出修改后該學(xué)號學(xué)生的信息 cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注"<<endl; cout<<setw(1)<<stu[j].num<<setw(9)<<stu[j].name<<setw(4)<<stu[j].math<<setw(6) <<stu[j].english<<setw(6)<<stu[j].database; cout<<setw(8)<<stu[j].sum<<setw(7)<<stu[j].average; cout<<setw(7); cout<<stu[j].score<<""; Rank(stu[j].average); break; }}}voidDele(int&i)//刪除指定學(xué)生的信息{ intnumb,j,k; charname0[8]; cout<<"deletebegin..."<<endl; cout<<"Pleaseselect:"<<endl;cout<<"[1]以學(xué)號形式刪除學(xué)生信息"<<endl; cout<<"[0]以姓名形式刪除學(xué)生信息"<<endl; cin>>k; if(k)//以學(xué)號形式刪除學(xué)生的信息 { cout<<"Pleaseinputdeletenumber:"; cin>>numb; for(j=0;j<i;j++) { if(numb==stu[j].num) break; } } else//以姓名形式刪除學(xué)生的信息 { cout<<"Pleaseinputdeletename:"; cin>>name0; for(j=0;j<i;j++) { if(strcmp(name0,stu[j].name)==0) break; } } if(j<i) { for(;j<i-1;j++) { stu[j].num=stu[j+1].num; strcpy(stu[j].name,stu[j+1].name); stu[j].math=stu[j+1].math; stu[j].english=stu[j+1].english; stu[j].database=stu[j+1].database; stu[j].sum=stu[j+1].sum; stu[j].average=stu[j+1].average; } i=i-1; Cscore(i); } else cout<<"messageerror."<<endl;}voidInsert(int&i)//插入學(xué)生的信息{ intj,n; cout<<"insertbegin..."<<endl; cout<<"Pleaseinputinsertnumberofpeople:"; cin>>n; i=i+n; cout<<"Pleaseinputinsertmessage.form:"<<endl; cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫"<<endl; for(j=i-n;j<i;j++) { cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/3.0+0.5); } Cscore(i); cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫總分平均分名次備注"<<endl; for(j=i-n;j<i;j++) { cout<<setw(1)<<stu[j].num<<setw(9)<<stu[j].name<<setw(4)<<stu[j].math<<setw(6) <<stu[j].english<<setw(6)<<stu[j].database; cout<<setw(8)<<stu[j].sum<<setw(7)<<stu[j].average; cout<<setw(7); cout<<stu[j].score<<"";Rank(stu[j].average); }}運(yùn)行結(jié)果與分析運(yùn)行結(jié)果:分析:系統(tǒng)根本上能實(shí)現(xiàn)對成績的查詢、、修改、刪除、插入、成績單〔以學(xué)號排名〕和成績單〔以名次排名〕等功能,并且可以插入多個學(xué)生的信息。但在插入學(xué)生后未不能成績單以學(xué)號排名的形式輸出。為了改良程序?qū)nsert函數(shù)進(jìn)行了一下修改。Insert函數(shù)代碼如下:voidInsert(int&i)//插入學(xué)生的信息{ intj,k,n,m,first,last,mid; intnum0,math0,english0,database0; charname0[8]; cout<<"insertbegin..."<<endl; cout<<"Pleaseinputinsertnumberofpeople:"; cin>>n; m=i+n; first=0; last=i-1; mid=(first+last)/2; cout<<"Pleaseinputinsertmessage.form:"<<endl; cout<<"學(xué)號姓名數(shù)學(xué)英語數(shù)據(jù)庫"<<endl; for(j=i;j<m;j++) { i=i+1; cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database; while(first<=last) { if(stu[j].num<stu[mid].num) { last=mid-1; } elsei
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度水電儲能項(xiàng)目工程合同
- 現(xiàn)代醫(yī)院建設(shè)中電力設(shè)施的合同管理與安全保障
- 2025年農(nóng)業(yè)機(jī)械租賃與操作培訓(xùn)一體化服務(wù)合同范本
- 交五險申請書
- 2025年度建筑渣土運(yùn)輸車輛環(huán)保檢測合同范本
- 處分撤銷申請書800吸煙
- 2025年度水電工程安裝與調(diào)試服務(wù)合同
- 移出異常申請書
- 2025年度新能源企業(yè)預(yù)交股權(quán)轉(zhuǎn)讓協(xié)議
- 2025年度人工智能算法研發(fā)與應(yīng)用合同
- 植保無人機(jī)培訓(xùn)課件
- 病案首頁質(zhì)量控制與管理實(shí)施方案
- 精準(zhǔn)高效的數(shù)字孿生光網(wǎng)絡(luò)技術(shù)探討和實(shí)踐
- 110kV全封閉組合開關(guān)電器GIS擴(kuò)建及改造項(xiàng)目技術(shù)規(guī)范書通用部分
- 了解孩子的敏感期課件
- 幼兒園食譜播報
- 勾股定理(公開課)2
- 無違法犯罪記錄證明申請表(個人)
- 《藝術(shù)導(dǎo)論(第二版)》藝術(shù)鑒賞
- 蘇科版六年級下冊《勞動》全一冊全部公開課PPT課件(共9課)
- 銀行業(yè)金融機(jī)構(gòu)監(jiān)管數(shù)據(jù)標(biāo)準(zhǔn)化規(guī)范(2021版)數(shù)據(jù)結(jié)構(gòu)一覽表
評論
0/150
提交評論