C語言學(xué)生成績(jī)管理_第1頁
C語言學(xué)生成績(jī)管理_第2頁
C語言學(xué)生成績(jī)管理_第3頁
C語言學(xué)生成績(jī)管理_第4頁
C語言學(xué)生成績(jī)管理_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、攀枝花學(xué)院學(xué)生課程設(shè)計(jì)(論文)題 目: 學(xué)生成績(jī)管理 學(xué)生姓名: 王世奎 學(xué) 號(hào): 200810804029 所在院(系): 計(jì)算機(jī)學(xué)院 專 業(yè): 軟件工程 班 級(jí): 指 導(dǎo) 教 師: 張 會(huì) 職稱: 講師 2009年12月30日攀枝花學(xué)院教務(wù)處制攀枝花學(xué)院本科學(xué)生課程設(shè)計(jì)任務(wù)書題目學(xué)生成績(jī)管理1、課程設(shè)計(jì)的目的利用單鏈表實(shí)現(xiàn)學(xué)生成績(jī)管理,了解數(shù)據(jù)庫的管理的基本功能,使學(xué)生掌握C語言中的結(jié)構(gòu)體、指針、函數(shù)(系統(tǒng)函數(shù),自定義函數(shù))、文件操作等知識(shí),是一個(gè)C語言的綜合應(yīng)用。應(yīng)注意指針變量做為函數(shù)參數(shù),函數(shù)返回值為指向結(jié)構(gòu)體的指針及單鏈表結(jié)構(gòu)的應(yīng)用等知識(shí)。2、課程設(shè)計(jì)的內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)

2、要求、工作要求等)一、用C中的單鏈表存儲(chǔ)結(jié)構(gòu)完成對(duì)學(xué)生成績(jī)的動(dòng)態(tài)管理,其基本內(nèi)容和要求包括:(1) 菜單設(shè)計(jì)(2) 輸入成績(jī)(3) 查詢(4) 修改成績(jī)(5) 刪除成績(jī)(6) 成績(jī)排序(7) 將成績(jī)保存在文件中二、撰寫課程設(shè)計(jì)報(bào)告或課程設(shè)計(jì)總結(jié)課程設(shè)計(jì)報(bào)告要求:總結(jié)報(bào)告包括需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼(詳細(xì)寫出編程步驟)、測(cè)試的步驟和內(nèi)容、課程設(shè)計(jì)總結(jié)、參考資料等,不符合以上要求者,則本次設(shè)計(jì)以不及格記。3、主要參考文獻(xiàn)4、課程設(shè)計(jì)工作進(jìn)度計(jì)劃課程設(shè)計(jì)時(shí)間為兩周,分四個(gè)階段完成:1. 分析設(shè)計(jì)階段。引導(dǎo)學(xué)生自主學(xué)習(xí)和鉆研問題,明確設(shè)計(jì)要求,找出實(shí)現(xiàn)方法,按照需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)這

3、幾個(gè)步驟進(jìn)行。這一階段前第1天完成。2. 編碼調(diào)試階段:根據(jù)設(shè)計(jì)分析方案編寫C語言代碼,然后調(diào)試該代碼,實(shí)現(xiàn)課題要求的功能。這一階段在第2-3天完成。3. 總結(jié)報(bào)告階段:總結(jié)設(shè)計(jì)工作,寫出課程設(shè)計(jì)說明書,要求學(xué)生寫出需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試的步驟和內(nèi)容。這一階段在第4-5天完成。4. 考核階段。這一階段在第5天完成。指導(dǎo)教師(簽字)日期年 月 日教研室意見:年 月 日學(xué)生(簽字): 接受任務(wù)時(shí)間: 年 月 日注:任務(wù)書由指導(dǎo)教師填寫。課程設(shè)計(jì)(論文)指導(dǎo)教師成績(jī)?cè)u(píng)定表題目名稱電話簿管理評(píng)分項(xiàng)目分值得分評(píng)價(jià)內(nèi)涵工作表現(xiàn)20%01學(xué)習(xí)態(tài)度6遵守各項(xiàng)紀(jì)律,工作刻苦努力,具有良好的科學(xué)

