版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、項(xiàng)目設(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 張三 85 78 87102 李斯 57 59 60 103 王紅 84 79 87104 趙子龍 72 75 76 105 李洪磊 88 98 89),包括學(xué)生學(xué)號(hào)、姓名、成績(jī)(數(shù)學(xué)、英語(yǔ)、數(shù)據(jù)庫(kù)),程序中引用了八個(gè)函數(shù) void cscore(int); voi
2、d rank(int ave); void listnumber(int i); void listscore(int i); void lookup(int); void alter(int); void dele(int &i); void insert(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é)生分
3、為四個(gè)等級(jí):90分為excellent,8090分為medium,6080分為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ù) 總分 平均分 名次 備注),否則輸出“input message is
4、 error.”。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é)生信息。若要?jiǎng)h除了學(xué)生不存在則輸出“message error.”。insert 函數(shù)用來(lái)插入學(xué)生的信息,一次調(diào)用insert 函數(shù)可以添加多個(gè)學(xué)生的信息。insert 函數(shù)中還調(diào)用了cscore 和rank 函數(shù)。3.涉及的主要知識(shí)點(diǎn)說(shuō)明 (1)系統(tǒng)主要運(yùn)用了函數(shù)的聲明、定義、調(diào)用(值調(diào)用和地址調(diào)用)。(2) 對(duì)文件的
5、讀入操作。(3) 在平均分的求取上采用四舍五入的方式,運(yùn)用了類型轉(zhuǎn)換。(4) 多次運(yùn)用if和for嵌套,在for嵌套中又運(yùn)用了break語(yǔ)句。(5) 運(yùn)用了switch。(6) 對(duì)字符數(shù)組的比較中運(yùn)用了strcmp,還運(yùn)用toupper把小寫字母轉(zhuǎn)換成大寫。(7) 對(duì)學(xué)生信息進(jìn)行的插入和有序刪除操作。(8) 運(yùn)用iomanip對(duì)輸出進(jìn)行美觀。4. 創(chuàng)新性說(shuō)明(怎么解決) 創(chuàng)新性:系統(tǒng)可以對(duì)具有相同總分學(xué)生的學(xué)生輸出相同的名次。若存在三個(gè)相同的分?jǐn)?shù)都為第二名,則在輸出時(shí)出現(xiàn)三個(gè)第二名不會(huì)出現(xiàn)第三、四名,緊接著出現(xiàn)第五名。 解決方法:(1)用一個(gè)數(shù)組記錄具有相同分?jǐn)?shù)的人數(shù),數(shù)組下標(biāo)和學(xué)生信息所具有
6、的下標(biāo)相同;(2)刪除相同的總分只保留其中一個(gè)分?jǐn)?shù);(3)對(duì)刪除相同總分的分?jǐn)?shù)按從高到底進(jìn)行排序;(4)對(duì)各個(gè)學(xué)生的總分進(jìn)行排名。5. 源代碼/*/student achievement program/this program has eight functions of students grade,including list/score ranking,lookup,alter,delete,insert and rank.from the file read in/student achievement.scores of people have the same same plac
7、e./*#include#include#include#include#include#includevoid cscore(int);void rank(int ave);void listnumber(int i);void listscore(int i);void lookup(int);void alter(int);void dele(int &i);void insert(int &i);using namespace std;const int max=100;struct student /定義學(xué)生信息結(jié)構(gòu)體int num;char name8;int math;int e
8、nglish;int database;int sum;int average;int score;stumax;int main() /主函數(shù)int i,k;char ch;string filename;ifstream infile;coutfilename;infile.open(filename.c_str();if (!infile)coutcant open the input file.endl;return 1;for (i=0; stui.mathstui.englishstui.database; stui.sum=stui.math+
9、stui.english+stui.database; stui.average=int(float(stui.sum)/3+0.5);i=i-1; coutendlwelcome to 學(xué)生成績(jī)管理系統(tǒng) endl; couty or n 進(jìn)入菜單欄 ch; ch=toupper(ch); while (ch=y) coutendl 菜單:endl 1)查 詢endl 2)修 改endl 3)刪 除endl 4)插 入endl 5)成績(jī)單(以學(xué)號(hào)排名)endl 6)成績(jī)單(以名次排名)endl; cout*請(qǐng)選擇 1-4 中任何一個(gè):k; coutendl; switch (k) case 1
10、:lookup(i);break; case 2:alter(i);break; case 3:dele(i);break; case 4:insert(i);break;case 5:listnumber(i);break;case 6:listscore(i);break; default :couterror input!endl; coutendl繼續(xù)選擇 y or n ?ch; ch=toupper(ch); coutthank you for using!endl bye bye !endl;infile.close();return 0; /end mainvoid cscore
11、(int i) /對(duì)學(xué)生分?jǐn)?shù)進(jìn)行排名int hmax,bmax,scoremax+1,n,k,j;int sum0max,s;n=i;for (j=0; ji; j+)sum0j=stuj.sum;for (j=0; ji; j+)hj=0;for (k=0; ki; k+)if (sum0j=sum0k)hj+; /具有同一分?jǐn)?shù)的人數(shù) /end for /end forfor (j=0; ji; j+) /刪除多個(gè)同一分?jǐn)?shù)只保留其中一個(gè)分?jǐn)?shù)for(k=j+1; ki; k+)if(sum0j=sum0k)sum0k=sum0i-1;i-;k-; /end forfor (j=0; ji; j
12、+) /按從高到底的順序?qū)偡诌M(jìn)行排名for (k=j+1; ki; k+)if (sum0jsum0k)s=sum0j;sum0j=sum0k;sum0k=s; /end if /end for /end forb0=0;score0=1;for (j=0; ji; j+) /對(duì)學(xué)生成績(jī)進(jìn)行排名for(k=0; k=90)cout=80)cout=60) coutqualified; else coutdisqualified; coutendl;void listnumber(int i)int j;cscore(i);cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) 總分 平均分 名次 備注 en
13、dl;for (j=0; ji; j+) coutsetw(1)stuj.numsetw(9)setw(4)stuj.mathsetw(6)stuj.englishsetw(6)stuj.database;coutsetw(8)stuj.sumsetw(7)stuj.average;coutsetw(7);coutstuj.score ;rank(stuj.average);void listscore(int i)int j,k;cscore(i);cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) 總分 平均分 名次 備注 endl;for (j=1; ji+1; j+)for (k
14、=0; ki; k+)if(stuk.score=j)coutsetw(1)stuk.numsetw(9)setw(4)stuk.mathsetw(6) stuk.englishsetw(6)stuk.database; coutsetw(8)stuk.sumsetw(7)stuk.average; coutsetw(7); coutstuk.score ; rank(stuk.average);void lookup(int i) /運(yùn)用學(xué)號(hào)或姓名形式查詢單個(gè)學(xué)生信息int j,k,n,numb;char name18; coutplease select you chec
15、k score ways.endl;cout1 is use number,0 is use name.n;if (n) /以學(xué)號(hào)形式查詢學(xué)生信息coutnumb;for (j=0;ji;j+)if (numb=stuj.num)k=j; break;else /以姓名形式查詢學(xué)生信息coutname1;for (j=0;ji;j+)if (strcmp(,name1)=0)k=j;break;if (k=max) coutinput message is error.endl;else /如果學(xué)生存在則輸出學(xué)生信息cscore(i);cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù)
16、總分 平均分 名次 備注 endl;coutsetw(1)stuj.numsetw(9)setw(4)stuj.mathsetw(6)stuj.englishsetw(6)stuj.database;coutsetw(8)stuj.sumsetw(7)stuj.average; coutsetw(7);coutstuj.score ;rank(stuj.average);void alter(int i) /修改指定學(xué)號(hào)的學(xué)生信息int numb,j; coutalter begin.endl; coutnumb; for (j=0;ji;j+) if (numb=stuj.
17、num) coutfind out:endl; cout學(xué)號(hào):stuj.num 姓名:endl; coutplease input new result: 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) stuj.mathstuj.englishstuj.database; stuj.sum=stuj.math+stuj.english+stuj.database; stuj.average=int(float(stuj.sum)/3.0+0.5); cscore(i); /輸出修改后該學(xué)號(hào)學(xué)生的信息 cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) 總分 平均分 名次 備注 endl; coutsetw(1)s
18、tuj.numsetw(9)setw(4)stuj.mathsetw(6)stuj.englishsetw(6)stuj.database; coutsetw(8)stuj.sumsetw(7)stuj.average; coutsetw(7); coutstuj.score ; rank(stuj.average); break; void dele(int &i) /刪除指定學(xué)生的信息int numb,j,k;char name08;coutdelete begin.endl;coutplease select:endl; cout 1以學(xué)號(hào)形式刪除學(xué)生信息endl;co
19、ut 0以姓名形式刪除學(xué)生信息k;if (k) /以學(xué)號(hào)形式刪除學(xué)生的信息coutnumb;for (j=0;ji;j+)if (numb=stuj.num)break;else /以姓名形式刪除學(xué)生的信息coutname0;for (j=0;ji;j+)if (strcmp(name0,)=0)break;if (ji)for(; ji-1; j+)stuj.num=stuj+1.num; strcpy(,stuj+1.name); stuj.math=stuj+1.math; stuj.english=stuj+1.english; stuj.datab
20、ase=stuj+1.database; stuj.sum=stuj+1.sum; stuj.average=stuj+1.average;i=i-1;cscore(i);elsecoutmessage error.endl;void insert(int &i) /插入學(xué)生的信息int j,n;coutinsert begin.endl;coutn;i=i+n;coutplease input insert message.form:endl;cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) endl;for (j=i-n; stuj.mathstuj.englis
21、hstuj.database; stuj.sum=stuj.math+stuj.english+stuj.database; stuj.average=int(float(stuj.sum)/3.0+0.5);cscore(i);cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) 總分 平均分 名次 備注 endl;for (j=i-n; ji; j+) coutsetw(1)stuj.numsetw(9)setw(4)stuj.mathsetw(6)stuj.englishsetw(6)stuj.database;coutsetw(8)stuj.sumsetw(7)stuj.avera
22、ge;coutsetw(7);coutstuj.score ;rank(stuj.average);6. 運(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)排名的形式輸出。為了改進(jìn)程序?qū)nsert 函數(shù)進(jìn)行了一下修改。insert 函數(shù)代碼如下:void insert(int &i) /插入學(xué)生的信息int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name08;coutinsert begin.endl;coutn;m=i+n;first=0;last=i-1;mid=(first+last)/2;coutplease input insert message.form:endl;cout學(xué)號(hào) 姓名 數(shù)學(xué) 英語(yǔ) 數(shù)據(jù)庫(kù) endl;for (j=i; stuj.mathstuj.englishstuj.database;while (first=last)if(stuj.numstumid.num)first=mid+1; else break
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 羽絨制品生產(chǎn)過(guò)程中的安全管理考核試卷
- 非金屬礦產(chǎn)品市場(chǎng)供需分析與預(yù)測(cè)考核試卷
- 統(tǒng)計(jì)模擬在空氣質(zhì)量預(yù)測(cè)中的應(yīng)用-洞察分析
- 非金屬礦物在液晶顯示屏中的應(yīng)用考核試卷
- 星系演化中的恒星形成星團(tuán)-洞察分析
- 物聯(lián)網(wǎng)在陳定信領(lǐng)域的應(yīng)用-洞察分析
- 藥物分子設(shè)計(jì)創(chuàng)新-洞察分析
- 微生物組與動(dòng)脈粥樣硬化預(yù)后評(píng)估-洞察分析
- 2025屆山西省高三上學(xué)期學(xué)情調(diào)研測(cè)試(一模)物理試題(B)(解析版)
- 烏洛托品溶液環(huán)保性能-洞察分析
- 2024中考語(yǔ)文《水滸傳》歷年真題(解析版)
- 接地電阻測(cè)試儀的操作課件
- 《機(jī)修工基礎(chǔ)培訓(xùn)》課件
- 品質(zhì)黃燜雞加盟活動(dòng)策劃
- DLT 754-2013 母線焊接技術(shù)規(guī)程
- 部編版小學(xué)道德與法治五年級(jí)上冊(cè)單元復(fù)習(xí)課件(全冊(cè))
- 仙桃市仙桃市2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)檢測(cè)卷(含答案)
- 智慧農(nóng)場(chǎng)整體建設(shè)實(shí)施方案
- 航空公司個(gè)人年終總結(jié)(共12篇)
- 產(chǎn)品供貨方案、售后服務(wù)方案
- 蘇教版小學(xué)數(shù)學(xué)六年級(jí)上冊(cè)第4單元解決問(wèn)題的策略重難點(diǎn)練習(xí)【含答案】
評(píng)論
0/150
提交評(píng)論