C課程設(shè)計(jì)學(xué)生成績(jī)管理文檔在線提供_第1頁
C課程設(shè)計(jì)學(xué)生成績(jī)管理文檔在線提供_第2頁
C課程設(shè)計(jì)學(xué)生成績(jī)管理文檔在線提供_第3頁
C課程設(shè)計(jì)學(xué)生成績(jī)管理文檔在線提供_第4頁
C課程設(shè)計(jì)學(xué)生成績(jī)管理文檔在線提供_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)學(xué)校C+程程序序設(shè)設(shè)計(jì)計(jì)課程設(shè)計(jì)報(bào)告課程設(shè)計(jì)報(bào)告選題名稱選題名稱: 成績(jī)管理 系(院)系(院): 專專 業(yè)業(yè): 班班 級(jí)級(jí): 姓姓 名名: 學(xué)學(xué) 號(hào)號(hào): 指導(dǎo)教師指導(dǎo)教師: 學(xué)年學(xué)期學(xué)年學(xué)期: 學(xué)年 第 學(xué)期 年 月 日精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)摘要:隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)領(lǐng)域不斷取得新的研究成果。計(jì)算機(jī)在代替和延伸腦力勞動(dòng)方面發(fā)揮越來越重要的作用,不僅在工業(yè)方面而且在日常生活中也越來越離不開計(jì)算機(jī)。尤其是在學(xué)校里,要處理大量的學(xué)生數(shù)據(jù)。隨著科學(xué)技術(shù)的不斷提高,計(jì)算機(jī)科學(xué)日漸成熟,其強(qiáng)大的功能已為人們深刻認(rèn)識(shí),它已進(jìn)入人類社會(huì)的各個(gè)

2、領(lǐng)域并發(fā)揮著越來越重要的作用.作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)學(xué)生成績(jī)信息進(jìn)行管理,有著手工管理所無法比擬的優(yōu)點(diǎn)。學(xué)生成績(jī)管理系統(tǒng)能方便用戶迅速、準(zhǔn)確處理學(xué)生的成績(jī),得到想要的數(shù)據(jù)并能將學(xué)生的信息以文檔保存。本文介紹了簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng)在 Microsoft Visual C+ 6.0 環(huán)境下的實(shí)現(xiàn)過程:系統(tǒng)的分析,功能模塊的設(shè)計(jì),系統(tǒng)的調(diào)試和測(cè)試。此系統(tǒng)的主要管理的信息有:學(xué)生的班級(jí),學(xué)號(hào),姓名和三(可以更改)門課的成績(jī)。本系統(tǒng)的主要功能有學(xué)生成績(jī)的添加、刪除、插入、顯示,能對(duì)學(xué)生成績(jī)按分?jǐn)?shù)或?qū)W號(hào)進(jìn)行排序,可以根據(jù)用戶的要求按班級(jí),姓名,學(xué)號(hào)查詢學(xué)生的成績(jī)信息,計(jì)算每位學(xué)生的總分和均分

3、,計(jì)算所有同學(xué)的總分和平均分,分類匯總統(tǒng)計(jì)每門課的的總分均分能保存信息到文件以及從文件中讀取信息等功能。關(guān)鍵詞:學(xué)生成績(jī)管理系統(tǒng);功能模塊(函數(shù)) ;指針;結(jié)構(gòu);鏈表;文件保存及讀取。 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)目目錄錄精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1 需求分析需求分析1.1 功能需求分析:功能需求分析:簡(jiǎn)易學(xué)生成績(jī)管理系統(tǒng)主要有 4 個(gè)大的模塊:學(xué)生成績(jī)從文件讀入和寫入,學(xué)生成績(jī)的輸入和刪除,學(xué)生成績(jī)信息的查詢,以及學(xué)生成績(jī)的分類匯總。1.11 學(xué)生成績(jī)的讀入和寫出模塊主要功能是讀出要管理的成績(jī)文檔,保存修改后的成績(jī)文檔。實(shí)際生活中學(xué)生成績(jī)的文件主要以 word

