c語言課程設(shè)計(jì)(3)學(xué)生成績管理系統(tǒng)_第1頁
c語言課程設(shè)計(jì)(3)學(xué)生成績管理系統(tǒng)_第2頁
c語言課程設(shè)計(jì)(3)學(xué)生成績管理系統(tǒng)_第3頁
c語言課程設(shè)計(jì)(3)學(xué)生成績管理系統(tǒng)_第4頁
c語言課程設(shè)計(jì)(3)學(xué)生成績管理系統(tǒng)_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

學(xué)生成績管理程序本章課程是設(shè)計(jì)一個(gè)實(shí)用的小型學(xué)生成績管理程序,它要求不用鏈表,而用數(shù)組來設(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作為是否對記錄進(jìn)行存儲(chǔ)操作的信息;寫同名文件將覆蓋原來文件的內(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)容;能給出查詢記錄的信息;如果查詢的信息不存在,輸出提示信息;對記錄進(jìn)行排序可以按學(xué)好進(jìn)行升序或降序排序;可以按名稱進(jìn)行升序和降序排序;可以按名詞進(jìn)行升序或降序排序;如果屬于選擇錯(cuò)誤,可以立即退出排序;更新存儲(chǔ)標(biāo)志;頭文件使用條件編譯定義頭文件;函數(shù)原型聲明;數(shù)據(jù)結(jié)構(gòu)及包含文件;測試程序應(yīng)列出測試大綱對程序進(jìn)行測試;應(yīng)保證測試用例測試到程序的各種邊緣情況;以上是基本要求,希望通過對本章設(shè)計(jì)的理解,重新考慮如何進(jìn)行設(shè)計(jì)。2.總體設(shè)計(jì)最初的整體規(guī)劃只是說明它們的可行性,不要求制定函數(shù)的具體實(shí)現(xiàn),甚至不需要考慮函數(shù)原型。完成整體規(guī)劃后,可以按照流程描述各個(gè)模塊之間的接口功能。本課程設(shè)計(jì)對模塊設(shè)計(jì)的要求如下:要求使用對文件方式實(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ù)的功能說明;宏和數(shù)據(jù)結(jié)構(gòu)等放在頭文件中,并使用條件編譯。本設(shè)計(jì)由5個(gè)C文件(17個(gè)函數(shù))和一個(gè)頭文件組成,每個(gè)C文件都代表著某種特定的功能,它們的關(guān)系如表12-1所示。本章的設(shè)計(jì)將更加注意模塊化,以便展示C語言的編程風(fēng)格。程序包含文件的存、取過程。它的功能就是按輸入順序建立記錄。如果原來沒有記錄文件,可以重新建立一個(gè)文件;如果已經(jīng)有記錄,可以先把文件內(nèi)容讀入,然后把新記錄追加到原來記錄的尾部;也可以單獨(dú)建立新文件,以后再使用讀取文件的方法拼裝。由上述功能縫隙可以看到它的全貌。因?yàn)樗胁⒘羞x擇,所以可以用選擇菜單方面地實(shí)現(xiàn)。這個(gè)菜單具有10個(gè)選擇項(xiàng),用switch語句可以實(shí)現(xiàn)這些選擇。可以用簡潔的偽碼對它們進(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è)計(jì)為一些函數(shù)設(shè)計(jì)兩個(gè)返回值以區(qū)分其執(zhí)行結(jié)果是否正確。每個(gè)學(xué)生信息資料用一個(gè)StuInfo結(jié)構(gòu)來保存,用StuInfo數(shù)組全局變臉records來保存一批學(xué)生的信息資料。其中的宏定義表示數(shù)組初始大小。測試示例設(shè)計(jì)者制定詳細(xì)的測試計(jì)劃,然后根據(jù)測試計(jì)劃設(shè)計(jì)測試用例,對程序進(jìn)行徹底測試,程序設(shè)置的課程為char*subject[]={”語文”、”數(shù)學(xué)”、”英語”、”物理”、”化學(xué)”};可以修改課程名稱和樹木。這里減少科目以加快測試,即通過語句#defineNUM_SUMJECT2選取兩門課程。由于跟蹤測試的結(jié)果過多,這里只舉幾個(gè)例子,簡介針對程序功能進(jìn)行測試的方法菜單項(xiàng)及空表和空文件測試在沒有產(chǎn)生文件之前,對需要用到的菜單進(jìn)行選擇,看它們是否滿足要求。**************************這是一個(gè)**學(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é)號(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;}/*通過姓名返回?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)","姓名","語文","數(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é)號(hào):");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é)號(hào):");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é)號(hào):");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("請輸入要?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("請輸入要查詢的學(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)","姓名","語文","數(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("寫入文件錯(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é)生成績管理系統(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)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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

提交評論