




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
學(xué)生成績(jī)管理程序本章課程是設(shè)計(jì)一個(gè)實(shí)用的小型學(xué)生成績(jī)管理程序,它要求不用鏈表,而用數(shù)組來(lái)設(shè)計(jì)這個(gè)程序,它有查詢和檢索功能,并且能夠?qū)χ付ㄎ募僮?,也可將多個(gè)文件組成一個(gè)文件。設(shè)計(jì)要求功能設(shè)計(jì)要求設(shè)計(jì)要求實(shí)現(xiàn)的功能較多,所以將它們分為幾個(gè)部分?jǐn)⑹觥=⑽募梢允褂媚J(rèn)文件名或指定文件名將記錄存儲(chǔ)到文件;文件保存成功返回0,失敗返回-1;設(shè)置保存標(biāo)志savedTag作為是否對(duì)記錄進(jìn)行存儲(chǔ)操作的信息;寫同名文件將覆蓋原來(lái)文件的內(nèi)容;增加學(xué)生記錄可在已有記錄后面追加新的記錄可以隨時(shí)用它增加新的記錄,它們僅保存在結(jié)構(gòu)數(shù)組中;可以將一個(gè)文件讀入,追加在已有記錄之后;如果已經(jīng)采取文件追加的方式,在沒有保存到文件之前,將繼續(xù)保持文件追加狀態(tài),以便實(shí)現(xiàn)連續(xù)文件追加操作方式;如果沒有記錄存在,給出提示信息。顯示記錄如果沒有記錄可供顯示,給出提示信息;可以隨時(shí)顯示內(nèi)存中的記錄文件存儲(chǔ)可以按默認(rèn)名字或指定名字存儲(chǔ)記錄文件;存儲(chǔ)成功返回0.,否則返回-1;更新存儲(chǔ)標(biāo)志;讀取文件可以按照默認(rèn)名字或指定名字將記錄文件讀入內(nèi)存;讀取成功返回0,否則返回-1;可以將指定或默認(rèn)文件追加到現(xiàn)有記錄并更新記錄的尾部;可以將文件連續(xù)追加到現(xiàn)有記錄并更新記錄的名詞;更新存儲(chǔ)標(biāo)志;刪除記錄可以按“學(xué)好”、“姓名”、“名詞”方式刪除記錄;給出將刪除記錄的信息,經(jīng)確認(rèn)后在刪除;如果已經(jīng)是空表,刪除時(shí)給出提示信息并返回菜單;如果沒有要?jiǎng)h除的信息,輸出沒有找到的信息;應(yīng)該更新其他記錄的名詞;刪除操作權(quán)限于內(nèi)存,只有執(zhí)行存記錄時(shí),才能覆蓋原記錄;修改記錄可以按“學(xué)號(hào)”、“姓名”、“名次”方式修改記錄內(nèi)容;給出將修改記錄的信息,經(jīng)確認(rèn)后進(jìn)行修改;如果已經(jīng)是空表,應(yīng)給出提示信息并返回主菜單;如果沒有找到需要要改的信息,輸出提示信息;應(yīng)該同時(shí)更新其他記錄的名詞;修改操作權(quán)限于內(nèi)存,只有進(jìn)行存儲(chǔ)操作時(shí),才能覆蓋原記錄;更新存儲(chǔ)標(biāo)志;查詢記錄可以按“學(xué)號(hào)”、“姓名”、“名次”方式修改記錄內(nèi)容;能給出查詢記錄的信息;如果查詢的信息不存在,輸出提示信息;對(duì)記錄進(jìn)行排序可以按學(xué)好進(jìn)行升序或降序排序;可以按名稱進(jìn)行升序和降序排序;可以按名詞進(jìn)行升序或降序排序;如果屬于選擇錯(cuò)誤,可以立即退出排序;更新存儲(chǔ)標(biāo)志;頭文件使用條件編譯定義頭文件;函數(shù)原型聲明;數(shù)據(jù)結(jié)構(gòu)及包含文件;測(cè)試程序應(yīng)列出測(cè)試大綱對(duì)程序進(jìn)行測(cè)試;應(yīng)保證測(cè)試用例測(cè)試到程序的各種邊緣情況;以上是基本要求,希望通過(guò)對(duì)本章設(shè)計(jì)的理解,重新考慮如何進(jìn)行設(shè)計(jì)。2.總體設(shè)計(jì)最初的整體規(guī)劃只是說(shuō)明它們的可行性,不要求制定函數(shù)的具體實(shí)現(xiàn),甚至不需要考慮函數(shù)原型。完成整體規(guī)劃后,可以按照流程描述各個(gè)模塊之間的接口功能。本課程設(shè)計(jì)對(duì)模塊設(shè)計(jì)的要求如下:要求使用對(duì)文件方式實(shí)現(xiàn)設(shè)計(jì);要求在各個(gè)文件內(nèi)實(shí)現(xiàn)結(jié)構(gòu)化設(shè)計(jì);每個(gè)模塊作為一個(gè)單獨(dú)的C文件,每個(gè)文件內(nèi)的函數(shù)如表12—1所示,表中給出了各個(gè)函數(shù)的功能說(shuō)明;宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。本設(shè)計(jì)由5個(gè)C文件(17個(gè)函數(shù))和一個(gè)頭文件組成,每個(gè)C文件都代表著某種特定的功能,它們的關(guān)系如表12-1所示。本章的設(shè)計(jì)將更加注意模塊化,以便展示C語(yǔ)言的編程風(fēng)格。程序包含文件的存、取過(guò)程。它的功能就是按輸入順序建立記錄。如果原來(lái)沒有記錄文件,可以重新建立一個(gè)文件;如果已經(jīng)有記錄,可以先把文件內(nèi)容讀入,然后把新記錄追加到原來(lái)記錄的尾部;也可以單獨(dú)建立新文件,以后再使用讀取文件的方法拼裝。由上述功能縫隙可以看到它的全貌。因?yàn)樗胁⒘羞x擇,所以可以用選擇菜單方面地實(shí)現(xiàn)。這個(gè)菜單具有10個(gè)選擇項(xiàng),用switch語(yǔ)句可以實(shí)現(xiàn)這些選擇。可以用簡(jiǎn)潔的偽碼對(duì)它們進(jìn)行描述,因?yàn)椴⒉粡?fù)雜,所以不再贅述。源文件函數(shù)名或其他成分功能student.c函數(shù)名或其他成分功能add_disp.cmain總控函數(shù)menu_select菜單選擇handle_menu菜單處理newRecords新建學(xué)生信息記錄quit結(jié)束運(yùn)行que_remv_modi.cshowTable打印表頭getIndex按升序排序的位置addRecord在表尾追加信息display顯示信息save_loadremoveRecord刪除指定的記錄findRecord查找指定的記錄queryInfo查詢指定學(xué)生的信息copyRecord復(fù)制記錄modifyRecord修改指定學(xué)生的信息sort.csortInfo排序student.h常數(shù)提供常數(shù)結(jié)構(gòu)聲明學(xué)生成績(jī)結(jié)構(gòu)庫(kù)函數(shù)及函數(shù)原型聲明引用庫(kù)函數(shù)及函數(shù)3.函數(shù)設(shè)計(jì)為一些函數(shù)設(shè)計(jì)兩個(gè)返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個(gè)學(xué)生信息資料用一個(gè)StuInfo結(jié)構(gòu)來(lái)保存,用StuInfo數(shù)組全局變臉records來(lái)保存一批學(xué)生的信息資料。其中的宏定義表示數(shù)組初始大小。測(cè)試示例設(shè)計(jì)者制定詳細(xì)的測(cè)試計(jì)劃,然后根據(jù)測(cè)試計(jì)劃設(shè)計(jì)測(cè)試用例,對(duì)程序進(jìn)行徹底測(cè)試,程序設(shè)置的課程為char*subject[]={”語(yǔ)文”、”數(shù)學(xué)”、”英語(yǔ)”、”物理”、”化學(xué)”};可以修改課程名稱和樹木。這里減少科目以加快測(cè)試,即通過(guò)語(yǔ)句#defineNUM_SUMJECT2選取兩門課程。由于跟蹤測(cè)試的結(jié)果過(guò)多,這里只舉幾個(gè)例子,簡(jiǎn)介針對(duì)程序功能進(jìn)行測(cè)試的方法菜單項(xiàng)及空表和空文件測(cè)試在沒有產(chǎn)生文件之前,對(duì)需要用到的菜單進(jìn)行選擇,看它們是否滿足要求。**************************這是一個(gè)**學(xué)生成績(jī)管理程序**可以對(duì)學(xué)生成績(jī)進(jìn)行管理**歡迎使用管理程序**************************增加學(xué)生信息修改學(xué)生信息顯示學(xué)生信息查詢學(xué)生信息刪除學(xué)生信息對(duì)學(xué)生信息進(jìn)行排序保存學(xué)生信息至記錄文件2.源程序:#include<stdio.h>#include<string.h>/*定義學(xué)生結(jié)構(gòu)體*/structStudent{charID[20];charName[20];floatMark1;floatMark2;floatMark3;floatAverage;};/*聲明學(xué)生數(shù)組及學(xué)生數(shù)量*/structStudentstudents[1000];intnum;/*求平均值*/floatAvg(structStudentstu){return(stu.Mark1+stu.Mark2+stu.Mark3)/3;}/*通過(guò)學(xué)號(hào)返回?cái)?shù)組下標(biāo)*/intStudent_SearchByIndex(charid[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].ID,id)==0){returni;}}return-1;}/*通過(guò)姓名返回?cái)?shù)組下標(biāo)*/intStudent_SearchByName(charname[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].Name,name)==0){returni;}}return-1;}/*顯示單條學(xué)生記錄*/voidStudent_DisplaySingle(intindex){printf("%10s%10s%8s%8s%8s%10s\n","學(xué)號(hào)","姓名","語(yǔ)文","數(shù)學(xué)","英語(yǔ)","平均成績(jī)");printf("-------------------------------------------------------------\n");printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);}/*插入學(xué)生信息*/voidStudent_Insert(){while(1){printf("請(qǐng)輸入學(xué)號(hào):");scanf("%s",&students[num].ID);getchar();printf("請(qǐng)輸入姓名:");scanf("%s",&students[num].Name);getchar();printf("語(yǔ)文:");scanf("%f",&students[num].Mark1);getchar();printf("數(shù)學(xué):");scanf("%f",&students[num].Mark2);getchar();printf("英語(yǔ):");scanf("%f",&students[num].Mark3);getchar();students[num].Average=Avg(students[num]);num++;printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*修改學(xué)生信息*/voidStudent_Modify(){floatmark1,mark2,mark3;while(1){charid[20];intindex;printf("請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào):");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要修改的學(xué)生信息為:\n");Student_DisplaySingle(index);printf("--請(qǐng)輸入新值--\n");printf("請(qǐng)輸入學(xué)號(hào):");scanf("%s",&students[index].ID);getchar();printf("請(qǐng)輸入姓名:");scanf("%s",&students[index].Name);getchar();printf("語(yǔ)文:");scanf("%f",&students[index].Mark1);getchar();printf("數(shù)學(xué):");scanf("%f",&students[index].Mark2);getchar();printf("英語(yǔ):");scanf("%f",&students[index].Mark3);getchar();students[index].Average=Avg(students[index]);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*刪除學(xué)生信息*/voidStudent_Delete(){inti;while(1){charid[20];intindex;printf("請(qǐng)輸入要?jiǎng)h除的學(xué)生的學(xué)號(hào):");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要?jiǎng)h除的學(xué)生信息為:\n");Student_DisplaySingle(index);printf("是否真的要?jiǎng)h除?(y/n)");if(getchar()=='y'){for(i=index;i<num-1;i++){students[i]=students[i+1];}num--;}getchar();}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*按姓名查詢*/voidStudent_Select(){while(1){charname[20];intindex;printf("請(qǐng)輸入要查詢的學(xué)生的姓名:");scanf("%s",&name);getchar();index=Student_SearchByName(name);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要查詢的學(xué)生信息為:\n");Student_DisplaySingle(index);}printf("是否繼續(xù)?(y/n)");if(getchar()=='n'){break;}}}/*按平均值排序*/voidStudent_SortByAverage(){inti,j;structStudenttmp;for(i=0;i<num;i++){for(j=1;j<num-i;j++){if(students[j-1].Average<students[j].Average){tmp=students[j-1];students[j-1]=students[j];students[j]=tmp;}}}}/*顯示學(xué)生信息*/voidStudent_Display(){inti;printf("%10s%10s%8s%8s%8s%10s\n","學(xué)號(hào)","姓名","語(yǔ)文","數(shù)學(xué)","英語(yǔ)","平均成績(jī)");printf("-------------------------------------------------------------\n");for(i=0;i<num;i++){printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);}}/*將學(xué)生信息從文件讀出*/voidIO_ReadInfo(){FILE*fp;inti;if((fp=fopen("Database.txt","rb"))==NULL){printf("不能打開文件!\n");}if(fread(&num,sizeof(int),1,fp)!=1){num=-1;}else{for(i=0;i<num;i++){fread(&students[i],sizeof(structStudent),1,fp);}}fclose(fp);}/*將學(xué)生信息寫入文件*/voidIO_WriteInfo(){FILE*fp;inti;if((fp=fopen("Database.txt","wb"))==NULL){printf("不能打開文件!\n");return;}if(fwrite(&num,sizeof(int),1,fp)!=1){printf("寫入文件錯(cuò)誤!\n");}for(i=0;i<num;i++){if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1){printf("寫入文件錯(cuò)誤!\n");}}fclose(fp);}/*主程序*/main(){intchoice,t;IO_ReadInfo();while(t!=0){/*主菜單*/printf("\n------學(xué)生成績(jī)管理系統(tǒng)------\n");printf("0.增加學(xué)生記錄\n");printf("1.修改學(xué)生記錄\n");printf("2.刪除學(xué)生記錄\n");printf("3.按姓名查詢學(xué)生記錄\n");printf("4.顯示學(xué)生成績(jī)\n");printf("5.對(duì)學(xué)生信息進(jìn)行排序\n");printf("6.保存學(xué)生信息至記錄文件\n");printf("7.退出?\n");printf("請(qǐng)選擇(0-7):");scanf("%d",&choice);getchar();switch(choice){case0:Student_Insert();break;case1:Student_Modify();break;case2:Student_Delete();break;case3:Student_Select();break;case4: Student_Display();break; case5:Student_SortByAverage(); break;case6:printf
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司終止股東合同樣本
- 企業(yè)經(jīng)銷合同樣本
- 兒子借款買房合同樣本
- 公裝水電合同樣本
- 2025水產(chǎn)購(gòu)銷合同模板
- 2025標(biāo)準(zhǔn)版產(chǎn)品代理銷售合同范本
- 高效答題策略2024年稅務(wù)師試題及答案
- 2024年農(nóng)藝師考試的相關(guān)考點(diǎn)試題及答案
- 福建事業(yè)單位考試表格使用指南試題及答案
- 探討2024年農(nóng)業(yè)經(jīng)理人考試的核心考查內(nèi)容與戰(zhàn)術(shù)試題及答案
- 山東淄博博山獼猴桃產(chǎn)業(yè)發(fā)展現(xiàn)狀與對(duì)策建議
- 人教版大單元教學(xué)設(shè)計(jì)-小學(xué)四年級(jí)數(shù)學(xué)下冊(cè)第五單元三角形
- 中建項(xiàng)目商務(wù)管理手冊(cè)
- 承插型盤扣式腳手架作業(yè)指導(dǎo)書
- 二氧化碳的檢測(cè)
- 《菊次郎的夏天》電影賞析
- 佳能相機(jī)PowerShot SX60 HS使用說(shuō)明書
- GB/T 44311-2024適老環(huán)境評(píng)估導(dǎo)則
- 2025屆高考語(yǔ)文復(fù)習(xí):補(bǔ)寫語(yǔ)句+課件
- 康養(yǎng)服務(wù)專業(yè)群建設(shè)方案
- 人教版部編版統(tǒng)編版一年級(jí)語(yǔ)文上冊(cè)漢語(yǔ)拼音9《y+w》課件
評(píng)論
0/150
提交評(píng)論