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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

8、數(shù)內(nèi)部定義一個指向文件的指針*fp ,用于寫入文件;score *loadscore *head函數(shù):讀取文件數(shù)據(jù),head 為一個新建的鏈表頭指針,讀取文件數(shù)據(jù)之后令其儲存至新建的鏈表之中,并返回頭指針;score *statisticsscore *head函數(shù):統(tǒng)計成果,可以統(tǒng)計總分、平均分、最高(低)分,返回操作后的鏈表首地址(頭指針);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é)號 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ù)和標記*/*=創(chuàng)建鏈表 =*/ /* 返回一個指向鏈表頭的指針 */ 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)一個 新單元printf 請輸入同學(xué)資料,輸 0 退出 .n; repeat1: printf 請輸入同學(xué)學(xué)號 學(xué)號應(yīng)大于 0 :; / 輸入 學(xué)號,學(xué)號應(yīng)大于 0 scanf%d,&p1-number;whilep1-numbernumber; / 輸入學(xué)號為字符 或小于 0 時,程序報錯,提示重新輸入學(xué)號 ifp1-number=0 goto

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

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

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

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

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

16、atic; /* 輸入錯誤,重新輸入數(shù)學(xué)成果直到正確為止 */ printf 請輸入英語成果 0100 :; scanf%f,&p1-english; /* 輸入英語 成果,成果應(yīng)在 0-100*/ whilep1-englishenglish100 getchar;printf輸入錯誤,請重新輸入英語成果;scanf%f,&p1-english; */* 輸入錯誤,重新輸入英語成果直到正確為止 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é)點中的學(xué)號值,使得學(xué)號大者移到后面的結(jié)點中strcpyt,max-name;strcpymax-name,p1-name; strcpyp1-name,t; /* 交換前后 結(jié)點中的姓名,使之與學(xué)號相匹配 */ fen=max-chinese; max-chinese=p1-chinese;p1-chinese=fen; */* 交換前后結(jié)點中的語文成果,使之與學(xué)號相匹配fen=max-mathmatic; max-mathmatic=p1-mathmatic;p1-mathmatic=fen; /* 交換前后結(jié)點中的數(shù)學(xué)成果,使之與學(xué)

18、號相匹配 */ fen=max-english; max-english=p1-english;p1-english=fen; */* 交換前后結(jié)點中的英語成果,使之與學(xué)號相匹配 max=head;p1=head; /* 重新使 max,p 指向鏈表頭 */ p2-next=NULL; /* 鏈表 結(jié)尾 */printf 輸入的同學(xué)數(shù)為 :%d 個.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é)號 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é)號排序*/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)一個新單元 */ printfn輸入要增加的同學(xué)的資料.; repeat4: printf請輸入同學(xué)學(xué)號 學(xué)號應(yīng)大于 0 :; scanf%d,&stu-number; /* 輸入學(xué)號,學(xué)號應(yīng)大于 0*/ whilestu-numbernumber; */ /* 輸入錯誤,重新輸入學(xué)號 ifstu-number=0 goto end2; /* 當輸入的學(xué)號為0 時,轉(zhuǎn)到末尾,終止追加*/ else p3=head; ifn

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

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

23、nglish100 getchar;printf輸入錯誤,請重新輸入英語成果;scanf%f,&stu-english; */* 輸入錯誤,重新輸入英語成果直到正確為止p1=head; p0=stu; ifhead=NULL head=p0; p0-next=NULL; /* 當原先鏈表為空時,從首結(jié)點開 始存放資料 */ 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é)點中的學(xué)號值,使得學(xué)號大者移到后面的結(jié)點中 strcpyt,max-name; strcpymax-name,p1-name; strcpyp1-name,t; /* 交換前后結(jié)點中的姓名,使之與學(xué)號相匹配 */ fen=max-chinese; max

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

26、數(shù)為 :%d 個.n,n; returnhead; /*=查詢數(shù)據(jù) =*/ /* 函數(shù) search, 功能:查詢同學(xué)成果 */ score *searchscore *head int number; score *p1,*p2; printf輸入要查詢的同學(xué)的學(xué)號:; scanf%d,&number; whilenumber.=0 ifhead=NULL printfn 沒有任何同學(xué)資料 .n;returnhead; printf-n; printf|學(xué)號 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é)號 ,; scanf%d,&number; printf 已經(jīng)退出了 .n; returnhead; /*=刪除數(shù)據(jù) =*/ /* 函數(shù) dele ,功能:刪除同學(xué)資料 */ score *deles

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

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

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

