學(xué)生成績管理系統(tǒng) c語言實(shí)習(xí)報(bào)告(共21頁)_第1頁
學(xué)生成績管理系統(tǒng) c語言實(shí)習(xí)報(bào)告(共21頁)_第2頁
學(xué)生成績管理系統(tǒng) c語言實(shí)習(xí)報(bào)告(共21頁)_第3頁
學(xué)生成績管理系統(tǒng) c語言實(shí)習(xí)報(bào)告(共21頁)_第4頁
學(xué)生成績管理系統(tǒng) c語言實(shí)習(xí)報(bào)告(共21頁)_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C語言課程實(shí)習(xí)(shx)報(bào)告 院系: 班學(xué)號 學(xué)號 姓名(xngmng):學(xué)生(xu sheng)成績管理系統(tǒng)題目(tm)要求設(shè)計(jì)(shj)一個(gè)學(xué)生成績管理程序,對在校某班學(xué)生幾門課程的考試成績進(jìn)行統(tǒng)一管理。每個(gè)學(xué)生記錄包括學(xué)號、姓名、年齡、數(shù)學(xué)、英語、物理成績,默認(rèn)以學(xué)號為序存放。(1)一個(gè)文件按以班為單位存儲學(xué)生記錄。(2)將允許的操作分為四種,以A、B、C、D、E、F為標(biāo)志(若設(shè)置菜單操作更佳): A:插入一個(gè)新的學(xué)生記錄(錄入學(xué)生信息);B:修改學(xué)生記錄;C:刪除一個(gè)學(xué)生記錄;D:登記成績;E:修改成績;F:瀏覽全班成績。(3)計(jì)算學(xué)生的總成績。(4)按學(xué)號排序輸出全班成績表。二需求分

2、析根據(jù)題目要求,由于學(xué)生信息是存放在文件中,所以應(yīng)提供文件的輸入、輸出等操作;在程序中需要瀏覽學(xué)生的信息,應(yīng)提供添加、修改、刪除、排序等操作;另外還應(yīng)提供鍵盤式選擇菜單實(shí)現(xiàn)功能選擇??傮w設(shè)計(jì) 根據(jù)上面的需求分析,可以將這個(gè)系統(tǒng)的設(shè)計(jì)分為8個(gè)模塊,數(shù)據(jù)輸入,添加數(shù)據(jù),修改數(shù)據(jù),刪除數(shù)據(jù),修改成績,學(xué)號排序,瀏覽成績,退出模塊.學(xué)生成績管理系統(tǒng)數(shù)據(jù)輸入添加數(shù)據(jù)修改數(shù)據(jù)刪除數(shù)據(jù)修改成績學(xué)號排序?yàn)g覽成績退出模塊四.詳細(xì)設(shè)計(jì)1.菜單函數(shù)和主函數(shù) 將各個(gè)功能模塊設(shè)置為菜單選項(xiàng),方便調(diào)用,且執(zhí)行完每部分功能模塊后能夠方便返回到系統(tǒng)界面.流程圖顯示一系列功能選項(xiàng) N 輸入n,判斷n是否是A-H Y 根據(jù)n的值

3、調(diào)用各功能模塊函數(shù) menu() /*主界面(jimin)*/int w1; char n; /*.變量n保存選擇菜單數(shù)字,w1判斷(pndun)輸入的數(shù)字是否在功能菜單對應(yīng)數(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.各功能模塊設(shè)計(jì)(shj) (1) 輸入(shr)模塊數(shù)據(jù)分析單看各數(shù)據(jù)(shj)信息,學(xué)號年齡以及數(shù)學(xué)英語物理各科成績和總分均是整型,姓名可以采用字符型數(shù)組.數(shù)據(jù)信息存放在文件中,一條記錄對應(yīng)一個(gè)學(xué)生,既符合習(xí)慣也方便信息管理.把學(xué)生的學(xué)號姓名年齡各科成績及總分作為結(jié)構(gòu)體成員,存放若干個(gè)學(xué)生信息就用結(jié)構(gòu)體數(shù)

6、組.struct student int num; char name20; int age; int Math; int English; int Physical; long int sum;stuN;/*stuN中每個(gè)數(shù)組元素對應(yīng)一個(gè)學(xué)生*/注意stuN中的N為學(xué)生個(gè)數(shù),程序中采用宏定義的方式,可以隨時(shí)在源程序宏定義中修改,本程序宏定義#define N 30流程圖輸入用戶要輸入學(xué)生記錄的個(gè)數(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); /*要輸入的記錄個(gè)數(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(); /*一個(gè)任務(wù)(rn wu)結(jié)束時(shí)讓用戶選擇是瀏覽還是返回*/ (2)追加(zhuji)模塊需求分析 該模塊的功能是用戶需要增加新的學(xué)生記錄, 請從鍵盤輸入并逐條寫到原來的輸入文件中.流程圖調(diào)用加載函

8、數(shù)n=load();并計(jì)算可以記錄個(gè)數(shù)n輸入用戶要添加學(xué)生記錄的個(gè)數(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); /*輸入要添加的記錄個(gè)數(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(); /*一個(gè)任務(wù)結(jié)束時(shí)的選擇瀏覽還是(hi shi)返回*/ (3)修改(xigi)模塊需求(xqi)分析該模塊的功能是顯示所有學(xué)生信息,考慮到記錄很多,故采用分屏顯示。顯示完所有記錄后,用戶輸

