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

下載本文檔

版權(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 2016學(xué)年第二學(xué)期課程名稱 C語(yǔ)言程序設(shè)計(jì) 題 目 學(xué)生成績(jī)管理系統(tǒng) 學(xué)生 XXX 學(xué) 號(hào) XXX 專業(yè)班級(jí) XXX 指導(dǎo)教師 XXX 合 作 者 XXX 2016年 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é)

2、生成績(jī)信息進(jìn)行排序(6) 根據(jù)學(xué)號(hào)查詢指定學(xué)生的成績(jī)(7) 將學(xué)生的成績(jī)信息以文件形式保存3、 總體設(shè)計(jì)3.1具體實(shí)現(xiàn) main()函數(shù):程序首先調(diào)用menu()函數(shù),顯示出系統(tǒng)主菜單,然后將menu()函數(shù)返回的從用戶讀取的選項(xiàng)k值賦予k,接著進(jìn)入switchcase語(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=he

3、ad,使p指向第一個(gè)節(jié)點(diǎn),當(dāng)head=!NULL時(shí)說(shuō)明沒(méi)有到鏈表尾端,那么就輸出p所指向的結(jié)構(gòu)數(shù)據(jù),然后讓p指向下一個(gè)節(jié)點(diǎn),直到發(fā)現(xiàn)p=NULL為止。而當(dāng)head=NULL說(shuō)明鏈表中不存在數(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ī)排序(冒泡排序法),實(shí)行過(guò)

4、程如圖: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ì)3.2數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu):定義了一個(gè)包含學(xué)生成績(jī)信息的結(jié)構(gòu)體(struct scorenode),學(xué)生信息包括學(xué)號(hào)(number)、(n

5、ame10)、語(yǔ)文、數(shù)學(xué)、英語(yǔ)成績(jī)(chinese、mathmatic、english)、以與指向下一個(gè)結(jié)構(gòu)體的鏈表指針(struct scorenode *next)。3.3函數(shù)功能描述main()函數(shù):主函數(shù)功能主要是讓程序選擇將要進(jìn)行的操作,通過(guò)menu()函數(shù)返回的選項(xiàng)進(jìn)入其他函數(shù)執(zhí)行。int menu(int k)函數(shù):此函數(shù)顯示主菜單容,需要一個(gè)int類型變量作為輸入要執(zhí)行的選項(xiàng)并返回給main()函數(shù)。score *creatlink()函數(shù):此函數(shù)用于創(chuàng)建鏈表,為了節(jié)省存空間,我們采用malloc()函數(shù)為結(jié)構(gòu)體分配動(dòng)態(tài)存空間。另外考慮到學(xué)號(hào)不可能是0,所以用輸入0 的方式來(lái)判

6、斷是否結(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ù):按照學(xué)號(hào)查找學(xué)生信息,需要鏈表頭指針并返回指向被搜索學(xué)生的指針。搜索原理就是從頭

7、向后面依次檢索。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ù):將鏈表的數(shù)據(jù)以文件的形式儲(chǔ)存,傳入的p1指針一開(kāi)始指向鏈表頭,隨著儲(chǔ)存順序一個(gè)一個(gè)地向后面指,直到NULL為止。函數(shù)部定義一個(gè)指向文件的指針*fp,用于寫入文件。score *load(score *head)函

8、數(shù):讀取文件數(shù)據(jù),head為一個(gè)新建的鏈表頭指針,讀取文件數(shù)據(jù)之后令其保存至新建的鏈表之中,并返回頭指針。score *statistics(score *head)函數(shù):統(tǒng)計(jì)成績(jī),可以統(tǒng)計(jì)總分、平均分、最高(低)分,返回操作后的鏈表首地址(頭指針)。4、 程序?qū)崿F(xiàn)4.1源代碼#include <malloc.h>#include <stdio.h>#include<stdlib.h>#include <string.h>#define LEN sizeof(struct scorenode)#define DEBUG/*=數(shù)據(jù)結(jié)構(gòu)=*/stru

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

10、re*head;score *p1,*p2,*p3,*max;int i,j;float fen;char t10;n=0;p1=p2=p3=(score *)malloc(LEN);head=p3;/開(kāi)辟一個(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)大于0scanf("%d",&p1->number);while(p1->number<0)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入

11、學(xué)生學(xué)號(hào):");scanf("%d",&p1->number);/輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào) if(p1->number=0)goto end;/當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表else p3=head;if(n>0)for(i=0;i<n;i+)if(p1->number!=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ò),返回前面重新輸入*/ p

12、rintf("請(qǐng)輸入學(xué)生:");scanf("%s",&p1->name); /*輸入學(xué)生*/printf("請(qǐng)輸入語(yǔ)文成績(jī)(0100):"); /*輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/scanf("%f",&p1->chinese);while(p1->chinese<0|p1->chinese>100)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī)"); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/ scanf(&quo

13、t;%f",&p1->chinese); printf("請(qǐng)輸入數(shù)學(xué)成績(jī)(0100):"); /*輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/ scanf("%f",&p1->mathmatic); while(p1->mathmatic<0|p1->mathmatic>100) getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)"); /*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/scanf("%f",&p1->mathmatic)

14、; printf("請(qǐng)輸入英語(yǔ)成績(jī)(0100):"); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/ scanf("%f",&p1->english); while(p1->english<0|p1->english>100)getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)"); scanf("%f",&p1->english); /*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/head=NULL;while(p1->number!=0)n=n+

15、1;if(n=1) head=p1;elsep2->next=p1;p2=p1;p1=(score *)malloc(LEN);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é)號(hào)*/while(p1->number<0)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(xué)生學(xué)號(hào):");scanf("%d",&p1->

