2022年C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)報(bào)告_第1頁
2022年C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)報(bào)告_第2頁
2022年C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)報(bào)告_第3頁
2022年C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)報(bào)告_第4頁
2022年C語言學(xué)生成績管理系統(tǒng)設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、運(yùn)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計(jì)報(bào)告2022 2022 學(xué)年其次學(xué)期課程名稱 C 語言程序設(shè)計(jì)題 目 同學(xué)成果治理系統(tǒng)同學(xué)姓名 XXX 學(xué) 號(hào) XXX 專業(yè)班級(jí) XXX 指導(dǎo)老師 XXX 合 作 者 XXX 2022 年 6月 30日同學(xué)成果治理系統(tǒng)本程序可實(shí)現(xiàn)對(duì)同學(xué)語數(shù)外三門課程成果的錄入與儲(chǔ)存;1、設(shè)計(jì)目的明白治理信息系統(tǒng)開發(fā)流程,熟識(shí) C本程序旨在訓(xùn)練讀者的基本編程才能,語言的各種語法、編寫流程、以及能夠嫻熟運(yùn)用各種算法、以及各種函數(shù)的使用;2、功能描述本程序可實(shí)現(xiàn)的功能:(1)錄入同學(xué)的成果(2)輸出同學(xué)的成果(3)添加同學(xué)的成果信息(4)刪除指定同學(xué)的成果信息(5)依據(jù)要求對(duì)同學(xué)成果信息

2、進(jìn)行排序(6)依據(jù)學(xué)號(hào)查詢指定同學(xué)的成果(7)將同學(xué)的成果信息以文件形式儲(chǔ)存3、總體設(shè)計(jì)3.1 詳細(xì)實(shí)現(xiàn) main()函數(shù):程序第一調(diào)用menu()函數(shù),顯示出系統(tǒng)主菜單,然后將 menu()函數(shù)返回的從用戶讀取的選項(xiàng)k 值給予 k,接著進(jìn)入 switch case語句進(jìn)入對(duì)應(yīng)選項(xiàng)函數(shù),如輸入錯(cuò)誤沒有該選項(xiàng)就給出提示(default)以上過程為一個(gè)死循環(huán),直到用戶輸入 0 為止;menu()函數(shù):在屏幕上打印選項(xiàng)名稱,然后用一個(gè) int 類型的變量接受從用戶輸入的選項(xiàng),最終將其 return 至主函數(shù);score *creatlink()函數(shù):創(chuàng)建鏈表主要實(shí)現(xiàn)流程如下:print 函數(shù):先令

3、P=head,使 p 指向第一個(gè)節(jié)點(diǎn),當(dāng) head=!NULL時(shí)說明沒有到鏈表尾端,那么就輸出 p 所指向的結(jié)構(gòu)數(shù)據(jù),然后讓 p 指向下一個(gè)節(jié)點(diǎn),直到發(fā)覺 p=NULL為止;而當(dāng) head=NULL說明鏈表中不存在數(shù)據(jù),直接停止輸出;score *add ()函數(shù),添加新的同學(xué)信息, 詳細(xì)實(shí)現(xiàn)路程如流程圖所示(圖片制作時(shí)沒有加 Y/N 判定,在判定圖框中均為向左為真,向右為假):score *search()函數(shù):用來查詢同學(xué)成果,傳遞給函數(shù)指向鏈表的頭 指針,查詢時(shí),假如找到與輸入相匹配的學(xué)號(hào)就打印此同學(xué),反之就輸出“ 沒 有任何同學(xué)資料! ” :score *sortdata 函數(shù):該函數(shù)

