C語(yǔ)言程序設(shè)計(jì)成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁(yè)
C語(yǔ)言程序設(shè)計(jì)成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁(yè)
C語(yǔ)言程序設(shè)計(jì)成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁(yè)
C語(yǔ)言程序設(shè)計(jì)成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁(yè)
C語(yǔ)言程序設(shè)計(jì)成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩29頁(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、北京航空航天大學(xué)北海學(xué)院實(shí)驗(yàn)報(bào)告學(xué) 院: 軟件與信息工程學(xué)院 專業(yè)班級(jí): 軟件工程3班 課 程:學(xué)生成績(jī)管理系統(tǒng)程序設(shè)計(jì)實(shí)踐 指導(dǎo)老師: 學(xué)號(hào)及姓名:一實(shí)驗(yàn)?zāi)康模?通過(guò)課程設(shè)計(jì),提高自己動(dòng)手的能力,讓實(shí)踐和理論相結(jié)合,進(jìn)一步鞏固語(yǔ)言程序設(shè)計(jì)的課程內(nèi)容,掌握工程軟件的基本設(shè)計(jì)方法。 學(xué)會(huì)將知識(shí)應(yīng)用于實(shí)踐,提高分析和解決問(wèn)題的能力,加強(qiáng)綜合能力。 為以后計(jì)算機(jī)的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ),有利于畢業(yè)時(shí)做畢業(yè)設(shè)計(jì)。二實(shí)驗(yàn)內(nèi)容: 運(yùn)用結(jié)構(gòu)體和共用體,以及單鏈表和循環(huán)的知識(shí)點(diǎn)編輯一個(gè)簡(jiǎn)單的學(xué)生基本信息管理系統(tǒng),使之能夠完成學(xué)生基本信息的錄入、修改、插入、查詢、排序、打印、退出操作。 執(zhí)行編譯操作,并根據(jù)提示調(diào)試

2、此程序,排除所有的錯(cuò)誤和警告。直到編譯成功為止。 執(zhí)行運(yùn)行操作,直到全部程序能夠運(yùn)行成功為止。 做完后請(qǐng)老師檢查,并能回答老師所提的相關(guān)問(wèn)題。三. 需求分析:1. 該學(xué)生信息管理系統(tǒng)能夠完成基本的信息處理,如錄入,保存,讀取,輸出,修改,刪除,添加,統(tǒng)計(jì),排序等項(xiàng)目操作。實(shí)現(xiàn)統(tǒng)計(jì)用戶的總分和平均分。能夠查看單個(gè)用戶的各科成績(jī)2. 每個(gè)模塊的功能如下:a) 錄入模塊:可先后輸入學(xué)號(hào),姓名,高數(shù)成績(jī),計(jì)算機(jī)成績(jī),英語(yǔ)成績(jī);b) 保存模塊:用于數(shù)據(jù)存盤處理,如果用戶沒(méi)有專門進(jìn)行此操作且對(duì)數(shù) 據(jù)有修改,在退出時(shí)系統(tǒng)會(huì)提示用戶存盤。c) 查詢模塊:用于按編號(hào)或姓名來(lái)查詢用戶記錄d) 輸出模塊:可輸出讀取

3、的學(xué)生信息與平均成績(jī);e) 修改模塊: 用于修改用戶記錄。先按輸入的編號(hào)查詢到該記錄,然后提示用戶修改編號(hào)之外的值,但是編號(hào)不能修改;f) 刪除模塊:可刪除所讀取的學(xué)生信息;g) 插入模塊:用于插入記錄。即按編號(hào)查詢到要插入的結(jié)點(diǎn)的位置,然后在該編號(hào)之后插入一個(gè)新結(jié)點(diǎn);h) 排序模塊:利用插入排序?qū)崿F(xiàn)單鏈表的按總分字段的降序排序,格式是從高到低;i) 統(tǒng)計(jì)模塊:用于分別統(tǒng)計(jì)該班的總分第一名和單科第一及各科不及格的人數(shù);j) 退出模塊:可直接退出學(xué)生信息管理系統(tǒng); 該學(xué)生信息管理系統(tǒng)是在vc+的環(huán)境下運(yùn)行的。該信息系統(tǒng)要測(cè)試的數(shù)據(jù)如下: 錄入模塊:學(xué)號(hào) 姓名 高數(shù) 英語(yǔ) 計(jì)算機(jī) 1 xxx 99

