C++成績管理系統(tǒng)---最終版_第1頁
C++成績管理系統(tǒng)---最終版_第2頁
C++成績管理系統(tǒng)---最終版_第3頁
C++成績管理系統(tǒng)---最終版_第4頁
C++成績管理系統(tǒng)---最終版_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(論文)任務(wù)書 軟 件 學(xué)院 機械電子工程 專業(yè)20101班 一、課程設(shè)計(論文)題目學(xué)生成績管理系統(tǒng) 二、課程設(shè)計(論文)工作自 2011 年 6 月 27日起至 2011 年6月 29日止。三、課程設(shè)計(論文) 地點: 軟件學(xué)院實訓(xùn)中心 四、課程設(shè)計(論文)內(nèi)容要求:1本課程設(shè)計的目的(1)使學(xué)生掌握系統(tǒng)各功能模塊的基本工作原理; (2)掌握C的基本編程原理和及基本的編程方法; (3)使學(xué)生學(xué)會系統(tǒng)調(diào)試;(4)培養(yǎng)學(xué)生分析、解決問題的能力;(5)提高學(xué)生的軟件文檔寫作能力。 2課程設(shè)計的任務(wù)及要求1)基本要求:(1)分析系統(tǒng)各功能模塊的工作原理;(2)至少有查找,排序、插入、刪除等

2、功能;(3)提出系統(tǒng)的設(shè)計方案; (4)對所進行編程、調(diào)試、修改。 2)創(chuàng)新要求: 在基本要求達到后,可進行創(chuàng)新設(shè)計,如:文件流等; 3)課程設(shè)計論文編寫要求(1)要按照書稿的規(guī)格打印謄寫畢業(yè)論文(2)論文包括目錄、緒論、正文、小結(jié)、參考文獻、附錄等(3)畢業(yè)論文裝訂按學(xué)校的統(tǒng)一要求完成4)答辯與評分標(biāo)準(zhǔn): (1)完成原理分析:20分; (2)完成設(shè)計過程:40分; (3)完成調(diào)試運行結(jié)果正確:25分;(4)答辯:15分。5)參考文獻:(1)譚浩強.C+程序設(shè)計實踐指導(dǎo) 清華大學(xué)出版社 (2)譚浩強.C+程序設(shè)計 清華大學(xué)出版社(3)http:/ /6)課程設(shè)計進度安排內(nèi)容 天

3、數(shù) 地點總體需求與分析構(gòu)思及收集資料 1 圖書館各模塊的編程實現(xiàn),調(diào)試與修改 3 機房撰寫論文與答辯 1 圖書館,學(xué)生簽名: 2010 年 6 月28 日課程設(shè)計(論文)評審意見(1)完成原理分析(20分):優(yōu)()、良()、中()、一般()、差(); (2)設(shè)計分析(25分):優(yōu)()、良()、中()、一般()、差(); (3)完成調(diào)試(20分):優(yōu)()、良()、中()、一般()、差();(4)運行結(jié)果(20分):優(yōu)()、良()、中()、一般()、差();(5)答辯 (15分):優(yōu)()、良()、中()、一般()、差();(6)格式規(guī)范性及考勤是否降等級:是()、否() 評閱人簽名: 職稱: 講師

4、 2010 年6 月20日學(xué)生成績管理系統(tǒng)設(shè)計報告一、 需求分析:用數(shù)組或鏈表數(shù)據(jù)結(jié)構(gòu)完成一個學(xué)生成績管理系統(tǒng),此系統(tǒng)的具體功能要求如下:(1)學(xué)生信息錄入功能 1)用戶從鍵盤輸入每個學(xué)生的信息:學(xué)號、姓名、性別、數(shù)學(xué)、英語、C+、程序設(shè)計、物理五門課成績。 2)可插入一個或多個學(xué)生信息到當(dāng)前編輯的班級數(shù)據(jù)中。3) 可刪除一個或多個學(xué)生信息。(2)文件保存功能 1)學(xué)生信息每一班存為一個數(shù)據(jù)文件,數(shù)據(jù)文件可在程序中打開、編輯和重新保存。 2)用戶輸入學(xué)生信息可隨時保存數(shù)據(jù)文件。(3)文件打開功能 1)程序只能對當(dāng)前打開的數(shù)據(jù)文件進行編輯。(4)查詢功能 1)瀏覽所有學(xué)生信息; 2)按學(xué)號查詢學(xué)