4、有學(xué)號(hào)、姓名、單科成果排序(冒泡排序 法),實(shí)行過程如圖:save()函數(shù):用來儲(chǔ)存數(shù)據(jù),第一從用戶輸入取得要儲(chǔ)存的文件名,然 后定義一個(gè)指向文件的指針,以讀寫方式打開文件;將寫生信息依次存入文件;score *load函數(shù):用于讀取數(shù)據(jù),通過“r+ ” 方式打開文件并判定是否打開勝利;詳細(xì)實(shí)現(xiàn)如下:score *statistics函數(shù):它能實(shí)現(xiàn)程序的統(tǒng)計(jì),通過switch-case語句挑選統(tǒng)計(jì)方式,通過循環(huán)運(yùn)算總分或者平均分并打印出來,流程都是通過循環(huán),讓指針逐個(gè)遍歷整個(gè)鏈表,讀取相應(yīng)的數(shù)據(jù)并實(shí)現(xiàn)統(tǒng)計(jì)3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):定義了一個(gè)包含同學(xué)成果信息的結(jié)構(gòu)體(struct score

5、node),同學(xué)信息包括學(xué)號(hào)(number)、姓名( name10 )、語文、數(shù)學(xué)、英語成果( chinese 、mathmatic 、english )、以及指向下一個(gè)結(jié)構(gòu)體的鏈表指針 struct scorenode *next;3.3 函數(shù)功能描述main()函數(shù):主函數(shù)功能主要是讓程序挑選將要進(jìn)行的操作,通過 menu()函數(shù)返回的選項(xiàng)進(jìn)入其他函數(shù)執(zhí)行;int menu (int k)函數(shù):此函數(shù)顯示主菜單內(nèi)容,需要一個(gè) int 類型變量作為輸入要執(zhí)行的選項(xiàng)并返回給 main()函數(shù);score *creatlink 函數(shù):此函數(shù)用于創(chuàng)建鏈表,為了節(jié)約內(nèi)存空間,我們采納 malloc

6、()函數(shù)為結(jié)構(gòu)體安排動(dòng)態(tài)內(nèi)存空間;另外考慮到學(xué)號(hào)不行能是0,所以用輸入 0 的方式來判定是否終止輸入,將最終的結(jié)構(gòu)體中的指針指向NULL,并返回一個(gè)指向鏈表第一個(gè)結(jié)構(gòu)的指針;void print (score *head)函數(shù): 此函數(shù)返回值為空, 學(xué)問為了在 stdout流(屏幕)上打印出同學(xué)的成果信息,需要一個(gè)指向鏈表頭的指針來逐個(gè)向后 打?。籹core *addscore *head , score *stu函數(shù):為同學(xué)信息中添加新的學(xué)生資料,然后重新排序(按學(xué)號(hào)),并返回頭指針;傳入函數(shù)的head 為鏈表頭指針, stu 指針指的是要添加的位置;score *searchscore *

7、head函數(shù):依據(jù)學(xué)號(hào)查找同學(xué)信息,需要鏈表頭指針并返回指向被搜尋同學(xué)的指針;搜尋原理就是從頭向后面依次檢索;score *delescore *head函數(shù):刪除指定同學(xué)的資料;傳入頭指針,在函數(shù)中創(chuàng)建變量儲(chǔ)存要?jiǎng)h除同學(xué)的學(xué)號(hào),然后從頭向尾檢索,直至找到該同學(xué) 并將其刪除,返回頭指針;score *sortdatascore *head函數(shù):用于按要求(學(xué)號(hào)、姓名、單科成績)排序,最終返回頭指針,排序運(yùn)用老師上課時(shí)講過的冒泡排序法;int savescore *p1 函數(shù):將鏈表內(nèi)的數(shù)據(jù)以文件的形式儲(chǔ)存,傳入的 p1指針一開頭指向鏈表頭,隨著儲(chǔ)存次序一個(gè)一個(gè)地向后面指,直到 NULL為止;函

8、數(shù)內(nèi)部定義一個(gè)指向文件的指針*fp ,用于寫入文件;score *loadscore *head函數(shù):讀取文件數(shù)據(jù),head 為一個(gè)新建的鏈表頭指針,讀取文件數(shù)據(jù)之后令其儲(chǔ)存至新建的鏈表之中,并返回頭指針;score *statisticsscore *head函數(shù):統(tǒng)計(jì)成果,可以統(tǒng)計(jì)總分、平均分、最高(低)分,返回操作后的鏈表首地址(頭指針);4、程序?qū)崿F(xiàn) 4.1 源代碼 #include #include #include #include #define LEN sizeofstruct scorenode #define DEBUG /*=數(shù)據(jù)結(jié)構(gòu) =*/ struct scoreno

9、de int number; / 同學(xué)學(xué)號(hào) char name10; / 同學(xué)姓名 float chinese; / 語文成果 float mathmatic; / 數(shù)學(xué)成果 float english; / 英語成果struct scorenode *next; ;typedef struct scorenode score; typedef struct scorenode *scoreptr; int n,k; / 定義結(jié)構(gòu)體變量 / 定義結(jié)構(gòu)體變量指針/*n,k為全局變量,本程序中的函數(shù)均可以使用它, 分別用于記數(shù)和標(biāo)記*/*=創(chuàng)建鏈表 =*/ /* 返回一個(gè)指向鏈表頭的指針 */ s