4、或 excel 保存,為了方便操作我在調(diào)式本系統(tǒng)中成績(jī)文件采用了txt 的文檔格式保存,當(dāng)然以 word 文檔形式保存也是可以的。1.12 學(xué)生成績(jī)輸入刪除模塊主要功能是輸入、追加、刪除學(xué)生成績(jī)的操作。添加操作是根據(jù)用戶的要求實(shí)現(xiàn)的。例如用戶可以輸入要?jiǎng)h除學(xué)生的學(xué)號(hào)刪除學(xué)生的信息。此程序輸入學(xué)生成績(jī)時(shí)就計(jì)算個(gè)人的總分和均分,并保存到數(shù)據(jù)結(jié)構(gòu)中相應(yīng)的變量中。1.13 學(xué)生成績(jī)的查詢模塊主要功能是按照用戶的要求查詢學(xué)生的成績(jī)。其中用戶可以選擇查詢單個(gè)學(xué)生的成績(jī)還是某個(gè)班級(jí)的成績(jī),成績(jī)查詢中包括個(gè)人學(xué)生的總分和平均分,。1.14 學(xué)生成績(jī)的分類匯總模塊統(tǒng)計(jì)主要功能是某個(gè)班級(jí)的每門學(xué)科的總分和平均分。

5、1.2 環(huán)境需求分析:環(huán)境需求分析:操作系統(tǒng): Windows XP開發(fā)軟件: Visual C+ 6.01.3 方法需求分析方法需求分析由于數(shù)組存放數(shù)據(jù)的時(shí)候要先確定數(shù)組的規(guī)模,不能動(dòng)態(tài)的分配內(nèi)存空間,而單鏈表是非連續(xù)存放的,可以對(duì)內(nèi)存空間進(jìn)行動(dòng)態(tài)分配,此系統(tǒng)是用單鏈表完成的。然后定義鏈表的結(jié)點(diǎn)類型為結(jié)構(gòu)就可以實(shí)現(xiàn)對(duì)學(xué)生學(xué)號(hào)、姓名、成績(jī)、班級(jí)等學(xué)保存。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 每次只要返回頭指針,就可以對(duì)整個(gè)鏈表進(jìn)行操作,因此選鏈表來存放學(xué)生信息。2 概要設(shè)計(jì)概要設(shè)計(jì)2.1 系統(tǒng)功能模塊圖系統(tǒng)功能模塊圖學(xué)學(xué) 生生 成成 績(jī)績(jī) 管管 理理 系系 統(tǒng)統(tǒng) 鏈表的初始化 輸入學(xué)生成

6、績(jī)刪除學(xué)生成績(jī)顯示學(xué)生成績(jī)按姓名找學(xué)生保存學(xué)生成績(jī)讀取學(xué)生成績(jī)計(jì)算總分均分學(xué)生成績(jī)排序按學(xué)號(hào)查成績(jī)分類合計(jì)2.2 設(shè)計(jì)思想:設(shè)計(jì)思想:學(xué)生成績(jī)管理系統(tǒng)是用面向?qū)ο蟮姆椒ㄔO(shè)計(jì),由于數(shù)組的存放是連續(xù)的,而單鏈表是非連續(xù)存放的,是動(dòng)態(tài)分配內(nèi)存空間,因此此系統(tǒng)采用單鏈表來完成。各個(gè)功能模塊的實(shí)現(xiàn)主要轉(zhuǎn)變到對(duì)單鏈表的遍歷,添加和刪除結(jié)點(diǎn)。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)3 詳細(xì)設(shè)計(jì)詳細(xì)設(shè)計(jì)3.1 設(shè)計(jì)原理設(shè)計(jì)原理 學(xué)生成績(jī)管理系統(tǒng)以菜單選擇,通過調(diào)用各個(gè)函數(shù),對(duì)單鏈表的遍歷,實(shí)現(xiàn)不同的功能,不同函數(shù)處理后返回的只是一個(gè)頭結(jié)點(diǎn),但是通過頭結(jié)點(diǎn)可以找到所有鏈表中的信息,只要有函數(shù),找到頭指針就能進(jìn)