5、生信息; 3)按姓名查詢學(xué)生信息; 4) 查詢一個班總成績和平均成績; 5) 查詢一個班某一門課總成績和平均成績;(5)報表輸出功能 1) 按學(xué)號輸出一個班學(xué)生信息:學(xué)號、姓名、性別、數(shù)學(xué)、英語、C+、程序設(shè)計、物理成績和總成績,到屏幕和文件。 2) 按總成績輸出從高到低輸出學(xué)號、姓名信息。 注:以上功能以菜單形式供用戶使用,并有一定的容錯功能。二、 概要設(shè)計整體框架:整個學(xué)生成績管理系統(tǒng)采用鏈表作為基本數(shù)據(jù)結(jié)構(gòu),創(chuàng)建一個類student用于保存學(xué)生的數(shù)據(jù)且是鏈表中的一個節(jié)點。類list作為保存整個鏈表之用。主函數(shù)通過switch語句來根據(jù)用戶的需要連接各個模塊,以實現(xiàn)用戶的需要。模塊基本介紹

6、:1. 用戶輸入模塊在此模塊中,用戶將根據(jù)菜單提示結(jié)合自己的需求輸入一個011的值,來實現(xiàn)一定的功能。2. 學(xué)生信息錄入模塊此模塊可以讓用戶從鍵盤輸入每個學(xué)生的信息:學(xué)號、姓名、性別、數(shù)學(xué)、英語、C+、程序設(shè)計、物理五門課成績。用戶可插入一個或多個學(xué)生信息到當(dāng)前編輯的班級數(shù)據(jù)中。 用戶可刪除一個或多個學(xué)生信息。3. 文件保存功能模塊用戶在確定以錄入的成績無誤之后,可以將學(xué)生信息以每一班為單位存為一個數(shù)據(jù)文件。用戶輸入的學(xué)生信息可隨時保存數(shù)據(jù)文件。4. 文件打開功能模塊用戶可以用此模塊將數(shù)據(jù)文件在程序中打開、編輯,程序只能對當(dāng)前打開的數(shù)據(jù)文件進行編輯。5. 查詢功能模塊在此模塊里,用戶可實現(xiàn)以下

7、操作:1.瀏覽所有學(xué)生信息;2.按學(xué)號查詢學(xué)生信息;3.按姓名查詢學(xué)生信息;4.查詢一個班每個人的總成績和平均成績; 5.查詢一個班某一門課每個人的總成績和平均成績;6)進行成績的統(tǒng)計分析:包括總?cè)藬?shù),每門課的最高成績、最低成績、平均成績、及格人數(shù)。6. 報表輸出功能模塊在此模塊中,用戶可以瀏覽所有學(xué)生的信息,或者可以按學(xué)號輸出一個班學(xué)生信息:學(xué)號、姓名、性別、數(shù)學(xué)、英語、C+、程序設(shè)計、物理成績和總成績,到屏幕和文件。也可以按總成績輸出從高到低輸出學(xué)號、姓名信息。模塊圖:開始m值1,3,4值8值7,2,6,5值10,學(xué)生信息錄入模塊文件打開功能模塊查詢功能模塊報表輸出功能模塊用戶輸入,并將值

8、保存至m中m結(jié)束三、 詳細設(shè)計主要功能模塊的算法設(shè)計思路:1. 用戶輸入模塊設(shè)計提示用戶輸入一個011的值,并存儲在一個整型變量m中。2. 學(xué)生信息錄入模塊設(shè)計通過應(yīng)用list中的instu()函數(shù),來新建一個鏈表中的節(jié)點,即一個新的學(xué)生信息,來進行成績的錄入功能。成績修改功能,可以根據(jù)姓名或?qū)W號進行查詢并修改相應(yīng)的課程的成績,使用了void search(char s10,int)和void search1(char s20,int)函數(shù)進行操作。search函數(shù)根據(jù)姓名查找,search1函數(shù)根據(jù)學(xué)號進行查找。因為學(xué)號和姓名,都是存儲在字符數(shù)組中的,所以都是通過字符串的比較進行查找的。然后

