




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
重慶理工大學課程設計課程 程序設計基礎C題目 C語言綜合程序設計院系名稱商貿信息學院班級 計算機應用技術一班學生姓名吳昊學號20920310119指導教師 盧玲 評閱教師 時間2010年6月1問題描述5.4題目五:學生成績管理系統設計學生成績信息包括:學期,學號,班別,姓名,四門課程成績(語文、數學、英語和計算機)。主要功能:(1) 能按學期、按班級完成對學生成績的錄入、修改(2) 能按班級統計學生的成績,求學生的總分及平均分,設計并輸出統計報表(3) 能查詢學生成績,不及格科目及學生名單(4) 能按班級輸出學生的成績單(5) 能按班級,按課程,對學生成績進行排序。要求:使用二進制文件方式存儲數據,系統以菜單方式工作2系統分析2.1題目要求本系統可以對學生的成績信息進行簡單的管理操作:主菜單包括9個選項:學生成績瀏覽如果未導入學生成績,系統會提示導入成績,成績導入后,可以用本功能瀏覽成績。學生成績錄入當學生成績未導入是會自動提示對學生成績的錄入,可以按學期,按班級完成對學生成績的錄入。學生成績修改當需要修改學生成績時,本功能可以修改學生的成績,可以按學期,按班級完成對學生成績的修改。按班級統計學生成績的總分和平均分可以對計算學生的成績的總分和平均分,并按班級統計出來。學生成績查詢完成對學生成績的查詢,本功能是按照學號查詢。學生成績保存可以將學生成績存入磁盤文件,并從磁盤里讀出學生成績,信息保存在e:\\wh.dat。學生成績未存盤時導入當磁盤文件不存在會提示導入學生的成績。按班級輸出學生成績可以按班級輸出學生的成績單,其中包括學生的四門課的成績不及格科目和學生的名單。學生成績排序能按班級,按課程,對學生成績進行排序。按班級排序時可以對某個班級學生的成績排序,按課程排序時是對某一門課的排序。2.2算法設計模塊一:學生成績瀏覽模塊該模塊實現對學生成績的瀏覽功能,但前提是學生的信息已經保存,實現算法如下:輸出學生信息的標題檢索信息數組用循環實現對學生信息的對應輸出模塊二:學生成績錄入模塊該模塊實現對學生成績的錄入功能,通過菜單的選擇,調用兩個子函數實現成績的錄入。輸出按不同方式錄入學生成績的選擇菜單,一是按學期錄入,二是按班級錄入調用按學期錄入的函數選擇學期用循環完成對學生信息的錄入保存學生信息,并回到錄入函數調用按班級錄入的函數選擇班級用循環完成對學生信息的錄入保存學生信息,并回到錄入函數模塊三:學生成績修改模塊該模塊實現對學生成績的修改功能,通過菜單的選擇,調用兩個子函數實現對學生的成績的修改。輸出按不同方式修改學生成績的選擇菜單,一是按學期修改,二是按班級修改調用按學期修改的函數選擇學期用循環完成對學生成績的修改,修改的科目包括語文,數學,英語,計算機保存學生成績信息,并回到修改函數調用按班級修改的函數選擇班級用循環完成對學生成績的修改,修改的科目包括語文,數學,英語,計算機保存學生成績信息,并回到修改函數模塊四:按班級統計學生成績的總分和平均分模塊該模塊可以計算學生成績的總分和平均分輸出選擇的班級通過檢索數組選出某個班通過循環輸出這個班的每個學生的總分和平均分模塊五:學生成績查詢模塊該模塊能通過學生的學號查詢學生的成績輸入要查詢的學生的學號通過檢索數組選出對應的學生調用輸出函數輸出學生相關的信息模塊六:學生成績保存模塊該模塊可以保存學生信息的導入,修改,錄入定義文件的保存位置通過數組寫入要保存的文件關閉磁盤文件模塊七:學生成績為存盤時導入模塊該模塊可以在學生成績為存盤是完成對學生成績的導入并存盤輸出是否創建的提示選擇是否創建提示已經導入,并關閉磁盤文件模塊八:按班級輸出學生成績模塊該模塊可以從多個班級里選擇某班學生的成績并輸出輸入要選擇的班級檢索數組選出該班輸出該班學生的相關信息模塊九:學生成績排序模塊該模塊可以對學生的成績按不同的方式排序輸出排序方式的菜單調用按班級排序的函數輸出菜單后用冒泡法對總分進行比較,按從大到小的順序輸出保存并回到排序函數調用按課程對學生排序的函數通過冒泡法分別對語文數學,英語,計算機的成績進行對比,按從大到小輸出通過冒泡法分別對語文數學,英語,計算機的成績進行對比,按從大到小輸出保存并回到排序的函數模塊十:退出模塊開始退出系統開始2.3流程圖讀取文件*分4和均生績存繇成保為盤導生績序捋成排*分4和均生績存繇成保為盤導生績序捋成排從大到小2.4關鍵問題2.4關鍵問題這個系統最主要是要掌握各個函數的方法,比比如說成績的錄入,修改,成績的查詢等。這個系統最主要是要在對學生成績的錄入,修改,求平均分和總分,輸出學生的成績時都要求按不同的方式完成,比如錄入,修改,輸出成績拄等。這里我寫一個菜單,用一個主函數,分別調用兩個子函數。在成績修改時注意輸出的數據的對應,最后喲啊保存修改的數據,這里最容易被忽略,如果不保存的話,就白費心機啦。注意自己定義的頭文件的數據類型和源文件里面的數據類型要符合,這個函數有點大,隨意這種細節一般容易出錯。在輸入一個函數數據的時候,應該清空鍵盤區,很容易出錯。總之來說,編譯的時候會有很多錯,但是經過改正過后,發現很多都是不必要的或是細節問題。3系統實現3.1題目一#include<stdio.h>#include<windows.h>#include<string.h>#include<stdlib.h>#include"student.h”intnumber;voidview(structstudentpeople]])(inti;printf("\t\t\t\t學生成績管理系統\n〃);printf(〃\t\t\n〃);printf(〃\t\t\n〃);printf("學期\t學號\t班別\t姓名\t語文\t數學\t英語\t計算機\n〃);printf(〃****************************************************************\n〃);for(i=0;i<=number-1;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t〃,people[i].chinese);printf(〃%4d\t〃,people[i].math);printf(〃%4d\t〃,people[i].english);printf(〃%4d\t〃,people[i].computer);printf(〃\n〃);printf(〃 \n〃);}}//********************************************************************************************〃按班級統計學生總分和平均分//********************************************************************************************voidgrade(structstudentpeople]])(intclas;intaver=0;intsum=0;scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas) 〃查找班級(sum二people[i].chinese+people[i].math+people[i].english+people[i].computer;aver=sum/4;printf("第%d個學生總分為:%d\n〃,i+1,sum);printf("第%d個學生的平均分為:%d\n〃,i+1,aver);}}}//********************************************************************************************〃輸出某一個學生的信息//********************************************************************************************voidprnt(structstudentpeople口,inti)(printf(" \n");printf("姓名\t語文\t數學\t英語\t計算機\t不及格科目\七學生名單\n〃);printf(" \n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].name);printf(〃%.1f\t〃,people[i].chinese);printf(〃%.1f\t〃,people[i].math);printf(〃%.1f\t〃,people[i].english);printf(〃%.1f\t〃,people[i].computer);while(1) 〃輸出不及格的學生的成績(if(people[i].chinese<60)printf(〃語文,〃);if(people[i].math<60)printf("數學,”);if(people[i].english<60)printf(〃英語,〃);if(people[i].computer<60)printf(〃計算機\t〃);break;}printf(〃%s〃,people[i].name); //輸出學生的名單}printf(〃\n〃);printf(〃 \n〃);}//********************************************************************************************// 按照學號查詢學生信息//********************************************************************************************voidsearch(structstudentpeople口)(charnum[20];inti;printf(-\n請輸入你要查詢的學生學號:〃);fflush(stdin);gets(num);for(i=0;i<number;i++)(if(strcmp(people[i].num,num)==0)(prnt(people,i);}}}//********************************************************************************************// 按班級輸出學生的成績單//********************************************************************************************voidsearch_clas(structstudentpeople]])intclas;printf("請輸入班級:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas)(prnt(people,i); 〃調用prnt函數輸出成績單}}}//********************************************************************************************// 將信息存入磁盤文件//********************************************************************************************voidsave(structstudentpeople口)(FILE*fp;inti;fp二fopen(〃e:\\wh.dat〃,〃wb+〃);for(i=0;i<number;i++)(fwrite(&people[i],sizeof(student),1,fp);}fclose(fp); //關閉磁盤文件}//***********************************************// 按學期修改學生成績//***********************************************voidxiugai_sem(structstudentpeople口)intchinese,math,english,computer; //定義新的成績變量charsem[20];printf("輸入學期:");fflush(stdin);scanf(〃%s〃,sem);for(inti=0;i<number;i++)(if(strcmp(people[i].sem,sem)==0)(prnt(people,i);}printf("修改語文,數學,英語,計算機的成績:〃);scanf(〃%f%f%f%f〃,&chinese,&math,&english,&computer);people[i].chinese二chinese;people[i].math二math;people[i].english二english;people[i].computer二computer; //把新的成績賦給people[i]}save(people);}//***********************************************// 按班級修改學生成績//***********************************************voidxiugai_clas(structstudentpeople]])(intchinese,math,english,computer;intclas;printf("輸入班級:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)if(people[i].clas==clas)(prnt(people,i);}printf(〃修改語文,數學,英語,計算機的成績:〃);scanf(〃%f%f%f%f〃,&chinese,&math,&english,&computer);people[i].chinese二Chinese;people[i].math二math;people[i].english二english;people[i].computer二computer;}save(people);}voidxiugai(structstudentpeople口) //修改學生成績(intxuan;while(1)(printf(〃************1按學期修改學生成績\n〃);printf(〃************2按班級修改成績\n〃);printf(〃************0返回上一級目錄\n〃);printf(〃請選擇:\n〃);scanf(〃%d〃,&xuan);switch(xuan)(case1:xiugai_sem(people);break;case2:xiugai_clas(people);break;}if(xuan==0)break;}}//*********************************************// 按學期錄入學生成績//*********************************************voidluru_sem(structstudentpeople口)(structstudenttemp;printf(〃請輸入學生人數\n〃);scanf(〃%d〃,&number);〃選擇要輸入學生的學期printf("學期\n〃);〃選擇要輸入學生的學期fflush(stdin);scanf(〃%s〃,temp.sem);for(inti=0;i<number;i++)(printf("請輸入學生信息:\n〃);printf(〃學號:〃);fflush(stdin);gets(temp.num);printf("班別:〃);fflush(stdin);scanf(〃%d〃,&temp.clas);printf("姓名:〃);fflush(stdin);gets();printf("學生成績:〃);fflush(stdin);scanf(〃%d〃,&temp.chinese);fflush(stdin);scanf(〃%d〃,&temp.math);fflush(stdin);scanf(〃%d〃,&temp.english);fflush(stdin);scanf(〃%d〃,&puter);printf(〃\n〃);people[i]=temp;}save(people);}//***********************************************// 按班級錄入學生成績//***********************************************voidluru_clas(structstudentpeople]])(structstudenttemp;printf(〃請輸入學生人數:〃);scanf(〃%d〃,&number);//輸入要錄入的學生的班級printf(〃班級:〃);//輸入要錄入的學生的班級fflush(stdin);scanf(〃%d〃,&temp.clas);inti;for(i=0;i<number;i++)(printf("請輸入學生信息:\n〃);printf("學期:〃);scanf(〃%s〃,temp.sem);printf(〃學號:〃);fflush(stdin);gets(temp.num);printf("姓名:〃);fflush(stdin);gets();printf("學生成績:〃);fflush(stdin);scanf(〃%d〃,&temp.chinese);fflush(stdin);scanf(〃%d〃,&temp.math);fflush(stdin);scanf(〃%d〃,&temp.english);fflush(stdin);scanf(〃%d〃,&puter);printf(〃\n〃);people[i]=temp;}save(people); //保存}voidluru(structstudentpeople口) //錄入學生成績(intxuan;while(1)(printf(〃************1按學期錄入學生成績\n〃);printf(〃************2按班級錄入學生成績\n〃);printf(〃************0返回上一級目錄\n〃);scanf(〃%d〃,&xuan);switch(xuan)(printf(〃請選擇:\n〃);case1:luru_sem(people);break;case2:luru_clas(people);break;}if(xuan==0)break;}}//*****************************************// 導入磁盤文件信息//*****************************************voidload(structstudentpeople口)(FILE*fp;if((fp二fopen(〃e:\\wh.dat〃,〃rb+〃))==NULL)(printf("磁盤并不存在,是否創建?(y/n)〃);if(getchar()=='y')(luru(people);return;}elseexit(0);}inti=0;printf("\n正在導入數據,請等待 \n〃);while(!feof(fp))(fread(&people[i],sizeof(student),1,fp);i++;}fclose(fp); //關閉磁盤文件number=--i;printf("\n導入成功!\n〃);}//*****************************************// 按班級對學生成績排序//*****************************************voidpaixu_clas(structstudentpeople口)(structstudentarry[1024],temp; 〃新定義一個數組arry[]intclas,j=0;printf("請輸入班級:〃);fflush(stdin);scanf(〃%d〃,&clas);for(inti=0;i<number;i++)(if(people[i].clas==clas)(arry[j]=people[i];j++;}printf(〃\t\n〃);printf(〃學期\t學號\t班別\t姓名\t語文\t數學\t英語\t計算機\t總分\n〃);printf(〃***********************************************************************\n〃);for(intm=0;m<j-1;m++)(for(intn=0;n<j-1-m;n++)if(arry[n].chinese+arry[n].computer+arry[n].math+arry[n].english<arry[n+1].chinese+arry[n+1].computer+arry[n+1].math+arry[n+1].english)(temp=arry[n];arry[n]=arry[n+1];arry[n+1]=temp;}}for(i=0;i<j;i++)(printf(〃%s\t〃,arry[i].sem);printf(〃%s\t〃,arry[i].num);printf(〃%d\t〃,arry[i].clas);printf(〃%s\t〃,arry[i].name);printf(〃%4d\t〃,arry[i].chinese);printf(〃%4d\t〃,arry[i].math);printf(〃%4d\t〃,arry[i].english);printf(〃%4d\t〃,arry[i].computer);printf(〃%4d\t〃,arry[i].computer+arry[i].chinese+arry[i].math+arry[i].english);printf(〃\n〃);printf(〃 \n");}}//*****************************************// 按課程對學生成績排序//*****************************************voidpaixu_ke(structstudentpeople口)(structstudenttemp;for(inti=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].chinese<people[j+1].chinese)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf(〃\t\t\n〃);printf("學期\t學號\t班別\t姓名\t語文\n〃);printf(〃**************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].chinese);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)if(people[j].chinese<people[j+1].chinese)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf(〃\t\t\n〃);printf("學期\t學號\t班別\t姓名\t數學\n〃);printf(〃***************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].math);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].math<people[j+1].math)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf("學期\t學號\t班別\t姓名\t英語\n〃);printf(〃*****************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].english);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].english<people[j+1].english)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}printf("學期\t學號\t班別\t姓名\t計算機\n〃);printf(〃*****************************************\n〃);for(i=0;i<number;i++)(printf(〃%s\t〃,people[i].sem);printf(〃%s\t〃,people[i].num);printf(〃%d\t〃,people[i].clas);printf(〃%s\t〃,people[i].name);printf(〃%4d\t\n〃,people[i].computer);}for(i=0;i<number-1;i++)for(intj=0;j<number-1-i;j++)(if(people[j].computer<people[j+1].computer)(temp二people[j];people[j]=people[j+1];people[j+1]=temp;}}voidpaixu(structstudentpeople]])//對學生成績排序(intxuan;while(1)(printf(〃************1按班級對學生成績排序\n〃);printf(〃************2按課程對學生成績排序\n〃);printf(〃************0返回上一級目錄\n〃);printf(〃請選擇:\n〃);scanf(〃%d〃,&xuan);switch(xuan)(case1:paixu_clas(people);break;case2:paixu_ke(people);break;}if(xuan==0)break;}}//***********************************// 主函數//***********************************voidmain()(intsel;system(〃cls〃);system("colorF9〃);structstudentpeople[1024];load(people);(printf(〃\t\t\n〃);printf(〃\n〃);printf(〃\t\t 學生成績管理系統\n〃);printf(〃\t\t\n〃);printf(〃\t\t\n〃);printf(〃\t\t***********************************\n〃);printf("\t\t\t1學生成績瀏覽\n〃);printf("\t\t\t2學生成績錄入\n〃);printf("\t\t\t3學生成績修改\n〃);printf("\t\t\t4按班級統計學生成績的總分和平均分\n〃);printf("\t\t\t5學生成績查詢\n〃);printf("\t\t\t6學生成績保存\n〃);printf("\t\t\t7學生成績未存盤時導入\n〃);printf("\t\t\t8按班級輸出學生成績\n〃);printf("\t\t\t9學生成績排序\n〃);printf(〃\t\t\n〃);printf("\t\t\t0謝謝使用再見!\n〃);printf(〃\t\t\n〃);}printf(〃請選擇:\n〃);scanf(〃%d〃,&sel);switch(sel)(case1:view(people);break;case2:luru(people);break;case3:xiugai(people);break;case4:grade(people);break;case5:search(people);break;case6:save(people);break;case7:load(people);break;case8:search_clas(people);break;case9:paixu(people);break;case0:printf("謝謝使用再見!\n");break;}if(sel==0)break;}}4系統測試4.1如何設計測試數據我是按順序編寫每個函數的每個功能的,每寫完一個就輸入數據運行測試,輸入數據時數據類型要準確,以避免錯誤,有些函數往往要重新寫好幾遍,應為有時不確定是否正確,就要輸入數據進行測試,看是否正確,有很多的函數都要調用其他的函數,所以函數的關聯很大,輸入數據時就要考慮清楚。4.2系統測試過程(1)對學生成績的錄入測試ructstundient ;ad(people)i『'"kEJAlDmkmjA學生fi閡管理段\血5爪學生物皆哩至蝶,ec" 〔1=1I回I< 附盤并不存在,是否創建也¥加〉 J叩pr:pripripr:DFl輸入數據對系統進行測試磁盤開不存在,是直財KJCKJCKJCKJCKJCKJCj.■*■*■*■*■*■*2割球錄入學生■JC-JC-JC-JC-JC-JC0j底回奴目46■'C:\UsersABOAADesktop\學生雌管理至她W
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來網絡技術的挑戰與發展試題及答案
- 網絡工程師行業競賽試題及答案
- 中藥配方顆粒質量標準優化與2025年市場競爭態勢報告
- 保險業數字化轉型背景下2025年理賠服務標準化研究報告
- 網絡工程師如何制定個人職業規劃試題及答案
- 2025年生態修復工程中生態系統服務功能評估與土壤修復技術報告
- 光伏電站智能化運維與發電量提升的智能化運維設備產業鏈分析報告
- 2025年教育信息化2.0時代教師教學策略與專業成長研究報告
- 機電工程中材料力學應用實例試題及答案
- 2025年生態修復工程濕地生態系統服務功能評估專項報告
- DB32/T 4220-2022消防設施物聯網系統技術規范
- 車位轉讓合同協議書
- 合伙經營貨車輛協議書
- 2025年農村個人果園承包合同
- 湖北省武漢市2025屆高三年級五月模擬訓練試題數學試題及答案(武漢五調)
- 企業管理流程數字化轉型計劃
- 機械通氣患者護理
- 2025年數控技術專業畢業考試試題及答案
- 車牌租賃協議和抵押合同
- 《張敏瑞的傳奇人生》課件
評論
0/150
提交評論