10、core *creatlink score*head; score *p1,*p2,*p3,*max; int i,j; float fen; char t10; n=0; p1=p2=p3=score *mallocLEN;head=p3; / 開創(chuàng)一個(gè) 新單元printf 請(qǐng)輸入同學(xué)資料,輸 0 退出 .n; repeat1: printf 請(qǐng)輸入同學(xué)學(xué)號(hào) 學(xué)號(hào)應(yīng)大于 0 :; / 輸入 學(xué)號(hào),學(xué)號(hào)應(yīng)大于 0 scanf%d,&p1-number;whilep1-numbernumber; / 輸入學(xué)號(hào)為字符 或小于 0 時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào) ifp1-number=0 goto

11、 end; / 當(dāng)輸入的學(xué)號(hào)為 0 時(shí),轉(zhuǎn)到末尾,終止創(chuàng)建鏈表 else p3=head; ifn0 fori=0;inumber.=p3-number p3=p3-next; else printf 學(xué)號(hào)重復(fù) , 請(qǐng)重輸 .n; goto repeat1; /* 當(dāng)輸入的 學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入 */ printf 請(qǐng)輸入同學(xué)姓名: ; scanf%s,&p1-name; /* 輸入同學(xué)姓名 */ printf 請(qǐng)輸入語文成果 0100 :; /* 輸入語文成果,成果應(yīng)在 0-100*/ scanf%f,&p1-chinese; whilep1-chinesechinese

12、100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入語文成果*/; /* 輸入錯(cuò)誤,重新輸入語文成果直到正確為止scanf%f,&p1-chinese; printf 請(qǐng)輸入數(shù)學(xué)成果 0100 :; /* 輸入數(shù)學(xué)成果,成果應(yīng)在 0-100*/ scanf%f,&p1-mathmatic; whilep1-mathmaticmathmatic100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成果*/; /* 輸入錯(cuò)誤,重新輸入數(shù)學(xué)成果直到正確為止scanf%f,&p1-mathmatic; printf 請(qǐng)輸入英語成果 0100 :; /* 輸入英語成果,成果應(yīng)在 0-100*/

13、 scanf%f,&p1-english; whilep1-englishenglish100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入英語成果;scanf%f,&p1-english; /* 輸入錯(cuò)誤,重新輸入英語成果直 到正確為止 */ head=NULL; whilep1-number.=0 n=n+1;ifn=1 head=p1; else p2-next=p1; p2=p1; p1=score *mallocLEN;printf請(qǐng)輸入同學(xué)資料,輸0 退出 .n;repeat2:printf請(qǐng)輸入同學(xué)學(xué)號(hào) 學(xué)號(hào)應(yīng)大于 0 :;scanf%d,&p1-number; /* 輸入學(xué)

14、號(hào) */ whilep1-numbernumber; */* 輸入學(xué)號(hào)為字符或小于 0 時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)ifp1-number=0goto end; */* 當(dāng)輸入的學(xué)號(hào)為 0 時(shí),轉(zhuǎn)到末尾,終止創(chuàng)建鏈表else p3=head; ifn0 fori=0;inumber.=p3-number p3=p3-next; else printf 學(xué)號(hào)重復(fù) , 請(qǐng)重輸 .n; goto repeat2; /* 當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入 */ printf 請(qǐng)輸入同學(xué)姓名: ; scanf%s,&p1-name; /* 輸入學(xué)生姓名 */ printf 請(qǐng)輸入語文成