4、 80 99 2 xxx 99 89 89 3 xx 67 70 58 4 xxx 78 67 78 保存模塊:輸入文件名即可保存于該文件; 查詢模塊:輸入相應(yīng)的文件名可調(diào)出相應(yīng)的學(xué)生信息; 輸出模塊:可輸出錄入,修改,刪除,添加后的學(xué)生信息; 修改模塊: 修改信息( 3 xx 67 70 58 ) 刪除模塊:刪除信息( 2 xx 99 89 89) 添加模塊:添加信息(5 xxx 78 87 89) 排序模塊:按平均成績(jī)由小到大排列并輸出,如下:學(xué)號(hào) 姓名 高數(shù) 英語(yǔ) 計(jì)算機(jī) 平均成績(jī) 3 xx 67 70 58 65.000000 4 xxx 78 67 78 74.000000 5 xx

5、x 78 87 89 84.000000 1 xxx 99 80 99 92.000000 統(tǒng)計(jì)模塊:統(tǒng)計(jì)該班的總分第一名和單科第一及各科不及格的人數(shù),如下: 退出模塊:輸入 0 即可退出系統(tǒng);四 . 概要設(shè)計(jì): 主函數(shù)結(jié)構(gòu)圖:錄 入插 入輸 出修 改刪 除保 存排 序退 出刪 除統(tǒng) 計(jì) 模塊功能詳細(xì)說(shuō)明;a. 錄入模塊: 錄入基本信息;b. 保存模塊:輸入文件名即可保存于該文件;c. 讀取模塊:輸入相應(yīng)的文件名可調(diào)出相應(yīng)的學(xué)生信息;d. 輸出模塊:可輸出錄入,修改,刪除,添加后的學(xué)生 信息;e. 修改模塊: 修改學(xué)生信息;f. 刪除模塊:只要輸入要?jiǎng)h除的學(xué)生學(xué)號(hào),就可刪除該學(xué)生的有關(guān)信息,以

6、后輸出時(shí)就不再顯示該學(xué)生的信息;g. 添加模塊:添加學(xué)生信息;h. 統(tǒng)計(jì)(排序)模塊:按平均成績(jī)由小到大排列并輸出;i. 退出模塊:推出系統(tǒng);五、詳細(xì)設(shè)計(jì)及運(yùn)行結(jié)果流程圖, 函數(shù)之間相互調(diào)用的圖示 ,程序設(shè)計(jì)及編碼, 運(yùn)行結(jié)果。 各模塊的程序控制圖:保 存 模 塊保存基本信息并輸入保存的文件名結(jié) 束yn錄 入 模 塊是 否 繼 續(xù) 錄 入錄入基本信息結(jié) 束yn讀 取 模 塊是 否 讀 取輸入保存的文件名,即可結(jié) 束yn查 詢 模 塊輸出所錄入的學(xué)生成績(jī)信息結(jié) 束修 改 模 塊是 否 修 改輸入要修改的學(xué)號(hào)結(jié) 束yn英語(yǔ)數(shù)學(xué)平均成績(jī)c語(yǔ)言姓名刪 除 模 塊輸入刪除學(xué)號(hào)結(jié) 束yn是 否 刪 除添

