_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/81750a08-64fb-4bda-8426-4dbde7662a0b/81750a08-64fb-4bda-8426-4dbde7662a0b1.gif)
_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/81750a08-64fb-4bda-8426-4dbde7662a0b/81750a08-64fb-4bda-8426-4dbde7662a0b2.gif)
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言課程設計報告學生成績管理系統(tǒng)姓名:_ 湯玉寶班 級:09 計算機本科 3 班學 號:50902013032指導老師:_王磊成績:_完成時間:2010-6-26完成地點:_實驗室 B523目錄第一章、設計任務分析 .1.1.1 目標.1.1.2 要求.1.1.3 學生成績管理系統(tǒng)的功能 .1.第二章、模塊設計 .2.2.1 主模塊.2.2.2 初始化模塊.2.2.3 輸入記錄. 3.2.4 從表中刪除記錄.3.2.5 顯示所有記錄 .3.2.6 按照姓名查找.3.2.7 保存記錄到文件.3.2 8 從文件中讀入記錄 .3.2.9 計算所有學生的總分和平均分 .4.2.10 插入記錄至 U
2、表中 .4.2.11 復制文件.4.2.12 排序.4.2.13 追加記錄到文件.4.2.14 索引.4.2.15 分類合計.4.第三章、主要數據結構 .5.第四章、流程圖.5.第五章、源代碼.6.第六章、測試情況.1.96.1 登陸頁面如圖 6-1 所示. 1.9.6.2 輸入學生信息數據頁面如圖 6-2 所示.1.96.3 刪除記錄頁面如圖 6-3 所示.1.9.6.4 查找全部記錄頁面如圖 6-4 所示.2.06.6 保存文件頁面如圖 6-6 所示.2.0.6.7 讀文件頁面如圖 6-7 所示. 2.0.6.8 計算總分和平均分頁面如圖 6-8 所示.2.06.9 插入記錄頁面如圖 6-
3、9 所示.2.0.6.10 復制文件如圖 6-10 所示.2.0.6.12 追加記錄頁面如圖 6-12.2.0.6.13 索引成功頁面如圖 6-13 所示.2.1.6.14 分類合計頁面如圖 6-14.2.1.第七章、小結.2.1.第一章、設計任務分析1.1目標(1)掌握和利用 C 語言進行程序設計的能力。(2)理解和運用結構化程序設計的思想和方法。(3)掌握開發(fā)一個小型實用系統(tǒng)的基本方法。(4)學會調試一個較長程序的基本方法。(5)掌握書寫程序設計開發(fā)文檔的能力(書寫課程設計報告)。1.2要求(1)用 C 語言實現系統(tǒng)。(2)利用結構體數組實現學生成績的數據結構設計。(3)系統(tǒng)具有增加、查詢
4、、插入、排序等基本功能。(4)系統(tǒng)的各個功能模塊要求用函數的形式實現。(5)完成設計任務并書寫課程設計報告。(6)將學生成績信息存在文件中。1.3學生成績管理系統(tǒng)的功能(1) 顯示系統(tǒng)菜單(2) 初始化單鏈表為空指針(3) 連續(xù)添加學生的信息,當輸入學號的第一個字符為 時結束輸入(4) 從單鏈表中刪除指定學號的學生信息(5) 顯示當前單鏈表中的所有記錄(6) 查找指定姓名的學生信息(7) 把當前單鏈表中的內容保存到指定的文件(8) 從指定文件中讀入記錄到單鏈表中(9)計算當前單鏈表中學生的總分和平均成績(10)插入一條記錄到單鏈表中(11)復制文件備份(12)按學生成績從高到低進行排序(13)
5、將當前單鏈表中的記錄追加到指定的文件中(14)按照學號從小到大的順序排序(15)按班統(tǒng)計學生成績 此題主要考察我們對結構體、指針、文件的操作,以及 C 語言算法的掌握,所以完成 此題目要求較高的設計能力,尤其是要有大局意識。如何調試程序也非常重要,通過這 個程序可學到以前調試程序沒有的經驗。菜單中的每一個選項都對應一個子程序。第二章、模塊設計將學生成績管理系統(tǒng)劃分為以下幾個模塊2.1主模塊功能:顯示系統(tǒng)菜單。使用 switch 條件語句調用主菜單函數,選擇菜單中要選擇對象來執(zhí)行不同的模塊。2.2初始化模塊功能:初始化單鏈表為空指針。用 STUDENT 指向結構體的指針,并判斷 info 指針,
6、返回空指針。2.3輸入記錄功能:連續(xù)添加學生的信息,當輸入學號的第一個字符為 時結束輸入。其中包括學生姓名、學號和課程的相關信息,用 input() 操作。2.4從表中刪除記錄功能:從單鏈表中刪除指定學號的學生信息。用 while 循環(huán)語句找到要刪除的記錄,并用 print 輸出語句提示刪除后不要忘記保存 文件。2.5顯示所有記錄功能:顯示當前單鏈表中的所有記錄。2.6按照姓名查找功能:查找指定姓名的學生信息。用 while 語句尋找所輸入姓名對應的學生記錄的信息。2.7保存記錄到文件功能:把當前單鏈表中的內容保存到指定的文件中。用 fp=fopen(outfile,wb) 輸出打開一個二進制
7、文件,如果沒有則建立,則將當前單鏈 表中的內容保存到指定的文件中。2.8.從文件中讀入記錄功能:從指定文件中讀入記錄到單鏈表中。用 fp=fopen(infile,rb) 打開一個二進制文件,為讀方式,并用 while 語句循環(huán)讀數據 直到文件結尾結束2.9計算所有學生的總分和平均分功能:計算當前單鏈表中學生的總分和平均成績。操作 while 語句循環(huán)用 s+=p-sum 累加總分,再用 average=(float)s/I 求平均分2.10插入記錄到表中功能:插入一條記錄到單鏈表中。用 info=(STUDENT*)malloc(sizeof(STUDENT) 申請空間,且有 scanf 語
8、句輸入插入點 學號,并有 printf 語句提示輸入記錄信息。2.11復制文件功能:復制文件備份。2.12排序功能 :按學生成績從高到低進行排序。用 while 語句做總分比較。2.13追加記錄到文件功能:將當前單鏈表中的記錄追加到指定的文件中 。用 scanf 輸入成績賦給 info-scorei, 在用 s1=s1+info-scorei 。語句循環(huán)累加求總分, 再求平均分。操作 fp=fopen(infile, a)向二進制文件尾增加數據方式打開文件。2.14索引功能:按照學號從小到大的順序排序。用 while 作學號比較,操作 if 判斷排序。2.15分類合計功能:按班統(tǒng)計學生成績操作
9、 while 從學號中取出班級號,并計算班級累加總分、累加平均分、累加班級人 數。第三章、主要數據結構程序設計中用到的學生信息結構體類型typedef struct z1char no11。char n ame15。int scoreN。float sum。float averageint order。struct z1* next。第四章、流程圖i*_1ff勺第五章、源代碼char no11。char name15。 int scoreN。float sum。float average。int order。struct zl*next。STUDENT 。 STUDENTS ni t()。 S
10、TUDENT*create()。 STUDENT*delete(STUDENT*h) void prin t(STUDENT*h)。void search(STUDENT*h)。 void save(STUDENT*h)。 STUDENT*load()。 void calculatio n(STUDENT*h)。STUDENT*i nsert(STUDENT*h) void append()。void copy()。STUDENT*sort(STUDENT*h)。STUDENT*i ndex(STUDENT*h)。void total(STUDENT*h)。int menu_select()。
11、#include stdio.h/*I/O 函數 */#include stdlib.h/*其他說明*/#i nclude stri ng.h/*字符串函數*/#include conio.h/*屏幕操作函數*/#i nclude mem.h/*內存操作函數*/#in clude ctype.h/*字符操作函數*/#include alloc.h/*動態(tài)地址分配函數#defi ne N 3/*定義常數*/typedef struct zl/*定義數據結構*/*/*初始化函數*/*創(chuàng)建鏈表*/*刪除記錄*/*顯示所有記錄*/*查找*/*保存*/*讀入數據*/*計算總分和平均分*/。/*插入記錄*
12、/*追加記錄*/*復制文件*/*排序*/*索引*/*分類合計*/*菜單函數*/* main()int i 。STUDENT*head 。 /* 鏈表定義頭指針 */ head=init() 。/* 初始化鏈表 */clrscr() 。/* 清屏 */for( 。 ) /* 無限循環(huán) */switch(menu_select() /* 調用主菜單函數,返回整數值做開關語句的條件 /* 值不同,執(zhí)行的函數不同, break 不能省略 */case 0:head=init() 。 break。 case1:head=create()。 break。/* 執(zhí)行初始化 */* 創(chuàng)建鏈表 */* 刪除記錄
13、 */* 顯示全部記錄 */* 查找記錄 */* 保存文件 */* 讀文件 */* 計算總分和平均分 */* 插入記錄 */ /* 復制文件 */* 排序 */* 追加記錄 */case 12:head=index(head)。 break。/*索引 */case 13:total(head)。 break。/* 分類合計 */case 14:exit(0)。/*如菜單返回值為 14 程序結束 */* 菜單函數,返回值為整數 */menu_select()0.init list,/* 初始化 */1.Enter list,/* 輸入記錄 */2.Delete a record from lis
14、t, /* 從表中刪除記錄 */3.print list,/* 顯示單鏈表中所有記錄 */* 將單鏈表中記錄保存到文件中 */* 從文件中讀入記錄 */* 計算所有學生的總分和平均分 */* 插入記錄到表中 */9.copy the file to new file, /* 復制文件 */ 10.sort tomake new file, /* 排序 */主函數開始 */*/case 2:head=delete(head)。 break。case 3:print(head)。break。case 4:search(head)。 break。case 5:save(head)。 break。ca
15、se 6:head=load()。 break。case 7:calculation(head)。 break。case 8:head=insert(head)。 break。case 9:copy()。 break。case 10:head=sort(head)。 break。case 11:append()。 break。*MENU*, /*定義菜單字符串數組 */4.Search record on name,/* 按照姓名查找記錄 */5.Save the file,6.Load the file,pute the score,8.insert record to list,print
16、f(press any key enter menu.n) 。 /* 按任意鍵進入主菜單 */ /* 輸入任意鍵 */* 清屏 */* 移動光標 */* 設置文本顯示顏色為黃色 */* 設置背景顏色為藍色 */* 移動光標 */*輸出左上角邊框廠*/* 輸出上邊框水平線 */*輸出右上角邊框*/ doprintf(n Tang Yubao Program:n) 。printf(n Enter you choice(014):) 。/*在菜單窗口外顯示提示信息 */scanf(%s,s) 。c=atoi(s) 。 while(c14) 。 return c 。/* 輸入選擇項 */* 將輸入的字
17、符串轉化為整型數 */* 選擇項不在 014 之間重輸 */* 返回選擇項,主程序根據該數調用相應的函數 */11.append record to file, /* 追加記錄到文件中 */12.index on number,/* 索引 */13.total on number,/* 分類合計 */14.Quit 。/* 退出 */char s3 。int c,i 。/* 以字符形式保存選擇號 */* 定義整形變量 */gotoxy(1,25) 。/* 移動光標getch() 。clrscr() 。gotoxy(1,1) 。textcolor(YELLOW) 。textbackground(
18、BLUE) 。gotoxy(10,2) 。putch(0 xc9) 。for(i=1。i44。i+)putch(0 xcd) 。putch(0 xbb) 。for(i=3 。 i20 。 i+)gotoxy(10,i) 。 putch(0 xba) 。/* 輸出左垂直線 */putch(0 xba) 。gotoxy(54,i) 。gotoxy(10,20) 。for(i=1 。 i44。 i+)putch(0 xcd) 。putch(0 xbc) 。window(11,3,53,19) 。clrscr() 。for(i=0 。 ino,11) 。 /* 輸入學號并校驗 */ if(info-n
19、o0=) break 。 /* 如果學號首字符為 則結束輸入 */ inputs(enter name:,info-name,15) 。 /* 輸入姓名,并進行校驗 */ printf(please input %d score n,N) 。 /* 提示開始輸入成績 */ s=0 。 /* 計算每個學生的總分,初值為 0*/for(i=0。iscorei) 。/* 輸入成績 */if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。info-sum=s 。info-average=(float)s/N 。info-order=0 。
20、info-next=h 。h=info 。/* 累加各門課程成績 */* 將總分保存 */* 求出平均值 */* 未排序前此值為 0*/* 將頭結點作為新輸入結點的后繼結點 */ /* 新輸入結點為新的頭結點 */inputs(char*prompt,char*s,int count)char p255 。doprintf(prompt) 。 /* 顯示提示信息 */scanf(%s,p) 。/* 輸入字符串 */if(strlen(p)count)printf(n too long!n) 。 /* 進行長度校驗,超過count 值重輸 */while(strlen(p)count) 。str
21、cpy(s,p)。void print(STUDENT*h)int i=0 。STUDENT*p 。clrscr() 。 p=h。printf(nnn* *STUDENT *n)printf(|rec|no | name | sc1 | sc2 | sc3 | sum | ave |order|n) 。 printf(|-| | | | | | | | |n) 。while(p!=NULL)i+ 。printf(|%3d|%-10d|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,i,p-no,p-name,p-score0,p-score1,p-score2,p-su
22、m,p-average,p-order) 。p=p-next 。/* 刪除記錄 */STUDENT*delete(STUDENT*h)STUDENT *p,*q 。char s11 。clrscr() 。/*p 為查找到要刪除的結點指針, q 為其前驅指針 */* 存放學號 */* 清屏 */printf(please input deleted no.n) 。 /* 顯示提示信息 */scanf(%s,s) 。q=p=h 。/* 輸入要刪除記錄的學號 */* 給 q 和 p 賦初值頭指針 */while(strcmp(p-no,s)&p!=NULL) /* 當記錄的學號不是要找的,或
23、指針不為空時 */q=p 。 p=p-next 。if(p=NULL)/* 將 p 指針值賦予 q 作為 p 的前驅指針 */* 將 p 指針指向下一條記錄 */* 如果 p 為空,說明鏈表中沒有該結點 */*將輸入的字符串復制到字符串s 中*/* 統(tǒng)計記錄條數 */* 移動指針 */* 清屏 */* 初值為頭指針 */printf(*end*n)printf(nlist no %s studentn,s) 。else /*p 不為空,顯示找到的記錄信息 */printf(|no | name | sc1|sc2|sc3| sum | ave |order|n) 。printf(|- |-|-
24、 |-|- |- |-|- |n)printf(|%-10s|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,p-no,p-name, p-score0,p-score1, p-score2,p-sum,p-average,p-order) 。/* 按任意鍵后,開始刪除 */* 如果 p=h, 說明被刪結點是頭結點 */* 修改頭指針指向下一條記錄 */q-next=p-next 。free(p) 。/* 不是頭指針,將 p 的后繼結點作為 q 的后繼結點 */ /* 釋放 p 所指結點空間 */printf(n have deleted No %s studentn,
25、s) 。printf(Dont forget save!n) 。 /* 提示刪除后不要忘記保存文件 */ return(h) 。 /* 返回頭指針 */* 查找記錄 */ void search(STUDENT*h)STUDENT*p 。 /* 移動指針 */char s15 。/* 存放姓名的字符數組 */clrscr() 。/* 清屏 */printf(please enter name for searchn) 。scanf(%s,s) 。 /* 輸入姓名 */p=h。/* 將頭指針賦予 p*/while(strcmp(p-name,s)&p!=NULL) /* 當記錄的姓名不是
26、要找的,或指針不為空時 */p=p-next 。 /* 移動指針,指向下一結點 */if(p=NULL)/* 如果 p 為空 */printf(nlist no. %s studentn,s) 。/* 顯示沒有該學生 */else/* 顯示找到的記錄信息 */printf(|no. | name | sc1|sc2|sc3| sum | ave |order|n) 。printf(|- |-|- |-|- |-|- |- |n) 。printf(|%-10s|%-15s|%4d|%4d|%4d|%4.2f|%4.2f|%3d|n,p-no,p-name, p-score0,p-score1,
27、p-score2,p-sum,p-average,p-order) 。printf(*have found*n)printf(H*end*n)getch() 。if(p=h)h=p-next 。elseprintf(nn*have found*n)/* 插入記錄 */printf(H*end*n)STUDENT *insert(STUDENT*h)STUDENT*p,*q,*info 。 /*p 指向插入位置, q 是其前驅, info 指新插入記錄 */ char s11 。/* 保存插入點位置的學號 */int s1,i 。printf(please enter location befo
28、re the no.n) 。 scanf(%s,s) 。 /* 輸入插入點學號 */printf(nplease input new recordn) 。 /* 提示輸入記錄信息 */info=(STUDENT*)malloc(sizeof(STUDENT) 。/* 申請空間 */if(!info)* *liu285*printf(nout of memory) 。return NULL 。inputs(enter no.:,info-no,11) 。inputs(enter name:,info-name,15) 。printf(please input %d score n,N) 。s1=
29、0。/for(i=0。iscorei) 。if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。/* 計算總分 */info-sum=s1。info-average=(float)s1/N 。info-order=0。info-next=NULL 。h=info 。/* 將總分存入新記錄中 */* 計算均分 */* 名次賦值 0*/* 設后繼指針為空 */* 將指針賦值給 p*/* 將指針賦值給 q*/* 查找插入位置 */* 保存指針 p ,作為下一個 p 的前驅 */* 將指針 p 后移 */* 如果 p 指針為空,說明沒有指定
30、結點 */*同時 p 等于 h,說明鏈表為空*/* 新紀錄為頭結點 */*p 為空,但 p 不等于 h,將新結點插在表尾*/*p 不為空,則找到了指定結點 */*如果 p 等于 h,則新結點插入在第一個結點之前*/* 新結點為新的頭結點 */scanf(%s,outfile) 。/*從文件讀取數據 */STUDENT*load()* *liu286*elseinfo-next=p 。q-next=info 。/*不是頭結點,則是中間某個位置,新結點的后繼結點為p*/* 新結點作為 q 扥后繼結點 */printf(n- have inserted %s student- n,info-name
31、) 。printf(-Dont forget save-n)。/* 提示存盤 */return(h) 。/* 返回頭指針 */* 保存數據到文件 */void save(STUDENT*h)FILE*fp 。STUDENT*p 。char outfile10 。/* 定義指向文件的指針 */* 定義移動指針 */* 保存輸出文件名 */printf(Enter outfile name,for example c:f1te.txt:n)/*提示文件名格式信息*/elseq-next=info 。elseif(p=h)info-next=p 。if(fp=fopen(outfile,wb)=NU
32、LL)printf(can not open filen) 。exit(1) 。printf(nSaving file.n)。p=h 。while(p!=NULL)fwrite(p,sizeof(STUDENT),1,fp)p=p-next 。fclose(fp) 。printf(- save success!- n)/* 為輸出打開一個二進制文件,如沒有則建立/*打開文件,提示正在保存 */* 移動指針從頭指針開始 */*如 p 不為空 */。/* 寫入一條記錄 */*指針后移*/* 關閉文件 */*顯示保存成功*/*/STUDENT *p,*q,*h=NULL 。 /* 定義記錄指針變量
33、*/FILE*fp 。 /* 定義指向文件的指針 */ char infile10 。 /* 保存文件名 */printf(Enter infile name,for example c:f1te.txt:n)scanf(%s,infile) 。if(fp=fopen(infile,rb)=NULL)/* 輸入文件名 */* 打開一個二進制文件 ,為讀方式 */printf(can not open filen) 。exit(1) 。printf(n- loading file!- n)/* 如不能打開 ,則結束程序 */p=(STUDENT*)malloc(sizeof(STUDENT)/*
34、 申請空間 */if(!p)printf(out of memory!n) 。 /* 如沒有申請到,則內存溢出 */ return h 。/* 返回空頭指針 */ h=p 。 while(!feof(fp)if(1!=fread(p, sizeof(STUDENT), 1, fp)break 。/* 如果沒有讀到數據,跳出循環(huán) */p-next=(STUDENT*)malloc(sizeof(STUDENT) 。 /* 為下一個結點申請空間 */if(!p-next)printf(out of memory!n) 。 /* 如果沒有申請到,則內存溢出 */return h 。q=p 。p=p-
35、next 。q-next=NULL 。fclose(fp) 。/* 保存當前結點的指針,作為下一結點的前驅 */* 指針后移,新讀入數據鏈到當前表尾*/* 最后一個結點的后繼指針為空 */ /*關閉文件 */printf(-Yon have success read data from file !-n)return h。/* 返回頭指針 */* 追加記錄到文件 */void append ()FILE*fp 。STUDENT*info 。int s1,i 。char infile10 。/* 定義指向文件的指針 */* 新紀錄指針 */* 保存文件名 */printf(nplease new
36、 recordn) 。info=(STUDENT*)malloc (sizeof(STUDENT) 。 /* 申請空間 */ if(!info)printf(nout of memory) 。 /* 沒有申請到,內存溢出本函數結束 */ return 。inputs (enter no:, info-no,11) 。 /* 調用 inputs 輸入學號 */ inputs (enter name:,info-name,15) 。 /*調用 inputs 輸入姓名 */ printf (please input %d score n,N) 。 /* 提示輸入成績 */ s1=0。for(i=0。
37、iscorei) 。if(info-scorei100|info-scoreiscorei100|info-scoreiscorei 。info-sum=s1 。info-average=(float)s1/N 。 info-order=0 。 info-next=NULL 。printf(Enter infile name,for example c:f1te.txt:n)。scanf(%s,infile) 。/* 輸入文件名 */if(fp=fopen(infile,ab)=NULL)/* 向二進制文件尾增加數據方式打開文件 */printf(can not open filen) 。/*
38、 顯示不能打開 */exit(1) 。/* 退出程序 */printf(n-Appending record!-n)。if(1!=fwrite(info,sizeof(STUDENT),1,fp) /* 寫文件操作 */ printf(-file write error!-n)/* 返回 */printf(- append success!-n) 。fclose(fp) 。/* 關閉文件 */* 文件復制 */void copy()char outfile10,infile10 。/* 保存總分 */* 求平均分 */* 名次初始值為 0*/return 。q=p。p=p-next 。/* 待
39、排序結點值小,則新表指針后移 */printf(Enter infile name,for example c:f1te.txtn) 。 scanf(%s,infile) 。 /* 輸入源文件名 */if(sfp=fopen(infile,rb)=NULL) /* 二進制讀方式打開源文件 */printf(can not open input filen) 。 exit(0) 。printf(Enter outfile name, for example c:f1te.txt:n) 。 /* 提示輸入目標文件名 */scanf(%s,outfile) 。 /* 輸入目標文件名 */ if(tf
40、p=fopen(outfile,wb)=NULL) /* 二進制寫方式打開源文件 */printf(can not open output filen) 。exit(0) 。while(!feof(sfp) /* 讀文件直到文件尾 */if(1!=fread(p,sizeof(STUDENT),1,sfp) break 。/* 塊讀 */fwrite(p,sizeof(STUDENT),1,tfp) 。/* 塊寫 */fclose(sfp) 。 fclose(tfp) 。 /* 關閉目標文件 */ printf(you have success copy file!n) 。 /* 顯示成功復制
41、 */*排序 */ STUDENT*sort(STUDENT*h)int i=0 。 /* 保存名次 */while(t-sumsum&p!=NULL)FILE*sfp,*tfp 。STUDENT *p=NULL 。clrscr() 。/* 源和目標文件指針 */* 移動指針 */* 清屏 */STUDENT*p,*q,*t,*h1h1=h-next 。h-next=NULL 。while(h1!=NULL) t=h1 。h1=h1-next 。p=h 。q=h 。/* 第一個結點為新表的頭結點*/* 當原表不為空時,進行排序*/* 取原表的頭結點 */* 原表頭結點指針后移 */*設
42、疋移動指針 p,從頭指針開始*/*設定移動指針 q 作為 p 的前驅,初值為頭指針 */* 定義臨時指針 */* 將原表的頭指針所指的下一個結點作頭指針 */*計算總分和均值 */* 累加總分 */* 統(tǒng)計記錄條數 */* 指針后移 */* 求均分,均分為浮點數,總分為整數,所以做類型轉換 */printf(n-All students sum score is:%ld average is %5.2fn,s,average) 。/*索引 */STUDENT*index(STUDENT*h)STUDENT *p,*q,*t,*h1 。/*定義臨時指針 */h1=h-next 。/* 將原表的頭
43、指針所指的下一個結點做指針 */if(p=q)t-next=p 。h=t 。/*p=q, 說明待排序結點值大,應排在首位 */* 待排序結點的后繼結點為 p*/* 新頭結點為待排序結點 */elset-next=p 。q-next=t 。p=h。while(p!=NULL)i+ 。/*待排序結點應插入在中間某個位置q 和 p 之間,如 p 為空則是尾部*/*t 的后繼結點是 p*/ /*q的后繼結點是 t*/*已排好序的頭指針賦予p,準備填寫名次*/* 當 p 不為空時,進行下列操作 */p-order=i 。p=p-next 。printf(sort success!n) 。return h
44、 。/* 結點序號 */* 將名次賦值 */* 指針后移 */* 排序成功 */* 返回頭指針 */void calculation(STUDENT*h)STUDENT*p 。int i=0 。long s=0 。float average=0 。 p=h 。while(p!=NULL)/* 定義移動指針 */* 保存記錄條數初值為 0*/* 總分初值為 0*/* 均分初值為 0*/* 從頭指針開始 */* 當 p 不為空時處理 */s+=p-sum 。i+ 。 p=p-next 。average=(float)s/i 。printf( -class- sum- average- n)p=h。
45、/*從頭指針開始 */while(p!=NULL) /* 當 p 不為空時做下面的處理 */memcpy(sno,p-no,8) 。/* 從學號中取出班級號 */sno8=0 。q=p-next 。s1=p-sum 。ave=p-average。/* 作字符串結束標記 */*將指針指向待比較的記錄 */* 當前班級的總分初值為該班級的第一條記錄總分*/* 當前班級的均分初值為該班級的第一條記錄均分*/h-next=NULL 。while(h1!=NULL)t=h1 。h1=h1-next 。p=h。/* 第一個結點為新表的頭結點 */ /*當原表不為空時,進行排序 */* 取原表的頭結點 */
46、* 原表頭結點指針后移 */*設定移動指針 p,從頭指針開始*/q=h。/*設定移動指針 q 作為 p 的前綴結點,初值為頭指針*/while(strcmp(t-no,p-no)0&p!=NULL) /* 做學號比較 */q=p。/*帶排序結點值大,應往后插,所以新表指針后移 */p=p-next 。if(p=q)/*p=q, 說明待排序結點值小,應排在首位 */t-next=p 。/*待排序結點的后繼結點為 p*/h=t 。/* 新頭結點為待排序結點 */else/* 待排序結點應插入在中間某個位置q 和 p 之間,若 p 為空則是尾部*/t-next=p 。q-next=t 。/*
47、t 的后繼結點是 p*/ /*q的后繼結點是 t*/printf(index success!n) 。return h 。/* 返回頭指針 */*索引排序成功 */* 分類指針 */void total(STUDENT *h)STUDENT *p,*q 。/*定義臨時指針變量 */char sno9,qno9,*ptr 。/* 保存班級號 */float s1,ave 。/* 保存總分和平均分 */int i 。 /* 保存班級人數 */ clrscr() 。 /* 清屏 */printf(“*TOTAL*/* 統(tǒng)計當前班級人數 */* 內循環(huán)開始 */s1+=q-sum 。 /* 累加總分 */ ave+=q-average 。 /* 累加均分 */ i+ 。 /* 累加班級人數 */ q=q-next 。 /* 指針指向下一記錄 */elsebreak。/* 不是一個班級的結束本次循環(huán) */printf(%s,%10.2f,%5.2fn,sno,s1,ave/i
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 游戲開發(fā)引擎跨平臺移植指南
- 智能倉儲物流項目
- 雨水如何收集系統(tǒng)
- MES系統(tǒng):制造業(yè)智能化管理與流程優(yōu)化的關鍵
- 美容師中級考試復習測試卷附答案
- 主管護師內科護理練習卷含答案
- 在線拍賣平臺建設及藝術品交易推廣策略研究
- 三農產品檢驗檢疫技術指南
- 軟件項目需求分析文檔范例
- 高效率事務處理指南與實踐案例
- 部編版語文二年級下冊《彩色的夢》說課稿(附教學反思、板書)課件
- 天津市南開區(qū)2023年中考英語二模試卷及答案
- 2023年皖北衛(wèi)生職業(yè)學院單招職業(yè)適應性測試題庫及答案解析
- 人教PEP版六年級下冊英語全冊教案完整版教學設計
- 復印病歷資料申請表
- GB/T 19352.1-2003熱噴涂熱噴涂結構的質量要求第1部分:選擇和使用指南
- 雙氧水(過氧化氫)危險化學品安全周知卡【模板】
- 《狼王夢》讀書分享PPT
- 市人民醫(yī)院卒中防治中心培訓制度
- 荷葉圓圓 一等獎-完整版課件
- 醫(yī)院換藥室消毒隔離流程
評論
0/150
提交評論