學(xué)生成績(jī)管理系統(tǒng)C++程序設(shè)計(jì)_第1頁(yè)
學(xué)生成績(jī)管理系統(tǒng)C++程序設(shè)計(jì)_第2頁(yè)
學(xué)生成績(jī)管理系統(tǒng)C++程序設(shè)計(jì)_第3頁(yè)
學(xué)生成績(jī)管理系統(tǒng)C++程序設(shè)計(jì)_第4頁(yè)
學(xué)生成績(jī)管理系統(tǒng)C++程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

工程設(shè)計(jì)題目〔學(xué)生成績(jī)管理系統(tǒng)〕學(xué)號(hào):姓名:自評(píng)成績(jī):成績(jī):1.選題意義、依據(jù)學(xué)生成績(jī)系統(tǒng)的設(shè)計(jì)從學(xué)生的應(yīng)用中而來(lái),學(xué)生了解該系統(tǒng)的組成和運(yùn)行過(guò)程,它貼近學(xué)生的生活能使學(xué)生更加方便的使用各個(gè)語(yǔ)句、函數(shù)、結(jié)構(gòu)體等。依據(jù)學(xué)生期末成績(jī)表的格式。2.系統(tǒng)功能設(shè)計(jì)與分析〔功能模塊說(shuō)明〕系統(tǒng)主要用于從一個(gè)文件夾讀入學(xué)生信息(101張三857887102李斯575960103王紅847987104趙子龍727576105李洪磊889889),包括學(xué)生學(xué)號(hào)、姓名、成績(jī)〔數(shù)學(xué)、英語(yǔ)、數(shù)據(jù)庫(kù)〕,程序中引用了八個(gè)函數(shù)voidCscore(int);voidRank(intave);voidListnumber(inti);voidListscore(inti);voidLookup(int);voidAlter(int);voidDele(int&i);voidInsert(int&i);系統(tǒng)主要實(shí)現(xiàn)的功能有:查詢、修改、刪除、插入、成績(jī)單〔以學(xué)號(hào)排名〕和成績(jī)單〔以名次排名〕。Cscore函數(shù)主要是對(duì)學(xué)生進(jìn)行排名。具有相同總分的學(xué)生具有相同的名次,例如:第三名和第四名具有相同的總分那么在表中不會(huì)出現(xiàn)第四名,將出現(xiàn)兩個(gè)第三名緊接著出現(xiàn)第五名學(xué)生的情況。Rank函數(shù)主要用于按平均分對(duì)學(xué)生進(jìn)行備注。把學(xué)生分為四個(gè)等級(jí):>90分為excellent,80—90分為medium,60—80分為qualified,<60分為disqualified。Listnumber函數(shù)主要用于把學(xué)生的信息〔學(xué)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注〕以學(xué)號(hào)排名的順序用表的形式輸出,方便學(xué)生查看。Listnumber函數(shù)中還調(diào)用了Cscore和Rank函數(shù)。Listscore函數(shù)是把學(xué)生的信息以總成績(jī)排名的形式輸出。Lookup函數(shù)主要運(yùn)用學(xué)號(hào)或姓名形式查詢單個(gè)學(xué)生信息,如果存在那么輸出該學(xué)生信息〔學(xué)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注〕,否那么輸出“Inputmessageiserror.〞。Alter函數(shù)是修改指定學(xué)號(hào)的學(xué)生信息。主要用于修改指定學(xué)號(hào)學(xué)生的各科成績(jī)并輸出修改后的學(xué)生信息〔學(xué)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注〕。Delete函數(shù)用于刪除指定學(xué)生的信息。可用兩種方式刪除:以學(xué)號(hào)形式刪除學(xué)生信息,以姓名形式刪除學(xué)生信息。假設(shè)要?jiǎng)h除了學(xué)生不存在那么輸出“messageerror.〞。Insert函數(shù)用來(lái)插入學(xué)生的信息,一次調(diào)用Insert函數(shù)可以添加多個(gè)學(xué)生的信息。Insert函數(shù)中還調(diào)用了Cscore和Rank函數(shù)。〔1〕系統(tǒng)主要運(yùn)用了函數(shù)的聲明、定義、調(diào)用〔值調(diào)用和地址調(diào)用〕。對(duì)文件的讀入操作。在平均分的求取上采用四舍五入的方式,運(yùn)用了類型轉(zhuǎn)換。屢次運(yùn)用if和for嵌套,在for嵌套中又運(yùn)用了break語(yǔ)句。運(yùn)用了switch。對(duì)字符數(shù)組的比擬中運(yùn)用了strcmp,還運(yùn)用toupper把小寫字母轉(zhuǎn)換成大寫。對(duì)學(xué)生信息進(jìn)行的插入和有序刪除操作。運(yùn)用iomanip對(duì)輸出進(jìn)行美觀。創(chuàng)新性說(shuō)明〔怎么解決〕創(chuàng)新性:系統(tǒng)可以對(duì)具有相同總分學(xué)生的學(xué)生輸出相同的名次。假設(shè)存在三個(gè)相同的分?jǐn)?shù)都為第二名,那么在輸出時(shí)出現(xiàn)三個(gè)第二名不會(huì)出現(xiàn)第三、四名,緊接著出現(xiàn)第五名。解決方法:〔1〕用一個(gè)數(shù)組記錄具有相同分?jǐn)?shù)的人數(shù),數(shù)組下標(biāo)和學(xué)生信息所具有的下標(biāo)相同;〔2〕刪除相同的總分只保存其中一個(gè)分?jǐn)?shù);〔3〕對(duì)刪除相同總分的分?jǐn)?shù)按從高到底進(jìn)行排序;〔4〕對(duì)各個(gè)學(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é)生成績(jī)管理系統(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)成績(jī)單(以學(xué)號(hào)排名)"<<endl<<"6)成績(jī)單(以名次排名)"<<endl;cout<<"***請(qǐng)選擇1--4中任何一個(gè):"<<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)//對(duì)學(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++)//刪除多個(gè)同一分?jǐn)?shù)只保存其中一個(gè)分?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++)//對(duì)學(xué)生成績(jī)進(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)//對(duì)學(xué)生等級(jí)輸出{ 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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注"<<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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注"<<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é)號(hào)或姓名形式查詢單個(gè)學(xué)生信息{ intj,k,n,numb; charname1[8];cout<<"Pleaseselectyoucheckscoreways."<<endl; cout<<"1isusenumber,0isusename."<<endl; cin>>n; if(n)//以學(xué)號(hào)形式查詢學(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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注"<<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é)號(hào)的學(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é)號(hào):"<<stu[j].num<<"姓名:"<<stu[j].name<<endl;cout<<"Pleaseinputnewresult:數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)"<<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é)號(hào)學(xué)生的信息 cout<<"學(xué)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注"<<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é)號(hào)形式刪除學(xué)生信息"<<endl; cout<<"[0]以姓名形式刪除學(xué)生信息"<<endl; cin>>k; if(k)//以學(xué)號(hào)形式刪除學(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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)"<<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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)總分平均分名次備注"<<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)對(duì)成績(jī)的查詢、、修改、刪除、插入、成績(jī)單〔以學(xué)號(hào)排名〕和成績(jī)單〔以名次排名〕等功能,并且可以插入多個(gè)學(xué)生的信息。但在插入學(xué)生后未不能成績(jī)單以學(xué)號(hào)排名的形式輸出。為了改良程序?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é)號(hào)姓名數(shù)學(xué)英語(yǔ)數(shù)據(jù)庫(kù)"<<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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論