16、;number); /*輸入學(xué)號(hào)為字符或小于0時(shí),程序報(bào)錯(cuò),提示重新輸入學(xué)號(hào)*/if(p1->number=0)goto end; /*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束創(chuàng)建鏈表*/elsep3=head;if(n>0)for(i=0;i<n;i+)if(p1->number!=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("%

17、s",&p1->name); /*輸入學(xué)生*/printf("請(qǐng)輸入語(yǔ)文成績(jī)(0100):");scanf("%f",&p1->chinese); /*輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/while(p1->chinese<0|p1->chinese>100)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī)");scanf("%f",&p1->chinese); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/printf(&

18、quot;請(qǐng)輸入數(shù)學(xué)成績(jī)(0100):");scanf("%f",&p1->mathmatic); /*輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/while(p1->mathmatic<0|p1->mathmatic>100)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)");scanf("%f",&p1->mathmatic); /*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/printf("請(qǐng)輸入英語(yǔ)成績(jī)(0100):");scanf(&q

19、uot;%f",&p1->english); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/while(p1->english<0|p1->english>100)getchar();printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)");scanf("%f",&p1->english); /*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/end:p1=head;p3=p1;for(i=1;i<n;i+)for(j=i+1;j<=n;j+)max=p1;p1=p1->next;if(max-

20、>number>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)

21、中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/fen=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指向鏈表頭*/ p2->next=NULL; /*鏈表結(jié)尾*/printf("輸入的學(xué)生數(shù)為:

22、%d個(gè)!n",n);return(head);/*=顯示數(shù)據(jù)=*/*函數(shù)print,功能:顯示學(xué)生成績(jī)*/void print(score *head) score *p; if(head=NULL) printf("n沒(méi)有任何學(xué)生資料!n"); else printf("%dn",n); printf("-n");printf("|學(xué)號(hào)t|t|語(yǔ)文t|數(shù)學(xué)t|英語(yǔ)t|n"); printf("-n"); /*打印表格域*/ p=head; do printf("|%dt|%

23、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 *add(score *head,score *stu) score *p0,*p1,*p2,*p3,*max; int i,j; float fen; char t10;

24、 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("%d",&stu->number);

25、 /*輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/ if(stu->number=0) goto end2; /*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/ else p3=head; if(n>0) for(i=0;i<n;i+) if(stu->number!=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-&

26、gt;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); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/ printf("請(qǐng)

27、輸入數(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ò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/printf("請(qǐng)輸入英語(yǔ)成績(jī)(0100):");scanf(

28、"%f",&stu->english); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/while(stu->english<0|stu->english>100)getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)");scanf("%f",&stu->english); /*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/p1=head;p0=stu;if(head=NULL) head=p0;p0->next=NULL; /*當(dāng)原來(lái)鏈表為空時(shí),從首結(jié)點(diǎn)開(kāi)始存放資料*/

29、else /*鏈表不為空*/ if(p1->next=NULL) /*找到原來(lái)鏈表的末尾*/ p1->next=p0; p0->next=NULL; /*將它與新開(kāi)單元相連接*/ else while(p1->next!=NULL) /*還沒(méi)找到末尾,繼續(xù)找*/ p2=p1;p1=p1->next; p1->next=p0; p0->next=NULL; n=n+1;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

30、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; /*交換前

31、后結(jié)點(diǎn)中的語(yǔ)文成績(jī),使之與學(xué)號(hào)相匹配*/ fen=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&quo

32、t;,n); return(head);/*=查詢數(shù)據(jù)=*/*函數(shù)search,功能:查詢學(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é)

33、t|英語(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"); e

34、lse printf("%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",&

35、;number); 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指向的不是所要找的首結(jié)點(diǎn),并且后面還有結(jié)點(diǎn)*/ p2=p1;p1=p1->next; /*p1后移一個(gè)結(jié)點(diǎn)*/ if(number=p1->number) /*如果找到了*/ if(p1=head) head=p1->

36、next; /*若p1指向的是首結(jié)點(diǎn),把地二個(gè)結(jié)點(diǎn)地址賦予head*/ else p2->next=p1->next; /*否則將下一個(gè)結(jié)點(diǎn)地址 賦給前一結(jié)點(diǎn)地址*/ 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&

37、quot;);#endifprintf("現(xiàn)在的學(xué)生數(shù)為:%d個(gè)!n",n); return(head);/*=排序=*/*定義排序函數(shù)。此函數(shù)帶回一個(gè)指向鏈表頭的指針*/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

38、("1按學(xué)生學(xué)號(hào)排序t2按學(xué)生排序t3按語(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-&

39、gt;number>p->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ī),使

40、之與學(xué)號(hào)相匹配*/fen=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;/*打印值排序后的鏈表容*/case 2 :for(i=1;i<n;i+)for(

41、j=i+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)值,使之與相匹配

42、*/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=head;max=hea

43、d;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; /*交換前后結(jié)點(diǎn)中的學(xué)號(hào),使之

44、與語(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=fen; /*交換前后結(jié)點(diǎn)中的英語(yǔ)成績(jī),使之

45、與語(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;max->number=p->nu

46、mber;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->english=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)中的英

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論