31、tf*; printf 請?zhí)暨x操作 :; scanf%d,&x; /* 挑選操作 */ getchar; switchx /* 用 switch 語句實現(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é)點中的學(xué)號值,使得學(xué)號大者移到后面的結(jié)點中 */ strcpyt,max-name; strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點中的姓名,使之與學(xué)號

32、相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; /* 交換前后結(jié)點中的語文成果,使之與學(xué)號相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點中的數(shù)學(xué)成果,使之與學(xué)號相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點中的英語成果,使之與學(xué)號相匹配 */ 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é)點中的姓名,使得姓名字符串的值大者移到后面的 結(jié)點中 */ k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點中的學(xué)號值,使

34、之與姓名相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen; /* 交換前后結(jié)點中的語文成果,使之與姓名相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點中的數(shù)學(xué)成果,使之與姓名相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點中的英語成果,使之與姓名相匹配 */ 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é)點中的語文成果,使得語文成果高者移到后面的結(jié)點中k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點中的學(xué)號,使之與語文成果相匹配 */ strcpyt,max-name;strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點中的姓名,使之

36、與語文成果相匹配 */ fen=max-mathmatic; max-mathmatic=p-mathmatic; p-mathmatic=fen; /* 交換前后結(jié)點中的數(shù)學(xué)成果,使之與語文成果相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點中的英語成果,使之與語文成果相匹 配*/ 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é)點中的數(shù)學(xué)成果,使得數(shù)學(xué)成果高者移到后面的結(jié)點中k=max-number; max-number=p-number; p-number=k; /* 交換前后結(jié)點中的學(xué)號,使之與數(shù)學(xué)成果相匹配 */ strcpyt,max-name; strcpymax-name,p-name; strcpyp-name,t; /* 交換前后結(jié)點中的姓名,使之與數(shù)學(xué)成果相匹配 */ fen=max-chinese; max-chinese=p-chinese; p-chinese=fen

38、; /* 交換前后結(jié)點中的語文成果,使之與數(shù)學(xué)成果相匹配 */ fen=max-english; max-english=p-english; p-english=fen; /* 交換前后結(jié)點中的英語成果,使之與數(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é)點中的英語成果,使得英語成果高者移到后面的結(jié)點

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

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

41、; exit1; fprintffp, 同學(xué)成果治理系統(tǒng) n; fprintffp,n; fprintffp,-n; fprintffp,|學(xué)號 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; /* 下移一 個結(jié)點 */ fclosefp; printf 文件已經(jīng)儲存 .n; return ; /*=調(diào)入文件 =*/

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

43、; fscanffp,-n; /* 讀入表格域 */ printf 同學(xué)成果治理系統(tǒng) n; printfn; printf-n; printf|學(xué)號 t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|n; printf-n; /* 打印表格域 */ m=m+1; ifm=1 p1=score *mallocLEN; /* 開創(chuàng)一個新單元 */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)一個新單 元*/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)計 =*/* 函數(shù) statistics,功能:統(tǒng)計同學(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個人總分和平均分 t2單科平均分 t3 總分最高分和最低分n; scanf%d,&x; getchar;switchx /*用 switch語句實現(xiàn)功能挑選 */ case 1: ifhead=NULL printfn 沒有任何同學(xué)資料 .n; returnhead; else printf-n;printf|學(xué)號 t|姓名 t|語文 t|數(shù)學(xué) t|英語 t|總分 t|平均分t|n;printf-n;/* 打印表格域 */ whilep.=NULL sum1=p-chinese+p-mathmatic+p-english; /* 運算個人總

47、分 */ ave1=sum1/3; /* 運算個人 平均分 */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; /* 計 算總分 */ y=y+1; ave1=sum1/y; ave2=sum2/y; ave3=sum3/y; /* 運算平均分 */ p=p-next;/* 使 p 指向下一個結(jié)點 */ 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; /* 運算個人總分 */ ifmaxname; i

溫馨提示

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

評論

0/150

提交評論