




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院課程設(shè)計(jì)報(bào)告2015 201邑學(xué)年第二學(xué)期課程名稱C 語(yǔ)言程序設(shè)計(jì)題 目學(xué)生成績(jī)管理系統(tǒng)學(xué)生姓名XXX學(xué) 號(hào) XXX專業(yè)班級(jí)XXX指導(dǎo)教師XXX合作者XXX2016年 6 月 30 日學(xué)生成績(jī)管理系統(tǒng)本程序可實(shí)現(xiàn)對(duì)學(xué)生語(yǔ)數(shù)外三門課程成績(jī)的錄入與保存。1、 設(shè)計(jì)目的本程序旨在訓(xùn)練讀者的基本編程能力,了解管理信息系統(tǒng)開(kāi)發(fā)流程,熟悉C語(yǔ)言的各種語(yǔ)法、編寫流程、以及能夠熟練運(yùn)用各種算法、以及各種函數(shù)的使用。2、 功能描述本程序可實(shí)現(xiàn)的功能:(1) 錄入學(xué)生的成績(jī)(2) 輸出學(xué)生的成績(jī)(3) 添加學(xué)生的成績(jī)信息(4) 刪除指定學(xué)生的成績(jī)信息(5) 按照要求對(duì)學(xué)生成績(jī)信息進(jìn)行排序6)
2、根據(jù)學(xué)號(hào)查詢指定學(xué)生的成績(jī)( 7) 將學(xué)生的成績(jī)信息以文件形式保存3、 總體設(shè)計(jì)具體實(shí)現(xiàn)main ()函數(shù):程序首先調(diào)用 menu()函數(shù),顯示出系統(tǒng)主菜單,然后將 menu() 函數(shù)返回的從用戶讀取的選項(xiàng)k 值賦予k, 接著進(jìn)入switch case 語(yǔ)句進(jìn)入對(duì)應(yīng)選項(xiàng)函數(shù),若輸入錯(cuò)誤沒(méi)有該選項(xiàng)則給出提示(default )以上過(guò)程為一個(gè)死循環(huán),直到用戶輸入 0 為止。menu()函數(shù):在屏幕上打印選項(xiàng)名稱,然后用一個(gè)int類型的變量接受從用戶輸入的選項(xiàng),最后將其return 至主函數(shù)。score *creatlink ()函數(shù):創(chuàng)建鏈表主要實(shí)現(xiàn)流程如下:print()函數(shù):先令P=head,
3、使p指向第一個(gè)節(jié)點(diǎn),當(dāng) head=! NULL寸說(shuō)明沒(méi)有到鏈表尾端,那么就輸出p 所指向的結(jié)構(gòu)數(shù)據(jù),然后讓p 指向下一個(gè)節(jié)點(diǎn),直到發(fā)現(xiàn)p=NULL為止。而當(dāng)head=NUL加明鏈表中不存在數(shù)據(jù),直接停止輸出。score *add ()函數(shù),添加新的學(xué)生信息,具體實(shí)現(xiàn)路程如流程圖所示(圖片制作時(shí)沒(méi)有加Y/N 判斷,在判斷圖框中均為向左為真,向右為假):score *search ()函數(shù):用來(lái)查詢學(xué)生成績(jī),傳遞給函數(shù)指向鏈表的頭指針,查詢時(shí),如果找到與輸入相匹配的學(xué)號(hào)則打印此學(xué)生,反之則輸出“沒(méi)有任何學(xué)生資料! ”:score *sortdata() 函數(shù):該函數(shù)有學(xué)號(hào)、姓名、單科成績(jī)排序(冒泡
4、排序法),實(shí)行過(guò)程如圖:save ()函數(shù):用來(lái)保存數(shù)據(jù),首先從用戶輸入取得要保存的文件名,然后定義一個(gè)指向文件的指針,以讀寫方式打開(kāi)文件。將寫生信息依次存入文件。score *load() 函數(shù):用于讀取數(shù)據(jù),通過(guò)“r+ ”方式打開(kāi)文件并判斷是否打開(kāi)成功。具體實(shí)現(xiàn)如下:score *statistics() 函數(shù):它能實(shí)現(xiàn)程序的統(tǒng)計(jì),通過(guò)switch-case 語(yǔ)句選擇統(tǒng)計(jì)方式,通過(guò)循環(huán)計(jì)算總分或者平均分并打印出來(lái),流程都是通過(guò)循環(huán),讓指針逐個(gè)遍歷整個(gè)鏈表,讀取相應(yīng)的數(shù)據(jù)并實(shí)現(xiàn)統(tǒng)計(jì)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):定義了一個(gè)包含學(xué)生成績(jī)信息的結(jié)構(gòu)體(struct scorenode ),學(xué) 生信息包括學(xué)
5、號(hào)(number) 、姓名(name10) 、語(yǔ)文、數(shù)學(xué)、英語(yǔ)成績(jī)(chinese 、mathmatic、 english ) 、 以及指向下一個(gè)結(jié)構(gòu)體的鏈表指針(struct scorenode *next) 。函數(shù)功能描述main ()函數(shù):主函數(shù)功能主要是讓程序選擇將要進(jìn)行的操作,通過(guò) 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()函數(shù)為結(jié)構(gòu)體分配
6、動(dòng)態(tài)內(nèi)存空間。另外考慮到學(xué)號(hào)不可能是0,所以用輸入0 的方式來(lái)判斷是否結(jié)束輸入,將最后的結(jié)構(gòu)體中的指針指向NULL, 并返回一個(gè)指向鏈表第一個(gè)結(jié)構(gòu)的指針。void print ( score *head )函數(shù):此函數(shù)返回值為空,知識(shí)為了在stdout 流(屏幕)上打印出學(xué)生的成績(jī)信息,需要一個(gè)指向鏈表頭的指針來(lái)逐個(gè)向后打印。score *add(score *head , score *stu) 函數(shù):為學(xué)生信息中添加新的學(xué)生資料,然后重新排序(按學(xué)號(hào)),并返回頭指針。傳入函數(shù)的head為鏈表頭指針,stu指針指的是 要添加的位置。score *search(score *head) 函數(shù):
7、按照學(xué)號(hào)查找學(xué)生信息,需要鏈表頭指針并返回指向被搜索學(xué)生的指針。搜索原理就是從頭向后面依次檢索。score *dele(score *head) 函數(shù):刪除指定學(xué)生的資料。傳入頭指針,在函數(shù)中創(chuàng)建變量?jī)?chǔ)存要?jiǎng)h除學(xué)生的學(xué)號(hào),然后從頭向尾檢索,直至找到該學(xué)生并將其刪除,返回頭指 針。score *sortdata(score *head) 函數(shù):用于按要求(學(xué)號(hào)、姓名、單科成績(jī))排序,最后返回頭指針,排序運(yùn)用老師上課時(shí)講過(guò)的冒泡排序法。int save(score *p1) 函數(shù):將鏈表內(nèi)的數(shù)據(jù)以文件的形式儲(chǔ)存,傳入的p1 指針一開(kāi)始指向鏈表頭,隨著儲(chǔ)存順序一個(gè)一個(gè)地向后面指,直到NULE止。函數(shù)
8、內(nèi)部定義一個(gè)指向文件的指針*fp ,用于寫入文件。score *load(score *head) 函數(shù):讀取文件數(shù)據(jù),head 為一個(gè)新建的鏈表頭指針,讀取文件數(shù)據(jù)之后令其保存至新建的鏈表之中,并返回頭指針。score *statistics(score *head) 函數(shù): 統(tǒng)計(jì)成績(jī),可以統(tǒng)計(jì)總分、平均分、 最高 (低)分,返回操作后的鏈表首地址(頭指針)。4、 程序?qū)崿F(xiàn)源代碼#include <>#include <>#include<>#include <>#define LEN sizeof(struct scorenode)#defi
9、ne DEBUG/*=數(shù)據(jù)結(jié)構(gòu)=*/struct scorenodeint number;ft|%.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 *add(score *head,score *stu) score *p0,*p1,*p
10、2,*p3,*max; int i,j; float fen; char t10;p3=stu=(score *)malloc(LEN);/* 開(kāi)辟一個(gè)新單元*/printf("n 輸入要增加的學(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*/while(stu->number<0)getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");scanf
11、("%d",&stu->number);/* 輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/if(stu->number=0)goto end2;/* 當(dāng)輸入的學(xué)號(hào)為0 時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/elsep3=head;if(n>0) for(i=0;i<n;i+) if(stu->number!=p3->number)p3=p3->next; elseprintf(" 學(xué)號(hào)重復(fù), 請(qǐng)重輸 !n");goto repeat4;/* 當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/printf(" 輸入學(xué)生姓名:
12、");scanf("%s",stu->name);/* 輸入學(xué)生姓名 */printf(" 請(qǐng)輸入語(yǔ)文成績(jī)(0100) : ");scanf("%f",&stu->chinese);/* 輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/while(stu->chinese<0|stu->chinese>100) getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī)");scanf("%f",&stu->chinese);/*輸
13、入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/printf(" 請(qǐng)輸入數(shù)學(xué)成績(jī)(0100): ");scanf("%f",&stu->mathmatic);/* 輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/while(stu->mathmatic<0|stu->mathmatic>100) getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)");scanf("%f",&stu->mathmatic);/* 輸入錯(cuò)誤,*/printf(" 請(qǐng)輸入英語(yǔ)成績(jī)
14、(0100) : ");scanf("%f",&stu->english);/* 輸入0-100*/while(stu->english<0|stu->english>100)getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)");scanf("%f",&stu->english);重新輸入英語(yǔ)成績(jī)直到正確為止*/p1=head;p0=stu;if(head=NULL)head=p0;p0->next=NULL;資料 */else空 */if(p1-&
15、gt;next=NULL)鏈表的末尾*/p1->next=p0;p0->next=NULL;與新開(kāi)單元相連接*/elsewhile(p1->next!=NULL)找到末尾,繼續(xù)找*/p2=p1;p1=p1->next;p1->next=p0;p0->next=NULL;n=n+1;/* 輸入錯(cuò)誤,/* 當(dāng)原來(lái)鏈表為空時(shí),從首結(jié)點(diǎn)開(kāi)始存放/* 鏈表不為/* 找到原來(lái)/* 將它/* 還沒(méi)p1=head;p0=stu;for(i=1;i<n;i+)for(j=i+1;j<=n;j+)max=p1;p1=p1->next;if(max->nu
16、mber>p1->number)k=max->number;max->number=p1->number;p1->number=k;結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中*/strcpy(t,max->name);strcpy(max->name,p1->name); strcpy(p1->name,t);前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/fen=max->chinese;max->chinese=p1->chinese; p1->chinese=fen;結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/fen=
17、max->mathmatic;max->mathmatic=p1->mathmatic; p1->mathmatic=fen;前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與學(xué)號(hào)相匹配*/fen=max->english;max->english=p1->english; p1->english=fen;前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與學(xué)號(hào)相匹配*/max=head;p1=head ;使max,p指向鏈表頭*/ end2:printf(" 現(xiàn)在的學(xué)生數(shù)為:%d 個(gè) !n",n);return(head);/*=查詢數(shù)據(jù)=*/* 函數(shù) search,
18、功能:查詢學(xué)生成績(jī)*/score *search(score *head)int number;score *p1,*p2;/* 交換前后/* 交換/* 交換前后/* 交換/* 交換/* 重新printf(" 輸入要查詢的學(xué)生的學(xué)號(hào):");scanf("%d",&number);while(number!=0)if(head=NULL) printf("n 沒(méi)有任何學(xué)生資料!n");return(head);printf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語(yǔ)文 t| 數(shù)學(xué) t|
19、 英語(yǔ) t|n");printf("n");p1=head;while(number!=p1->number&&p1->next!=NULL) p2=p1;p1=p1->next; if(number=p1->number) printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->chinese,p1->mathmatic,p1->english);printf("n");elseprin
20、tf("%d 不存在此學(xué)生!n",number);printf(" 輸入要查詢的學(xué)生的學(xué)號(hào),");scanf("%d",&number);printf(" 已經(jīng)退出了!n");return(head);/*=刪除數(shù)據(jù)=*/* 函數(shù) dele ,功能:刪除學(xué)生資料*/score *dele(score *head)score *p1,*p2;int number;printf(" 輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào)( 輸入 0 時(shí)退出 ):");scanf("%d",&nu
21、mber);getchar();while(number!=0)/*輸入學(xué)號(hào)為0 時(shí)退出 */if(head=NULL)printf("n 沒(méi)有任何學(xué)生資料!n");return(head);p1=head;while(number!=p1->number&&p1->next!=NULL)/*p1 指向的不是所要找*/p2=p1;p1=p1->next;if(number=p1->number)/*if(p1=head)head=p1->next;地二個(gè)結(jié)點(diǎn)地址賦予head*/elsep2->next=p1->nex
22、t;址 賦給前一結(jié)點(diǎn)地址*/printf(" 刪除 :%dn",number);n=n-1;elseprintf("%d 不存在此學(xué)生!n",number);printf(" 輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):");scanf("%d",&number);getchar();#ifdef DEBUGprintf(" 已經(jīng)退出了!n");#endifprintf(" 現(xiàn)在的學(xué)生數(shù)為:%d 個(gè) !n",n);return(head);/*=排序=*/* 定義排序函數(shù)。此函數(shù)帶回一個(gè)
23、指向鏈表頭的指針*/*p1 后移一個(gè)結(jié)點(diǎn)*/如果找到了*/* 若 p1 指向的是首結(jié)點(diǎn),把/* 否則將下一個(gè)結(jié)點(diǎn)地/* 找不到該結(jié)點(diǎn)*/score *sortdata(score *head)score *p,*max;int i,j,x;float fen;char t10;if(head=NULL)printf("n 沒(méi)有任何學(xué)生資料,請(qǐng)先建立鏈表!n");return(head);/* 鏈表為空*/max=p=head;for(i=0;i<80;i+)printf("*");printf("1按學(xué)生學(xué)號(hào)排序t2 按學(xué)生姓名排序t3
24、按語(yǔ)文成績(jī)排序n");printf("4按數(shù)學(xué)成績(jī)排序t5 按英語(yǔ)成績(jī)排序tn");for(i=0;i<80;i+)printf("*");printf(" 請(qǐng)選擇操作:");scanf("%d",&x);/* 選擇操作 */getchar();switch(x)/* 用 switch 語(yǔ)句實(shí)現(xiàn)功能選擇*/case 1 :for(i=1;i<n;i+)for(j=i+1;j<=n;j+)max=p;p=p->next; if(max->number>p->
25、number) k=max->number; max->number=p->number; p->number=k;*/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使得學(xué)號(hào)大者移到后面的結(jié)點(diǎn)中strcpy(t,max->name); strcpy(max->name,p->name); strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與學(xué)號(hào)相匹配*/fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/fen
26、=max->mathmatic;max->mathmatic=p->mathmatic; p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與學(xué)號(hào)相匹配*/fen=max->english;max->english=p->english; p->english=fen;/* 交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與學(xué)號(hào)相匹配*/ max=head; p=head;/*重新使max,p指向鏈表頭*/ print(head); break;/* 打印值排序后的鏈表內(nèi)容*/case 2 :for(i=1;i<n;i+)for(j=i+
27、1;j<=n;j+)max=p;p=p->next;if(strcmp(max->name,p->name)>0)/*strcmp :字符串比較函數(shù)*/strcpy(t,max->name);/*strcpy :字符串復(fù)制函數(shù)*/strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使得姓名字符串的值大者移到后面的結(jié)點(diǎn)中*/k=max->number;max->number=p->number;p->number=k;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào)值,使之與姓
28、名相匹配*/fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與姓名相匹配*/fen=max->mathmatic;max->mathmatic=p->mathmatic;p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與姓名相匹配*/fen=max->english;max->english=p->english; p->english=fen;/* 交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與姓名相匹配*/p=
29、head;max=head;print(head);break;case 3 : for(i=1;i<n;i+) for(j=i+1;j<=n;j+) max=p;p=p->next;if(max->chinese>p->chinese) fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使得語(yǔ)文成績(jī)高者移到后面的結(jié)點(diǎn)中*/k=max->number;max->number=p->number;p->number=k
30、;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與語(yǔ)文成績(jī)相匹配*/strcpy(t,max->name);strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與語(yǔ)文成績(jī)相匹配*/fen=max->mathmatic;max->mathmatic=p->mathmatic;p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與語(yǔ)文成績(jī)相匹配*/fen=max->english;max->english=p->english; p->english=fe
31、n;/* 交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與語(yǔ)文成績(jī)相匹配*/p=head;max=head;print(head);break;case 4 : for(i=1;i<n;i+) for(j=i+1;j<=n;j+) max=p;p=p->next;if(max->mathmatic>p->mathmatic)fen=max->mathmatic;max->mathmatic=p->mathmatic; p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使得數(shù)學(xué)成績(jī)高者移到后面的結(jié)點(diǎn)中*/k=max->number
32、;max->number=p->number;p->number=k;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與數(shù)學(xué)成績(jī)相匹配*/ strcpy(t,max->name);strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與數(shù)學(xué)成績(jī)相匹配*/fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與數(shù)學(xué)成績(jī)相匹配*/fen=max->english;max->en
33、glish=p->english; p->english=fen;/* 交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之與數(shù)學(xué)成績(jī)相匹配*/p=head;max=head;print(head);break;case 5 :for(i=1;i<n;i+) for(j=i+1;j<=n;j+) max=p;p=p->next;if(max->english>p->english)fen=max->english;max->english=p->english; p->english=fen;/* 交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使得英語(yǔ)成績(jī)高者移到
34、后面的結(jié)點(diǎn)中*/k=max->number;max->number=p->number;p->number=k;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與英語(yǔ)成績(jī)相匹配*/strcpy(t,max->name);strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與英語(yǔ)成績(jī)相匹配*/fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與英語(yǔ)成績(jī)相匹配*/fen=max
35、->mathmatic;max->mathmatic=p->mathmatic;p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與英語(yǔ)成績(jī)相匹配*/p=head;max=head;print(head);break;default :printf(" 輸入錯(cuò)誤, 請(qǐng)重試 ! n");return (0);/*=保存數(shù)據(jù)=*/* 函數(shù) save, 功能:保存學(xué)生的資料*/void save(score *p1)FILE *fp;char filepn20;/* 用來(lái)存放文件保存路徑以及文件名*/printf(" 請(qǐng)輸入文
36、件路徑及文件名:");scanf("%s",filepn);if(fp=fopen(filepn,"w+")=NULL)printf(" 不能打開(kāi)文件!n");exit(1);fprintf(fp,"學(xué)生成績(jī)管理系統(tǒng)n");fprintf(fp,"n");fprintf(fp,"n");fprintf(fp,"| 學(xué)號(hào) t| 姓名 t| 語(yǔ)文 t| 數(shù)學(xué) t| 英語(yǔ) t|n");fprintf(fp,"n");/* 打印表格域
37、*/while(p1!=NULL)fprintf(fp,"%dt%st%.1ft%.1ft%.1ftn",p1->number,p1->name,p1->chinese,p1->mathmatic,p1->english);p1=p1->next;/*下移一個(gè)結(jié)點(diǎn)*/fclose(fp);printf(" 文件已經(jīng)保存!n");return ;/*=調(diào)入文件=*/* 函數(shù) loadfile ,功能 : 從文件讀入學(xué)生記錄*/score *loadfile(score *head)score *p1,*p2;int m=
38、0;char filename10;FILE *fp;printf(" 請(qǐng)輸入文件路徑及文件名:");scanf("%s",filename);/* 輸入文件路徑及名稱*/if(fp=fopen(filename,"r+")=NULL)printf(" 不能打開(kāi)文件!n");return 0;fscanf(fp,"學(xué)生成績(jī)管理系統(tǒng)n");fscanf(fp,"n");fscanf(fp,"n");fscanf(fp,"| 學(xué)號(hào) t| 姓名 t|
39、語(yǔ)文 t| 數(shù)學(xué) t| 英語(yǔ) t|n");fscanf(fp,"n");/* 讀入表格域*/printf("學(xué)生成績(jī)管理系統(tǒng)n");printf("n");printf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語(yǔ)文 t| 數(shù)學(xué) t| 英語(yǔ) t|n");printf("n");/* 打印表格域*/m=m+1;if(m=1)p1=(score *)malloc(LEN);/*開(kāi)辟一個(gè)新單元*/fscanf(fp,"%d%s%f%f%f"
40、,&p1->number,p1->name,&p1->chinese,&p1->mathmatic,&p1-> english);printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->chinese,p1->mathmatic,p1->english);/* 文件讀入與顯示*/head=NULL;don=n+1;if(n=1) head=p1;else p2->next=p1;p2=p1;/*開(kāi)辟一個(gè)新單元*
41、/p1=(score *)malloc(LEN);fscanf(fp,"%d%s%f%f%fn",&p1->number,p1->name,&p1->chinese,&p1->mathmatic,&p1 ->english);printf("|%dt|%st|%.1ft|%.1ft|%.1ft|n",p1->number,p1->name,p1->chinese,p 1->mathmatic,p1->english);/* 文件讀入與顯示*/while(!feof
42、(fp);p2->next=p1;p1->next=NULL;n=n+1;printf("n");/* 表格下線 */fclose(fp);/*結(jié)束讀入,關(guān)閉文件 */return (head);/*=統(tǒng)計(jì)=*/* 函數(shù) statistics, 功能:統(tǒng)計(jì)學(xué)生成績(jī)*/score *statistics(score *head)float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min=0;char maxname10,minname10;score *p;int x,y=0,i=0;p=head;print
43、f("1 個(gè)人總分和平均分t2 單科平均分t3 總分最高分和最低分n");scanf("%d",&x);getchar();switch(x)/*用 switch 語(yǔ)句實(shí)現(xiàn)功能選擇*/case 1: if(head=NULL)printf("n 沒(méi)有任何學(xué)生資料!n");return(head); elseprintf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語(yǔ)文 t| 數(shù)學(xué) t| 英語(yǔ) t| 總分 t| 平均分t|n");printf("-*/n");
44、/*while(p!=NULL)sum1=p->chinese+p->mathmatic+p->english; /* 計(jì)算個(gè)人總分*/ave1=sum1/3;/*計(jì)算個(gè)人平均分*/printf("|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n",p->number,p->nam e,p->chinese,p->mathmatic,p->english,sum1,ave1);/* 打印結(jié)果 */printf("n");p=p->next;return(head);br
45、eak;case 2: if(head=NULL)printf("n 沒(méi)有任何學(xué)生資料!n");return(head);while(p!=NULL)sum1=sum1+p->chinese;sum2=sum2+p->mathmatic;sum3=sum3+p->english;/*計(jì)算總分*/y=y+1;ave1=sum1/y;ave2=sum2/y;ave3=sum3/y;/*計(jì)算平均分*/p=p->next;/* 使 p 指向下一個(gè)結(jié)點(diǎn)*/printf("語(yǔ)文平均分是%.1fn",ave1);printf("數(shù)學(xué)平
46、均分是%.1fn",ave2);printf("英語(yǔ)平均分是%.1fn",ave3);/*打印結(jié)果*/return(head);break;case 3:if(head=NULL)printf("n 沒(méi)有任何學(xué)生資料!n");return(head);min=max=p->chinese+p->mathmatic+p->english;while(i<n)i=i+1;sum1=p->chinese+p->mathmatic+p->english; /*計(jì)算個(gè)人總分 */if(max<sum1)max=sum1;strcpy(maxname,p->name);if(min>sum1)min=sum1;strcpy(minname,p->name);p=p->next;printf(" 總分最高分:%.1f, 姓名:%s、 ",max,maxname);printf("n");printf(" 總分最低分:%.1f, 姓名:%s",min,minname);printf("n");return(head); break;default :printf(&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 村委代簽補(bǔ)償協(xié)議書(shū)范本
- 文化創(chuàng)意產(chǎn)業(yè)基地空地租賃與項(xiàng)目合作開(kāi)發(fā)協(xié)議
- 申請(qǐng)商標(biāo)簽協(xié)議書(shū)范本
- 充電樁充電服務(wù)及能源供應(yīng)合同
- 精細(xì)化倉(cāng)儲(chǔ)配送與供應(yīng)鏈管理合同
- 茶園土地租賃與茶葉種植技術(shù)輸出合同
- 知名快餐品牌區(qū)域代理權(quán)及店鋪轉(zhuǎn)讓合同范本
- 產(chǎn)科醫(yī)院護(hù)士標(biāo)準(zhǔn)聘用合同及母嬰護(hù)理
- 餐飲品牌股權(quán)投資與轉(zhuǎn)讓合同
- 企業(yè)常年財(cái)務(wù)顧問(wèn)與風(fēng)險(xiǎn)控制協(xié)議
- 2025至2030中國(guó)智能物流行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢研究報(bào)告
- 病歷書(shū)寫規(guī)范與管理制度
- 如皋護(hù)士招聘題目及答案
- 校園信息發(fā)布管理制度
- 亮化日常管理制度
- 國(guó)家開(kāi)放大學(xué)《中國(guó)法律史》期末機(jī)考題庫(kù)
- 國(guó)家開(kāi)放大學(xué)《管理學(xué)基礎(chǔ)》期末機(jī)考題庫(kù)
- 醫(yī)療器械網(wǎng)絡(luò)交易服務(wù)三方平臺(tái)質(zhì)量管理體系文件-b2B和B2C綜合版
- 《國(guó)際貨運(yùn)代理業(yè)務(wù)操作》課件 任務(wù)七 出口訂艙操作流程規(guī)范
- Unit 7 A Day to Remember 單元話題閱讀理解練習(xí)(原卷版)
- 八年級(jí)英語(yǔ)下學(xué)期期末考試(深圳專用)(解析版)
評(píng)論
0/150
提交評(píng)論