7、加 模 塊是 否 繼 續(xù) 添 加輸入添加信息結(jié) 束yn統(tǒng) 計(jì) 模 塊按學(xué)生成績(jī)由低到高排列結(jié) 束 函數(shù)之間相互調(diào)用的圖示:主函數(shù)調(diào) 用 錄 入函 數(shù)調(diào) 用 保 存 函 數(shù)調(diào) 用 查 詢 函 數(shù)調(diào) 用 修 改 函 數(shù)調(diào) 用 刪 除 函 數(shù) 調(diào)用輸出函數(shù)結(jié)束結(jié)束結(jié)束結(jié)束結(jié)束調(diào) 用 排 序 函 數(shù) 結(jié)束調(diào) 用 讀 取 模 塊調(diào) 用 保 存 函 數(shù)調(diào) 用 保 存 函 數(shù)調(diào) 用 添 加 函 數(shù)調(diào) 用 保 存 函 數(shù)調(diào) 用 查 找 函 數(shù)結(jié)束結(jié)束調(diào)用輸出函數(shù)、(3)各模塊流程圖 結(jié) 束 y否開(kāi) 始head-next=null;p2=head;繼續(xù)輸入(y/n)? p2-next=p1;p2=p1;ny錄入

8、模塊輸入學(xué)生成績(jī)信息 return head返回return headp-next=head-next;head-next=p;真q=q-nextq-next!=null開(kāi)始輸入新增學(xué)生信息申請(qǐng)結(jié)點(diǎn)p=headhead=null假假查詢學(xué)生信息:真假真flag!=0head=null無(wú)學(xué)生信息開(kāi)始退出按學(xué)號(hào)查詢按姓名查詢2number=2number=1number=0switch(number)開(kāi)始p1=head輸入學(xué)生學(xué)號(hào)xx!=p1-num&p1-next!=nullp1=p1-next返回主菜單輸出無(wú)信息輸出學(xué)生信息x=p1-num真真學(xué)生信息的刪除:nn無(wú)此學(xué)生信息輸出學(xué)生總?cè)藬?shù)su

9、m-p2-next=p1-next;free(p1)head=p1-next;free(p1)p1=headynumber=p1-numnp2=p1;p1=p1-nexty開(kāi)始輸入要?jiǎng)h除學(xué)生的學(xué)號(hào)numberhead=nullnp1=headnumber!=p1-num&p1-next!=null 測(cè)試與行結(jié)果a錄入模塊:b刪除模塊:c查詢模塊:d修改模塊:e插入模塊:f統(tǒng)計(jì)模塊:g排序模塊:h保存模塊:源代碼:/*對(duì)用戶的有效信息進(jìn)行輸入、排序等操作實(shí)現(xiàn)統(tǒng)計(jì)用戶的總分和平均分能夠查看單個(gè)用戶的各科成績(jī)*/#include stdio.h /*標(biāo)準(zhǔn)輸入輸出函數(shù)庫(kù)*/#include stdli

10、b.h /*標(biāo)準(zhǔn)函數(shù)庫(kù)*/#include string.h /*字符串函數(shù)庫(kù)*/#include conio.h /*屏幕操作函數(shù)庫(kù)*/#define header1 (#) -student-() n#define header4 w e l c o m e b a b y ! n#define header2 | number | name |eng|math|comp | sum | ave |mici | n#define header3 |-|-|-|-|-|-|-|-| #define format | %-10s |%-15s|%4d|%4d|%4d| %4d | %.2f |

11、%4d |n#define data p-data.num,,p-data.egrade,p-data.mgrade,p-data.cgrade,p-data.total,p-data.ave,p-data.mingci#define end - nint saveflag=0; /*是否需要存盤的標(biāo)志變量*/*定義與學(xué)生有關(guān)的數(shù)據(jù)結(jié)構(gòu)*/typedef struct student /*標(biāo)記為student*/char num10; /*學(xué)號(hào)*/char name15; /*姓名*/int cgrade; /*c語(yǔ)言成績(jī)*/int mgrade; /*數(shù)學(xué)成績(jī)*/int