9、根據(jù)整形參數(shù)進行對應(yīng)的課程成績的修改。成績刪除功能,也是可以根據(jù)姓名或?qū)W號進行刪除,查詢的算法和成績修改功能的查詢方法是一樣的,當(dāng)找到要刪除的節(jié)點時,因為節(jié)點都是在堆內(nèi)存中保存的,所以可以直接delete掉,并將前一個節(jié)點的next指針指向被刪掉的節(jié)點的next指針?biāo)赶虻墓?jié)點。3. 查詢功能模塊 可以根據(jù)姓名或?qū)W號進行查找,搜索方法和前幾個模塊相同。通過outstu1(char *n)和outstu(char *n)來進行輸出??偝煽兒推骄煽兊牟樵兺ㄟ^函數(shù)void outsum(char *)和void outsum1(char *)來完成。通過函數(shù)scanall()來瀏覽所有學(xué)生的信息。

10、通過函數(shù)think()來進行成績的統(tǒng)計分析。4. 報表輸出功能模塊 通過建立一個新的類class stucopy用于拷貝student的數(shù)據(jù),并實現(xiàn)排序功能。創(chuàng)建一個stucopy stuM數(shù)組,將原鏈表的數(shù)據(jù)拷貝與數(shù)組中,然后用選擇排序方法將數(shù)組排序,然后用output按照標(biāo)準(zhǔn)的格式輸出數(shù)據(jù)文件。 實踐結(jié)果圖 四、 程序結(jié)構(gòu)源代碼:#include#include#include#includeconst int M = 20;class stucopy/此類用于拷貝student的數(shù)據(jù),用于排序功能的實現(xiàn)public:char id20;char sex10;char name10;dou

11、ble grade5;double sumsum;/總成績double average;/平均成績;class student/用于保存學(xué)生信息的類friend class list;public:char id20;/保存學(xué)號char sex10;/保存性別char name10;/保存名字double grade5;/保存成績student()next=0;for (int i=0;i20;i+)idi=0;for (i=0;i10;i+)sexi=0;for (i=0;i10;i+)namei=0;void s();void setid(char id120)for(int i=0;i2

12、0;i+)idi=id1i;void setsex(char sex110)for(int i=0;i10;i+)sexi=sex1i;void setname(char name110)for(int i=0;i10;i+)namei=name1i;void setgrade(double grade15)for(int i=0;i5;i+)gradei=grade1i;student *next;/next指向下一個學(xué)生,構(gòu)成鏈表char * outid()return id;char * outsex()return sex;char * outname()return name;dou

13、ble outsum()double sum=0;for(int i=0;ioutgrade(i);return sum;double outav()return this-outsum()/5;double outgrade(int i)return gradei;void intgrade(int);void student:intgrade(int j)/用于修改學(xué)生的成績 switch (j)case 1: coutgrade0;break;case 2: coutgrade1;break;case 3: coutgrade2;break;case 4: coutgrade3;brea

14、k;case 5: coutgrade4;break;void student:s()/用于錄入學(xué)生的信息coutid;coutname;coutsex;coutgrade0;coutgrade1;coutgrade2;coutgrade3;coutgrade4;class list/此類為鏈表private:double high5,low5;public:student *last,*first;/鏈表的開頭和結(jié)尾double totoal;list()last=0;first=0;list();void instu();/新建一個學(xué)生的數(shù)據(jù)void outstu(char *);/根據(jù)姓

15、名輸出一個學(xué)生的信息int delstu(char *n);/根據(jù)姓名刪除一個學(xué)生的信息void outstu1(char *);/根據(jù)學(xué)號輸出一個學(xué)生的信息int delstu1(char *n);/根據(jù)學(xué)號刪除一個學(xué)生的信息void outsum(char *);/根據(jù)姓名輸出一個學(xué)生的總成績和平均成績void outsum1(char *);/根據(jù)學(xué)號輸出一個學(xué)生的總成績和平均成績void think();/用于輸出班級成績的統(tǒng)計分析void search(char s10,int);/根據(jù)姓名修改一個學(xué)生的成績void search1(char s20,int);/根據(jù)學(xué)號修改一個學(xué)生

16、的成績double hi(int i);/求某門課的最高分double lo(int i);/求某門課的最低分void av(int i);/求某門課的平均分void ev(int i);/用于班級成績統(tǒng)計分析的人數(shù)分布輸出void scanall();/輸出所有學(xué)生的信息;list:list()/析構(gòu)函數(shù),將所有創(chuàng)建的學(xué)生對象刪掉if(first!=0)student *p=first,*temp;while(p!=NULL)temp=p;p=p-next;delete temp;couts();if(first=0)first=last=p;elselast-next=p;last=p;v

17、oid list:outstu(char *n)if(first=0) cout班級無成員!查無此人!next)if(strcmp(temp-outname(),n)=0) coutsetw(8)學(xué)號setw(8)姓名setw(6)性別setw(6)數(shù)學(xué)setw(6)英語setw(6)C+setw(14)程序設(shè)計setw(6)物理endl;coutsetw(8)outid()setw(8)outname()setw(6)outsex()setw(6)outgrade(0)setw(6)outgrade(1)setw(6)outgrade(2)setw(14)outgrade(3)setw(6)