15、果 0100 :;scanf%f,&p1-chinese; 績,成果應(yīng)在 0-100*/ /* 輸入語文成whilep1-chinesechinese100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入語文成果;scanf%f,&p1-chinese; /* 輸入錯(cuò)誤,重新 輸入語文成果直到正確為止 */ printf 請(qǐng)輸入數(shù)學(xué)成果 0100 :;scanf%f,&p1-mathmatic; 績,成果應(yīng)在 0-100*/ /* 輸入數(shù)學(xué)成whilep1-mathmaticmathmatic100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成果;scanf%f,&p1-mathm

16、atic; /* 輸入錯(cuò)誤,重新輸入數(shù)學(xué)成果直到正確為止 */ printf 請(qǐng)輸入英語成果 0100 :; scanf%f,&p1-english; /* 輸入英語 成果,成果應(yīng)在 0-100*/ whilep1-englishenglish100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入英語成果;scanf%f,&p1-english; */* 輸入錯(cuò)誤,重新輸入英語成果直到正確為止 end: p1=head; p3=p1; fori=1;in;i+ forj=i+1;jnext; ifmax-numberp1-number k=max-number; max-number=p1-

17、number;p1-number=k; */* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中strcpyt,max-name;strcpymax-name,p1-name; strcpyp1-name,t; /* 交換前后 結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配 */ fen=max-chinese; max-chinese=p1-chinese;p1-chinese=fen; */* 交換前后結(jié)點(diǎn)中的語文成果,使之與學(xué)號(hào)相匹配fen=max-mathmatic; max-mathmatic=p1-mathmatic;p1-mathmatic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與學(xué)

18、號(hào)相匹配 */ fen=max-english; max-english=p1-english;p1-english=fen; */* 交換前后結(jié)點(diǎn)中的英語成果,使之與學(xué)號(hào)相匹配 max=head;p1=head; /* 重新使 max,p 指向鏈表頭 */ p2-next=NULL; /* 鏈表 結(jié)尾 */printf 輸入的同學(xué)數(shù)為 :%d 個(gè).n,n; returnhead; /*=顯示數(shù)據(jù) =*/* 函數(shù) print,功能:顯示同學(xué)成果*/void printscore *head score *p; ifhead=NULL printfn 沒有任何同學(xué)資料 .n; else prin

19、tf%dn,n; printf-n;printf|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n;printf-n; /* 打印表格域 */ p=head; do printf|%dt|%st|%.1ft|%.1ft|%.1ft|n,p-number,p-name,p-chinese,p-mathmatic,p-english; printf-n; /* 打印表格域 */ p=p-next; while p.=NULL; /*=添加同學(xué)數(shù)據(jù) =*/* 函數(shù) add, 功能:追加同學(xué)資料, 并且將全部同學(xué)資料按學(xué)號(hào)排序*/score *addscore *head,score *stu s

20、core *p0,*p1,*p2,*p3,*max; int i,j; float fen; char t10; p3=stu=score *mallocLEN; /* 開創(chuàng)一個(gè)新單元 */ printfn輸入要增加的同學(xué)的資料.; repeat4: printf請(qǐng)輸入同學(xué)學(xué)號(hào) 學(xué)號(hào)應(yīng)大于 0 :; scanf%d,&stu-number; /* 輸入學(xué)號(hào),學(xué)號(hào)應(yīng)大于 0*/ whilestu-numbernumber; */ /* 輸入錯(cuò)誤,重新輸入學(xué)號(hào) ifstu-number=0 goto end2; /* 當(dāng)輸入的學(xué)號(hào)為0 時(shí),轉(zhuǎn)到末尾,終止追加*/ else p3=head; ifn

21、0 fori=0;inumber.=p3-number p3=p3-next; else printf 學(xué)號(hào)重復(fù) , 請(qǐng)重輸 .n; goto repeat4; /* 當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入 */ printf 輸入同學(xué)姓名: ; scanf%s,stu-name; /* 輸 入同學(xué)姓名 */ printf 請(qǐng)輸入語文成果 0100 :; scanf%f,&stu-chinese; /* 輸入語文成果,成果應(yīng)在 0-100*/ whilestu-chinesechinese100 getchar; printf輸入錯(cuò)誤,請(qǐng)重新輸入語文成果; scanf%f,&stu-

22、chinese; /* 輸入錯(cuò)誤,重新輸入語文成果直到正確為止*/ /*輸 printf請(qǐng)輸入數(shù)學(xué)成果 0100 : ; scanf%f,&stu-mathmatic; 入數(shù)學(xué)成果,成果應(yīng)在0-100*/ whilestu-mathmaticmathmatic100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成果; scanf%f,&stu-mathmatic; /* 輸入 錯(cuò)誤,重新輸入數(shù)學(xué)成果直到正確為止 */ printf 請(qǐng)輸入英語成果 0100 :; scanf%f,&stu-english; /* 輸入英語成果,成果應(yīng)在 0-100*/ whilestu-englishe