12、 egrade; /*英語(yǔ)成績(jī)*/int total; /*總分*/float ave; /*平均分*/int mingci; /*名次*/;/*定義每條記錄或結(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu),標(biāo)記為:node*/typedef struct nodestruct student data; /*數(shù)據(jù)域*/struct node *next; /*指針域*/node,*link; /*node為node類型的結(jié)構(gòu)變量,*link為node類型的指針變量*/void menu() /*主菜單*/system(cls); /*調(diào)用dos命令,清屏.與clrscr()功能相同*/ /*在文本模式中選擇新的字符顏色*/

13、 /*在文本窗口中設(shè)置光標(biāo)*/printf( the students grade management system nn);printf( *_ 為您服務(wù)是俺的榮幸!_* nn);printf( _ 菜單_ nnn);printf( * 1 input (_o not find this student!n);void disp(link l) /*顯示單鏈表l中存儲(chǔ)的學(xué)生記錄,內(nèi)容為student結(jié)構(gòu)中定義的內(nèi)容*/node *p;p=l-next; /*l存儲(chǔ)的是單鏈表中頭結(jié)點(diǎn)的指針,該頭結(jié)點(diǎn)沒(méi)有存儲(chǔ)學(xué)生信息,指針域指向的后繼結(jié)點(diǎn)才有學(xué)生信息*/if(!p) /*p=null,null

14、在stdlib中定義為*/ printf(n= not student record!n); getchar(); return;printf(nn);printheader(); /*輸出表格頭部*/while(p) /*逐條輸出鏈表中存儲(chǔ)的學(xué)生信息*/ printdata(p); p=p-next; /*移動(dòng)至下一個(gè)結(jié)點(diǎn)*/ printf(header3);getchar();node* locate(link l,char findmess,char nameornum)node *r;if(strcmp(nameornum,num)=0) /*按學(xué)號(hào)查詢*/ r=l-next; whi

15、le(r) if(strcmp(r-data.num,findmess)=0) /*若找到findmess值的學(xué)號(hào)*/ return r; r=r-next; else if(strcmp(nameornum,name)=0) /*按姓名查詢*/ r=l-next; while(r) if(strcmp(,findmess)=0) /*若找到findmess值的學(xué)生姓名*/ return r; r=r-next; return 0; /*若未找到,返回一個(gè)空指針*/*輸入字符串,并進(jìn)行長(zhǎng)度驗(yàn)證(長(zhǎng)度lens)printf(n exceed the required len

16、gth! n); /*進(jìn)行長(zhǎng)度校驗(yàn),超過(guò)lens值重新輸入*/ while(strlen(n)lens); strcpy(t,n); /*將輸入的字符串拷貝到字符串t中*/*輸入分?jǐn)?shù),分?jǐn)?shù)100 | t100 | tnext;system(cls);disp(l); /*先打印出已有的學(xué)生信息*/while(r-next!=null) r=r-next; /*將指針移至于鏈表最末尾,準(zhǔn)備添加記錄*/while(1) /*一次可輸入多條記錄,直至輸入學(xué)號(hào)為的記錄結(jié)點(diǎn)添加操作*/ while(1) /*輸入學(xué)號(hào),保證該學(xué)號(hào)沒(méi)有被使用,若輸入學(xué)號(hào)為,則退出添加記錄操作*/ stringinput(n

17、um,10,input number(press 0return menu):); /*格式化輸入學(xué)號(hào)并檢驗(yàn)*/ flag=0; if(strcmp(num,0)=0) /*輸入為,則退出添加操作,返回主界面*/ return; s=l-next; while(s) /*查詢?cè)搶W(xué)號(hào)是否已經(jīng)存在,若存在則要求重新輸入一個(gè)未被占用的學(xué)號(hào)*/ if(strcmp(s-data.num,num)=0) flag=1; break; s=s-next; if(flag=1) /*提示用戶是否重新輸入*/ getchar(); printf(=the number %s is not existing,t

18、ry again?(y/n):,num); scanf(%c,&ch); if(ch=y|ch=y) continue; else return; else break; p=(node *)malloc(sizeof(node); /*申請(qǐng)內(nèi)存空間*/ if(!p) printf(n allocate memory failure ); /*如沒(méi)有申請(qǐng)到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p-data.num,num); /*將字符串num拷貝到p-data.num中*/ stringinput(,15,name:); p-data.

19、cgrade=numberinput(c language score0-100:); /*輸入并檢驗(yàn)分?jǐn)?shù),分?jǐn)?shù)必須在之間*/ p-data.mgrade=numberinput(math score0-100:); /*輸入并檢驗(yàn)分?jǐn)?shù),分?jǐn)?shù)必須在之間*/ p-data.egrade=numberinput(english score0-100:); /*輸入并檢驗(yàn)分?jǐn)?shù),分?jǐn)?shù)必須在之間*/ p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade; /*計(jì)算總分*/ p-data.ave=(float)(p-data.total/3); /*

20、計(jì)算平均分*/ p-data.mingci=0; p-next=null; /*表明這是鏈表的尾部結(jié)點(diǎn)*/ r-next=p; /*將新建的結(jié)點(diǎn)加入鏈表尾部中*/ r=p; saveflag=1; return ;void qur(link l) /*按學(xué)號(hào)或姓名,查詢學(xué)生記錄*/int select; /*1:按學(xué)號(hào)查,:按姓名查,其他:返回主界面(菜單)*/char searchinput20; /*保存用戶輸入的查詢內(nèi)容*/node *p;if(!l-next) /*若鏈表為空*/ system(cls); printf(n=no student record!n); getchar()

21、; return;system(cls);printf(n =1 search by number =2 search by namen);printf( please choice1,2:);scanf(%d,&select);if(select=1) /*按學(xué)號(hào)查詢*/ stringinput(searchinput,10,input the existing student number:); p=locate(l,searchinput,num);/*在l中查找學(xué)號(hào)為searchinput值的節(jié)點(diǎn),并返回節(jié)點(diǎn)的指針*/ if(p) /*若p!=null*/ printheader();

22、 printdata(p); printf(end); printf(press any key to return); getchar(); else nofind(); getchar();else if(select=2) /*按姓名查詢*/ stringinput(searchinput,15,input the existing student name:); p=locate(l,searchinput,name); if(p) printheader(); printdata(p); printf(end); printf(press any key to return); ge

23、tchar(); else nofind(); getchar();else wrong(); getchar(); /*刪除學(xué)生記錄:先找到保存該學(xué)生記錄的節(jié)點(diǎn),然后刪除該節(jié)點(diǎn)*/void del(link l)int sel;node *p,*r;char findmess20;if(!l-next) system(cls); printf(n=no student record!n); getchar(); return;system(cls);disp(l);printf(n =1 delete by number =2 delete by namen);printf( please

24、choice1,2:);scanf(%d,&sel);if(sel=1) stringinput(findmess,10,input the existing student number:); p=locate(l,findmess,num); if(p) /*p!=null*/ r=l; while(r-next!=p) r=r-next; r-next=p-next;/*將p所指節(jié)點(diǎn)從鏈表中去除*/ free(p); /*釋放內(nèi)存空間*/ printf(n=delete success!n); getchar(); saveflag=1; else nofind(); getchar()

25、;else if(sel=2) /*先按姓名查詢到該記錄所在的節(jié)點(diǎn)*/ stringinput(findmess,15,input the existing student name); p=locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=delete success!n); getchar(); saveflag=1; else nofind(); getchar();else wrong(); getchar();/*修改學(xué)生記錄。先按輸入的學(xué)號(hào)查

26、詢到該記錄,然后提示用戶修改學(xué)號(hào)之外的值,學(xué)號(hào)不能修改*/void modify(link l)node *p;char findmess20;if(!l-next) system(cls); printf(n=no student record!n); getchar(); return;system(cls);printf(modify student recorder);disp(l);stringinput(findmess,10,input the existing student number:); /*輸入并檢驗(yàn)該學(xué)號(hào)*/p=locate(l,findmess,num); /*查

27、詢到該節(jié)點(diǎn)*/if(p) /*若p!=null,表明已經(jīng)找到該節(jié)點(diǎn)*/ printf(number:%s,n,p-data.num); printf(name:%s,); stringinput(,15,input new name:); printf(c language score:%d,p-data.cgrade); p-data.cgrade=numberinput(c language score0-100:); printf(math score:%d,p-data.mgrade); p-data.mgrade=numberinput(m

28、ath score0-100:); printf(english score:%d,p-data.egrade); p-data.egrade=numberinput(english score0-100:); p-data.total=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=(float)(p-data.total/3); p-data.mingci=0; printf(n=modify success!n); disp(l); saveflag=1;else nofind(); getchar();/*插入記錄:按學(xué)號(hào)查詢

29、到要插入的節(jié)點(diǎn)的位置,然后在該學(xué)號(hào)之后插入一個(gè)新節(jié)點(diǎn)。*/void insert(link l) link p,v,newinfo; /*p指向插入位置,newinfo指新插入記錄*/ char ch,num10,s10; /*s保存插入點(diǎn)位置之前的學(xué)號(hào),num保存輸入的新記錄的學(xué)號(hào)*/ int flag=0; v=l-next; system(cls); disp(l); while(1) stringinput(s,10,please input insert location after the number:); flag=0;v=l-next; while(v) /*查詢?cè)搶W(xué)號(hào)是否存

30、在,flag=1表示該學(xué)號(hào)存在*/ if(strcmp(v-data.num,s)=0) flag=1;break; v=v-next; if(flag=1) break; /*若學(xué)號(hào)存在,則進(jìn)行插入之前的新記錄的輸入操作*/ else getchar(); printf(n=the number %s is not existing,try again?(y/n):,s); scanf(%c,&ch); if(ch=y|ch=y) continue; else return; /*以下新記錄的輸入操作與add()相同*/ stringinput(num,10,input new studen

31、t number:); v=l-next; while(v) if(strcmp(v-data.num,num)=0) printf(=sorry,the new number:%s is existing !n,num); printheader(); printdata(v); printf(n); getchar(); return; v=v-next; newinfo=(node *)malloc(sizeof(node); if(!newinfo) printf(n allocate memory failure ); /*如沒(méi)有申請(qǐng)到,打印提示信息*/ return ; /*返回主

32、界面*/ strcpy(newinfo-data.num,num); stringinput(,15,name:); newinfo-data.cgrade=numberinput(c language score0-100:); newinfo-data.mgrade=numberinput(math score0-100:); newinfo-data.egrade=numberinput(english score0-100:); newinfo-data.total=newinfo-data.egrade+newinfo-data.cgrade+new

33、info-data.mgrade; newinfo-data.ave=(float)(newinfo-data.total/3); newinfo-data.mingci=0; newinfo-next=null; saveflag=1; /*在main()有對(duì)該全局變量的判斷,若為,則進(jìn)行存盤操作*/ /*將指針賦值給p,因?yàn)閘中的頭節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)才實(shí)際保存著學(xué)生的記錄*/ p=l-next; while(1) if(strcmp(p-data.num,s)=0) /*在鏈表中插入一個(gè)節(jié)點(diǎn)*/ newinfo-next=p-next; p-next=newinfo; break; p=p-

34、next; disp(l); printf(nn); getchar();/*統(tǒng)計(jì)該班的總分第一名和單科第一,和各科不及格人數(shù)*/void tongji(link l)node *pm,*pe,*pc,*pt; /*用于指向分?jǐn)?shù)最高的節(jié)點(diǎn)*/node *r=l-next;int countc=0,countm=0,counte=0; /*保存三門成績(jī)中不及格的人數(shù)*/if(!r) system(cls); printf(n=not student record!n); getchar(); return ;system(cls);disp(l);pm=pe=pc=pt=r;while(r) i

35、f(r-data.cgradedata.mgradedata.egradedata.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.total=pt-data.total) pt=r; r=r-next;printf(n-the tongji result-n);printf(c language60:%d (ren)n,countc);printf(math 60:%d (ren)n,countm);prin

36、tf(english ,pt-data.total);printf(the highest student by english score name:%s totoal score:%dn,,pe-data.egrade);printf(the highest student by math score name:%s totoal score:%dn,,pm-data.mgrade);printf(the highest student by c score name:%s totoal score:%dn,pc-data.

37、name,pc-data.cgrade);printf(nnpress any key to return);getchar();/*利用插入排序法實(shí)現(xiàn)單鏈表的按總分字段的降序排序,從高到低*/void sort(link l)link ll;node *p,*rr,*s;int i=0;if(l-next=null) system(cls); printf(n=not student record!n); getchar(); return ;ll=(node*)malloc(sizeof(node); /*用于創(chuàng)建新的節(jié)點(diǎn)*/if(!ll) printf(n allocate memory

38、 failure ); /*如沒(méi)有申請(qǐng)到,打印提示信息*/ return ; /*返回主界面*/ ll-next=null;system(cls);disp(l); /*顯示排序前的所有學(xué)生記錄*/p=l-next;while(p) /*p!=null*/ s=(node*)malloc(sizeof(node); /*新建節(jié)點(diǎn)用于保存從原鏈表中取出的節(jié)點(diǎn)信息*/ if(!s) /*s=null*/ printf(n allocate memory failure ); /*如沒(méi)有申請(qǐng)到,打印提示信息*/ return ; /*返回主界面*/ s-data=p-data; /*填數(shù)據(jù)域*/ s

39、-next=null; /*指針域?yàn)榭?/ rr=ll; /*rr鏈表于存儲(chǔ)插入單個(gè)節(jié)點(diǎn)后保持排序的鏈表,ll是這個(gè)鏈表的頭指針,每次從頭開(kāi)始查找插入位置*/ while(rr-next!=null & rr-next-data.total=p-data.total) rr=rr-next; /*指針移至總分比p所指的節(jié)點(diǎn)的總分小的節(jié)點(diǎn)位置*/ if(rr-next=null)/*若新鏈表ll中的所有節(jié)點(diǎn)的總分值都比p-data.total大時(shí),就將p所指節(jié)點(diǎn)加入鏈表尾部*/ rr-next=s; else /*否則將該節(jié)點(diǎn)插入至第一個(gè)總分字段比它小的節(jié)點(diǎn)的前面*/ s-next=rr-nex

40、t; rr-next=s; p=p-next; /*原鏈表中的指針下移一個(gè)節(jié)點(diǎn)*/ l-next=ll-next; /*ll中存儲(chǔ)是的已排序的鏈表的頭指針*/ p=l-next; /*已排好序的頭指針賦給p,準(zhǔn)備填寫名次*/ while(p!=null) /*當(dāng)p不為空時(shí),進(jìn)行下列操作*/ i+; /*結(jié)點(diǎn)序號(hào)*/ p-data.mingci=i; /*將名次賦值*/ p=p-next; /*指針后移*/ disp(l);saveflag=1;printf(n =sort complete!n);/*數(shù)據(jù)存盤,若用戶沒(méi)有專門進(jìn)行此操作且對(duì)數(shù)據(jù)有修改,在退出系統(tǒng)時(shí),會(huì)提示用戶存盤*/void save(link l)file* fp;node *p;int count=0;fp=fopen(c:student,wb);/*以只寫方式打開(kāi)二進(jìn)制文件*/if(fp=null) /*打開(kāi)文件失敗*/ printf(n=open file error!n); getchar(); return ;p=l-next;while(p

溫馨提示

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