4、工作態(tài)度。02科學(xué)實(shí)踐、調(diào)研7通過實(shí)驗(yàn)、試驗(yàn)、查閱文獻(xiàn)、深入生產(chǎn)實(shí)踐等渠道獲取與課程設(shè)計(jì)有關(guān)的材料。03課題工作量7按期圓滿完成規(guī)定的任務(wù),工作量飽滿。能力水平35%04綜合運(yùn)用知識(shí)的能力10能運(yùn)用所學(xué)知識(shí)和技能去發(fā)現(xiàn)與解決實(shí)際問題,能正確處理實(shí)驗(yàn)數(shù)據(jù),能對(duì)課題進(jìn)行理論分析,得出有價(jià)值的結(jié)論。05應(yīng)用文獻(xiàn)的能力5能獨(dú)立查閱相關(guān)文獻(xiàn)和從事其他調(diào)研;能提出并較好地論述課題的實(shí)施方案;有收集、加工各種信息及獲取新知識(shí)的能力。06設(shè)計(jì)(實(shí)驗(yàn))能力,方案的設(shè)計(jì)能力5能正確設(shè)計(jì)實(shí)驗(yàn)方案,獨(dú)立進(jìn)行裝置安裝、調(diào)試、操作等實(shí)驗(yàn)工作,數(shù)據(jù)正確、可靠;研究思路清晰、完整。07計(jì)算及計(jì)算機(jī)應(yīng)用能力5具有較強(qiáng)的數(shù)據(jù)運(yùn)算

5、與處理能力;能運(yùn)用計(jì)算機(jī)進(jìn)行資料搜集、加工、處理和輔助設(shè)計(jì)等。08對(duì)計(jì)算或?qū)嶒?yàn)結(jié)果的分析能力(綜合分析能力、技術(shù)經(jīng)濟(jì)分析能力)10具有較強(qiáng)的數(shù)據(jù)收集、分析、處理、綜合的能力。成果質(zhì)量45%09插圖(或圖紙)質(zhì)量、篇幅、設(shè)計(jì)(論文)規(guī)范化程度5符合本專業(yè)相關(guān)規(guī)范或規(guī)定要求;規(guī)范化符合本文件第五條要求。10設(shè)計(jì)說明書(論文)質(zhì)量30綜述簡(jiǎn)練完整,有見解;立論正確,論述充分,結(jié)論嚴(yán)謹(jǐn)合理;實(shí)驗(yàn)正確,分析處理科學(xué)。11創(chuàng)新10對(duì)前人工作有改進(jìn)或突破,或有獨(dú)特見解。成績(jī)指導(dǎo)教師評(píng)語指導(dǎo)教師簽名: 年月日目錄摘 要11引言11.1問題的提出11.2學(xué)生成績(jī)管理12系統(tǒng)分析12.1功能需求22.2總體要求2

6、2.3所建的函數(shù)模塊23 程序設(shè)計(jì)33.1程序功能構(gòu)架33.2主要函數(shù)33.3程序分析43.3.1結(jié)構(gòu)體和全局變量定義43.3.2成績(jī)錄入功能模塊43.3.3成績(jī)查詢功能模塊73.3.4修改指定成績(jī)模塊123.3.5 成績(jī)刪除模塊163.3.6成績(jī)排序模塊193.3.7求平均值模塊223.3.8打印成績(jī)模塊233.3.9主函數(shù)244 程序運(yùn)行264.1 錄入成績(jī)274.2 成績(jī)查詢304.3 修改成績(jī)324.4 刪除成績(jī)344.5 成績(jī)排序354.6算平均成績(jī)364.7打印成績(jī)375心得體會(huì)37參考文獻(xiàn)38摘 要本次課程設(shè)計(jì)的題目是“學(xué)生成績(jī)管理”,該管理系統(tǒng)的目的是能夠?qū)崿F(xiàn)基本的學(xué)生成績(jī)管理