7、行相應(yīng)的操作,所以模塊化的程序方便以后添加或者刪除某些功能,程序中通過 system(“cls”)清屏函數(shù)實(shí)現(xiàn)界面的轉(zhuǎn)換,主函數(shù)中的循環(huán)保證程序不會(huì)退出,一個(gè)循環(huán)和一個(gè)清屏函數(shù)實(shí)現(xiàn)了主菜單和各子畫面的切換(子函數(shù)) 。這樣的話各個(gè)子函數(shù)都可以調(diào)用一開始輸入的數(shù)據(jù),這樣就實(shí)現(xiàn)了各個(gè)不同函數(shù)調(diào)用時(shí)都能使用整個(gè)系統(tǒng)連續(xù)起來了。作為一個(gè)學(xué)生成績(jī)管理系統(tǒng),增加了文件的讀入和寫出功能,增加了程序的實(shí)用性。3.2 主要代碼描述主要代碼描述3.21 學(xué)生信息輸入的實(shí)現(xiàn);通過創(chuàng)建單鏈表,對(duì)鏈表中各個(gè)結(jié)點(diǎn),而此結(jié)點(diǎn)是結(jié)構(gòu)類型的,可以給各個(gè)結(jié)點(diǎn)賦不同學(xué)生的的信息,輸入后就把各個(gè)學(xué)生的總分、均分計(jì)算好并存入結(jié)構(gòu)變量中

8、。最后返回的是頭指針,主函數(shù)只要找到這個(gè)頭指針就可以對(duì)其進(jìn)行需要的操作。創(chuàng)建鏈表的具體代碼如下:/創(chuàng)建鏈表student *creat()int i;int s;student *h=NULL,*ps1,*pend1;char flag;system(cls); cout請(qǐng)輸入信息.endl;do ps1=new student; /開辟一個(gè)新的結(jié)點(diǎn) coutps1-cla;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) coutps1-no; coutps1-name;cout請(qǐng)輸入N門課的分?jǐn)?shù)endl; s=0; for(i=0;iN;i+) docout輸入第i+1ps1-scorei;if

9、(ps1-scorei100|ps1-scorei0)cout輸入的成績(jī)不正確,請(qǐng)重新輸入scorei100|ps1-scoreiscorei;ps1-sum=s; ps1-average=(float)s/N; ps1-order=0; /未排序前此值為 0if(h=NULL)h=ps1;elsepend1-next=ps1; pend1=ps1; /創(chuàng)建鏈表coutflag;while(flag=y|flag=Y); /提示是否繼續(xù)輸入學(xué)生的信息pend1-next=NULL; /給鏈表尾賦空值return h;3.22 學(xué)生成績(jī)刪除的實(shí)現(xiàn) 刪除學(xué)生成績(jī)是這樣實(shí)現(xiàn)的:通過兩個(gè)輔助指針找到鏈

10、表中要?jiǎng)h除的學(xué)生信息所在的結(jié)點(diǎn),讓輔助指針的前驅(qū)輔助指針指向輔助指針的后一結(jié)點(diǎn),這樣輔助指針?biāo)疙?xiàng)就自動(dòng)從鏈表中刪除了,然后輸出該學(xué)生的信息以確認(rèn)是否是該學(xué)生,是的話按任一鍵就可刪除,最后返回頭指針。具體代碼如下:/刪除記錄student *delet(student *h)system(cls);student *ps2,*pend2; char s30; 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)cout輸入要?jiǎng)h除記錄的學(xué)號(hào):s; pend2=h;ps2=h;while(strcmp(ps2-no,s)&ps2!=NULL) /當(dāng)記錄的學(xué)號(hào)不是要找pend2=ps2; /將 p 的

