C語言程序設(shè)計(jì)-成績管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第1頁
C語言程序設(shè)計(jì)-成績管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第2頁
C語言程序設(shè)計(jì)-成績管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第3頁
C語言程序設(shè)計(jì)-成績管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第4頁
C語言程序設(shè)計(jì)-成績管理系統(tǒng)程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、北京航空航天大學(xué)北海學(xué)院實(shí)驗(yàn)報(bào)告學(xué) 院: 軟件與信息工程學(xué)院 專業(yè)班級: 軟件工程3班 課 程:學(xué)生成績管理系統(tǒng)程序設(shè)計(jì)實(shí)踐 指導(dǎo)老師: 學(xué)號及姓名:一實(shí)驗(yàn)?zāi)康模?通過課程設(shè)計(jì),提高自己動(dòng)手的能力,讓實(shí)踐和理論相結(jié)合,進(jìn)一步鞏固語言程序設(shè)計(jì)的課程內(nèi)容,掌握工程軟件的基本設(shè)計(jì)方法。 學(xué)會將知識應(yīng)用于實(shí)踐,提高分析和解決問題的能力,加強(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)的知識點(diǎn)編輯一個(gè)簡單的學(xué)生基本信息管理系統(tǒng),使之能夠完成學(xué)生基本信息的錄入、修改、插入、查詢、排序、打印、退出操作。 執(zhí)行編譯操作,并根據(jù)提示調(diào)試

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

3、的學(xué)生信息與平均成績;e) 修改模塊: 用于修改用戶記錄。先按輸入的編號查詢到該記錄,然后提示用戶修改編號之外的值,但是編號不能修改;f) 刪除模塊:可刪除所讀取的學(xué)生信息;g) 插入模塊:用于插入記錄。即按編號查詢到要插入的結(jié)點(diǎn)的位置,然后在該編號之后插入一個(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)要測試的數(shù)據(jù)如下: 錄入模塊:學(xué)號 姓名 高數(shù) 英語 計(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) 排序模塊:按平均成績由小到大排列并輸出,如下:學(xué)號 姓名 高數(shù) 英語 計(jì)算機(jī) 平均成績 3 XX 67 70 58 65. 4 xxx 78 67 78 74. 5 XXX 78 87 89 8

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

6、添加學(xué)生信息;H. 統(tǒng)計(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é)生成績信息結(jié) 束修 改 模 塊是 否 修 改輸入要修改的學(xué)號結(jié) 束YN英語數(shù)學(xué)平均成績C語言姓名刪 除 模 塊輸入刪除學(xué)號結(jié) 束YN是 否 刪 除添 加 模 塊是 否 繼 續(xù) 添 加輸入添加信息結(jié)

7、束YN統(tǒng) 計(jì) 模 塊按學(xué)生成績由低到高排列結(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否開 始head-next=NULL;p2=head;繼續(xù)輸入(Y/N)? p2-next=p1;p2=p1;NY錄入模塊輸入學(xué)生成績信息 return head返回

8、return headp-next=head-next;head-next=p;真q=q-nextq-next!=NULL開始輸入新增學(xué)生信息申請結(jié)點(diǎn)p=headhead=NULL假假查詢學(xué)生信息:真假真Flag!=0Head=NULL無學(xué)生信息開始退出按學(xué)號查詢按姓名查詢2Number=2Number=1Number=0Switch(number)開始p1=head輸入學(xué)生學(xué)號xx!=p1-num&p1-next!=NULLp1=p1-next返回主菜單輸出無信息輸出學(xué)生信息x=p1-num真真學(xué)生信息的刪除:NN無此學(xué)生信息輸出學(xué)生總?cè)藬?shù)sum-p2-next=p1-next;free(p

9、1)head=p1-next;free(p1)p1=headYnumber=p1-numNP2=p1;p1=p1-nextY開始輸入要?jiǎng)h除學(xué)生的學(xué)號numberhead=NULLNp1=headNumber!=p1-num&p1-next!=NULL 測試與行結(jié)果A錄入模塊:B刪除模塊:C查詢模塊:D修改模塊:E插入模塊:F統(tǒng)計(jì)模塊:G排序模塊:H保存模塊:源代碼:/*對用戶的有效信息進(jìn)行輸入、排序等操作實(shí)現(xiàn)統(tǒng)計(jì)用戶的總分和平均分能夠查看單個(gè)用戶的各科成績*/#include stdio.h /*標(biāo)準(zhǔn)輸入輸出函數(shù)庫*/#include stdlib.h /*標(biāo)準(zhǔn)函數(shù)庫*/#include st

10、ring.h /*字符串函數(shù)庫*/#include conio.h /*屏幕操作函數(shù)庫*/#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 |%4d |n#define DATA p-dat

11、a.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é)號*/char name15; /*姓名*/int cgrade; /*C語言成績*/int mgrade; /*數(shù)學(xué)成績*/int egrade; /*英語成績*/int tot