23、nglish100 getchar;printf輸入錯(cuò)誤,請(qǐng)重新輸入英語成果;scanf%f,&stu-english; */* 輸入錯(cuò)誤,重新輸入英語成果直到正確為止p1=head; p0=stu; ifhead=NULL head=p0; p0-next=NULL; /* 當(dāng)原先鏈表為空時(shí),從首結(jié)點(diǎn)開 始存放資料 */ else /* 鏈 表不為空 */ ifp1-next=NULL /* 找 到原先鏈表的末尾 */ p1-next=p0; p0-next=NULL; /* 將它與新開單元相連接 */ else whilep1-next.=NULL /* 仍沒找到末尾,連續(xù)找 */ p2=

24、p1;p1=p1-next; p1-next=p0; p0-next=NULL; n=n+1;p1=head; p0=stu; fori=1;in;i+ forj=i+1;jnext; ifmax-numberp1-number k=max-number; max-number=p1-number; p1-number=k; */* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中 strcpyt,max-name; strcpymax-name,p1-name; strcpyp1-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配 */ fen=max-chinese; max

25、-chinese=p1-chinese; p1-chinese=fen; */* 交換前后結(jié)點(diǎn)中的語文成果,使之與學(xué)號(hào)相匹配 fen=max-mathmatic; max-mathmatic=p1-mathmatic; p1-mathmatic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與學(xué)號(hào)相匹配 */ fen=max-english; max-english=p1-english; p1-english=fen; /* 交換前后結(jié)點(diǎn)中的英語成果,使之與學(xué)號(hào)相匹配 */ max=head;p1=head ; /* 重新使 max,p 指向鏈表頭 */ end2: printf 現(xiàn)在的同學(xué)

26、數(shù)為 :%d 個(gè).n,n; returnhead; /*=查詢數(shù)據(jù) =*/ /* 函數(shù) search, 功能:查詢同學(xué)成果 */ score *searchscore *head int number; score *p1,*p2; printf輸入要查詢的同學(xué)的學(xué)號(hào):; scanf%d,&number; whilenumber.=0 ifhead=NULL printfn 沒有任何同學(xué)資料 .n;returnhead; printf-n; printf|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n; printf-n; p1=head; whilenumber.=p1-number&

27、p1-next.=NULL p2=p1;p1=p1-next; ifnumber=p1-number printf|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name, p1-chinese,p1-mathmatic,p1-english; printf-n; else printf%d 不存在此同學(xué) .n,number; printf 輸入要查詢的同學(xué)的學(xué)號(hào) ,; scanf%d,&number; printf 已經(jīng)退出了 .n; returnhead; /*=刪除數(shù)據(jù) =*/ /* 函數(shù) dele ,功能:刪除同學(xué)資料 */ score *deles

28、core *head score *p1,*p2; int number; printf輸入要?jiǎng)h除的同學(xué)的學(xué)號(hào) 輸入 0 時(shí)退出 :; scanf%d,&number; getchar; whilenumber.=0 /* 時(shí)退出 */ ifhead=NULL 輸入學(xué)號(hào)為 0 printfn 沒有任何同學(xué)資料 .n; returnhead; p1=head; whilenumber.=p1-number&p1-next.=NULL /*p1 指向的不 是所要找的首結(jié)點(diǎn),并且后面仍有結(jié)點(diǎn) */ p2=p1;p1=p1-next; 結(jié)點(diǎn) */*p1 后移一個(gè) ifnumber=p1-number

29、/* 假如找到了*/ ifp1=head head=p1-next; 結(jié)點(diǎn),把地二個(gè)結(jié)點(diǎn)地址給予 head*/ else p2-next=p1-next; 個(gè)結(jié)點(diǎn)地址賦給前一結(jié)點(diǎn)地址*/* 如 p1 指向的是首/* 否就將下一 printf 刪除 :%dn,number;n=n-1; else printf%d不存在此同學(xué) .n,number; /* 找不到該結(jié)點(diǎn)*/ printf輸入要?jiǎng)h除的同學(xué)的學(xué)號(hào):; scanf%d,&number; getchar; #ifdef DEBUG printf 已經(jīng)退出了 .n; #endif printf 現(xiàn)在的同學(xué)數(shù)為 :%d 個(gè).n,n; retur

