C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc_第1頁(yè)
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc_第2頁(yè)
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc_第3頁(yè)
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc_第4頁(yè)
C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc_第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)介

計(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ù)外三門(mén)課程成績(jī)的錄入與保存。1、 設(shè)計(jì)目的 本程序旨在訓(xùn)練讀者的基本編程能力,了解管理信息系統(tǒng)開(kāi)發(fā)流程,熟悉C語(yǔ)言的各種語(yǔ)法、編寫(xiě)流程、以及能夠熟練運(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) 根據(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類(lèi)型的變量接受從用戶輸入的選項(xiàng),最后將其return至主函數(shù)。score *creatlink()函數(shù):創(chuàng)建鏈表主要實(shí)現(xiàn)流程如下:print()函數(shù):先令P=head,使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ò)程如圖:save()函數(shù):用來(lái)保存數(shù)據(jù),首先從用戶輸入取得要保存的文件名,然后定義一個(gè)指向文件的指針,以讀寫(xiě)方式打開(kāi)文件。將寫(xiě)生信息依次存入文件。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)、姓名(name10)、語(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ù)顯示主菜單內(nèi)容,需要一個(gè)int類(lèi)型變量作為輸入要執(zhí)行的選項(xiàng)并返回給main()函數(shù)。score *creatlink()函數(shù):此函數(shù)用于創(chuàng)建鏈表,為了節(jié)省內(nèi)存空間,我們采用malloc()函數(shù)為結(jié)構(gòu)體分配動(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ù):按照學(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è)地向后面指,直到NULL為止。函數(shù)內(nèi)部定義一個(gè)指向文件的指針*fp,用于寫(xiě)入文件。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)4.1源代碼#include #include #include#include #define LEN sizeof(struct scorenode)#define DEBUG/*=數(shù)據(jù)結(jié)構(gòu)=*/struct 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()score*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-numbernumber);/輸入學(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(n0)for(i=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)輸入語(yǔ)文成績(jī)(0100):); /*輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/scanf(%f,&p1-chinese);while(p1-chinesechinese100)getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī)); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/ scanf(%f,&p1-chinese); printf(請(qǐng)輸入數(shù)學(xué)成績(jī)(0100):); /*輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/ scanf(%f,&p1-mathmatic); while(p1-mathmaticmathmatic100) getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)); /*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/scanf(%f,&p1-mathmatic); printf(請(qǐng)輸入英語(yǔ)成績(jī)(0100):); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/ scanf(%f,&p1-english); while(p1-englishenglish100)getchar(); printf(輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī)); scanf(%f,&p1-english); /*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/head=NULL;while(p1-number!=0)n=n+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-numbernumber); /*輸入學(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(n0)for(i=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)輸入語(yǔ)文成績(jī)(0100):);scanf(%f,&p1-chinese); /*輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/while(p1-chinesechinese100)getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī));scanf(%f,&p1-chinese); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/printf(請(qǐng)輸入數(shù)學(xué)成績(jī)(0100):);scanf(%f,&p1-mathmatic); /*輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/while(p1-mathmaticmathmatic100)getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī));scanf(%f,&p1-mathmatic); /*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/printf(請(qǐng)輸入英語(yǔ)成績(jī)(0100):);scanf(%f,&p1-english); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/while(p1-englishenglish100)getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入英語(yǔ)成績(jī));scanf(%f,&p1-english); /*輸入錯(cuò)誤,重新輸入英語(yǔ)成績(jī)直到正確為止*/end:p1=head;p3=p1;for(i=1;in;i+)for(j=i+1;jnext;if(max-numberp1-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=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ù)為:%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|%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; 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-numbernumber); /*輸入錯(cuò)誤,重新輸入學(xué)號(hào)*/ if(stu-number=0) goto end2; /*當(dāng)輸入的學(xué)號(hào)為0時(shí),轉(zhuǎn)到末尾,結(jié)束追加*/ else p3=head; if(n0) for(i=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)輸入語(yǔ)文成績(jī)(0100):); scanf(%f,&stu-chinese); /*輸入語(yǔ)文成績(jī),成績(jī)應(yīng)在0-100*/ while(stu-chinesechinese100) getchar(); printf(輸入錯(cuò)誤,請(qǐng)重新輸入語(yǔ)文成績(jī)); scanf(%f,&stu-chinese); /*輸入錯(cuò)誤,重新輸入語(yǔ)文成績(jī)直到正確為止*/ printf(請(qǐng)輸入數(shù)學(xué)成績(jī)(0100):); scanf(%f,&stu-mathmatic); /*輸入數(shù)學(xué)成績(jī),成績(jī)應(yīng)在0-100*/ while(stu-mathmaticmathmatic100) getchar();printf(輸入錯(cuò)誤,請(qǐng)重新輸入數(shù)學(xué)成績(jī)); scanf(%f,&stu-mathmatic); /*輸入錯(cuò)誤,重新輸入數(shù)學(xué)成績(jī)直到正確為止*/printf(請(qǐng)輸入英語(yǔ)成績(jī)(0100):);scanf(%f,&stu-english); /*輸入英語(yǔ)成績(jī),成績(jī)應(yīng)在0-100*/while(stu-englishenglish100)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)始存放資料*/ 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;in;i+) for(j=i+1;jnext; if(max-numberp1-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=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,功能:查詢學(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|英語(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); else 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,&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-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);#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;i80;i+)printf(*);printf(1按學(xué)生學(xué)號(hào)排序t2按學(xué)生姓名排序t3按語(yǔ)文成績(jī)排序n);printf(4按數(shù)學(xué)成績(jī)排序t5按英語(yǔ)成績(jī)排序tn);for(i=0;i80;i+)printf(*);printf(請(qǐng)選擇操作:);scanf(%d,&x); /*選擇操作*/getchar();switch(x) /*用switch語(yǔ)句實(shí)現(xiàn)功能選擇*/case 1 : for(i=1;in;i+)for(j=i+1;jnext;if(max-numberp-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=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;in;i+)for(j=i+1;jnext;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)值,使之與姓名相匹配*/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=head;print(head);break;case 3 :for(i=1;in;i+)for(j=i+1;jnext;if(max-chinesep-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),使之與語(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ī),使之與語(yǔ)文成績(jī)相匹配*/p=head;max=head;print(head);break;case 4 :for(i=1;in;i+)for(j=i+1;jnext;if(max-mathmaticp-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-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-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;in;i+)for(j=i+1;jnext;if(max-englishp-english)fen=max-english;max-english=p-english;p-en

溫馨提示

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