12、al; /*總分*/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()功能相同*/ /*在文本模式中選擇新的字符顏色*/ /*在文本窗口中設(shè)置光標(biāo)*/printf( T

13、he Students Grade Management System nn);printf( *_ 為您服務(wù)是俺的榮幸!_* nn);printf( _ 菜單_ nnn);printf( * 1 input (_O Not find this student!n);void Disp(Link l) /*顯示單鏈表l中存儲的學(xué)生記錄,內(nèi)容為student結(jié)構(gòu)中定義的內(nèi)容*/Node *p;p=l-next; /*l存儲的是單鏈表中頭結(jié)點(diǎn)的指針,該頭結(jié)點(diǎn)沒有存儲學(xué)生信息,指針域指向的后繼結(jié)點(diǎn)才有學(xué)生信息*/if(!p) /*p=NULL,NUll在stdlib中定義為*/ printf(n=

14、Not student record!n); getchar(); return;printf(nn);printheader(); /*輸出表格頭部*/while(p) /*逐條輸出鏈表中存儲的學(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é)號查詢*/ r=l-next; while(r) if(strcmp(r-data.n

15、um,findmess)=0) /*若找到findmess值的學(xué)號*/ 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)行長度驗(yàn)證(長度lens)printf(n exceed the required length! n); /*進(jìn)行長度校驗(yàn),超過lens

16、值重新輸入*/ 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é)號為的記錄結(jié)點(diǎn)添加操作*/ while(1) /*輸入學(xué)號,保證該學(xué)號沒有被使用,若輸入學(xué)號為,則退出添加記錄操作*/ stringinput(num,10,input number(press

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

18、anf(%c,&ch); if(ch=y|ch=Y) continue; else return; else break; p=(Node *)malloc(sizeof(Node); /*申請內(nèi)存空間*/ if(!p) printf(n allocate memory failure ); /*如沒有申請到,打印提示信息*/ return ; /*返回主界面*/ strcpy(p-data.num,num); /*將字符串num拷貝到p-data.num中*/ stringinput(,15,Name:); p-data.cgrade=numberinput(C lan

19、guage 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); /*計(jì)算平均分*/ p-data.mingci=0;

20、 p-next=NULL; /*表明這是鏈表的尾部結(jié)點(diǎn)*/ r-next=p; /*將新建的結(jié)點(diǎn)加入鏈表尾部中*/ r=p; saveflag=1; return ;void Qur(Link l) /*按學(xué)號或姓名,查詢學(xué)生記錄*/int select; /*1:按學(xué)號查,:按姓名查,其他:返回主界面(菜單)*/char searchinput20; /*保存用戶輸入的查詢內(nèi)容*/Node *p;if(!l-next) /*若鏈表為空*/ system(cls); printf(n=No student record!n); getchar(); return;system(cls);pri

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

22、D); 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); getchar(); else Nofind();

23、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 choice1,2:);scanf(%d,&se

24、l);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();else if(sel=2) /*先按姓名查詢

25、到該記錄所在的節(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é)號查詢到該記錄,然后提示用戶修改學(xué)號之外的值,學(xué)號不

26、能修改*/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é)號*/p=Locate(l,findmess,num); /*查詢到該節(jié)點(diǎn)*/if(p) /*若p!=NULL,

27、表明已經(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(Math Score0-100:); printf

28、(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é)號查詢到要插入的節(jié)點(diǎn)的位置,然后在該學(xué)號之后插入一個(gè)新

29、節(jié)點(diǎn)。*/void Insert(Link l) Link p,v,newinfo; /*p指向插入位置,newinfo指新插入記錄*/ char ch,num10,s10; /*s保存插入點(diǎn)位置之前的學(xué)號,num保存輸入的新記錄的學(xué)號*/ 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) /*查詢該學(xué)號是否存在,flag=1表示該學(xué)號存在*/ if(str

30、cmp(v-data.num,s)=0) flag=1;break; v=v-next; if(flag=1) break; /*若學(xué)號存在,則進(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 student Number:); v=l-next; wh

31、ile(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 ); /*如沒有申請到,打印提示信息*/ return ; /*返回主界面*/ strcpy(newinfo-data

32、.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+newinfo-data.mgrade; newinf

33、o-data.ave=(float)(newinfo-data.total/3); newinfo-data.mingci=0; newinfo-next=NULL; saveflag=1; /*在main()有對該全局變量的判斷,若為,則進(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-next; Disp(l); printf(nn

34、); 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; /*保存三門成績中不及格的人數(shù)*/if(!r) system(cls); printf(n=Not student record!n); getchar(); return ;system(cls);Disp(l);pm=pe=pc=pt=r;while(r) if(r-data.cgradedata.mgra

35、dedata.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);printf(English ,pt-

36、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.cgrade);pri

37、ntf(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 failure ); /*如沒有申請到,打印提

38、示信息*/ 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 ); /*如沒有申請到,打印提示信息*/ return ; /*返回主界面*/ s-data=p-data; /*填數(shù)據(jù)域*/ s-next=NULL; /*指針域?yàn)榭?/ rr

39、=ll; /*rr鏈表于存儲插入單個(gè)節(jié)點(diǎn)后保持排序的鏈表,ll是這個(gè)鏈表的頭指針,每次從頭開始查找插入位置*/ 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-next; rr-next=s; p=p-next;

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論