11、指針賦給 q 指針作為 p 的前驅(qū)指針ps2=ps2-next; /將 p 指向下一條記錄if(ps2=NULL) /如果 p 為空,說明鏈表中沒有該結(jié)點(diǎn)cout沒有學(xué)號(hào)為s的同學(xué)endl;else /p 不為空時(shí),顯示找到的記錄信息cout*已經(jīng)找到*endl;cout班級(jí)t學(xué)號(hào)t姓名t成績(jī) 1t成績(jī)2t成績(jī) 3t總分t平均分名次endl;cout-t-t-t-endl;coutclatnonametscore0tscore1tscore2tsumta veragetorderendl; cout*結(jié)束*endl;cout按任意一鍵刪除該學(xué)生的記錄next;elsepend2-next=ps

12、2-next;/不是頭指針,將 p 的后繼結(jié)點(diǎn)作為 q 的后繼結(jié)點(diǎn) cout不要忘記保存文件next;/將原表的頭指針?biāo)傅南乱粋€(gè)結(jié)點(diǎn)作頭指針h-next=NULL;/第一個(gè)結(jié)點(diǎn)作為新表的頭結(jié)點(diǎn)while(h1!=NULL)/當(dāng)原表不為空時(shí),進(jìn)行排序t=h1;/取原表的頭結(jié)點(diǎn)h1=h1-next;/原表結(jié)點(diǎn)指針后移p5=h;/設(shè)定移動(dòng)指針 p,從頭指針開始q5=h;/設(shè)定移動(dòng)指針 q 為 p 的前驅(qū)初值為頭指針while(t-sumsum&p5!=NULL)/作總分比較q5=p5; /待排序點(diǎn)值小,則新表指針后移 p5=p5-next;if(p5=q5) /p=q 說明排序點(diǎn)值小,應(yīng)排

13、在首位t-next=p5; /待排序點(diǎn)后繼為 ph=t; /新頭結(jié)點(diǎn)為待排序點(diǎn)else /待排序點(diǎn)應(yīng)插入在中間某個(gè)位置 q 和 p 之間,如 p 為空指針尾部t-next=p5 ;/后繼是 p5-next=t;p5=h; /已排好序的頭指針賦給 p,準(zhǔn)備填寫名次while(p5!=NULL) /當(dāng) p 不為空時(shí),進(jìn)行下列操作i+;/結(jié)點(diǎn)序號(hào)p5-order=i; /將名次賦值p5=p5-next; /指針后移精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Cout排序成功!n;return h; /返回頭指針3.24 成績(jī)查詢顯示分類匯總模塊查找相關(guān)學(xué)生信息只要輸入學(xué)生的名字,進(jìn)行鏈表的遍歷查找到后

14、統(tǒng)計(jì)成績(jī)具體代碼見 3.3 中。3.3 程序詳細(xì)代碼程序詳細(xì)代碼#include#include /I/O 函數(shù)#include /其他說明#include /字符串函數(shù)#include /屏幕操作函數(shù)#define N 3 /定義常數(shù) struct student /定義數(shù)據(jù)結(jié)構(gòu)char cla30;char no30;char name30;int scoreN;float sum;float average;int order;student *next;/初始化函數(shù)student *init()system(cls);cout完成初始化鏈表.endlendl;return NULL;/

15、創(chuàng)建鏈表student *creat()int i;int s;student *h=NULL,*ps1,*pend1;char flag;system(cls); 精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)cout請(qǐng)輸入信息.endl;do ps1=new student; /開辟一個(gè)新的結(jié)點(diǎn) coutps1-cla; coutps1-no; coutps1-name;cout請(qǐng)輸入N門課的分?jǐn)?shù)endl; s=0; for(i=0;iN;i+) docout輸入第i+1ps1-scorei;if(ps1-scorei100|ps1-scorei0)cout輸入的成績(jī)不正確,請(qǐng)重新輸入scor