7、功能(錄入新成績(jī),按姓名和學(xué)號(hào)查詢成績(jī),刪除指定學(xué)號(hào)的成績(jī),成績(jī)排序,求平均成績(jī)等)。本系統(tǒng)設(shè)置了桌面菜單進(jìn)行各種操作,并有詳細(xì)的操作提示語。整個(gè)程序設(shè)計(jì)模塊化,并嚴(yán)格依據(jù)以設(shè)計(jì)的模塊和主控框架設(shè)計(jì)功能模塊函數(shù)。關(guān)鍵字:C程序 學(xué)生成績(jī)管理 函數(shù)1引言1.1問題的提出學(xué)校每次考完試后,老師都會(huì)對(duì)班的的成績(jī)進(jìn)行排序,計(jì)算每個(gè)學(xué)生的總成績(jī)和各科的總成績(jī),如果用筆來計(jì)算相當(dāng)麻煩,因此有必要設(shè)計(jì)一個(gè)學(xué)生成績(jī)管理系統(tǒng)來對(duì)學(xué)生成績(jī)進(jìn)行管理,使老師在計(jì)算成績(jī)變得輕松。本次設(shè)計(jì)的成績(jī)管理系統(tǒng)只是實(shí)現(xiàn)了一些簡(jiǎn)單常用的功能,創(chuàng)建成績(jī)錄入,查詢,修改,排序,求平均成績(jī)等功能。1.2學(xué)生成績(jī)管理方便老師考試過會(huì)處理成

8、績(jī)軟件程序。通過使用學(xué)生成績(jī)管理軟件,老師們可以輕松的求平均成績(jī),對(duì)學(xué)生排名次,查詢學(xué)生的各科成績(jī)。該學(xué)生成績(jī)管理系統(tǒng)由程序模塊組成,通過主函數(shù)調(diào)用各個(gè)功能模塊來實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的管理功能。2系統(tǒng)分析本次設(shè)計(jì)的學(xué)生成績(jī)管理系統(tǒng)的設(shè)計(jì)思想首先需要實(shí)現(xiàn)對(duì)學(xué)生成績(jī)的管理功能,可以對(duì)成績(jī)進(jìn)行有效的處理,如添加、修改、刪除、查找等功能。適當(dāng)?shù)脑O(shè)置界面,加入詳細(xì)的提示語,供老師使用。為了容易讓人理解,分為不同的函數(shù)實(shí)現(xiàn)不同的功能。最后,再在主函數(shù)中調(diào)用建立的各種的函數(shù)模塊。用C語言編寫相應(yīng)的程序、運(yùn)行、調(diào)試,直到正確的實(shí)現(xiàn)相關(guān)的功能。2.1功能需求本次通過學(xué)生成績(jī)管理系統(tǒng),主要實(shí)現(xiàn)以下功能:(1) 錄入新的

9、學(xué)生成績(jī)信息。(2) 增加記錄的修改功能,允許修改學(xué)生的各科成績(jī)。(3) 設(shè)計(jì)一函數(shù)將指定學(xué)號(hào)的成績(jī)從成績(jī)表中刪除(4) 設(shè)計(jì)一函數(shù)實(shí)現(xiàn)顯示全部學(xué)生的各科成績(jī)。(5) 設(shè)計(jì)一函數(shù)實(shí)現(xiàn)查詢,查詢分為按姓名查詢和按學(xué)號(hào)查詢。(6) 可以做到很容易的返回和退出。2.2總體要求用C實(shí)現(xiàn)一個(gè)學(xué)生成績(jī)管理小程序。具有加入、刪除、顯示和查詢學(xué)生成績(jī)的功能。為了讓人能清楚明白的使用,設(shè)計(jì)桌面菜單和附加詳細(xì)的操作提示語。2.3所建的函數(shù)模塊 (1)錄入新成績(jī); (2)查詢學(xué)生成績(jī); (3)修改學(xué)生成績(jī); (4)刪除學(xué)生成績(jī); (5)顯示所有記錄; (6)排名次; (7)求平均成績(jī)3 程序設(shè)計(jì)3.1程序功能構(gòu)架學(xué)

10、生成績(jī)管理系統(tǒng)打印成績(jī)平均成績(jī)成績(jī)排序刪除成績(jī)修改成績(jī)成績(jī)查詢錄入成績(jī)退出系統(tǒng)修改語文成績(jī)修改數(shù)學(xué)成績(jī)按學(xué)號(hào)查詢按姓名查詢修改英語成績(jī)修改物理成績(jī)修改化學(xué)成績(jī)修改生物成績(jī)3.2主要函數(shù)主函數(shù) void main()成績(jī)錄入函數(shù) input()成績(jī)查詢函數(shù) search()成績(jī)刪除函數(shù) del()成績(jī)排序函數(shù) paixu()求平均成績(jī)函數(shù) pingjun()打印成績(jī)函數(shù) print() 讀入成績(jī)表函數(shù) read() 判斷成績(jī)表是否為空函數(shù) decide()3.3程序分析#include <stdio.h> /*標(biāo)準(zhǔn)輸入輸出函數(shù)定義*/#include <stdlib.h>