18、outgrade(4);return;cout查無此人!endl;return;void list:outstu1(char *n)if(first=0) cout班級無成員!查無此人!next)if(strcmp(temp-outid(),n)=0) coutsetw(8)學(xué)號setw(8)姓名setw(6)性別setw(6)數(shù)學(xué)setw(6)英語setw(6)C+setw(14)程序設(shè)計基礎(chǔ)setw(6)物理endl;coutsetw(8)outid()setw(8)outname()setw(6)outsex()setw(6)outgrade(0)setw(6)outgrade(1)se

19、tw(6)outgrade(2)setw(14)outgrade(3)setw(6)outgrade(4);return;cout查無此人!endl;return;int list:delstu(char *n)if(first=0) cout無數(shù)據(jù)!outname(),n)=0) first=first-next;delete temp;coutnext!=NULL;temp=temp-next)if(strcmp(temp-next-outname(),n)=0)p=temp-next;temp-next=temp-next-next;delete p;coutn刪除成功n;return

20、0;coutn查無此人,刪除失敗n;return 0;int list:delstu1(char *n)if(first=0) cout無數(shù)據(jù)!outid(),n)=0) first=first-next;delete temp;coutnext!=NULL)if(strcmp(temp-next-outid(),n)=0)p=temp-next;temp-next=temp-next-next;delete p;coutnext;coutn查無此人,刪除失敗n;return 0;void list:think()if(first=0) cout無數(shù)據(jù)!next;i+;totoal=i;cou

21、t人數(shù):iendl;cout數(shù)學(xué)n;cout最高分:hi(0) 最低分:lo(0) 平均分:;av(0);ev(0);cout英語n;cout最高分:hi(1) 最低分:lo(1) 平均分:;av(1);ev(1);coutC+n;cout最高分:hi(2) 最低分:lo(2) 平均分:;av(2);ev(2);cout程序設(shè)計n;cout最高分:hi(3) 最低分:lo(3) 平均分:;av(3);ev(3);cout物理n;cout最高分:hi(4) 最低分:lo(4) outgrade(i)highi)highi=temp-outgrade(i);temp=temp-next;retur

22、n highi;double list:lo(int i)lowi=100;student *temp=first;while(temp!=0)if(temp-outgrade(i)outgrade(i);temp=temp-next;return lowi;void list:av(int i)double aver=0;student *temp=first;while(temp!=NULL)aver+=temp-outgrade(i);temp=temp-next;coutaver/totoaloutgrade(i)/10)case 10:a+;break;case 9:a+;break

23、;case 8:b+;break;case 7:c+;break;case 6:d+;break;case 5:e+;break;default:f+;temp=temp-next;cout100-90的人數(shù):a 89-80的人數(shù):b 79-70的人數(shù):c 69-60的人數(shù):d 59-50的人數(shù):e 50以下的人數(shù):f 及格的人數(shù):(a+b+c+d) 不及格的人數(shù):(e+f)next)if(strcmp(temp-outname(),s)=0)temp-intgrade(n);void list:search1(char s20,int n)student *temp=first;for(;t

24、emp!=NULL;temp=temp-next)if(strcmp(temp-outid(),s)=0)temp-intgrade(n);void list:outsum(char *n)if(first=0) cout無數(shù)據(jù)!next)if(strcmp(temp-outname(),n)=0)coutsetw(8)學(xué)號setw(8)姓名setw(8)性別setw(8)總成績setw(10)平均成績n;coutsetw(8)outid()setw(8)outname()setw(8)outsex()setw(8)outsum()setw(10)outav();return;cout查無此人

