歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

C語言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc

  • 資源ID:1103271       資源大小:891KB        全文頁數(shù):44頁
  • 資源格式: DOC        下載積分:18積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要18積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號(hào),方便查詢和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請(qǐng)知曉。

C語言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc

______________________________________________________________________________________________________________ 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 課程設(shè)計(jì)報(bào)告 2015— 2016學(xué)年第二學(xué)期 課程名稱 C語言程序設(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é)生語數(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) 根據(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)入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,使p指向第一個(gè)節(jié)點(diǎn),當(dāng)head=!NULL時(shí)說明沒有到鏈表尾端,那么就輸出p所指向的結(jié)構(gòu)數(shù)據(jù),然后讓p指向下一個(gè)節(jié)點(diǎn),直到發(fā)現(xiàn)p==NULL為止。而當(dāng)head==NULL說明鏈表中不存在數(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ī)排序(冒泡排序法),實(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ì) 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)、姓名(name[10])、語文、數(shù)學(xué)、英語成績(jī)(chinese、mathmatic、english)、以及指向下一個(gè)結(jié)構(gòu)體的鏈表指針(struct scorenode *next)。 3.3函數(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)體分配動(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ù):按照學(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è)地向后面指,直到NULL為止。函數(shù)內(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) 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)==========*/ struct scorenode { int number; //學(xué)生學(xué)號(hào) char name[10]; //學(xué)生姓名 float chinese; //語文成績(jī) float mathmatic; //數(shù)學(xué)成績(jī) float english; //英語成績(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 t[10]; n=0; p1=p2=p3=(score *)malloc(LEN);head=p3; //開辟一個(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)大于0 scanf("%d",&p1->number); while(p1->number<0) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入學(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ò),返回前面重新輸入*/ } } } } printf("請(qǐng)輸入學(xué)生姓名:"); scanf("%s",&p1->name); /*輸入學(xué)生姓名*/ printf("請(qǐng)輸入語文成績(jī)(0~100):"); /*輸入語文成績(jī),成績(jī)應(yīng)在0-100*/ scanf("%f",&p1->chinese); while(p1->chinese<0||p1->chinese>100) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入語文成績(jī)"); /*輸入錯(cuò)誤,重新輸入語文成績(jī)直到正確為止*/ scanf("%f",&p1->chinese); } printf("請(qǐng)輸入數(shù)學(xué)成績(jī)(0~100):"); /*輸入數(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); } printf("請(qǐng)輸入英語成績(jī)(0~100):"); /*輸入英語成績(jī),成績(jī)應(yīng)在0-100*/ scanf("%f",&p1->english); while(p1->english<0||p1->english>100) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī)"); scanf("%f",&p1->english); } /*輸入錯(cuò)誤,重新輸入英語成績(jī)直到正確為止*/ head=NULL; while(p1->number!=0) { n=n+1; if(n==1) head=p1; else p2->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->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 repeat2; /*當(dāng)輸入的學(xué)號(hào)已經(jīng)存在,程序報(bào)錯(cuò),返回前面重新輸入*/ } } } } printf("請(qǐng)輸入學(xué)生姓名:"); scanf("%s",&p1->name); /*輸入學(xué)生姓名*/ printf("請(qǐng)輸入語文成績(jī)(0~100):"); scanf("%f",&p1->chinese); /*輸入語文成績(jī),成績(jī)應(yīng)在0-100*/ while(p1->chinese<0||p1->chinese>100) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入語文成績(jī)"); scanf("%f",&p1->chinese); } /*輸入錯(cuò)誤,重新輸入語文成績(jī)直到正確為止*/ printf("請(qǐng)輸入數(shù)學(xué)成績(jī)(0~100):"); 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)輸入英語成績(jī)(0~100):"); scanf("%f",&p1->english); /*輸入英語成績(jī),成績(jī)應(yīng)在0-100*/ while(p1->english<0||p1->english>100) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī)"); scanf("%f",&p1->english); } /*輸入錯(cuò)誤,重新輸入英語成績(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->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)中的語文成績(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)中的英語成績(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沒有任何學(xué)生資料!\n");} else { printf("%d\n",n); printf("-----------------------------------------\n"); printf("|學(xué)號(hào)\t|姓名\t|語文\t|數(shù)學(xué)\t|英語\t|\n"); printf("-----------------------------------------\n"); /*打印表格域*/ p=head; do { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\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 t[10]; 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("%d",&stu->number); } /*輸入錯(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->name); /*輸入學(xué)生姓名*/ printf("請(qǐng)輸入語文成績(jī)(0~100):"); 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); } /*輸入錯(cuò)誤,重新輸入語文成績(jī)直到正確為止*/ printf("請(qǐng)輸入數(shù)學(xué)成績(jī)(0~100):"); 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)輸入英語成績(jī)(0~100):"); scanf("%f",&stu->english); /*輸入英語成績(jī),成績(jī)應(yīng)在0-100*/ while(stu->english<0||stu->english>100) { getchar(); printf("輸入錯(cuò)誤,請(qǐng)重新輸入英語成績(jī)"); scanf("%f",&stu->english); } /*輸入錯(cuò)誤,重新輸入英語成績(jī)直到正確為止*/ p1=head; p0=stu; if(head==NULL) { head=p0; p0->next=NULL; } /*當(dāng)原來鏈表為空時(shí),從首結(jié)點(diǎn)開始存放資料*/ else /*鏈表不為空*/ { if(p1->next==NULL) /*找到原來鏈表的末尾*/ { p1->next=p0; p0->next=NULL; /*將它與新開單元相連接*/ } else { while(p1->next!=NULL) /*還沒找到末尾,繼續(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->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)中的語文成績(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)中的英語成績(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沒有任何學(xué)生資料!\n");return(head);} printf("-----------------------------------------\n"); printf("|學(xué)號(hào)\t|姓名\t|語文\t|數(shù)學(xué)\t|英語\t|\n"); printf("-----------------------------------------\n"); p1=head; while(number!=p1->number&&p1->next!=NULL) {p2=p1;p1=p1->next;} if(number==p1->number) { printf("|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\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沒有任何學(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("刪除:%d\n",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"); #endif printf("現(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 t[10]; 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按語文成績(jī)排序\n"); printf("4按數(shù)學(xué)成績(jī)排序\t5按英語成績(jī)排序\t\n"); 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->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=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+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)值,使之與姓名相匹配*/ 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=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; /*交換前后結(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=fen; /*交換前后結(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; 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->english=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ī)高者移到后面的結(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->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 filepn[20];/*用來存放文件保存路徑以及文件名*/ printf("請(qǐng)輸入文件路徑及文件名:"); 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"); /*打印表格域*/ while(p1!=NULL) { fprintf(fp,"%d\t%s\t%.1f\t%.1f\t%.1f\t\n",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=0; char filename[10]; 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,"---------------------------------------

注意事項(xiàng)

本文(C語言學(xué)生成績(jī)管理系統(tǒng)設(shè)計(jì)報(bào)告.doc)為本站會(huì)員(最***)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  sobing.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!