30、nhead; /*=排序 =*/ /* 定義排序函數(shù);此函數(shù)帶回一個(gè)指向鏈表頭的指針 */ score *sortdatascore *head score *p,*max; int i,j,x; float fen; char t10; ifhead=NULL printfn沒有任何同學(xué)資料,請(qǐng)先建立鏈表.n;returnhead; /* 鏈表為空 */ max=p=head;fori=0;i80;i+ printf*;printf1按同學(xué)學(xué)號(hào)排序 t2 按同學(xué)姓名排序 t3按語文成果排序n; printf4 按數(shù)學(xué)成果排序 t5 按英語成果排序 tn; fori=0;i80;i+ prin

31、tf*; printf 請(qǐng)?zhí)暨x操作 :; scanf%d,&x; /* 挑選操作 */ getchar; switchx /* 用 switch 語句實(shí)現(xiàn)功能挑選 */ case 1 : fori=1;in;i+ forj=i+1;jnext; ifmax-numberp-number k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中 */ strcpyt,max-name; strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)

32、相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; /* 交換前后結(jié)點(diǎn)中的語文成果,使之與學(xué)號(hào)相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與學(xué)號(hào)相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點(diǎn)中的英語成果,使之與學(xué)號(hào)相匹配 */ max=head; p=head; /* 重新使 max,p 指向鏈表頭

33、 */ printhead; break; /* 打印值排序后的鏈表內(nèi)容 */ case 2 : fori=1;in;i+ forj=i+1;jnext; ifstrcmpmax-name,p-name0 /*strcmp :字符串比較函數(shù) */ strcpyt,max-name; /*strcpy:字符串復(fù)制函數(shù)*/strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使得姓名字符串的值大者移到后面的 結(jié)點(diǎn)中 */ k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使

34、之與姓名相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; /* 交換前后結(jié)點(diǎn)中的語文成果,使之與姓名相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與姓名相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點(diǎn)中的英語成果,使之與姓名相匹配 */ p=head; max=head; printhead; bre

35、ak; case 3 : fori=1;in;i+ forj=i+1;jnext; ifmax-chinesep-chinese fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; */* 交換前后結(jié)點(diǎn)中的語文成果,使得語文成果高者移到后面的結(jié)點(diǎn)中k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與語文成果相匹配 */ strcpyt,max-name;strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使之

36、與語文成果相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與語文成果相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點(diǎn)中的英語成果,使之與語文成果相匹 配*/ p=head; max=head; printhead; break; case 4 : fori=1;in;i+ forj=i+1;jnext; ifmax-mathmaticp-mathmatic fen=max-m

37、athmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; */* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使得數(shù)學(xué)成果高者移到后面的結(jié)點(diǎn)中k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與數(shù)學(xué)成果相匹配 */ strcpyt,max-name; strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使之與數(shù)學(xué)成果相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen

38、; /* 交換前后結(jié)點(diǎn)中的語文成果,使之與數(shù)學(xué)成果相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點(diǎn)中的英語成果,使之與數(shù)學(xué)成果相匹配 */ p=head; max=head; printhead; break; case 5 : fori=1;in;i+ forj=i+1;jnext; ifmax-englishp-english fen=max-english;max-english=p-english; p-english=fen; */* 交換前后結(jié)點(diǎn)中的英語成果,使得英語成果高者移到后面的結(jié)點(diǎn)

39、中k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與英語成果相匹配 */ strcpyt,max-name; strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點(diǎn)中的姓名,使之與英語成果相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; /* 交換前后結(jié)點(diǎn)中的語文成果,使之與英語成果相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathma

40、tic=fen; /* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成果,使之與英語成果相匹配 */ p=head; max=head; printhead; break; default : printf 輸入錯(cuò)誤 , 請(qǐng)重試 . n; return 0; /*=儲(chǔ)存數(shù)據(jù) =*/ /* 函數(shù) save, 功能:儲(chǔ)存同學(xué)的資料 */ void savescore *p1 FILE *fp; char filepn20;/* 用來存放文件儲(chǔ)存路徑以及文件名 */ printf 請(qǐng)輸入文件路徑及文件名 :; scanf%s,filepn; iffp=fopenfilepn,w+=NULL printf 不能打開文件 .n