10、入要修改學(xué)生的學(xué)號,根據(jù)學(xué)號查找學(xué)生記錄,并提示用戶修改該記錄的哪部分信息,是學(xué)號、姓名、年齡或某科成績、總分還是所有信息都修改,根據(jù)用戶選擇修改相應(yīng)信息。流程圖顯示所有記錄,讓用戶看哪個(gè)要修改輸入要修改的學(xué)號是否找到此學(xué)生記錄顯示找到的記錄調(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; /*給用戶看全部記錄以便確認(rèn)要修改的記錄*/ printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目

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)一個(gè)記錄的函數(shù)*/ printf(n); do printf(nnEnter NO.121052- that you want to modify! NO.:121052-); scanf(%d,&s.num); /*輸入(shr)要修改的數(shù)據(jù)的學(xué)號

12、*/ for(i=0;in;i+) /*查找要修改(xigi)的數(shù)據(jù)*/ if(s.num=stui.num) k=i; /*找到要修改的記錄*/s=stui; /* 把stui備份給s,以便用戶反悔時(shí)恢復(fù)*/ if(k=-1) printf(nnNO exist!please again); while(k=-1); /*當(dāng)k=-1表示沒有找到*/ printf_face(); /*調(diào)用顯示一個(gè)記錄的函數(shù)*/ printf_one(k); w1=modify_data(k,n); /*修改學(xué)生記錄并且返回保存控制值w1,w1=1則表示用戶已確認(rèn)修改*/ if(w1=1) /*確認(rèn)修改*/ p

13、rintf(nSuccessful _.nnAre you modify another?nnt1.Yes2.Back with savet bb); scanf(%d,&w0); w2=1; /*來控制保存,使w2=1是標(biāo)記已有過修改*/ else w0=0; /* end */ if(w2=1) stuk=s; /*沒有修改,把備份的s恢復(fù),使w0=0是為了讓循環(huán)終止*/ if(w0!=1&w2=1) save(n); /*正常返回,且有過修改 */ while(w0=1); menu(); (4)刪除模塊需求分析該模塊的功能是與修改模塊一樣先顯示所有的學(xué)生信息,同樣考慮到記錄很多,采用分

14、屏顯示。顯示完所有記錄后,用戶輸入要刪除學(xué)生的學(xué)號,根據(jù)學(xué)號查找學(xué)生記錄并刪除。刪除一般的做法是將數(shù)據(jù)從文件中刪除,刪除位置后面的記錄往前挪。流程圖返回主菜單 顯示所有記錄,讓用戶看哪個(gè)要刪除輸入要刪除的學(xué)號是否找到此學(xué)生記錄顯示找到的記錄使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; /*標(biāo)記(bioj)為0后,保存時(shí)便不保存*/ printf(nSuccessful _.nnAre you delete another?nnt1.Yes2.Back with savet bb); scanf(%d,&w

17、0); w2=1; /*確認(rèn)(qurn)刪除*/ else w0=0; /* end */ if(w2=1) stuk=s; if(w0!=1&w2=1) save(n); /*正常返回且已刪除*/ while(w0=1); menu(); (5)修改成績模塊需求分析該模塊的功能是修改各科成績或全體成績。流程圖 顯示所有記錄,讓用戶看哪個(gè)要修改輸入要修改的學(xué)號是否找到此學(xué)生記錄顯示找到記錄調(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); /*輸入要修改的學(xué)生學(xué)號*/ 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; /*確認(rèn)(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)排序模塊需求分析該模塊的功能是要求將學(xué)生記錄按照學(xué)號排序,這里采用選擇法排序。流程圖 用選擇法排序保存返回主菜單程序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)分析該模塊的功能是顯示所有學(xué)生記錄信息。流程圖顯示學(xué)生記錄,十個(gè)一屏按任意鍵顯示下一屏按任意鍵返回主菜單程序browse() /*瀏覽模塊*/int i,j,n; n=load(); /*加載記錄*/ printf_face(); /*調(diào)用顯示數(shù)據(jù)結(jié)構(gòu)項(xiàng)目函數(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)用顯示一個(gè)記錄的函數(shù)*/ printf(n); printf(tThere are %d record.n,n); printf(nPass any key to back.); getch(); /*按任意鍵*/ menu();3公共(gnggng)函數(shù)下面(xi mian)是在每個(gè)模塊中都有可能用到的一些公共函數(shù)。保存(bocn)函數(shù)save(int n)說明形參n控制保存的個(gè)數(shù)

23、。當(dāng)stuk.sum=0表示刪除,不保存該記錄。程序save(int n) /*保存函數(shù),保存n個(gè)記錄*/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ù)可以用來加載所有記錄,并且可以返回所有記錄的個(gè)數(shù)。程序load() /*加載記錄或可以計(jì)算記錄個(gè)數(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); /*返回記錄個(gè)數(shù)*/學(xué)號輸入函數(shù)no_inpu

25、t(int i,int n)說明該函數(shù)對輸入學(xué)號進(jìn)行判斷,確保輸入的學(xué)號唯一。形參i表示第i個(gè)學(xué)生(xu sheng)記錄,形參n表示總共(znggng)有n個(gè)學(xué)生(xu sheng)記錄。程序no_input(int i,int n) /*學(xué)號輸入函數(shù)*/int k,w1; do w1=0; printf(NO.:121052-); scanf(%d,&stui.num); if(stui.numN) /*判斷學(xué)號是否在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); /*輸入選擇作個(gè)判斷*/ 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); /*輸入選擇作個(gè)判斷*/ 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)容里面會有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論