版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
重慶科技學(xué)院《C語(yǔ)言課程設(shè)計(jì)》課程設(shè)計(jì)報(bào)告軟件需求說(shuō)明1.1程序的界面要求①整個(gè)系統(tǒng)均用C語(yǔ)言實(shí)現(xiàn);②利用結(jié)構(gòu)體數(shù)組來(lái)實(shí)現(xiàn)學(xué)生成績(jī)的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì);③系統(tǒng)具有輸入、顯示、查詢、刪除、排序、插入、保存、讀取等基本功能;④系統(tǒng)的各個(gè)功能模塊都用函數(shù)的形式來(lái)實(shí)現(xiàn);⑤要求能將學(xué)生成績(jī)信息保存在文件中;⑥要求能從文件中讀取學(xué)生信息并進(jìn)行相關(guān)處理。1.2程序的功能每一條記錄包括一個(gè)學(xué)生的學(xué)號(hào)、姓名、3門成績(jī)、平均成績(jī)。輸入功能:進(jìn)入后可以進(jìn)行多條記錄的輸入并保存。顯示功能:完成全部學(xué)生或滿足指定條件記錄的顯示。查找功能:完成按學(xué)號(hào)或姓名查找學(xué)生記錄,并顯示。排序功能:按學(xué)生學(xué)號(hào)或平均成績(jī)進(jìn)行排序。插入功能:按學(xué)生學(xué)號(hào)或平均成績(jī)高低插入一條學(xué)生記錄。保存功能:將學(xué)生記錄保存在自定義名稱的文件中。讀取功能:將保存在文件中的學(xué)生記錄讀取出來(lái)。有一個(gè)文本菜單來(lái)調(diào)用各個(gè)功能。系統(tǒng)分析與設(shè)計(jì)2.1程序的數(shù)據(jù)(結(jié)構(gòu))分析2.1.1定義結(jié)構(gòu)體本程序需要定義多個(gè)結(jié)構(gòu)體,用于存放學(xué)生的相關(guān)信息typedefstructCStudent{ charName[32]; /*學(xué)生姓名*/ intSno; /*學(xué)號(hào)*/ doubledDataStruct;/*數(shù)據(jù)結(jié)構(gòu)成績(jī)*/ doubledMath;/*數(shù)學(xué)成績(jī)*/ doubledEnglish;/*英語(yǔ)成績(jī)*/ doubleaver; /*平均成績(jī)*/}CStudent;2.1.2main()主函數(shù)主函數(shù)功能比較簡(jiǎn)單,用while循環(huán)語(yǔ)句和switch多重選擇語(yǔ)句來(lái)顯示主界面和調(diào)用函數(shù)。在主函數(shù)的前面要寫必須的頭文件,預(yù)定義語(yǔ)句以及全局變量的結(jié)構(gòu)體。2.1.3del()刪除函數(shù)在C語(yǔ)言中無(wú)法做到刪除和移動(dòng)數(shù)據(jù),所以刪除記錄要先將所有記錄從文件中讀出,刪除后再將記錄寫回文件中。每讀出一條記錄,按其在文件中的順序做好指針鏈接關(guān)系,然后查處要?jiǎng)h除的學(xué)生信息,將其在鏈表中刪除,最后再將變動(dòng)的記錄重新寫回文件中。用指針,else/if結(jié)構(gòu)來(lái)實(shí)現(xiàn)查找出要?jiǎng)h除的學(xué)生。2.1.4insert()插入函數(shù)在插入函數(shù)中利用指針,while循環(huán)和else/if語(yǔ)句來(lái)實(shí)現(xiàn)輸入的數(shù)據(jù)按照插入相 應(yīng)的位置。2.1.5讀取函數(shù)利用指針、鏈表打開已經(jīng)儲(chǔ)存的信息。voidRead() /*從文檔讀取*/{ charp[128]="file.txt"; FILE*fp; if((fp=fopen("file.txt","r"))==NULL) { printf("Openfile%serror!Strikeanykeytoexit!",p); system("pause"); exit(0); } SavePos=0; while(!feof(fp)) { fscanf(fp,"Name:%s\n",example[SavePos].Name); fscanf(fp,"Sno:%d\n",&example[SavePos].Sno); fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct); fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath); fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish); fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver); fscanf(fp,"*********************\n"); SavePos++; } fclose(fp); Display();}2.1.6save()保存函數(shù)主要利用指針來(lái)把信息保存在文件中。voidSave() /*保存到文檔*/{ intj=0; constcharfname[128]="file.txt"; FILE*fp; //openfile fp=fopen(fname,"w"); //writeinfile for(j=0;j<SavePos;j++) { //fprintf(fp,"Thisisthefile.\n") fprintf(fp,"Name:%s\n",example[j].Name); fprintf(fp,"Sno:%d\n",example[j].Sno); fprintf(fp,"Score(DS)%f\n",example[j].dDataStruct); fprintf(fp,"Score(M)%f\n",example[j].dMath); fprintf(fp,"Score(E)%f\n",example[j].dEnglish); fprintf(fp,"Score(Average)%f\n",example[j].dEnglish); fprintf(fp,"*********************\n"); } //closefile fclose(fp); printf("保存成功\n");}2.2程序的算法設(shè)計(jì)學(xué)生成績(jī)管理系統(tǒng)輸出信息輸出信息整理信息輸入信息修改信息修改信息查詢信息輸出至文件輸出至屏幕刪除學(xué)生信息輸出至文件輸出至屏幕刪除學(xué)生信息學(xué)生信息排序插入學(xué)生信息按學(xué)號(hào)查詢按姓名查詢從鍵盤輸入從學(xué)生信息排序插入學(xué)生信息按學(xué)號(hào)查詢按姓名查詢從鍵盤輸入從文件讀入圖2.2學(xué)生成績(jī)管理系統(tǒng)功能模塊圖開始開始開始按學(xué)號(hào)按學(xué)號(hào)輸入name輸入輸入name輸入輸入numi=j 1輸入numi=j輸出數(shù)據(jù)輸入數(shù)據(jù)輸出數(shù)據(jù)輸入數(shù)據(jù)結(jié)束結(jié)束按9 按0圖2.2輸入模塊圖2.2查詢模塊開始輸入學(xué)號(hào)輸入學(xué)號(hào)該學(xué)號(hào)已存在該學(xué)號(hào)已存在 Y輸入信息N輸入信息保存并結(jié)束保存并結(jié)束圖2.2插入模塊程序的實(shí)現(xiàn)3.1主函數(shù)intmain(){ intchoice1=1,choice2; inti=1,s=1; do { printf("歡迎使用學(xué)生成績(jī)管理系統(tǒng)\n"); printf("請(qǐng)選擇程序功能\n");printf("1、信息錄入\n"); printf("2、信息查詢\n"); printf("3、插入\n"); printf("4、排序\n"); printf("5、保存\n"); printf("6、刪除\n"); printf("7、讀取并顯示\n"); printf("8、退出程序\n"); scanf("%d",&choice1);定義數(shù)據(jù)結(jié)構(gòu)用一個(gè)類的嵌套定義structstudent*next;用整型數(shù)據(jù)定義學(xué)號(hào)和成績(jī),用char定義姓名。typedefstructCStudent{ charName[32]; /*學(xué)生姓名*/ intSno; /*學(xué)號(hào)*/ doubledDataStruct;/*數(shù)據(jù)結(jié)構(gòu)成績(jī)*/ doubledMath;/*數(shù)學(xué)成績(jī)*/ doubledEnglish;/*英語(yǔ)成績(jī)*/ doubleaver; /*平均成績(jī)*/}CStudent;CStudentexample[1024];intSavePos=0;3.3函數(shù)說(shuō)明鏈表定義頭指針stu*s,switch函數(shù)中用了8個(gè)case。case1: Record(SavePos);break;//錄入學(xué)生信息case2:Search_Name();Search_Sno();break;//查詢學(xué)生信息case3:Insert_Score();break;//插入學(xué)生信息case4: Sort_Sno();Sort_Score();break;//學(xué)生信息排序case5:Save()student(s);break;//保存學(xué)生信息case6: Delete_Sno();Delete_Name();break;//刪除學(xué)生信息case7:Read()student(s);break;//讀取學(xué)生信息case8: exit(0);break;//退出系統(tǒng)文件錄入功能voidRecord(intj)/*錄入*/{ printf("信息錄入\n"); printf("姓名:"); scanf("%s",example[j].Name); printf("學(xué)號(hào):"); scanf("%d",&example[j].Sno); printf("數(shù)據(jù)結(jié)構(gòu):"); scanf("%lf",&example[j].dDataStruct); printf("數(shù)學(xué):"); scanf("%lf",&example[j].dMath); printf("英語(yǔ):"); scanf("%lf",&example[j].dEnglish); printf("平均成績(jī):"); scanf("%lf",&example[j].aver);文件讀取功能讀取功能運(yùn)用文件指針的方法,與While循環(huán)語(yǔ)句完成。voidRead() /*從文檔讀取*/{ charp[128]="file.txt"; FILE*fp; if((fp=fopen("file.txt","r"))==NULL) { printf("Openfile%serror!Strikeanykeytoexit!",p); system("pause"); exit(0); } SavePos=0; while(!feof(fp)) { fscanf(fp,"Name:%s\n",example[SavePos].Name); fscanf(fp,"Sno:%d\n",&example[SavePos].Sno); fscanf(fp,"Score(DS)%lf\n",&example[SavePos].dDataStruct); fscanf(fp,"Score(M)%lf\n",&example[SavePos].dMath); fscanf(fp,"Score(E)%lf\n",&example[SavePos].dEnglish); fscanf(fp,"Score(Average)%lf\n",&example[SavePos].aver); fscanf(fp,"*********************\n"); SavePos++; } fclose(fp); Display();}插入功能首先建立循環(huán),檢測(cè)插入的學(xué)號(hào)是否已存在,若存在則停止插入;若不存在,則繼續(xù)進(jìn)行輸入學(xué)生信息。voidInsert_Score(){ inti,j,m,flag; i=SavePos; do { flag=1; while(flag) { flag=0; printf("請(qǐng)輸入第%d位:\n",i+1); printf("請(qǐng)輸入學(xué)號(hào)檢驗(yàn)該生是否已經(jīng)存在\n"); scanf("%d",&example[i].Sno); for(j=0;j<i;j++) if(example[i].Sno==example[j].Sno) { printf("已存在該號(hào),請(qǐng)檢查重新錄入!\n"); flag=1; break;/*重復(fù)立即退該層循環(huán),提高判斷速度*/ } Record(i); printf("錄入完畢\n\n"); Sort_Score(); }while(0);}程序使用說(shuō)明4.1主頁(yè)面將寫好的程序用MicrosoftVisualC++6.0打開并運(yùn)行,首先出現(xiàn)的是主頁(yè)面,如圖4-1所示。圖4-1錄入信息頁(yè)面輸入數(shù)字1,按提示進(jìn)行學(xué)生成績(jī)的錄入,并按數(shù)字5保存信息。繼續(xù)錄入按數(shù)字9,結(jié)束錄入按數(shù)字0。如圖4-2圖4-2信息查詢頁(yè)面返回主頁(yè)面,按數(shù)字2,進(jìn)行學(xué)生信息查詢,分為按學(xué)號(hào)查詢和姓名查詢。如圖4-3-1。圖4-3-1按數(shù)字1與按數(shù)字2查詢結(jié)果頁(yè)面如圖4-3-2所示。圖4-3-2圖4-3-2插入信息頁(yè)面返回主頁(yè)面,按數(shù)字3,首先檢驗(yàn)該學(xué)號(hào)是否存在,若存在則程序停止錄入,否則繼續(xù)進(jìn)行錄入。如圖4-4-1所示。圖4-4-1排序功能頁(yè)面返回主頁(yè)面,按數(shù)字4進(jìn)行學(xué)生信息的排序。分為按學(xué)號(hào)排序和按平均成績(jī)排序。如圖4-5-1所示。 圖4-5-14.6信息刪除頁(yè)面返回主頁(yè)面,按數(shù)字6進(jìn)行學(xué)生信息刪除頁(yè)面,分為按學(xué)號(hào)刪除和按姓名刪除,如圖4-6-1所示。
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工責(zé)任制培訓(xùn)
- 員工類素質(zhì)培訓(xùn)
- 員工激勵(lì)培訓(xùn)方案
- 員工服裝管理培訓(xùn)
- 倉(cāng)儲(chǔ)管理培訓(xùn)生述職報(bào)告
- 倉(cāng)儲(chǔ)物流培訓(xùn)課件教學(xué)
- 員工對(duì)客戶禮儀培訓(xùn)課件
- 救護(hù)車輛和外來(lái)救護(hù)車輛管理制度
- 員工安全和法制教育培訓(xùn)
- 員工培訓(xùn)質(zhì)量課件
- 2024年山東省濟(jì)南市中考化學(xué)試卷( 含答案)
- 建筑結(jié)構(gòu)改造設(shè)計(jì)和加固技術(shù)綜合分析的開題報(bào)告
- 管理會(huì)計(jì)學(xué) 第10版 課件 第1、2章 管理會(huì)計(jì)概論、成本性態(tài)與變動(dòng)成本法
- 喪葬費(fèi)用補(bǔ)助申請(qǐng)的社保授權(quán)委托書
- 2024年度初會(huì)《經(jīng)濟(jì)法基礎(chǔ)》高頻真題匯編(含答案)
- 課例研究報(bào)告
- 啤酒營(yíng)銷促銷實(shí)戰(zhàn)技巧之經(jīng)銷商管理技巧知識(shí)培訓(xùn)
- 建筑工程各部門職能及各崗位職責(zé)201702
- 機(jī)柜端口對(duì)應(yīng)表
- GB/T 3934-2003普通螺紋量規(guī)技術(shù)條件
- 車輛贈(zèng)與協(xié)議模板
評(píng)論
0/150
提交評(píng)論