16、ei100|ps1-scoreiscorei;ps1-sum=s; ps1-average=(float)s/N; ps1-order=0; /未排序前此值為 0if(h=NULL)h=ps1;elsepend1-next=ps1; pend1=ps1; /創(chuàng)建鏈表coutflag;while(flag=y|flag=Y); /提示是否繼續(xù)輸入學(xué)生的信息pend1-next=NULL; /給鏈表尾賦空值return h;/刪除記錄student *delet(student *h)system(cls);student *ps2,*pend2; char s30; cout輸入要?jiǎng)h除記錄的學(xué)號(hào)

17、:s; pend2=h;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)ps2=h;while(strcmp(ps2-no,s)&ps2!=NULL) /當(dāng)記錄的學(xué)號(hào)不是要找pend2=ps2; /將 p 的指針賦給 q 指針作為 p 的前驅(qū)指針ps2=ps2-next; /將 p 指向下一條記錄if(ps2=NULL) /如果 p 為空,說明鏈表中沒有該結(jié)點(diǎn)cout沒有學(xué)號(hào)為s的同學(xué)endl;else /p 不為空時(shí),顯示找到的記錄信息cout*已經(jīng)找到*endl;cout班級(jí)t學(xué)號(hào)t姓名t成績(jī) 1t成績(jī)2t成績(jī) 3t總分t平均分 名次endl;cout-t-t-t-t-t-t-t- -e

18、ndl;coutclatnonametscore0tscore1tscore2tsumtav eragetorderendl; cout*結(jié)束*endl; cout按任意一鍵刪除該學(xué)生的記錄next; else pend2-next=ps2-next;/不是頭指針,將 p 的后繼結(jié)點(diǎn)作為 q 的后繼結(jié)點(diǎn) cout不要忘記保存文件endl; return h; /輸出鏈表中的結(jié)點(diǎn)信息void print(student *h)int i=0;student *p1;system(cls);p1=h;cout*學(xué)生信息*n;cout班級(jí)t學(xué) 號(hào)t姓 名t成績(jī) 1t成績(jī)2t成績(jī) 3t總分t平 均 分

19、 名次endl;cout-t-t-t-t-t-t-t- -endl; while(p1!=NULL)i+;coutclatnotnametscore0tscore1tscore2tsumtaveragetordernext;cout*結(jié)束*endl;/查找記錄void search(student *h)system(cls);student *p2;char s15;cout請(qǐng)輸入要查找的姓名name,s)&p2!=NULL)/當(dāng)記錄姓名不是要找,或指針不為空時(shí)p2=p2-next; if(p2=NULL) cout沒有s這位學(xué)生endl;elsecout*已經(jīng)找到*endl;cou

20、t班級(jí)t學(xué) 號(hào)t姓 名t成績(jī) 1t成績(jī) 2t成績(jī) 3t總分t平 均 分 名次endl;cout-t-t-t-t-t-t-t- -endl;coutclatnonametscore0tscore1tscore2tsumtaveragetorderendl;cout*結(jié)束*endl;/保存數(shù)據(jù)到文件void save(student *h) system(cls);FILE *fp; /定義指向文件的指針student *p3; /定義移動(dòng)指針char outfile30; /保存輸出文件名coutoutfile;if(fp=fopen(outfile,wb)=NULL) /為輸出打開一個(gè)二進(jìn)制文

21、件,如沒建立cout不能打開文件!endl;exit(1);精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)cout正在保存.next; /指針后移fclose(fp); /關(guān)閉文件cout-保存成功!-n;/從文件讀數(shù)據(jù)student *load()system(cls);student *ps3,*pend3,*h=NULL;FILE *fp; /定義指向文件的指針char infile30; /保存文件名ciutinfile; /輸入文件名if(fp=fopen(infile,rb)=NULL) /打開一個(gè)二進(jìn)制文件,為讀方式cout不能打開endl; exit(1);cout-讀取文件中!-