11、 /*動(dòng)態(tài)存儲(chǔ)分配函數(shù)定義*/#include <malloc.h> /*動(dòng)態(tài)存儲(chǔ)分配函數(shù)定義*/#include <string.h> /*字符和字符串函數(shù)定義*/3.3.1結(jié)構(gòu)體和全局變量定義typedef struct STint x;char nummber20;char name20;float yuwen,math,yingyu,wuli,huaxu,shengwu,total;struct ST *next;st;分析:定義了ST結(jié)構(gòu)體,包含字符串?dāng)?shù)組name、nummber,浮點(diǎn)型變量yuwen,math,yingyu,wuli,huaxu,shengw

12、u,total和一個(gè)指向結(jié)構(gòu)體變量的指針變量next。3.3.2成績(jī)錄入功能模塊分析:此函數(shù)的功能是錄入學(xué)生成績(jī)信息,錄入時(shí)按提示輸入學(xué)生的學(xué)號(hào),姓名和各科成績(jī),完成后提示保存還是繼續(xù)錄入,若選擇保存,則在屏幕在顯示輸入的記錄,并提示是否寫入成績(jī)表中。代碼如下:void input() /*成績(jī)錄入函數(shù)*/int n=1,k,x;char ch;st *p,*l,*s;float yuwen,math,yingyu,wuli,huaxu,shengwu;char nummber20,name20;FILE *fp,*fp1;if(fp=fopen("a.txt","

13、;a+")=NULL)printf("打開a.txt文件出錯(cuò)!");if(fp1=fopen("xuhao.txt","r")=NULL)printf("打開xuhao.txt文件出錯(cuò)!");fscanf(fp1,"%d",&x);fclose(fp1);l=(st *)malloc(sizeof(st);s=l;while(n) /*錄入學(xué)生學(xué)號(hào),姓名,各科成績(jī),存到鏈表l中*/printf("請(qǐng)輸入學(xué)號(hào):");scanf("%s",n

14、ummber);printf("請(qǐng)輸入姓名:");scanf("%s",name);printf("請(qǐng)輸入語文成績(jī):");scanf("%f",&yuwen);printf("請(qǐng)輸入數(shù)學(xué)成績(jī):");scanf("%f",&math);printf("請(qǐng)輸入英語成績(jī):");scanf("%f",&yingyu);printf("請(qǐng)輸入物理成績(jī):");scanf("%f",&a

15、mp;wuli);printf("請(qǐng)輸入化學(xué)成績(jī):");scanf("%f",&huaxu);printf("請(qǐng)輸入生物成績(jī):");scanf("%f",&shengwu);p=(st *)malloc(sizeof(st);strcpy(p->nummber,nummber);strcpy(p->name,name);p->yuwen=yuwen;p->math=math;p->yingyu=yingyu;p->wuli=wuli;p->huaxu=hua

16、xu;p->shengwu=shengwu;p->total=p->huaxu+p->math+p->shengwu+p->wuli+p->yingyu+p->yuwen; /*計(jì)算總成績(jī)*/p->x=+x;s->next=p;s=p;p->next=NULL;printf("任意鍵繼續(xù),0保存:");scanf("%c",&ch);scanf("%c",&ch);if(ch='0') n=0;if(fp1=fopen("xuh

17、ao.txt","w+")=NULL)printf("打開xuhao.txt文件出錯(cuò)!");fprintf(fp1,"%d",x); /*將序號(hào)寫入序號(hào)表中*/fclose(fp1);printf("錄入信息如下:n");printf(" 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物 總成績(jī)n");printf("*nn");p=l->next;while(p!=NULL) /*打印出輸入信息,確認(rèn)保存*/ printf("%s %-8s%-5.2

18、f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2fn",p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;printf("確認(rèn)錄入請(qǐng)按1,取消請(qǐng)按0:");scanf("%d",&k);if(k=1)p=l->next;while(p!=NULL) /*寫入成績(jī)表*/fprintf(fp,"

19、%d %s %s %.2f %.2f %.2f %.2f %.2f %.2f %.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;fclose(fp);printf("錄入成功!n");printf("任意鍵返回n");getchar();getchar(); /*函數(shù)到此結(jié)束*/3.3.3成績(jī)查詢功能模塊 分析:此模塊的

20、功能是執(zhí)行學(xué)生成績(jī)查詢操作。包含search()、serachname()、aerachnummber()函數(shù)。3.3.3.1 查詢方式菜單 分析:此函數(shù)的功能是讓用戶選擇查詢成績(jī)的方式,search()函數(shù)調(diào)用decide()函數(shù)判斷成績(jī)表是否為空,不為空則進(jìn)入查詢菜單,提示用戶選擇查詢方式,為空則給出提示并返回到主函數(shù)。代碼如下:void search() /*查詢函數(shù)*/int n=1,k,i=1;st *l;i=decide();if(i)l=read();while(n) /*查詢菜單*/printf("-查詢方式-nn");printf(" 1 姓名

21、n");printf(" 2 學(xué)號(hào) n");printf(" 3 返回 n");printf("-n");printf("請(qǐng)選擇:");scanf("%d",&k);switch(k)case 1:serachname(l);break;case 2:serachnummber(l);break;case 3:n=0;break;default :printf("輸入錯(cuò)誤,請(qǐng)重新輸入:n");else /*成績(jī)表為空,返回*/printf("學(xué)生成

22、績(jī)數(shù)據(jù)庫為空,請(qǐng)錄入!n");printf("任意健返回");getchar(); /*函數(shù)到此結(jié)束*/3.3.3.2 按姓名查詢分析:此函數(shù)的功能是按姓名查詢成績(jī)。函數(shù)serachname()調(diào)read()函數(shù),read()將學(xué)生成績(jī)保存在鏈表l中,并將l指針返回給serachname(),遍歷鏈表,查找與輸入姓名匹配的結(jié),查找成功則打印出相關(guān)信息,不成功則提示用戶無此學(xué)生的記錄。代碼如下:void serachname(st *l) /*按姓名查詢函數(shù)*/char ch;char name20;st *p;int n=1,k=0;while(n)printf(

23、"請(qǐng)輸入姓名:");scanf("%s",name);printf("正在查詢,請(qǐng)稍等nn");printf("名次 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物 總成績(jī)n");printf("*nn");p=l->next;while(p!=NULL) /*若查詢成功,打印出學(xué)生信息*/if(strcmp(p->name,name)=0)k+;printf("%-4d %s %-8s%-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-

24、5.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;if(k>0)printf("*n");printf("查詢完成!共找到%d條記錄。",k);elseprintf("n查詢完成!無相關(guān)記錄。n");printf("1繼續(xù),0返回:");scanf("%c"

25、;,&ch);scanf("%c",&ch);if(ch!='1') n=0;/*函數(shù)到此結(jié)束*/3.3.3.3 按學(xué)號(hào)查詢分析:此函數(shù)的功能是按學(xué)號(hào)查詢成績(jī)。函數(shù)serachnummber()調(diào)read()函數(shù)將學(xué)生成績(jī)保存在鏈表l中,并將l指針返回給serachnummber(),遍歷鏈表,查找與輸入姓名匹配的結(jié),查找成功則打印出相關(guān)信息,不成功則提示用戶無此學(xué)生的記錄。代碼如下:void serachnummber(st *l) /*按學(xué)號(hào)查詢函數(shù)*/char ch;char nummber20;st *p;int n=1,k=0;wh

26、ile(n)printf("請(qǐng)輸入學(xué)號(hào):");scanf("%s",nummber);printf("正在查詢,請(qǐng)稍等nn");printf("名次 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物 總成績(jī)n");printf("*nn");p=l->next;while(p!=NULL) /*若查詢成功,打印出學(xué)生信息*/if(strcmp(p->nummber,nummber)=0)k+;printf("%-4d %s %-8s%-5.2f %-5.2f %-5.2f %

27、-5.2f %-5.2f %-5.2f %-5.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;if(k>0)printf("*n");printf("n查詢完成!共找到%d條記錄。",k);elseprintf("n查詢完成!無相關(guān)記錄。n");printf("1繼續(xù),0返回:&quo

28、t;);scanf("%c",&ch);scanf("%c",&ch);if(ch!='1') n=0;/*函數(shù)到此結(jié)束*/3.3.4修改指定成績(jī)模塊 分析:此模塊的功能是修改指定學(xué)生的成績(jī)包含change()、changes()、write()函數(shù)。3.3.4.1成績(jī)修改菜單 分析:此函數(shù)的功能是讓用戶選擇要修改的課程,change()函數(shù)調(diào)用read()函數(shù),read()將成績(jī)表保存在鏈表l 中,并將指針l返回給change(),提示用戶輸入要修改的學(xué)號(hào),遍歷鏈表查找匹配的結(jié)點(diǎn),查找成功則進(jìn)入成績(jī)修改函數(shù)changes

29、(),失敗則提示無此學(xué)生的記錄。代碼如下:void change() /*成績(jī)修改不函數(shù)*/char nummber13;int n=1,k,m=0,i;st *l,*p,*s;k=decide();if(k)printf("請(qǐng)輸入學(xué)號(hào):");scanf("%s",nummber);l=read();p=l->next;while(p!=NULL)if(strcmp(p->nummber,nummber)=0)printf("學(xué)生成績(jī)?nèi)缦?n");printf("名次 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生

30、物 總成績(jī)n");printf("*nn");printf("%-4d %s %-8s%-5.2f %-5.2f %-5.2f %-5.2f %-5.2f%-5.2f %-5.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);m=1;s=p;p=p->next;if(m)while(n) /*成績(jī)修改主菜單*/printf("-學(xué)生成

31、績(jī)管理系統(tǒng)-nn");printf(" 1 修改語文成績(jī) n");printf(" 2 修改數(shù)學(xué)成績(jī) n");printf(" 3 修改英語成績(jī) n");printf(" 4 修改物理成績(jī) n");printf(" 5 修改化學(xué)成績(jī) n");printf(" 6 修改生物成績(jī) n");printf(" 7 返回主菜單 n");printf("-n");printf("輸入1-7修改對(duì)應(yīng)成績(jī):");scanf

32、("%d",&i);switch(i)case 1:changes(s,1);break;case 2:changes(s,2);break;case 3:changes(s,3);break;case 4:changes(s,4);break;case 5:changes(s,5);break;case 6:changes(s,6);break;case 7:n=0;break;default :printf("輸入錯(cuò)誤!n");break;elseprintf("沒有該學(xué)生的信息!n");printf("任意健返

33、回");getchar();else /*成績(jī)表為空,返回*/printf("學(xué)生成績(jī)數(shù)據(jù)庫為空,請(qǐng)錄入!n");printf("任意健返回");getchar(); /*函數(shù)到此結(jié)束*/3.3.4.2成績(jī)修改分析:此函數(shù)的功能是修改指定科目成績(jī)。函數(shù)首先判斷要修改的什么科目的成績(jī),然后調(diào)用write()修改相應(yīng)科目成績(jī)。代碼如下:void changes(st *s,int i) /*成績(jī)修改函數(shù)*/float soure;char num13;strcpy(num,s->nummber);printf("請(qǐng)輸入新的成績(jī):&q

34、uot;);scanf("%f",&soure);switch(i) /*判斷修改的課程*/case 1:write(num,soure,1);break;case 2:write(num,soure,2);break;case 3:write(num,soure,3);break;case 4:write(num,soure,4);break;case 5:write(num,soure,5);break;case 6:write(num,soure,6);break;void write(char num13,float soure,int i) /*修改成績(jī)并

35、寫入成績(jī)表中*/FILE *fp;st *p,*l;l=read();if(fp=fopen("a.txt","w+")=NULL)printf("打開文件失敗!n");p=l->next;while(p!=NULL)if(strcmp(p->nummber,num)=0)switch(i) /*修改相應(yīng)課程的成績(jī)*/case 1:p->yuwen=soure;break;case 2:p->math=soure;break;case 3:p->yingyu=soure;break;case 4:p-&g

36、t;wuli=soure;break;case 5:p->huaxu=soure;break;case 6:p->shengwu=soure;break;p=p->next;p=l->next; /*修改成功后寫入成績(jī)表*/while(p!=NULL)p->total=p->yuwen+p->math+p->yingyu+p->wuli+p->huaxu+p->shengwu;fprintf(fp,"%d %s %s %.2f %.2f %.2f %.2f %.2f %.2f %.2fn",p->x,p

37、->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;fclose(fp);printf("%s成績(jī)修改完成,任意健返回");getchar();getchar();/*到此結(jié)束*/3.3.5 成績(jī)刪除模塊分析:此模塊的功能是刪除指定學(xué)號(hào)的成績(jī),并從成績(jī)表中除名。函數(shù)del()調(diào)用read()函數(shù),read()將學(xué)生成績(jī)表保存在鏈表l中,并將指針l返回給del(),del()遍歷鏈表,

38、查找匹配的學(xué)號(hào),查找成功則刪除,并保存新成績(jī)表到當(dāng)前目錄下。查找失敗則提示用戶無此學(xué)生的記錄。代碼如下:void del() /*成績(jī)刪除函數(shù)*/int n=1,x,k=1,m=0,i=1;FILE *fp1,*fp2,*fp3;char ch;char nummber20;st *l,*s,*p;i=decide();if(i)l=read();while(n)printf("請(qǐng)輸入要?jiǎng)h除成績(jī)的學(xué)生的學(xué)號(hào):");scanf("%s",nummber); /*從鍵盤接收學(xué)生的學(xué)號(hào)*/p=l;printf("要?jiǎng)h除的信息如下:nn");

39、printf("名次 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物 總成績(jī)n");printf("*nn");while(p!=NULL)if(strcmp(p->nummber,nummber)=0) /*若查找成功,打印出學(xué)生信息*/printf("-4d %s %-8s%-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wu

40、li,p->huaxu,p->shengwu,p->total);m+;s=p; /*s指向要?jiǎng)h除的結(jié)點(diǎn)*/p=p->next;if(m>0) /*查找成功,執(zhí)行刪除操作*/printf("1刪除,0取消:"); /*確認(rèn)執(zhí)行刪除操作*/scanf("%c",&ch);scanf("%c",&ch);if(ch='1')if(fp1=fopen("a.txt","w+")=NULL)printf("打開a.txt文件出錯(cuò)!n

41、");p=l;while(p!=NULL) /*刪除結(jié)點(diǎn)*/if(p->next=s)p->next=s->next;p=p->next;p=l->next;while(p!=NULL) /*寫入成績(jī)表*/p->x=k;k+;fprintf(fp1,"%d %s %-8s %.2f %.2f %.2f %.2f %.2f %.2f %.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p

42、->shengwu,p->total);p=p->next;fclose(fp1);if(fp2=fopen("xuhao.txt","r")=NULL)printf("打開xuhao.txt文件出錯(cuò)!n");fscanf(fp2,"%d",&x);x-; /*序號(hào)自減1*/fclose(fp2);if(x<0) x=0;if(fp3=fopen("xuhao.txt","w+")=NULL)printf("打開xuhao.txt文件

43、出錯(cuò)!n");fprintf(fp3,"%d",x); /*將新序號(hào)自xuhao.txt中*/fclose(fp3);printf("刪除成功!任意鍵繼續(xù),0返回:");scanf("%c",&ch);scanf("%c",&ch);if(ch='0') n=0;else /*查找失敗*/printf("無此學(xué)生的信息.n");else /*成績(jī)表為空,返回*/printf("學(xué)生成績(jī)數(shù)據(jù)庫為空,請(qǐng)錄入!n");printf(&quo

44、t;任意健返回");getchar(); /*函數(shù)到此結(jié)束*/3.3.6成績(jī)排序模塊分析:此模塊的功能是將學(xué)生的總成績(jī)按由高到低排序,函數(shù)paixu()調(diào)用read()函數(shù),read()將成績(jī)表保存在鏈表l中,并將指針l反回給paixu(),paixu()函數(shù)遍歷鏈表l,每次遍歷找出鏈表中總分最高的結(jié),并將此結(jié)點(diǎn)的信息保存在鏈表l1中后在l中刪除此結(jié)點(diǎn),循環(huán)此過程直到鏈表l為空,保存鏈表l1到當(dāng)前目錄,此時(shí)成績(jī)表中即是按總成績(jī)由高到底排列。代碼如下:void paixu() /*成績(jī)排序函數(shù)*/int n=1,i=1,k=1;FILE *fp;st *l,*p,*q,*t,*s1,*

45、p1,*l1;k=decide();if(k) /*成績(jī)表不為空*/l=read();l1=(st *)malloc(sizeof(st);s1=l1;/*-排序-*/printf("正在排序,請(qǐng)稍等nn");printf("名次 學(xué)號(hào) 姓名 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物 總成績(jī)n");printf("*nn");for(p=l;p->next!=NULL;) /*循環(huán)遍歷鏈表,直到鏈表為空*/t=p->next;q=p->next;while(t!=NULL)if(q->total<t->t

46、otal) /*q指向最高成績(jī)*/q=t;t=t->next;p1=(st *)malloc(sizeof(st); /*將最高成績(jī)的學(xué)生信息存入鏈表l1中*/strcpy(p1->nummber,q->nummber);strcpy(p1->name,q->name);p1->yuwen=q->yuwen;p1->math=q->math;p1->yingyu=q->yingyu;p1->wuli=q->wuli;p1->huaxu=q->huaxu;p1->shengwu=q->sheng

47、wu;p1->total=q->total;p1->x=i+;s1->next=p1;s1=p1;p1->next=NULL;t=l;while(t!=NULL)if(t->next=q) /*刪除鏈表l中成績(jī)最高的結(jié)點(diǎn)*/t->next=t->next->next;t=t->next; /*循環(huán)結(jié)束后,鏈表l1中的成績(jī)是有序的*/*-排序結(jié)束-*/if(fp=fopen("a.txt","w+")=NULL)printf("打開a.txt文件出錯(cuò)!n");p=l1->

48、next;while(p!=NULL) /*將排好序的成績(jī)寫入成績(jī)表*/printf("%-4d %s %-8s%-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2fn",p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);fprintf(fp,"%d %s %-8s %.2f %.2f %.2f %.2f %.2f %.2f %.2fn&

49、quot;,p->x,p->nummber,p->name,p->yuwen,p->math,p->yingyu,p->wuli,p->huaxu,p->shengwu,p->total);p=p->next;fclose(fp);printf("排序完成!n");printf("任意鍵返回n");getchar();getchar();else /*成績(jī)表為空,返回*/printf("學(xué)生成績(jī)數(shù)據(jù)庫為空,請(qǐng)錄入!n");printf("任意健返回"

50、);getchar();/*函數(shù)到此結(jié)束*/3.3.7求平均值模塊分析:此模塊的功能是算出全部學(xué)生各科的平均成績(jī)。函數(shù)pingjun()調(diào)用read()函數(shù),read()將成績(jī)表保存在鏈表l中并將指針l返回給pingjun(),pingjun()函數(shù)將各科成績(jī)累加后算出各科的平均成績(jī)并顯示的屏幕上。代碼如下:void pingjun() /*求平均值函數(shù)*/int n=0,i=1,k=1;float yuwen=0,math=0,yingyu=0,wuli=0,huaxu=0,shengwu=0;st *l,*p;k=decide();if(k) /*成績(jī)表不為空*/l=read();p=l-

51、>next;while(p!=NULL) /*計(jì)算總成績(jī)*/n+;yuwen=yuwen+p->yuwen;math=math+p->math;yingyu=yingyu+p->yingyu;wuli=wuli+p->wuli;huaxu=huaxu+p->huaxu;shengwu=shengwu+p->shengwu;p=p->next;printf(" 語文 數(shù)學(xué) 英語 物理 化學(xué) 生物nn");printf("平均成績(jī): %-5.2f %-5.2f %-5.2f %-5.2f %-5.2f %-5.2fn&q

52、uot;,yuwen/n,math/n,yingyu/n,wuli/n,huaxu/n,shengwu/n);printf("任意健返回");getchar();else /*成績(jī)表為空,返回*/printf("學(xué)生成績(jī)數(shù)據(jù)庫為空,請(qǐng)錄入!n");printf("任意健返回");getchar();getchar(); /*函數(shù)到此結(jié)束*/3.3.8打印成績(jī)模塊分析:此模塊的功能是將全部學(xué)生的各科成績(jī)顯示在屏幕上,方便老師查看。函數(shù)print()調(diào)用read()函數(shù),read()將成績(jī)表保存在鏈表l中并將指針l返回給print(),print()函數(shù)遍歷鏈表l,將全部學(xué)生成績(jī)顯示在屏幕上。代碼如下:void print() /*成績(jī)打印函數(shù)*/in

溫馨提示

  • 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. 人人文庫網(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)論