

下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、封面作者: PanHongliang僅供個(gè)人學(xué)習(xí)注意:本文檔可供大家參考,學(xué)習(xí)。請(qǐng)大家借鑒優(yōu)點(diǎn),批評(píng)不足。請(qǐng)各位湖工 學(xué)弟,學(xué)妹不要署名后直接打印,應(yīng)付老師。一定要弄懂代碼,這對(duì)大家的代 碼編寫技術(shù)很有好處。雖然現(xiàn)在完全自主編寫有些困難,但是也要有一個(gè)迎難 而上的心態(tài)。祝大家學(xué)業(yè)有成!課程設(shè)計(jì)報(bào)課程名稱C語(yǔ)言程序設(shè)計(jì)課題名稱學(xué)生綜合測(cè)評(píng)系統(tǒng)專業(yè)班級(jí)學(xué)號(hào)姓名指導(dǎo)教師任務(wù)書下達(dá)日期年 月曰任務(wù)完成日期年 月曰目錄一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求4學(xué)生綜合測(cè)評(píng)系統(tǒng).一、 問(wèn)題描述:4二、 功能描述:4三、 算法提示:5四、 測(cè)試數(shù)據(jù):5二設(shè)計(jì)要求:5三進(jìn)度安排 6四.總體設(shè)計(jì)方案 71總體流程圖 72.程序主
2、要函數(shù) 71. void inti() 初始化函數(shù) 72. welcome()函數(shù) 73. void In put lnfo() 錄入學(xué)生信息 84. void DeleteInfo()刪除信息 85. void paiming1() / void paiming2()成績(jī)排名 86.void ViewAll() 瀏覽全部學(xué)生信息 97.void clean() 清除所有信息 98. void PaimingView() 查詢排名 93.程序其他函數(shù) 9A. 信息存盤 (結(jié)構(gòu)體 )9B. 讀取信息(結(jié)構(gòu)體)10C. 信息存盤(整型)10D. 讀取信息(整型)10E. 學(xué)號(hào)檢索 10五程序源代碼
3、 11六 . 收獲及體會(huì) 24 七.參考文獻(xiàn) 24 計(jì)算機(jī)與通信學(xué)院課程設(shè)計(jì)評(píng)分表 24課程名稱: C 語(yǔ)言程序設(shè)計(jì) 24一、設(shè)計(jì)內(nèi)容與設(shè)計(jì)要求學(xué)生綜合測(cè)評(píng)系統(tǒng)一、問(wèn)題描述:每個(gè)學(xué)生的信息為:學(xué)號(hào)、姓名、性別、家庭住址、聯(lián)系電話、語(yǔ)文、數(shù)學(xué)、外語(yǔ)三門單科成績(jī)、考 試平均成績(jī)、考試名次、同學(xué)互評(píng)分、品德成績(jī)、任課教師評(píng)分、綜合測(cè)評(píng)總分、綜合測(cè)評(píng)名次。考試平 均成績(jī)、同學(xué)互評(píng)分、品德成績(jī)、任課教師評(píng)分分別占綜合測(cè)評(píng)總分的 60%60%, 10%10%,10%10%,20%20%二、功能描述:A A、學(xué)生信息處理(1)(1) 輸入學(xué)生信息、學(xué)號(hào)、姓名、性別、家庭住址、聯(lián)系電話,按學(xué)號(hào)以小到大的順序存
4、入文件中。 提示:學(xué)生信息可先輸入到數(shù)組中,排序后可寫到文件中。(2)(2) 插入(修改)同學(xué)信息: 提示:先輸入將插入的同學(xué)信息,然后再打開(kāi)源文件并建立新文件,把源文件和輸入的信息合并到新文件 中(保持按學(xué)號(hào)有序)若存在該同學(xué)則將新記錄內(nèi)容替換源內(nèi)容,(3)(3) 刪除同學(xué)信息: 提示:輸入將刪除同學(xué)號(hào),讀出該同學(xué)信息,要求對(duì)此進(jìn)行確認(rèn),以決定是否刪除將刪除后的信息寫到文 件中。(4)(4) 瀏覽學(xué)生信息:提示:打開(kāi)文件,顯示該文件的學(xué)生信息。B B 、學(xué)生數(shù)據(jù)處理:(1)(1) 按考試科目錄入學(xué)生成績(jī)并且按公式:考試成績(jī)=(語(yǔ)文+ +數(shù)學(xué)+ +外語(yǔ))/3/3 計(jì)算考試成績(jī),并計(jì)算考試名次,
5、提示:先把學(xué)生信息讀入數(shù)組,然后按提示輸入每科成績(jī),計(jì)算考試成績(jī),求岀名次,最后把學(xué)生記錄寫入一個(gè)文件中。(2)(2) 學(xué)生測(cè)評(píng)數(shù)據(jù)輸入并計(jì)算綜合測(cè)評(píng)總分及名次。提示:綜合測(cè)評(píng)總分=(考試成績(jī))*0.6+*0.6+ (同學(xué)互評(píng)分)*0.1+*0.1+品德成績(jī)*0.1*0.1 + +任課老師評(píng)分*0.2*0.2。(3)(3) 學(xué)生數(shù)據(jù)管理提示:輸入學(xué)號(hào),讀岀并顯示該同學(xué)信息,輸入新數(shù)據(jù),將改后信息寫入文件(4)(4) 學(xué)生數(shù)據(jù)查詢:提示:輸入學(xué)號(hào)或其他信息,即讀岀所有數(shù)據(jù)信息,并顯示岀來(lái)。C C、學(xué)生綜合信息輸岀 提示:輸出學(xué)生信息到屏幕。三、算法提示:1 1、數(shù)據(jù)結(jié)構(gòu):結(jié)構(gòu)體類型數(shù)組2 2、數(shù)
6、據(jù)庫(kù)結(jié)構(gòu):下表構(gòu)成該系統(tǒng)的基本數(shù)據(jù)庫(kù)。學(xué)號(hào)姓名考試成績(jī)?cè)u(píng)分CharCharstructint四、測(cè)試數(shù)據(jù):學(xué)生人數(shù):N=10二.設(shè)計(jì)要求:掌握結(jié)構(gòu)化程序設(shè)計(jì)的主體思想,以自頂向下逐步求精的方法編制程序解決一些實(shí)際的問(wèn)題,為將來(lái) 編寫軟件積累一些典型的案例處理經(jīng)驗(yàn)。(1)(1) 按學(xué)號(hào)順序選課題號(hào),并在規(guī)定的時(shí)間內(nèi)獨(dú)自完成相關(guān)課題的C C 源程序編寫、調(diào)試和運(yùn)行。源程序及編譯生成各文件均保存;(2)(2)按本任務(wù)書的要求,編寫課程設(shè)計(jì)報(bào)告(WordWord 文檔格式)。并用 A4A4 的復(fù)印紙打印并裝訂;(3)(3) 在 20132013 年 1 1 月 5 5 日之前,請(qǐng)各班學(xué)習(xí)委員收齊課程設(shè)
7、計(jì)報(bào)告交老師。附:課程設(shè)計(jì)報(bào)告內(nèi)容要求如下:封面課程設(shè)計(jì)任務(wù)書課程設(shè)計(jì)主文檔內(nèi)容如下:1 1、課程設(shè)計(jì)題目2 2、 課程設(shè)計(jì)目的3 3、 課程設(shè)計(jì)主要任務(wù)4 4、 設(shè)計(jì)環(huán)境5 5、 總體設(shè)計(jì)方案的選定(主控模塊和各子模塊的設(shè)計(jì)方法及框圖)6 6、 源程序清單7 7、 收獲及體會(huì) 參考資料四、報(bào)告內(nèi)容要求用宋體五號(hào)字,主標(biāo)題用黑三號(hào)、一級(jí)標(biāo)題用黑四號(hào)字,二級(jí)標(biāo)題用宋 體小四號(hào)字加粗,要求用A4 紙張打印出來(lái)。課程設(shè)計(jì)說(shuō)明書裝訂順序:封面、任務(wù)書、正文、附件(A4A4 大小的圖紙及程序清單)。三進(jìn)度安排第 18 周,具體安排如下星期時(shí)間班級(jí)內(nèi)容地點(diǎn)第 17 周任務(wù)布置第 18 周星期第一次上機(jī)機(jī)房
8、第 18 周星期 四第二次上機(jī)機(jī)房第 18 周星期五第三次上機(jī)與答辯機(jī)房湖南工程學(xué)院計(jì)算機(jī)與通信學(xué)院年月 日四總體設(shè)計(jì)方案1.總體流程圖2.程序主要函數(shù)l. void inti()初始化函數(shù)初始化函數(shù)用于從硬盤中加載學(xué)生數(shù)據(jù)和學(xué)生數(shù)目。首先,從硬盤讀取counter.dat 的數(shù)據(jù)。若不存在counter.dat 則說(shuō)明程序第一次運(yùn)行。創(chuàng)建counter.dat 和 student_data.dat,把counter 的初始值賦為 1。若存在 counter.dat.則讀取其中數(shù)據(jù),把數(shù)據(jù)賦給變量counter,這個(gè)值為已儲(chǔ)存的學(xué)生信息數(shù)量。這個(gè) counter 變量就是計(jì)數(shù)器變量。用來(lái)計(jì)量學(xué)
9、生信息數(shù)量的變化。2.welcome()函數(shù)Welcome 函數(shù)用來(lái)顯示選項(xiàng)菜單,并將用戶所選的序號(hào)返回。主函數(shù)中的變量 select 接收到 welcome 的返回值。通過(guò)開(kāi)關(guān)語(yǔ)句,選擇需要使用的功能。3. void InputInfo() 錄入學(xué)生信息輸入學(xué)生的信息。學(xué)生信息由以下結(jié)構(gòu)體定義。struct student_infoint num 。/學(xué)號(hào)char name6 。/姓名char sex5 。/性別char adress20。/家庭住址char tel10 。/電話int chinese,math,english,huping,pingde,jiaoping,paiming1,
10、paiming2 。/ 語(yǔ)文 數(shù)學(xué) 英語(yǔ) 互評(píng) 品德 教評(píng) doubleave,zhongping 。/ 平均 綜合。InputInfo 調(diào)用 input 函數(shù)。在 input 函數(shù)中的局部變量 stu 中錄入數(shù)據(jù),然后 數(shù)返回 stu給 InputInfo 中的結(jié)構(gòu)體數(shù)組的 counter 號(hào)元素。然后, In put Info 通過(guò) Sortl nfo()。 SaveStruct()。 Savel nt()。將數(shù)組按學(xué)號(hào)排序, 并存儲(chǔ)結(jié)構(gòu)體 student和 counter 。4. void DeleteInfo() 刪除信息刪除信息函數(shù),從要?jiǎng)h除位信息開(kāi)始,前位用后一位覆蓋,直到數(shù)組結(jié)束
11、。并同時(shí)將 counter 減 1。之后調(diào)用 SaveStruct()。Savelnt()。儲(chǔ)存 student 結(jié)構(gòu)體數(shù)組和 counter 計(jì)數(shù)變量。5. void paiming1() / void paiming2() 成績(jī)排名排名函數(shù)將 student 的給個(gè)元素的首地址儲(chǔ)存在 pN指針數(shù)組中。通過(guò)冒泡法將指針數(shù)組排序。 接下來(lái),按順序把指針數(shù)組順序,把排名賦給student 的成員 paiming1,paiming2。冒泡排序for(i=0 。 icounter-1 。 i+)for(j=i+1 。 jave ave)input 函temp=pi 。 pi=pj 。 pj=temp
12、 。排名名詞給每一個(gè) student 的成員 paiming1 或 paiming2 。 for(i=0 。 ipaiming1=i+1 。6. void ViewAll() 瀏覽全部學(xué)生信息void ViewAll()int i 。for(i=0。icounter。i+)ViewInfo(&studenti) 。 printf(n) 。getchar() 。printf( 回車鍵返回 .) 。getchar() 。 system(cls) 。7. void clean() 清除所有信息counter 計(jì)數(shù)變量清零, counter.dat 清空, student_info.dat 清
13、空。8. void PaimingView() 查詢排名根據(jù)輸入的學(xué)號(hào)查詢排名3.程序其他函數(shù)A.信息存盤(結(jié)構(gòu)體)void SaveStruct(struct student_info *sp,int size,int n,char filename20)FILE *fp 。fp=fopen(filename,wb) 。 fwrite(sp,size,n,fp) 。 fclose(fp) 。B.讀取信息(結(jié)構(gòu)體)void LoadStruct(struct student_info *sp,int size,int n,char filename20)略C. 信息存盤(整型)void Sav
14、eInt(int *p,int size,int n,char filename20)FILE *fp 。fp=fopen(filename,wb) 。 fwrite(p,size,n,fp) 。 fclose(fp) 。D. 讀取信息(整型)void LoadInt(int *p,int size,int n,char filename20)略E. 學(xué)號(hào)檢索int NumExist(struct student_info student,int num)int i 。for(i=0。icounter。i+)if(studenti.num=num)return i 。return -1 。檢索
15、學(xué)號(hào)所在的元素下表,若學(xué)號(hào)存在,則返回該學(xué)號(hào)所在下標(biāo)。若學(xué)號(hào)不存在,則返回1。程序截圖:五程序源代碼學(xué)生綜合測(cè)評(píng)系統(tǒng)2013 年 1 月 3 日#include #include #define N100/-函數(shù)聲明void init() 。char welcome() 。void InputInfo() 。void view() 。void xiugai() 。void DeleteInfo() 。void paiming1(struct student_info student)void paiming2(struct student_info student)void ViewAll()
16、 。void clean() 。void PaimingView() 。void exit() 。struct student_info input()。void SortInfo(struct student_info student)void ViewInfo(struct student_info *sp)voidSaveStruct(structstudent_infofilename20) 。voidLoadStruct(structstudent_info*sp,intsize,int*sp,intsize,intn,charn,charfilename20) 。void Save
17、Int(int *p,int size,int n,char filename20)void LoadInt(int *p,int size,int n,char filename20)int NumExist(struct student_info student,int num)/-定義學(xué)生信息結(jié)構(gòu)體struct student_infoint num 。 charname6 charsex5 charadress20 chartel10 int/ 學(xué)號(hào)/ 姓名/ 性別/ 家庭住址/ 電話chinese,math,english,huping,pingde,jiaoping,paiming
18、1,paiming260%,struct student_info studentNint counter,PMvoid main()char select。init() 。/while(1)select=welcome() switch(select)/ 語(yǔ)文 數(shù)學(xué) 英語(yǔ) doubleave,zhongping 綜合 姓名、性別、互評(píng)品德教評(píng)/ 平均/ 每個(gè)學(xué)生的信息為:學(xué)號(hào)、 單科成績(jī)、/ 考試平均成績(jī)、考試名次、 合測(cè)評(píng)名次。/ 考試平均成績(jī)、同學(xué)互評(píng)分、品德成績(jī)、10%, 10%,20%。/-同學(xué)互評(píng)分、家庭住址、品德成績(jī)、聯(lián)系電話、語(yǔ)文、數(shù)學(xué)、外語(yǔ)三門任課教師評(píng)分、綜合測(cè)評(píng)總分、綜任
19、課教師評(píng)分分別占綜合測(cè)評(píng)總分的定義全局結(jié)構(gòu)體數(shù)據(jù)/主函數(shù)case 1:system(cls) 。InputInfo()break 。/ 選項(xiàng) 1: 輸入學(xué)生信息case 2:system(cls) 。view()。 break/ 選項(xiàng) 2:瀏覽學(xué)生信息case 3:system(cls) 。xiugai()。 break/ 選項(xiàng) 3:修改學(xué)生信息case 4:system(cls) 。DeleteInfo()break 。/ 選項(xiàng) 4: 刪除學(xué)生信息case 5:system(cls) 。paiming1(student)paiming2(student)。 PM=1 。 getchar()
20、。getchar()。 system(cls)。 break 。 / 選項(xiàng)學(xué)生信息排名case 6:system(cls) 。ViewAll()。 break/ 選項(xiàng) 6:瀏覽全部學(xué)生信息case 7: system(cls)。clean() 。break 。/選項(xiàng) 7: 清除所有信息case 8:system(cls)。 PaimingView()break 。/ 選項(xiàng) 8: 查詢排名ooooo o o5:調(diào)用初始化函數(shù)/ 選項(xiàng) 9: 退出/-void init()FILE *fp 。fp=fopen(counter.dat,rb) counter 文件if(fp!=NULL) / 載 入
21、counterfclose(fp) 。LoadInt(&counter,sizeof(counter),1,counter.dat) 。elsefp=fopen(counter.dat,wb) 。 / 若沒(méi)有 counter 文件,則創(chuàng)建一個(gè), counter 初始為 0。fclose(fp) 。 counter=0 。if(counter!=0) / 載入學(xué)生數(shù) 據(jù)LoadStruct(student,sizeof(struct student_info),counter,student_info.dat) 。/- 歡迎函數(shù) - charwelcome()char select 。w
22、hile(1)system(cls) 。 printf(tt 歡 迎 使 用 學(xué) 生 信 息 管 理 系 統(tǒng) n) 。printf(n) 。printf(1. 錄 入 學(xué) 生 信 息 nn) 。printf(2.瀏覽學(xué)生信息nn) 。printf(3.修改學(xué)生信息nn) 。printf(4.刪除學(xué)生信息nn) 。printf(5.排名學(xué)生成績(jī)nn) 。printf(6.瀏覽所有學(xué)生信息nn) 。printf(7.清除所有數(shù)據(jù)nn) 。printf(8.查詢排名nn) 。case 0:system(cls)exit()break初始化函數(shù) -/ 打 開(kāi) 計(jì) 數(shù) 變 量printf(0.退出nn)
23、 。printf(輸入相應(yīng)的功能序號(hào):) 。select=getchar() 。if(select=1|select=2|select=3|select=4|select=5|select=6|select=7|select=8|select=0) return select 。system(cls) 。continue 。/- 1. 錄入學(xué)生信息 - voidInputInfo()int i,n。printf( 需要錄入多少位學(xué)生的信息 :) 。 scanf(%d,&n) 。system(cls) 。for(i=1 。 i=n 。 i+)studentcounter=input()
24、。 counter+ 。PM=0。SortInfo(student) 。SaveStruct(student,sizeof(structstudent_info),counter,student_info.dat)SaveInt(&counter,sizeof(counter),1,counter.dat)void view()int i,numprintf( 請(qǐng)輸入需要游覽的學(xué)生信息的學(xué)號(hào) :) 。 scanf(%d,&num) 。getchar() 。 if(i=NumExist(student,num)=-1)printf( 不存在該學(xué)號(hào) , 按回車鍵返回 .) getc
25、har() 。system(cls) 。 return 。ViewInfo(&studenti) 。 printf(n 按回車鍵返回 .) 。 getchar() 。system(cls) 。 return 。/ void xiugai()int i,num 。char YN,select 。printf( 請(qǐng)輸入需要修改的學(xué)生信息的學(xué)號(hào) :) 。 scanf(%d,&num) 。getchar() 。if(i=NumExist(student,num)=-1)printf( 不存在該學(xué)號(hào) , 按回車鍵返回 .) getchar() 。system(cls) 。return 。
26、ViewInfo(&studenti) 。 printf( 是否要修改? (Y/N):) 。 scanf(%c,&YN) 。getchar() 。if(YN !=Y& YN !=y)/游覽學(xué)生信息printf( 修改取消 .) 。getchar()。system(cls)。return 。Jsystem(cls)。printf(1.學(xué)號(hào)n)printf(2.性別n)printf(3.家庭住址n)printf(4.聯(lián)系電話n)printf(5.語(yǔ)文成績(jī)n)printf(6.數(shù)學(xué)成績(jī)n)printf(7.外語(yǔ)成績(jī)n)printf(8.同學(xué)互評(píng)分n)printf(9.品德成績(jī)
27、n)printf(0.任課教師教師評(píng)分 n)scanf(%c,&select)switch(select)case 1:printf(修改學(xué)號(hào):)scanf(%d,&studenti.num)。 break 。case 2:printf(修改性別:)scanf(%s,&studenti.sex)。 break 。case 3:printf(修改家庭住址:)scanf(%s,&studenti.adress)。 break 。case 4:printf(修改聯(lián)系電話:)scanf(%s,&studenti.tel)。 break 。case 5:print
28、f(修改語(yǔ)文成績(jī):)scanf(%d,&studenti.chinese)。 break 。case 6:printf(修改數(shù)學(xué)成績(jī):)scanf(%d,&studenti.math)。 break 。case 7:printf(修改外語(yǔ)成績(jī):)scanf(%d,&studenti.english)。 break 。case 8:printf(修改同學(xué)互評(píng)分:)scanf(%d,&studenti.huping)。 break 。case 9:printf(修改品德成績(jī):)scanf(%d,&studenti.pingde)。 break 。case 0
29、:printf(修改任課教師評(píng)分:)scanf(%d,&studenti.jiaoping) 。 break 。SortInfo(student) 。SaveStruct(student,sizeof(structstudent_info),counter,student_info.dat)PM=0。getchar() 。printf( 修改完成 .) 。getchar() 。 system(cls) 。/-4.刪除學(xué)生信息 -void DeleteInfo()int i,j,num 。char YN 。printf( 請(qǐng)輸入要?jiǎng)h除的學(xué)生信息學(xué)號(hào) :) 。 scanf(%d,&
30、num) 。getchar() 。 if(i=NumExist(student,num)=-1)printf( 沒(méi)有該學(xué)號(hào) , 按回車鍵返回 .) getchar() 。system(cls) 。 return 。ViewInfo(&studenti) 。printf(n 確認(rèn)刪除 (Y/N):) 。 scanf(%c,&YN) 。getchar() 。 if(YN!=Y & YN!=y)printf(刪除取消 .) 。elsefor(j=i 。 jcounter-1。 j+)studentj=studentj+1 。counter- 。PM=0。 SaveStruct
31、(student,sizeof(structstudent_info),counter,student_info.dat) 。SaveInt(&counter,sizeof(counter),counter,counter.dat) printf(刪除完成 .) 。getchar() 。 system(cls) 。/- 平均分、綜合分排名 - void paiming1(struct student_info student)struct student_info *pN,*tempint i,j。for(i=0 。 icounter 。 i+) pi=&studenti 。f
32、or(i=0 。 icounter-1。 i+)for(j=i+1。 jave ave)temp=pi 。pi=pj 。pj=temp 。for(i=0 。 ipaiming1=i+1 。printf( 平均分排名完成 .n)。/ 綜合測(cè)評(píng)分排名void paiming2(struct student_info student)struct student_info *pN,*tempint i,j。for(i=0 。 icounter 。 i+) pi=&studenti 。for(i=0 。 icounter-1。 i+)for(j=i+1。 jzhongping zhongpin
33、g)temp=pi 。pi=pj 。pj=temp 。for(i=0 。 ipaiming2=i+1 。 printf( 綜合測(cè)評(píng)分排名完成 .n)。/-6. 瀏覽所有學(xué)生信息 -void ViewAll()int i 。for(i=0 。 inum) 。 getchar() 。if(NumExist(student,sp-num)!=-1)printf( 該學(xué)號(hào)已存在 , 請(qǐng)重新輸入 .) getchar() 。system(cls) 。 continue 。break 。printf( 錄入姓名 :) 。 gets(sp-name) 。printf( 錄入性別 :) 。 gets(sp-s
34、ex) 。printf( 錄入家庭住址 :) 。 gets(sp-adress) 。printf( 錄入聯(lián)系電話 :) 。 gets(sp-tel) 。printf(n 接下來(lái)錄入成績(jī) n) 。 printf(語(yǔ)文 :) 。scanf(%d,&sp-chinese) 。 printf(數(shù)學(xué) :) 。scanf(%d,&sp-math) 。 printf(英語(yǔ) :) 。scanf(%d,&sp-english) 。sp-ave=(sp-chinese+sp-math+sp-english)/3.0 printf( 同學(xué)互評(píng) :) 。scanf(%d,&sp-hup
35、ing)。printf( 品德分?jǐn)?shù) :) 。 scanf(%d,&sp-pingde)。printf( 教師評(píng)價(jià) :) 。 scanf(%d,&sp-jiaoping) 。 getchar() 。sp-zhongping=(sp-ave*0.6+sp-huping*0.1+sp- pingde*0.1+sp-jiaoping*0.2) 。printf( 錄入完畢,確認(rèn)信息是否正確 (Y/N) YN=getchar() 。getchar() 。 if(YN=Y| YN=y) break 。elseprintf( 按回車鍵重新錄入信息。 ) getchar() 。system(cl
36、s) 。 continue 。system(cls) 。return stu 。/排序函數(shù)void SortInfo(struct student_info student)int i,j 。struct student_info temp 。for(i=0 。 icounter-1。 i+)for(j=i+1 。 j=counter-1 。 j+)if(studenti.numnum,sp-name,sp-sex,sp-adress,sp-tel)。printf( 語(yǔ)文 t 數(shù)學(xué) t 英語(yǔ) t 互評(píng) t 品德 t 教評(píng) n)printf(%dt%dt%dt%dt%dt%dtn,sp-chin
37、ese,sp-math,sp-english,sp-huping,sp-pingde,sp-jiaoping)printf( 平均分 t 綜合分 n)。printf(%.2ft%.2fn,sp-ave,sp-zhongping)。if(PM=1)printf( 平均分排名 t 綜合測(cè)評(píng)分排名 n)。printf(%dtt%dn,sp-paiming1,sp-paiming2)/- 信息存盤 ( 結(jié)構(gòu)體 )void SaveStruct(structstudent_info*sp,int size,intfilename20)FILE *fp 。fp=fopen(filename,wb)。fwr
38、ite(sp,size,n,fp)。fclose(fp) 。讀取信息 ( 結(jié)構(gòu)體 )n,char/void LoadStruct(struct student_info filename20)FILE *fp 。 fp=fopen(filename,rb) 。fread(sp,size,n,fp) 。 fclose(fp) 。/-void SaveInt(int *p,int size,int n,char filename20)FILE *fp 。 fp=fopen(filename,wb) 。fwrite(p,size,n,fp) 。 fclose(fp) 。/-void LoadInt(
39、int *p,int size,int n,char filename20)FILE *fp 。 fp=fopen(filename,rb) 。fread(p,size,n,fp) 。 fclose(fp) 。/-*sp,int size,int信息存盤 ( 整型 )讀取信息 ( 整型 )檢索學(xué)號(hào)n,charint NumExist(struct student_info student,int num)int i。for(i=0。 icounter。 i+)if(studenti.num=num) return i 。return -1 。/源代碼結(jié)束六.收獲及體會(huì)這次的課程設(shè)計(jì)讓我進(jìn)步很大
40、。原來(lái)只是編寫一些小型的計(jì)算程序,排序程序。現(xiàn)在卻編 寫了一個(gè)這么長(zhǎng)的代碼。在編寫程序的過(guò)程中,我發(fā)現(xiàn)很多看似沒(méi)碰到過(guò)的情況都可以用 一些基礎(chǔ)的算法組合起來(lái)解決。比如學(xué)號(hào)排序。排序的問(wèn)題很容易讓人想起用冒泡法,但 是這一次我們進(jìn)行交換移位的不是整型數(shù)據(jù)了,而是結(jié)構(gòu)體數(shù)據(jù)。當(dāng)然,在設(shè)計(jì)過(guò)程中我 也考慮了盡量讓程序少占用儲(chǔ)存空間,少做運(yùn)算。在排名成績(jī)名次時(shí),采用的不是排列構(gòu) 造體數(shù)組,而是新建一個(gè)指針數(shù)組,來(lái)排列這個(gè)指針數(shù)組來(lái)代替排列構(gòu)造體數(shù)組。很顯 然,排列指針比排列構(gòu)造體要快捷多了。當(dāng)然,少占用硬盤空間也是一個(gè)重要準(zhǔn)則。每次 寫入硬盤上的數(shù)據(jù)都是有用的數(shù)據(jù),而不是把struct student
41、_infostudentN整組數(shù)組全部存儲(chǔ)。根據(jù) counter 判斷需要儲(chǔ)存到那一個(gè)元素結(jié)束。同時(shí)為了能在關(guān)閉程序后,下一次程序 運(yùn)行能保留上一次的數(shù)據(jù)。counter 作為計(jì)數(shù)變量也被儲(chǔ)存了起來(lái)。在程序剛剛啟動(dòng)的初始化過(guò)程中,加載counter.dat 和 student_info.dat 進(jìn)入內(nèi)存,使得上次數(shù)據(jù)保留下來(lái),并且可以隨意處理,利用。當(dāng)然,設(shè)計(jì)counter 變量并把 counter 變量保存起來(lái),是我這一次課程設(shè)計(jì)一直困擾我的地方。原來(lái)的程序每次都是只要求運(yùn)行一次,而現(xiàn)在需要的是多次運(yùn) 行,并且每次啟動(dòng)需要恢復(fù)上一次運(yùn)行時(shí)的狀態(tài)。于是,想到了將counter 單獨(dú)保存起來(lái)。這樣有了 counter 既可以恰到好處的,把學(xué)生數(shù)據(jù)從硬盤加載到內(nèi)存中。也可以保護(hù)程序不 會(huì)讀取沒(méi)有賦值的數(shù)組元素。這個(gè)數(shù)據(jù)區(qū)被限制在了counter 個(gè)元素內(nèi)。當(dāng)然,當(dāng)添加或刪除,學(xué)生信息時(shí),cou nter 需要加一或者減一重新限制數(shù)組可用范圍。總之,通
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)冷燙機(jī)行業(yè)深度研究分析報(bào)告
- 2025-2030年中國(guó)多用途閥門潤(rùn)滑密封劑項(xiàng)目投資可行性研究分析報(bào)告
- 2025-2030年中國(guó)車載導(dǎo)航通訊軟件行業(yè)深度研究分析報(bào)告
- 2025-2030年中國(guó)西洋參項(xiàng)目投資可行性研究分析報(bào)告
- 2025-2030年中國(guó)十字捆鈔機(jī)項(xiàng)目投資可行性研究分析報(bào)告
- 2025-2030年中國(guó)低噪音向心球軸承行業(yè)深度研究分析報(bào)告
- 天津全屋定制合同協(xié)議
- 外雇車合同協(xié)議
- 天使投資合同協(xié)議
- 商鋪部分轉(zhuǎn)租合同協(xié)議
- 國(guó)測(cè)數(shù)學(xué)備考方案
- 微生物的選擇培養(yǎng)和計(jì)數(shù)
- 少數(shù)民族維吾爾族民俗文化介紹圖文課件
- 互聯(lián)網(wǎng)信息審核員考試題庫(kù)大全-下(判斷、填空題匯總)
- 《中國(guó)馬克思主義與當(dāng)代》部分課后題-參考答案
- 2023架空導(dǎo)線覆冰過(guò)載能力計(jì)算
- 23秋國(guó)家開(kāi)放大學(xué)《液壓氣動(dòng)技術(shù)》形考任務(wù)1-3參考答案
- 科技論文寫作與學(xué)術(shù)規(guī)范課件
- 2022-2023學(xué)年福建省廈門市雙十中學(xué)高二下學(xué)期期中生物試題(解析版)
- 菠蘿蛋白酶的影響因素及影響其酶活力的因素
- 前言 馬克思主義中國(guó)化時(shí)代化的歷史進(jìn)程與理論成果
評(píng)論
0/150
提交評(píng)論