22、next=new student; pend3=ps3; /保存當(dāng)前結(jié)點(diǎn)的指針,作為下一個(gè)結(jié)點(diǎn)的前驅(qū)ps3=ps3-next; pend3-next=NULL; fclose(fp); coutsum; i+; p4=p4-next;average=(float)s/i; cout所有學(xué)生的總分是st平均分為averagenext; /將原表的頭指針?biāo)傅南乱粋€(gè)結(jié)點(diǎn)作頭指針h-next=NULL; /第一個(gè)結(jié)點(diǎn)作為新表的頭結(jié)點(diǎn)while(h1!=NULL) /當(dāng)原表不為空時(shí),驚醒排序t=h1; /取原表的頭結(jié)點(diǎn)h1=h1-next; /原表結(jié)點(diǎn)指針后移p5=h; /設(shè)定移動(dòng)指針 p,從頭指針開

23、始q5=h; /設(shè)定移動(dòng)指針 q 為 p 的前驅(qū)初值為頭指針while(t-sumsum&p5!=NULL)/作總分比較q5=p5; /待排序點(diǎn)值小,則新表指針后移p5=p5-next;if(p5=q5) /p=q 說明排序點(diǎn)值小,應(yīng)排在首位t-next=p5; /待排序點(diǎn)后繼為 ph=t; /新頭結(jié)點(diǎn)為待排序點(diǎn)else/ /待排序點(diǎn)應(yīng)插入在中間某個(gè)位置 q 和 p 之間,如 p 為空指針尾部t-next=p5; /后繼是 pq5-next=t;精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)p5=h; /已排好序的頭指針賦給 p,準(zhǔn)備填寫名次while(p5!=NULL) /當(dāng) p 不為空

24、時(shí),進(jìn)行下列操作i+; /結(jié)點(diǎn)序號(hào)p5-order=i; /將名次賦值p5=p5-next; /指針后移Coutnext; /將原表的頭指針?biāo)傅南乱粋€(gè)結(jié)點(diǎn)作頭指針h-next=NULL; /第一個(gè)結(jié)點(diǎn)作為新表的頭結(jié)點(diǎn)while(h11!=NULL) /當(dāng)原表不為空時(shí),驚醒排序t1=h11; /取原表的頭結(jié)點(diǎn)h11=h11-next; /原表結(jié)點(diǎn)指針后移p6=h; /設(shè)定移動(dòng)指針 p,從頭指針開始q6=h; /設(shè)定移動(dòng)指針 q 為 p 的前驅(qū)初值為頭指針while(strcmp(t1-no,p6-no)0&p6!=NULL)/作總分比較q6=p6; /待排序點(diǎn)值小,則新表指針后移p6=

25、p6-next;if(p6=q6) /p=q 說明排序點(diǎn)值小,應(yīng)排在首位t1-next=p6; /待排序點(diǎn)后繼為 ph=t1; /新頭結(jié)點(diǎn)為待排序點(diǎn)else/待排序點(diǎn)應(yīng)插入在中間某個(gè)位置 q 和 p 之間,如 p 為空指針尾部t1-next=p6; /后繼是 pq6-next=t1;p6=h; /已排好序的頭指針賦給 p,準(zhǔn)備填寫名次while(p6!=NULL) /當(dāng) p 不為空時(shí),進(jìn)行下列操作i+;/結(jié)點(diǎn)序號(hào)p6-order=i; /將名次賦值p6=p6-next; /指針后移精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)Cout索引排序成功!n;return h; /返回頭指針/追加文件記錄

26、void append()system(cls); FILE *fp;student *info;int s1,i;char infile30;cout請(qǐng)輸入新的學(xué)生成績(jī)信息n; info=new student; coutinfo-cla;coutinfo-no;coutinfo-name;cout請(qǐng)輸入N門分?jǐn)?shù)endl; s1=0;for(i=0;iN;i+)docout輸入第i+1info-scorei; if(info-scorei100|info-scorei0)cout數(shù)據(jù)錯(cuò)誤,請(qǐng)重新輸入scorei100|info-scoreiscorei; info-sum=s1; /保存總分

