




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
學(xué)生成績管理程序本章課程是設(shè)計一個實(shí)用的小型學(xué)生成績管理程序,它要求不用鏈表,而用數(shù)組來設(shè)計這個程序,它有查詢和檢索功能,并且能夠?qū)χ付ㄎ募僮?,也可將多個文件組成一個文件。設(shè)計要求功能設(shè)計要求設(shè)計要求實(shí)現(xiàn)的功能較多,所以將它們分為幾個部分?jǐn)⑹?。建立文件可以使用默認(rèn)文件名或指定文件名將記錄存儲到文件;文件保存成功返回0,失敗返回-1;設(shè)置保存標(biāo)志savedTag作為是否對記錄進(jìn)行存儲操作的信息;寫同名文件將覆蓋原來文件的內(nèi)容;增加學(xué)生記錄可在已有記錄后面追加新的記錄可以隨時用它增加新的記錄,它們僅保存在結(jié)構(gòu)數(shù)組中;可以將一個文件讀入,追加在已有記錄之后;如果已經(jīng)采取文件追加的方式,在沒有保存到文件之前,將繼續(xù)保持文件追加狀態(tài),以便實(shí)現(xiàn)連續(xù)文件追加操作方式;如果沒有記錄存在,給出提示信息。顯示記錄如果沒有記錄可供顯示,給出提示信息;可以隨時顯示內(nèi)存中的記錄文件存儲可以按默認(rèn)名字或指定名字存儲記錄文件;存儲成功返回0.,否則返回-1;更新存儲標(biāo)志;讀取文件可以按照默認(rèn)名字或指定名字將記錄文件讀入內(nèi)存;讀取成功返回0,否則返回-1;可以將指定或默認(rèn)文件追加到現(xiàn)有記錄并更新記錄的尾部;可以將文件連續(xù)追加到現(xiàn)有記錄并更新記錄的名詞;更新存儲標(biāo)志;刪除記錄可以按“學(xué)好”、“姓名”、“名詞”方式刪除記錄;給出將刪除記錄的信息,經(jīng)確認(rèn)后在刪除;如果已經(jīng)是空表,刪除時給出提示信息并返回菜單;如果沒有要刪除的信息,輸出沒有找到的信息;應(yīng)該更新其他記錄的名詞;刪除操作權(quán)限于內(nèi)存,只有執(zhí)行存記錄時,才能覆蓋原記錄;修改記錄可以按“學(xué)號”、“姓名”、“名次”方式修改記錄內(nèi)容;給出將修改記錄的信息,經(jīng)確認(rèn)后進(jìn)行修改;如果已經(jīng)是空表,應(yīng)給出提示信息并返回主菜單;如果沒有找到需要要改的信息,輸出提示信息;應(yīng)該同時更新其他記錄的名詞;修改操作權(quán)限于內(nèi)存,只有進(jìn)行存儲操作時,才能覆蓋原記錄;更新存儲標(biāo)志;查詢記錄可以按“學(xué)號”、“姓名”、“名次”方式修改記錄內(nèi)容;能給出查詢記錄的信息;如果查詢的信息不存在,輸出提示信息;對記錄進(jìn)行排序可以按學(xué)好進(jìn)行升序或降序排序;可以按名稱進(jìn)行升序和降序排序;可以按名詞進(jìn)行升序或降序排序;如果屬于選擇錯誤,可以立即退出排序;更新存儲標(biāo)志;頭文件使用條件編譯定義頭文件;函數(shù)原型聲明;數(shù)據(jù)結(jié)構(gòu)及包含文件;測試程序應(yīng)列出測試大綱對程序進(jìn)行測試;應(yīng)保證測試用例測試到程序的各種邊緣情況;以上是基本要求,希望通過對本章設(shè)計的理解,重新考慮如何進(jìn)行設(shè)計。2.總體設(shè)計最初的整體規(guī)劃只是說明它們的可行性,不要求制定函數(shù)的具體實(shí)現(xiàn),甚至不需要考慮函數(shù)原型。完成整體規(guī)劃后,可以按照流程描述各個模塊之間的接口功能。本課程設(shè)計對模塊設(shè)計的要求如下:要求使用對文件方式實(shí)現(xiàn)設(shè)計;要求在各個文件內(nèi)實(shí)現(xiàn)結(jié)構(gòu)化設(shè)計;每個模塊作為一個單獨(dú)的C文件,每個文件內(nèi)的函數(shù)如表12—1所示,表中給出了各個函數(shù)的功能說明;宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。本設(shè)計由5個C文件(17個函數(shù))和一個頭文件組成,每個C文件都代表著某種特定的功能,它們的關(guān)系如表12-1所示。本章的設(shè)計將更加注意模塊化,以便展示C語言的編程風(fēng)格。程序包含文件的存、取過程。它的功能就是按輸入順序建立記錄。如果原來沒有記錄文件,可以重新建立一個文件;如果已經(jīng)有記錄,可以先把文件內(nèi)容讀入,然后把新記錄追加到原來記錄的尾部;也可以單獨(dú)建立新文件,以后再使用讀取文件的方法拼裝。由上述功能縫隙可以看到它的全貌。因?yàn)樗胁⒘羞x擇,所以可以用選擇菜單方面地實(shí)現(xiàn)。這個菜單具有10個選擇項,用switch語句可以實(shí)現(xiàn)這些選擇??梢杂煤啙嵉膫未a對它們進(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é)生成績結(jié)構(gòu)庫函數(shù)及函數(shù)原型聲明引用庫函數(shù)及函數(shù)3.函數(shù)設(shè)計為一些函數(shù)設(shè)計兩個返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個學(xué)生信息資料用一個StuInfo結(jié)構(gòu)來保存,用StuInfo數(shù)組全局變臉records來保存一批學(xué)生的信息資料。其中的宏定義表示數(shù)組初始大小。測試示例設(shè)計者制定詳細(xì)的測試計劃,然后根據(jù)測試計劃設(shè)計測試用例,對程序進(jìn)行徹底測試,程序設(shè)置的課程為char*subject[]={”語文”、”數(shù)學(xué)”、”英語”、”物理”、”化學(xué)”};可以修改課程名稱和樹木。這里減少科目以加快測試,即通過語句#defineNUM_SUMJECT2選取兩門課程。由于跟蹤測試的結(jié)果過多,這里只舉幾個例子,簡介針對程序功能進(jìn)行測試的方法菜單項及空表和空文件測試在沒有產(chǎn)生文件之前,對需要用到的菜單進(jìn)行選擇,看它們是否滿足要求。**************************這是一個**學(xué)生成績管理程序**可以對學(xué)生成績進(jìn)行管理**歡迎使用管理程序**************************增加學(xué)生信息修改學(xué)生信息顯示學(xué)生信息查詢學(xué)生信息刪除學(xué)生信息對學(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;}/*通過學(xué)號返回數(shù)組下標(biāo)*/intStudent_SearchByIndex(charid[]){inti;for(i=0;i<num;i++){if(strcmp(students[i].ID,id)==0){returni;}}return-1;}/*通過姓名返回數(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é)號","姓名","語文","數(shù)學(xué)","英語","平均成績");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("請輸入學(xué)號:");scanf("%s",&students[num].ID);getchar();printf("請輸入姓名:");scanf("%s",&students[num].Name);getchar();printf("語文:");scanf("%f",&students[num].Mark1);getchar();printf("數(shù)學(xué):");scanf("%f",&students[num].Mark2);getchar();printf("英語:");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("請輸入要修改的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要修改的學(xué)生信息為:\n");Student_DisplaySingle(index);printf("--請輸入新值--\n");printf("請輸入學(xué)號:");scanf("%s",&students[index].ID);getchar();printf("請輸入姓名:");scanf("%s",&students[index].Name);getchar();printf("語文:");scanf("%f",&students[index].Mark1);getchar();printf("數(shù)學(xué):");scanf("%f",&students[index].Mark2);getchar();printf("英語:");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("請輸入要刪除的學(xué)生的學(xué)號:");scanf("%s",&id);getchar();index=Student_SearchByIndex(id);if(index==-1){printf("學(xué)生不存在!\n");}else{printf("你要刪除的學(xué)生信息為:\n");Student_DisplaySingle(index);printf("是否真的要刪除?(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("請輸入要查詢的學(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é)號","姓名","語文","數(shù)學(xué)","英語","平均成績");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("寫入文件錯誤!\n");}for(i=0;i<num;i++){if(fwrite(&students[i],sizeof(structStudent),1,fp)!=1){printf("寫入文件錯誤!\n");}}fclose(fp);}/*主程序*/main(){intchoice,t;IO_ReadInfo();while(t!=0){/*主菜單*/printf("\n------學(xué)生成績管理系統(tǒng)------\n");printf("0.增加學(xué)生記錄\n");printf("1.修改學(xué)生記錄\n");printf("2.刪除學(xué)生記錄\n");printf("3.按姓名查詢學(xué)生記錄\n");printf("4.顯示學(xué)生成績\n");printf("5.對學(xué)生信息進(jìn)行排序\n");printf("6.保存學(xué)生信息至記錄文件\n");printf("7.退出?\n");printf("請選擇(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度景區(qū)景點(diǎn)精細(xì)化保潔服務(wù)協(xié)議
- 二零二五年度二手車轉(zhuǎn)讓及過戶手續(xù)協(xié)議
- 二零二五年度新型小區(qū)門衛(wèi)管理及應(yīng)急預(yù)案合同
- 2025年度綠色節(jié)能庫房租賃合同
- 2025年度高新技術(shù)企業(yè)員工勞動合同解除終止協(xié)議書
- 2025年度物業(yè)服務(wù)合同主體變更協(xié)議范本
- 二零二五年度大數(shù)據(jù)服務(wù)股權(quán)投資與轉(zhuǎn)讓協(xié)議
- 二零二五年度冷凍庫租賃及冷鏈物流配送中心建設(shè)合同
- 二零二五年度離婚協(xié)議中財產(chǎn)分割執(zhí)行監(jiān)督補(bǔ)充協(xié)議
- 蘇武牧羊傳紅色故事觀后感
- 柴油機(jī)維修施工方案
- 根管治療病例分享
- 數(shù)學(xué)課后訓(xùn)練:正態(tài)分布
- DB5115-T 129-2024《油樟優(yōu)樹選擇技術(shù)規(guī)程》
- (完整版)西泠印社出版社三年級下冊《書法練習(xí)指導(dǎo)》完整教案
- 《電工儀表與測量》課程教學(xué)大綱
- 【企業(yè)盈利能力探析的國內(nèi)外文獻(xiàn)綜述2400字】
- 危急值的考試題及答案
- 食品安全制度目錄
- 新犯罪學(xué)完整版課件電子教案
- 2025新高考方案一輪物理參考答案與詳解
評論
0/150
提交評論