




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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 語言程序設(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é)生語數(shù)外三門課程成績(jī)的錄入與保存。1、 設(shè)計(jì)目的本程序旨在訓(xùn)練讀者的基本編程能力,了解管理信息系統(tǒng)開發(fā)流程,熟悉C語言的各種語法、編寫流程、以及能夠熟練運(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 語句進(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ù):先令P=head,
3、使p指向第一個(gè)節(jié)點(diǎn),當(dāng) head=! NULL寸說明沒有到鏈表尾端,那么就輸出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í)沒有加Y/N 判斷,在判斷圖框中均為向左為真,向右為假):score *search ()函數(shù):用來查詢學(xué)生成績(jī),傳遞給函數(shù)指向鏈表的頭指針,查詢時(shí),如果找到與輸入相匹配的學(xué)號(hào)則打印此學(xué)生,反之則輸出“沒有任何學(xué)生資料! ”:score *sortdata() 函數(shù):該函數(shù)有學(xué)號(hào)、姓名、單科成績(jī)排序(冒泡
4、排序法),實(shí)行過程如圖:save ()函數(shù):用來保存數(shù)據(jù),首先從用戶輸入取得要保存的文件名,然后定義一個(gè)指向文件的指針,以讀寫方式打開文件。將寫生信息依次存入文件。score *load() 函數(shù):用于讀取數(shù)據(jù),通過“r+ ”方式打開文件并判斷是否打開成功。具體實(shí)現(xiàn)如下:score *statistics() 函數(shù):它能實(shí)現(xiàn)程序的統(tǒng)計(jì),通過switch-case 語句選擇統(tǒng)計(jì)方式,通過循環(huán)計(jì)算總分或者平均分并打印出來,流程都是通過循環(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) 、語文、數(shù)學(xué)、英語成績(jī)(chinese 、mathmatic、 english ) 、 以及指向下一個(gè)結(jié)構(gòu)體的鏈表指針(struct scorenode *next) 。函數(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()函數(shù)為結(jié)構(gòu)體分配
6、動(dòng)態(tài)內(nèi)存空間。另外考慮到學(xué)號(hào)不可能是0,所以用輸入0 的方式來判斷是否結(jié)束輸入,將最后的結(jié)構(gòu)體中的指針指向NULL, 并返回一個(gè)指向鏈表第一個(gè)結(jié)構(gòu)的指針。void print ( score *head )函數(shù):此函數(shù)返回值為空,知識(shí)為了在stdout 流(屏幕)上打印出學(xué)生的成績(jī)信息,需要一個(gè)指向鏈表頭的指針來逐個(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í)講過的冒泡排序法。int save(score *p1) 函數(shù):將鏈表內(nèi)的數(shù)據(jù)以文件的形式儲(chǔ)存,傳入的p1 指針一開始指向鏈表頭,隨著儲(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);/* 開辟一個(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)輸入語文成績(jī)(0100) : ");scanf("%f",&stu->chinese);/* 輸入語文成績(jī),成績(jī)應(yīng)在0-100*/while(stu->chinese<0|stu->chinese>100) getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入語文成績(jī)");scanf("%f",&stu->chinese);/*輸
13、入錯(cuò)誤,重新輸入語文成績(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)輸入英語成績(jī)
14、(0100) : ");scanf("%f",&stu->english);/* 輸入0-100*/while(stu->english<0|stu->english>100)getchar();printf(" 輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī)");scanf("%f",&stu->english);重新輸入英語成績(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;與新開單元相連接*/elsewhile(p1->next!=NULL)找到末尾,繼續(xù)找*/p2=p1;p1=p1->next;p1->next=p0;p0->next=NULL;n=n+1;/* 輸入錯(cuò)誤,/* 當(dāng)原來鏈表為空時(shí),從首結(jié)點(diǎn)開始存放/* 鏈表不為/* 找到原來/* 將它/* 還沒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)中的語文成績(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)中的英語成績(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 沒有任何學(xué)生資料!n");return(head);printf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語文 t| 數(shù)學(xué) t|
19、 英語 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 沒有任何學(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 沒有任何學(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、按語文成績(jī)排序n");printf("4按數(shù)學(xué)成績(jī)排序t5 按英語成績(jī)排序tn");for(i=0;i<80;i+)printf("*");printf(" 請(qǐng)選擇操作:");scanf("%d",&x);/* 選擇操作 */getchar();switch(x)/* 用 switch 語句實(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)中的語文成績(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)中的英語成績(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)中的語文成績(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)中的英語成績(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)中的語文成績(jī),使得語文成績(jī)高者移到后面的結(jié)點(diǎn)中*/k=max->number;max->number=p->number;p->number=k
30、;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與語文成績(jī)相匹配*/strcpy(t,max->name);strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與語文成績(jī)相匹配*/fen=max->mathmatic;max->mathmatic=p->mathmatic;p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與語文成績(jī)相匹配*/fen=max->english;max->english=p->english; p->english=fe
31、n;/* 交換前后結(jié)點(diǎn)中的英語成績(jī),使之與語文成績(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)中的語文成績(jī),使之與數(shù)學(xué)成績(jī)相匹配*/fen=max->english;max->en
33、glish=p->english; p->english=fen;/* 交換前后結(jié)點(diǎn)中的英語成績(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)中的英語成績(jī),使得英語成績(jī)高者移到
34、后面的結(jié)點(diǎn)中*/k=max->number;max->number=p->number;p->number=k;/* 交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之與英語成績(jī)相匹配*/strcpy(t,max->name);strcpy(max->name,p->name);strcpy(p->name,t);/* 交換前后結(jié)點(diǎn)中的姓名,使之與英語成績(jī)相匹配*/fen=max->chinese;max->chinese=p->chinese; p->chinese=fen;/* 交換前后結(jié)點(diǎn)中的語文成績(jī),使之與英語成績(jī)相匹配*/fen=max
35、->mathmatic;max->mathmatic=p->mathmatic;p->mathmatic=fen;/* 交換前后結(jié)點(diǎn)中的數(shù)學(xué)成績(jī),使之與英語成績(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;/* 用來存放文件保存路徑以及文件名*/printf(" 請(qǐng)輸入文
36、件路徑及文件名:");scanf("%s",filepn);if(fp=fopen(filepn,"w+")=NULL)printf(" 不能打開文件!n");exit(1);fprintf(fp,"學(xué)生成績(jī)管理系統(tǒng)n");fprintf(fp,"n");fprintf(fp,"n");fprintf(fp,"| 學(xué)號(hào) t| 姓名 t| 語文 t| 數(shù)學(xué) t| 英語 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(" 不能打開文件!n");return 0;fscanf(fp,"學(xué)生成績(jī)管理系統(tǒng)n");fscanf(fp,"n");fscanf(fp,"n");fscanf(fp,"| 學(xué)號(hào) t| 姓名 t|
39、語文 t| 數(shù)學(xué) t| 英語 t|n");fscanf(fp,"n");/* 讀入表格域*/printf("學(xué)生成績(jī)管理系統(tǒng)n");printf("n");printf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語文 t| 數(shù)學(xué) t| 英語 t|n");printf("n");/* 打印表格域*/m=m+1;if(m=1)p1=(score *)malloc(LEN);/*開辟一個(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;/*開辟一個(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 語句實(shí)現(xiàn)功能選擇*/case 1: if(head=NULL)printf("n 沒有任何學(xué)生資料!n");return(head); elseprintf("n");printf("| 學(xué)號(hào) t| 姓名 t| 語文 t| 數(shù)學(xué) t| 英語 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 沒有任何學(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("語文平均分是%.1fn",ave1);printf("數(shù)學(xué)平
46、均分是%.1fn",ave2);printf("英語平均分是%.1fn",ave3);/*打印結(jié)果*/return(head);break;case 3:if(head=NULL)printf("n 沒有任何學(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 集裝箱道路運(yùn)輸與物流配送考核試卷
- 玻璃儀器表面處理技術(shù)考核試卷
- 品牌策劃設(shè)計(jì)說明
- 春季季節(jié)性疾病預(yù)防指南
- 口腔探診手法教學(xué)
- 心跳呼吸驟停護(hù)理常規(guī)
- 肺功能低下病人的麻醉處理原則
- 高一數(shù)學(xué)教學(xué)設(shè)計(jì)
- 16-Hydroxyroridin-L-2-生命科學(xué)試劑-MCE
- 自然語言及語音處理項(xiàng)目式教程 實(shí)訓(xùn)指導(dǎo) 實(shí)訓(xùn)20 基于PaddleSpeech實(shí)現(xiàn)新聞自動(dòng)播報(bào)
- GB/T 25820-2010包裝用鋼帶
- 中醫(yī)診斷思維與辨證思路培訓(xùn)講義課件
- 超聲波流量計(jì)、流量計(jì)算機(jī)氣相色譜儀說明書-17.encal3000色譜儀-elster
- 教育家辦學(xué):中小學(xué)校長(zhǎng)專業(yè)標(biāo)準(zhǔn)解讀課件
- 抹灰施工工藝培訓(xùn)課件
- 茶葉企業(yè)營(yíng)銷課件
- 《高等數(shù)學(xué)》全冊(cè)教案教學(xué)設(shè)計(jì)
- 部編人教版六年級(jí)下冊(cè)語文 第六單元素養(yǎng)提升卷 優(yōu)質(zhì)試題課件
- DB14T1049.3-2021 山西省用水定額 第3部分:服務(wù)業(yè)用水定額
- DB37T 4309-2021 礦床三維地質(zhì)建模規(guī)范
- 產(chǎn)品可追溯性模擬演練記錄
評(píng)論
0/150
提交評(píng)論