




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、C語言課程實習(shx)報告 院系: 班學號 學號 姓名(xngmng):學生(xu sheng)成績管理系統(tǒng)題目(tm)要求設計(shj)一個學生成績管理程序,對在校某班學生幾門課程的考試成績進行統(tǒng)一管理。每個學生記錄包括學號、姓名、年齡、數(shù)學、英語、物理成績,默認以學號為序存放。(1)一個文件按以班為單位存儲學生記錄。(2)將允許的操作分為四種,以A、B、C、D、E、F為標志(若設置菜單操作更佳): A:插入一個新的學生記錄(錄入學生信息);B:修改學生記錄;C:刪除一個學生記錄;D:登記成績;E:修改成績;F:瀏覽全班成績。(3)計算學生的總成績。(4)按學號排序輸出全班成績表。二需求分
2、析根據(jù)題目要求,由于學生信息是存放在文件中,所以應提供文件的輸入、輸出等操作;在程序中需要瀏覽學生的信息,應提供添加、修改、刪除、排序等操作;另外還應提供鍵盤式選擇菜單實現(xiàn)功能選擇。總體設計 根據(jù)上面的需求分析,可以將這個系統(tǒng)的設計分為8個模塊,數(shù)據(jù)輸入,添加數(shù)據(jù),修改數(shù)據(jù),刪除數(shù)據(jù),修改成績,學號排序,瀏覽成績,退出模塊.學生成績管理系統(tǒng)數(shù)據(jù)輸入添加數(shù)據(jù)修改數(shù)據(jù)刪除數(shù)據(jù)修改成績學號排序瀏覽成績退出模塊四.詳細設計1.菜單函數(shù)和主函數(shù) 將各個功能模塊設置為菜單選項,方便調(diào)用,且執(zhí)行完每部分功能模塊后能夠方便返回到系統(tǒng)界面.流程圖顯示一系列功能選項 N 輸入n,判斷n是否是A-H Y 根據(jù)n的值
3、調(diào)用各功能模塊函數(shù) menu() /*主界面(jimin)*/int w1; char n; /*.變量n保存選擇菜單數(shù)字,w1判斷(pndun)輸入的數(shù)字是否在功能菜單對應數(shù)字范圍內(nèi)*/ do puts(tt*MENU*nn); puts(ttttA.Enter new data); puts(ttttB.Addition data); puts(ttttC.Modify data); puts(ttttD.Delete data); puts(ttttE.Modify score); puts(ttttF.Order by number); puts(ttttG.Browse all);
4、puts(ttttH.Exit); puts(nntt*n); printf(Choice your number(A-H): bb); n=getchar(); printf(n); if(nH) w1=1; /*對選擇的數(shù)字(shz)作判斷*/ else w1=0; while(w1=1); switch(n) /*選擇功能*/ case A:enter();break; /*輸入模塊*/ case B:add();break; /*添加模塊*/ case C:modify();break; /*修改數(shù)據(jù)模塊*/ case D:delete();break; /*刪除模塊*/ case E
5、:modify_score();break; /*修改成績模塊*/ case F:order();break; /*排序模塊*/ case G:browse();break; /*瀏覽模塊*/ case H:exit(0); /*退出模塊*/ main() /*主函數(shù)*/ menu();2.各功能模塊設計(shj) (1) 輸入(shr)模塊數(shù)據(jù)分析單看各數(shù)據(jù)(shj)信息,學號年齡以及數(shù)學英語物理各科成績和總分均是整型,姓名可以采用字符型數(shù)組.數(shù)據(jù)信息存放在文件中,一條記錄對應一個學生,既符合習慣也方便信息管理.把學生的學號姓名年齡各科成績及總分作為結(jié)構(gòu)體成員,存放若干個學生信息就用結(jié)構(gòu)體數(shù)
6、組.struct student int num; char name20; int age; int Math; int English; int Physical; long int sum;stuN;/*stuN中每個數(shù)組元素對應一個學生*/注意stuN中的N為學生個數(shù),程序中采用宏定義的方式,可以隨時在源程序宏定義中修改,本程序宏定義#define N 30流程圖輸入用戶要輸入學生記錄的個數(shù)n i從0到n-1調(diào)用輸入函數(shù)input(i) i!=0 Y調(diào)用保存函數(shù)save(n)程序/*輸入模塊*/enter() /*輸入模塊*/int i,n; printf(How many stude
7、nts(1-%d)?:,N); scanf(%d,&n); /*要輸入的記錄個數(shù)*/ printf(nEnter data nownn); for(i=0;in;i+) printf(n Input %dth student record.n,i+1); input(i); /*調(diào)用輸入函數(shù)*/ if(i!=0) save(n); /*調(diào)用(dioyng)保存函數(shù)*/ printf_back(); /*一個任務(rn wu)結(jié)束時讓用戶選擇是瀏覽還是返回*/ (2)追加(zhuji)模塊需求分析 該模塊的功能是用戶需要增加新的學生記錄, 請從鍵盤輸入并逐條寫到原來的輸入文件中.流程圖調(diào)用加載函
8、數(shù)n=load();并計算可以記錄個數(shù)n輸入用戶要添加學生記錄的個數(shù)mK=m+ni從n到k調(diào)用輸入函數(shù)input(i)保存添加的記錄程序/*添加模塊*/add() /*添加模塊*/int i,n,m,k; FILE *fp; n=load(); printf(How many students are you want to add(1-%d)?:,N-n); scanf(%d,&m); /*輸入要添加的記錄個數(shù)*/ k=m+n; for(i=n;ik;i+) printf(n Input %dth student record.n,i+1); input(i); /*調(diào)用輸入函數(shù)*/ if(
9、fp=fopen(score.txt,ab)=NULL) /*以ab方式打開文件,添加保存*/ printf(Cannot open file.n); for(i=n;ik;i+) /*輸出到文件*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write error.n); fclose(fp); printf_back(); /*一個任務結(jié)束時的選擇瀏覽還是(hi shi)返回*/ (3)修改(xigi)模塊需求(xqi)分析該模塊的功能是顯示所有學生信息,考慮到記錄很多,故采用分屏顯示。顯示完所有記錄后,用戶輸
10、入要修改學生的學號,根據(jù)學號查找學生記錄,并提示用戶修改該記錄的哪部分信息,是學號、姓名、年齡或某科成績、總分還是所有信息都修改,根據(jù)用戶選擇修改相應信息。流程圖顯示所有記錄,讓用戶看哪個要修改輸入要修改的學號是否找到此學生記錄顯示找到的記錄調(diào)用修改函數(shù)提示沒有找到繼續(xù)修改?YNYYYYY N返回主菜單程序/*修改模塊*/modify() /*修改模塊*/struct student s; FILE *fp; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; /*給用戶看全部記錄以便確認要修改的記錄*/ printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目
11、函數(shù)*/ for(i=0;in;i+) if(i!=0)&(i%10=0) /*目的是分屏顯示*/ printf(nnRemember NO.121052- which needed modify.Pass any key to continue .); getch(); puts(nn); printf_one(i); /*調(diào)用顯示(xinsh)一個記錄的函數(shù)*/ printf(n); do printf(nnEnter NO.121052- that you want to modify! NO.:121052-); scanf(%d,&s.num); /*輸入(shr)要修改的數(shù)據(jù)的學號
12、*/ for(i=0;in;i+) /*查找要修改(xigi)的數(shù)據(jù)*/ if(s.num=stui.num) k=i; /*找到要修改的記錄*/s=stui; /* 把stui備份給s,以便用戶反悔時恢復*/ if(k=-1) printf(nnNO exist!please again); while(k=-1); /*當k=-1表示沒有找到*/ printf_face(); /*調(diào)用顯示一個記錄的函數(shù)*/ printf_one(k); w1=modify_data(k,n); /*修改學生記錄并且返回保存控制值w1,w1=1則表示用戶已確認修改*/ if(w1=1) /*確認修改*/ p
13、rintf(nSuccessful _.nnAre you modify another?nnt1.Yes2.Back with savet bb); scanf(%d,&w0); w2=1; /*來控制保存,使w2=1是標記已有過修改*/ else w0=0; /* end */ if(w2=1) stuk=s; /*沒有修改,把備份的s恢復,使w0=0是為了讓循環(huán)終止*/ if(w0!=1&w2=1) save(n); /*正常返回,且有過修改 */ while(w0=1); menu(); (4)刪除模塊需求分析該模塊的功能是與修改模塊一樣先顯示所有的學生信息,同樣考慮到記錄很多,采用分
14、屏顯示。顯示完所有記錄后,用戶輸入要刪除學生的學號,根據(jù)學號查找學生記錄并刪除。刪除一般的做法是將數(shù)據(jù)從文件中刪除,刪除位置后面的記錄往前挪。流程圖返回主菜單 顯示所有記錄,讓用戶看哪個要刪除輸入要刪除的學號是否找到此學生記錄顯示找到的記錄使stuk.sum=0提示沒有找到繼續(xù)刪除?YNYYYYYN程序(chngx)delete() /*刪除(shnch)模塊*/struct student s; FILE *fp; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0
15、) /*分屏顯示(xinsh)*/ printf(nnRemember NO.121052- which needed delete.Pass any key to continue .); getch(); puts(nn); printf_one(i); printf(n); do printf(nnEnter NO.121052- that you want to delete! NO.:121052-); scanf(%d,&s.num); for(i=0;in;i+) if(s.num=stui.num) k=i; s=stui; /*將要(jingyo)刪除的記錄備份給s */ i
16、f(k=-1) printf(nnNO exist!please again); while(k=-1); printf_face(); printf_one(k); printf(nAre you sure?nnt1.Sure2.Back without save in this time bb); scanf(%d,&w1); if(w1=1) stuk.sum=0; /*標記(bioj)為0后,保存時便不保存*/ printf(nSuccessful _.nnAre you delete another?nnt1.Yes2.Back with savet bb); scanf(%d,&w
17、0); w2=1; /*確認(qurn)刪除*/ else w0=0; /* end */ if(w2=1) stuk=s; if(w0!=1&w2=1) save(n); /*正常返回且已刪除*/ while(w0=1); menu(); (5)修改成績模塊需求分析該模塊的功能是修改各科成績或全體成績。流程圖 顯示所有記錄,讓用戶看哪個要修改輸入要修改的學號是否找到此學生記錄顯示找到記錄調(diào)用修改成績函數(shù)提示沒有找到繼續(xù)修改?YNYYYYY返回主菜單N程序(chngx)modify_score() /*修改(xigi)成績模塊*/struct student s; FILE *fp; int
18、i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) /*分屏顯示(xinsh)*/ printf(nnRemember NO.121052 which score needed modify.Pass any key to continue .); getch(); puts(nn); printf_one(i); printf(n); do printf(nnEnter NO.121052- that you want to modify! NO.:121052-); s
19、canf(%d,&s.num); /*輸入要修改的學生學號*/ for(i=0;in;i+) if(s.num=stui.num) k=i; s=stui; /* 將要修改的記錄(jl)備份*/ if(k=-1) printf(nnNO exist!please again); while(k=-1); printf_face(); printf_one(k); w1=modify_score1(k);/*調(diào)用修改(xigi)成績函數(shù)*/ if(w1=1) printf(nSuccessful _.nnAre you modify another score?nnt1.Yes2.Back wi
20、th savet bb); scanf(%d,&w0); w2=1; /*確認(qurn)修改*/ else w0=0; /* end */ if(w2=1) stuk=s; if(w0!=1&w2=1) save(n); /* w0!=1 return w2=1 modify */ while(w0=1); /*正常返回且已修改*/ menu(); (6)排序模塊需求分析該模塊的功能是要求將學生記錄按照學號排序,這里采用選擇法排序。流程圖 用選擇法排序保存返回主菜單程序order() /*排序模塊*/int i,j,k,n; struct student s; n=load(); for(i
21、=0;in-1;i+) /*用選擇(xunz)法排序*/ k=i; for(j=i+1;jn;j+) if(stuj.numstuk.num) k=j; s=stui;stui=stuk;stuk=s; save(n); puts(nn); printf_back(); (7)瀏覽(li ln)模塊需求(xqi)分析該模塊的功能是顯示所有學生記錄信息。流程圖顯示學生記錄,十個一屏按任意鍵顯示下一屏按任意鍵返回主菜單程序browse() /*瀏覽模塊*/int i,j,n; n=load(); /*加載記錄*/ printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項目函數(shù)*/ for(i=0;in
22、;i+) if(i!=0)&(i%10=0) /*分屏顯示*/ printf(nnPass any key to contiune .); getch(); puts(nn); printf_one(i); /*調(diào)用顯示一個記錄的函數(shù)*/ printf(n); printf(tThere are %d record.n,n); printf(nPass any key to back.); getch(); /*按任意鍵*/ menu();3公共(gnggng)函數(shù)下面(xi mian)是在每個模塊中都有可能用到的一些公共函數(shù)。保存(bocn)函數(shù)save(int n)說明形參n控制保存的個數(shù)
23、。當stuk.sum=0表示刪除,不保存該記錄。程序save(int n) /*保存函數(shù),保存n個記錄*/FILE *fp; int i; if(fp=fopen(score.txt,wb)=NULL) /*以輸出打開方式,在此前的記錄被覆蓋*/ printf(nCannot open filen); return NULL; for(i=0;in;i+) if(stui.sum!=0) /*stui.sum=0表示該記錄已刪除*/ if(fwrite(&stui,sizeof(struct student),1,fp)!=1) printf(file write errorn); fclos
24、e(fp);加載函數(shù)load()說明 該函數(shù)可以用來加載所有記錄,并且可以返回所有記錄的個數(shù)。程序load() /*加載記錄或可以計算記錄個數(shù)的函數(shù)*/FILE *fp; int i; if(fp=fopen(score.txt,rb)=NULL) /*以輸出打開方式,在此前的記錄被覆蓋*/ printf(nCannot open filen); return NULL; for(i=0;!feof(fp);i+) fread(&stui,sizeof(struct student),1,fp); fclose(fp); return(i-1); /*返回記錄個數(shù)*/學號輸入函數(shù)no_inpu
25、t(int i,int n)說明該函數(shù)對輸入學號進行判斷,確保輸入的學號唯一。形參i表示第i個學生(xu sheng)記錄,形參n表示總共(znggng)有n個學生(xu sheng)記錄。程序no_input(int i,int n) /*學號輸入函數(shù)*/int k,w1; do w1=0; printf(NO.:121052-); scanf(%d,&stui.num); if(stui.numN) /*判斷學號是否在1到N之間*/ puts(Input error! Only be made up of(1-N).Please reinput!n); w1=1; if(w1!=1) fo
26、r(k=0;knn 1.Math 2.English 3.Physical4.all score 5.cancel and back); printf(Which you needed?: bb); /*輸入選擇作個判斷*/ scanf(%d,&c); if(c5|c5|c0&cnn 1.NO. 2.name 3.age 4.Math 5.English 6.Physical7.all score 8.all data 9.cancel and back); printf(Which you needed?: bb); /*輸入選擇作個判斷*/ scanf(%d,&c); if(c9|c9|c3&c8) sum(i); puts(nNow:n); printf_face(); printf_one(i); printf(nAre you sure?nnt1.Sure 2.No and remodify3.Back without save in this time bb); scanf(%d,&w1); while(w1=2);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 7435:2024 EN Fasteners - Slotted set screws with dog point
- 【正版授權(quán)】 ISO 15784-2:2024 EN Intelligent transport systems - Data exchange involving roadside modules communication - Part 2: Centre to field device communications using Simple Netwo
- 2025年度二手房貸款買賣合同(智能家居升級版)
- 2025版醫(yī)療器械臨床試驗臨床試驗現(xiàn)場監(jiān)查服務合同
- 2025年度密封膠產(chǎn)品環(huán)保認證與評價合同
- 2025年度環(huán)保設備研發(fā)與制造合同
- 2025高考作文預測:需求誠可貴創(chuàng)新價更高
- 制定市場推廣計劃的實施步驟
- 固定資產(chǎn)管理流程優(yōu)化計劃
- 如何制定有效的危機應對計劃
- 《化妝知識講座》課件
- 川教版四年級《生命.生態(tài).安全》下冊全冊 課件
- 體育-水平二-三年級籃球大單元教學計劃表及原地運球教學設計、教案
- 超齡員工用工免責協(xié)議書
- 伙食原料第二保質(zhì)期標準執(zhí)行表
- 備戰(zhàn)2025年高考數(shù)學壓軸題訓練專題13三角函數(shù)(全題型壓軸題)(學生版+解析)
- 靜脈治療輸液工具的選擇2024課件
- KTV常見飛單方法
- 2024肥胖癥診療指南亮點內(nèi)容解讀課件
- 2023阿里云ACA大數(shù)據(jù)復習題題庫及答案
- (新版)山東省物流工程師職稱考試參考試題庫-下(多選、判斷題)
評論
0/150
提交評論