25、!endl;return;void list:outsum1(char *n)double sum=0;int i=0;double av=0;if(first=0) cout無數(shù)據(jù)!next)if(strcmp(temp-outid(),n)=0)coutsetw(8)學(xué)號setw(8)姓名setw(8)性別setw(8)總成績setw(10)平均成績n;coutsetw(8)outid()setw(8)outname()setw(8)outsex()setw(8)outsum()setw(10)outav();return;cout查無此人!next)coutsetw(8)outid()s

26、etw(8)outname()setw(6)outsex()setw(6)outgrade(0)setw(6)outgrade(1)setw(6)outgrade(2)setw(14)outgrade(3)setw(6)outgrade(4)setw(8)outsum()setw(10)outav()endl;void main()stucopy stuM;/復(fù)制整個鏈表的數(shù)據(jù)于數(shù)組,用于排序stucopy stutemp;/臨時變量list will;/整個鏈表student *p, *p1=new student(),*q;/臨時變量ifstream input;/輸入ofstream o

27、utput;/輸出char file20,temp80,id20,name9,sex110;/臨時變量int m=0,n=0,j=0,i=0;/臨時變量double grade15;/臨時變量for(i=0;i20;i+) idi=0;for(i=0;i9;i+) namei=0;/初始化docout/ *n 0、 * 退 出 系 統(tǒng)。 * n 1、 * 輸入學(xué)生成績。 * n 2、 * 成績的查詢。 * n 3、 * 修改學(xué)生的成績。 * n 4、 * 刪除學(xué)生信息 * n 5、 * 平均成績 * n 6、 * 總成績和平均成績的查詢 * n 7、 * 瀏覽所有學(xué)生信息。 * n 8、 *

28、打開指定的數(shù)據(jù)文件。 * n 9、 * 按總成績排序輸出學(xué)生信息 * n10、 * 按學(xué)號順序輸出學(xué)生信息。 * n/ *n;coutendlm;switch(m)case 1:will.instu();break;case 2:cout1.根據(jù)學(xué)號查詢 2.根據(jù)姓名查詢endln;switch(n)case 1:coutid;will.outstu1(id);coutn;break;case 2:coutname;will.outstu(name);coutn;break;break;case 3:cout1.根據(jù)學(xué)號查詢 2.根據(jù)姓名查詢endln;switch(n)case 1:cout

29、id;will.outstu1(id);coutn;coutsetw(6)1.數(shù)學(xué)setw(6)2.英語setw(6)3.C+ setw(14)4.程序設(shè)計setw(6)5.物理endl;coutj;will.search1(id,j);break;case 2:coutname;will.outstu(name);coutn;coutsetw(6)1.數(shù)學(xué)setw(6)2.英語setw(6)3.C+ setw(14)4.程序設(shè)計setw(6)5.物理endl;coutj;will.search(name,j);break;break;case 4:cout1.根據(jù)學(xué)號刪除 2.根據(jù)姓名刪除e

30、ndln;switch(n)case 1:coutid;will.outstu1(id);will.delstu1(id);break;case 2:coutname;will.outstu(name);will.delstu(name);break;break;case 5:will.think();break;case 6:cout1.根據(jù)學(xué)號查詢 2.根據(jù)姓名查詢endln;switch(n)case 1:coutid;will.outsum1(id);break;case 2:coutname;will.outsum(name);break;break;case 7:coutsetw(

31、8)學(xué)號setw(8)姓名setw(6)性別setw(6)數(shù)學(xué)setw(6)英語setw(6)C+setw(14)程序設(shè)計setw(6)物理setw(8)總成績setw(10)平均成績n;will.scanall();break;case 8:cout請輸入文件名:file;input.open(file);if (input.fail()coutFile does not existendl;break;input.getline(temp,80);input.getline(temp,80);if(input.eof() cout文件中無數(shù)據(jù)!idnamesex1grade10grade11grade12grade13grade14;inputtemp;inputtemp;/將總成

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論