27、info-average=(float)s1/N; /求均分info-order=0; /名次初始值為 0info-next=NULL; /將新記錄后繼指針賦值為空coutinfile;if(fp=fopen(infile,ab)=NULL) /向二進(jìn)制文件尾增加數(shù)據(jù)方式打開文件cout不能打開文件endl;exit(1);coutn-正在寫入文件.-n;if(1!=fwrite(info,sizeof(student),1,fp) /寫文件操作精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)cout-文件寫入錯(cuò)誤!-n;return;cout-寫入成功!-score0;s1+=h-score1;s

28、2+=h-score2;h=h-next;i+;a0=s0/i;a1=s1/i;a2=s2/i; cout成績(jī) 1:-t成績(jī) 2-t成績(jī) 3-endl;cout總分:t均分:t總分:t均分:t總分:t均分:endl;couts0ta0ts1ta1ts2ta2endlendlendl;/菜單函數(shù),返回值為整數(shù) int menu_select()char *menu=n=菜單=nn, | 0. 鏈表的初始化 |n, | 1. 輸入學(xué)生成績(jī) |n, | 2. 刪除學(xué)生成績(jī) |n, | 3. 顯示學(xué)生成績(jī) |n, | 4. 按姓名找學(xué)生 |n, | 5. 保存學(xué)生成績(jī) |n, | 6. 讀取學(xué)生成績(jī)

29、|n, | 7. 計(jì)算總分均分 |n, | 8. 學(xué)生成績(jī)排序 |n,精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) | 9. 按學(xué)號(hào)查成績(jī) |n, | 10. 插入學(xué)生成績(jī) |n, | 11. 分類合計(jì) |n, | 12. 退出 |n, ; int c,i;coutn 按任意一鍵進(jìn)入主菜單.n; getch(); /輸入任一鍵 system(cls); cout 歡迎使用我的學(xué)生成績(jī)管理系統(tǒng)endl; for(i=0;i14;i+) coutmenui;cout=endlendl;do coutc; while(c12); return c; void main()int i=1;char a;

30、student *head; while(i0)system(cls); switch (menu_select()/調(diào)用主菜單函數(shù),返回值整數(shù)作開關(guān)語句的條件 /值不同,執(zhí)行的函數(shù)不同,break 不能省略case 0:head=init();break; /執(zhí)行初始化 case 1:head=creat();break; /創(chuàng)建鏈表 case 2:head=delet(head);break; /刪除記錄 case 3:print(head);break; /顯示全部記錄 case 4:search(head);break; /查找記錄 case 5:save(head);break; /

31、保存文件 case 6:head=load();break; /讀文件 case 7:computer(head);break; /計(jì)算總分和均分 case 8:head=sort(head);break; /排序 case 9:head=index(head);break; case 10:append();break; /追加記錄 case 11:total(head);break; /分類合計(jì) case 12:exit(0); /如菜單返回值為 14 程序結(jié)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)i=-1;couta;if(a=y|a=Y)i=1;注意:以上代碼為了格式整齊已做了適當(dāng)?shù)?/p>

32、修改,和原代碼可能有不同,像一些輸出格式可能不整齊。運(yùn)行請(qǐng)用原代碼。3.4 系統(tǒng)界面系統(tǒng)界面系統(tǒng)主菜單列出了該程序的所有功能,學(xué)生個(gè)人的總分、平均分在輸入創(chuàng)建鏈表是就計(jì)算好并儲(chǔ)存好了,同時(shí)顯示學(xué)生信息是就一起顯示出來了,使用時(shí)該適當(dāng)?shù)氖褂玫谝粋€(gè)初始化鏈表的功能,否則可能出現(xiàn)意想不到的錯(cuò)誤。界面圖 01: 圖 01 4 調(diào)試與操作說明調(diào)試與操作說明4.1 調(diào)試過程調(diào)試過程初始化功能可防止指針以外指向不該指的地點(diǎn),防止出現(xiàn)錯(cuò)誤: 初始化如圖 02:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 圖 02為了便于程序的調(diào)試,先輸入了幾個(gè)學(xué)生的信息并存如文件中,如圖 03:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-