41、; exit1; fprintffp, 同學(xué)成果治理系統(tǒng) n; fprintffp,n; fprintffp,-n; fprintffp,|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n; fprintffp,-n; /* 打印表格域 */ whilep1.=NULL fprintffp,%dt%st%.1ft%.1ft%.1ftn,p1-number,p1-name,p1-ch inese,p1-mathmatic,p1-english; p1=p1-next; /* 下移一 個(gè)結(jié)點(diǎn) */ fclosefp; printf 文件已經(jīng)儲(chǔ)存 .n; return ; /*=調(diào)入文件 =*/

42、* 函數(shù) loadfile,功能 : 從文件讀入同學(xué)記錄*/score *loadfilescore *head score *p1,*p2; int m=0; char filename10; FILE *fp; printf 請(qǐng)輸入文件路徑及文件名 :; scanf%s,filename;/* 輸入文件路徑及名稱 */ iffp=fopenfilename,r+=NULL printf 不能打開文件 .n; return 0; fscanffp, 同學(xué)成果治理系統(tǒng) n; fscanffp,n;fscanffp,-n; fscanffp,|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n

43、; fscanffp,-n; /* 讀入表格域 */ printf 同學(xué)成果治理系統(tǒng) n; printfn; printf-n; printf|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n; printf-n; /* 打印表格域 */ m=m+1; ifm=1 p1=score *mallocLEN; /* 開創(chuàng)一個(gè)新單元 */fscanffp,%d%s%f%f%f,&p1-number,p1-name,&p1-chinese,&p1-mathma tic,&p1-english;printf|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,

44、p1- chinese,p1-mathmatic,p1-english; /* 文件讀入與顯示 */ head=NULL; do n=n+1; ifn=1 head=p1; else p2-next=p1; p2=p1; p1=score *mallocLEN; /* 開創(chuàng)一個(gè)新單 元*/fscanffp,%d%s%f%f%fn,&p1-number,p1-name,&p1-chinese,&p1-math matic,&p1-english;printf|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1- chinese,p1-mathmati

45、c,p1-english; /* 文件讀入與顯示 */ while.feoffp; p2-next=p1; p1-next=NULL; n=n+1; printf-n; /* 表格下線 */ fclosefp; /* 結(jié) 束讀入,關(guān)閉文件 */ return head; /*=統(tǒng)計(jì) =*/* 函數(shù) statistics,功能:統(tǒng)計(jì)同學(xué)成果*/score *statisticsscore *head float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min=0; char maxname10,minname10; score *p; in

46、t x,y=0,i=0; p=head;printf1個(gè)人總分和平均分 t2單科平均分 t3 總分最高分和最低分n; scanf%d,&x; getchar;switchx /*用 switch語句實(shí)現(xiàn)功能挑選 */ case 1: ifhead=NULL printfn 沒有任何同學(xué)資料 .n; returnhead; else printf-n;printf|學(xué)號(hào) t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|總分 t|平均分t|n;printf-n;/* 打印表格域 */ whilep.=NULL sum1=p-chinese+p-mathmatic+p-english; /* 運(yùn)算個(gè)人總

47、分 */ ave1=sum1/3; /* 運(yùn)算個(gè)人 平均分 */printf|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n,p-numb er,p-name,p-chinese,p-mathmatic,p-english,sum1,ave1; /* 打印結(jié)果 */printf-n; p=p-next; returnhead;break; case 2: ifhead=NULL printfn沒有任何同學(xué)資料.n;returnhead; whilep.=NULL sum1=sum1+p-chinese; sum2=sum2+p-mathmatic; sum3=s

48、um3+p-english; /* 計(jì) 算總分 */ y=y+1; ave1=sum1/y; ave2=sum2/y; ave3=sum3/y; /* 運(yùn)算平均分 */ p=p-next;/* 使 p 指向下一個(gè)結(jié)點(diǎn) */ printf 語文平均分是 %.1fn,ave1; printf 數(shù)學(xué)平均分是 %.1fn,ave2; printf 英語平均分是 %.1fn,ave3; /*打印結(jié)果 */ returnhead; break; case 3: ifhead=NULL printfn沒有任何同學(xué)資料.n;returnhead; min=max=p-chinese+p-mathmatic+p-english; whileichinese+p-mathmatic+p-english; /* 運(yùn)算個(gè)人總分 */ ifmaxname; i

溫馨提示

  • 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)論