33、專注-專業(yè) 圖 03對(duì)學(xué)生成績(jī)按總分進(jìn)行排序(圖 04): 圖 04如圖 05:排序后名次出現(xiàn)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 圖 05保存學(xué)生信息到 1.txt 文件(如圖 06): 圖 06如圖 07,保存到文件后,以后就可以通過 6 功能直接讀入:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 圖 07查找學(xué)生信息:(如圖 08) 圖 08計(jì)算每門成績(jī)的總分和平均分(圖 09): 圖 09 計(jì)算所有學(xué)生的總分和平均分(圖 10):精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 圖 10插入新的學(xué)生信息:(圖 11) 圖 11精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)如圖 12,讀入后的

34、數(shù)據(jù)顯示(前三名同學(xué)已排過序已按成績(jī)排好序的): 圖 12按學(xué)生學(xué)號(hào)排序(圖 13): 圖 13精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)刪除學(xué)生信息(圖 14): 圖 14刪除同學(xué)成績(jī)后如圖 15 顯示:精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè) 圖 15按 12 則如圖退出該系統(tǒng):(如圖 16) 圖 164.2 操作說明操作說明一個(gè)成績(jī)管理系統(tǒng)如果不能進(jìn)行文檔的讀出和寫入的操作,功能再多,程序關(guān)閉后,所做的操作都將沒有,這就失去了實(shí)際的意義。此系統(tǒng)當(dāng)用戶退出系統(tǒng)時(shí),用戶可以選擇是否保存已做的修改。當(dāng)用戶任意選擇一個(gè)操作時(shí),系統(tǒng)將會(huì)提示。此外在輸入成績(jī)時(shí),輸入錯(cuò)誤的數(shù)字系統(tǒng)可以提示錯(cuò)誤,但是

35、如果輸入標(biāo)點(diǎn)和字母時(shí),系統(tǒng)將會(huì)出錯(cuò),因此輸入成績(jī)時(shí)不可以輸入字母和標(biāo)點(diǎn)。此外,注意適當(dāng)?shù)氖褂面湵沓跏蓟?,防止出現(xiàn)意外錯(cuò)誤,例如,一開始不初始化就顯示學(xué)生信息,由于鏈表還未創(chuàng)建,會(huì)出現(xiàn)內(nèi)存不能為 read 的錯(cuò)誤。提示是否返回主菜單,如果不返回則自動(dòng)提示退出系統(tǒng),選擇是的話返回主菜單。精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)總結(jié)一開始知道課題后,以為很簡(jiǎn)單,但我想如果用數(shù)組實(shí)現(xiàn)的話,在內(nèi)存中是以連續(xù)地址存放的,不方便操作,所以我選擇了使用鏈表,它可以實(shí)現(xiàn)無序的在內(nèi)存中存放,只要有一個(gè)頭結(jié)點(diǎn),就可以對(duì)整個(gè)鏈表進(jìn)行相關(guān)的操作,在調(diào)式時(shí)遇到了很多問題,最多的是指針問題引起的內(nèi)存不能為 read,因此指針這一塊知識(shí)還得好好的加強(qiáng),當(dāng)我將學(xué)生成績(jī)管理系統(tǒng)的程序調(diào)試完畢后,心里感到輕松了許多,但還是對(duì)自己的程序不最滿意,因?yàn)橛袝r(shí)還是會(huì)出現(xiàn)內(nèi)存不能 read。我現(xiàn)在體會(huì)到程序的調(diào)試是相當(dāng)?shù)闹匾摹T谑褂弥羔槙r(shí)要特別注意用過后的指針不使用就要?jiǎng)h除,已防出錯(cuò)。鏈表的尾部要指向 NU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論