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

下載本文檔

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

文檔簡介

1、 目錄 學(xué)生成績管理程序題目要求 2設(shè)計目的 2總體設(shè)計 3詳細(xì)設(shè)計 3調(diào)試與測試 12源程序 14總結(jié) 30學(xué)生成績管理程序一 題目要求 1. 問題描述:對在校學(xué)生幾門課程的考試成績進(jìn)行統(tǒng)一管理.每個學(xué)生記錄包括學(xué)號,姓名,年齡,數(shù)學(xué),英語,物理成績,默認(rèn)以學(xué)號為序存放.2. 要求:(1)一個文件按以班為單位存儲學(xué)生記錄.(2)將允許的操作分為四種,以A,B ,C,D,E,F為標(biāo)志:A:插入一個學(xué)生記錄;B:修改學(xué)生記錄;C:刪除一個學(xué)生記錄;D:查找一個學(xué)生記錄;E:瀏覽學(xué)生成績:F:退出3. 計算學(xué)生的總成績.4. 按學(xué)號排序輸出全班學(xué)生成績表.二 設(shè)計目的根據(jù)題目要求,由于學(xué)生信息是存

2、放在文件中,所以應(yīng)提供文件的輸入,輸出等操作;在程序中需要瀏覽學(xué)生的信息,應(yīng)提供顯示,查找,排序等操作;另外還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇.三 總體設(shè)計根據(jù)上面的需求分析,可以將這個系統(tǒng)分為以下模塊:輸入模塊,修改模塊,刪除模塊,查找模塊,顯示模塊.學(xué)生成績管理系統(tǒng)數(shù)據(jù)輸入數(shù)據(jù)顯示數(shù)據(jù)修改數(shù)據(jù)刪除數(shù)據(jù)查找四 詳細(xì)設(shè)計1. 主函數(shù):主函數(shù)一般設(shè)計得比較簡單,只提供輸入,處理和輸出部分的函數(shù)調(diào)用,其中各功能模塊用菜單方式選擇.流程圖:顯示一系列功能模塊 N輸入n,判斷n是否是A-F Y根據(jù)n的值調(diào)用各功能模塊函數(shù)程序:/#include head.h int menu_select() cha

3、r c; printf(nn); printf( | 1. 增加學(xué)生記錄 5.統(tǒng)計信息 |n); printf( | 2. 查詢學(xué)生記錄 6.打開文件 |n); printf( | 3. 修改學(xué)生記錄 7.保存文件 |n); printf( | 4. 學(xué)生紀(jì)錄排序 8.顯示記錄 |n); printf( | 0. 退出系統(tǒng) |n); printf(nn); printf(請選擇(0-8):); c=getchar(); getchar(); return (c-0); 2. 輸入模塊:分析:單獨看各數(shù)據(jù)信息,學(xué)號,姓名是字符型,可以采用字符型數(shù)組;分?jǐn)?shù)為整數(shù),采用整數(shù);數(shù)據(jù)信息存放在文件中,一

4、條記錄對應(yīng)一個學(xué)生,既符合習(xí)慣又方便信息管理.如果要存放若干學(xué)生信息就用結(jié)構(gòu)體數(shù)組:void addrecord(student stud) int i=0,j,num; char str5; if(numstus!=0) printf(已有記錄存在是否覆蓋?(y/n)n); gets(str); if(str0=Y|str0=y) i=0; else i=numstus; printf(請輸入增加的學(xué)生信息條目數(shù):); scanf(%d,&num); if(i=0) numstus=num; else numstus+=num; if(numstuslens) lens+=50; point

5、er=(student *)realloc(pointer,lens*LEN); printf(請輸入學(xué)生信息:n); for(;inumstus;i+) getchar(); printf(請輸入學(xué)號:); gets(pointeri.number); printf(請輸入姓名:); gets(); printf(請輸入性別(男/女 1/0):); gets(pointeri.sex); if(pointeri.sex0=0) strcpy(pointeri.sex,女); else strcpy(pointeri.sex,男); printf(請輸入各科成績:(按

6、“語文,數(shù)學(xué),英語,歷史,政治”的順序):); studi.score=0; for(j=0;j0) i=menu_select(); /*控制菜單*/ switch(i) case 1:addrecord(pointer);break; /*增加學(xué)生信息*/ case 2:findrecord(pointer);break; /*查詢學(xué)生信息*/ case 3:amendrecord(pointer);break; /*修改學(xué)生信息*/ case 4:sort(pointer);break; /*學(xué)生信息排序*/ case 5:statistic(pointer);break; /*統(tǒng)計信息

7、*/ case 6:openfile(pointer);break; /*打開文件*/ case 7:writetotext(pointer);break; /*保存文件*/ case 8:display(pointer,0,numstus-1);break; /*顯示記錄*/ case 0: if(numstus!=0) printf(是否保存當(dāng)前記錄?(y/n); gets(str); if(str0=y|str0=Y) writetotext(pointer); i=-1;break; /*退出系統(tǒng)*/ default:printf(請輸入數(shù)字08:n);i=1; /*輸入錯誤*/ pr

8、intf(tt歡迎再次使用本系統(tǒng)。nn); display1(); 3. 修改模塊:分析:用戶輸入要修改學(xué)生的學(xué)號,根據(jù)學(xué)生的學(xué)號等信息查找學(xué)生記錄,并提示用戶修改該記錄的哪部分信息.根據(jù)用戶選擇修改相應(yīng)的信息.流程圖:輸入要修改的學(xué)號找到? Y N提示沒有找到顯示記錄,調(diào)用修改函數(shù)返回主菜單繼續(xù)? Y N程序:void xiugai() if(fp=fopen(s_score.txt,rb+)=NULL|(fp1=fopen(temp.txt,wb+)=NULL) /*檢查是否出錯*/ printf(Cannot open this file.n); exit(0); printf(nPLe

9、ase shuru xiugai xuehao:); scanf(%d,&i); getchar(); while(fread(&data,sizeof(data),1,fp)=1) j=atoi(data.xuehao); if(j=i) printf(xuehao:%snmingzi:%snnianling:%sn,data.xuehao,data.mingzi,data.nianling); printf(Please shuru mingzi:); gets(data.mingzi); printf(Please shuru shuxue score:); gets(temp);dat

10、a.score0=atof(temp); printf(Please input yingyu score:); gets(temp);data.score1=atof(temp); printf(Please input wuli score:); gets(temp);data.score2=atof(temp); data.score3=data.score0+data.score1+data.score2; fwrite(&data,sizeof(data),1,fp1); fseek(fp,0L,0); /*將位置指針移到離頭文件0個字節(jié)處*/fseek(fp1,0L,0); whi

11、le(fread(&data,sizeof(data),1,fp1)=1) fwrite(&data,sizeof(data),1,fp); fclose(fp); fclose(fp1); 4. 刪除模塊: 分析:該模塊的功能是,用戶輸入要刪除的學(xué)生的學(xué)號,根據(jù)學(xué)生學(xué)號查找記錄并刪除.流程圖: 輸入要刪除的學(xué)號找到? Y N提示沒有找到顯示記錄,調(diào)用刪除函數(shù)返回主菜單繼續(xù)? Y N程序:void deleterecord(student stu,int i) /*刪除信息*/ int j; while(i=0) for(j=i;jnumstus;j+) stuj=stuj+1; numstu

12、s-; printf(刪除成功!n); void count(student stud) int i,j; for(i=0;inumstus;i+) studi.index=1; for(j=0;jstudi.score) studi.index+; 5. 查找模塊:需求分析:該模塊的功能是根據(jù)輸入的學(xué)生的姓名查找對應(yīng)的記錄,找到以后,顯示相應(yīng)的學(xué)生信息.流程圖:輸入學(xué)生學(xué)號返回主菜單詢問是否繼續(xù)提示沒有找到顯示找到的記錄是否找到學(xué)生記錄 Y N N Y程序:/#include head.h int findrecord(student stud) /*查找信息*/ char str2; in

13、t i,num; if(numstus=0) printf(沒有可被查找的記錄n); return -1; else printf(以何種方式查找?n1.學(xué)號t2.姓名t3.名次n); gets(str); if(str0=1) /*按學(xué)號查找*/ printf(請輸入學(xué)號:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,studi.number)=0) display(stud,i,i); break; else continue; else if(str0=2) /*按姓名查找*/ printf(請輸入姓名:); gets(str); f

14、or(i=0;i=numstus;i+) if(strcmp(str,)=0) display(stud,i,i); break; else continue; else if(str0=3) /*按名次查找*/ printf(請輸入名次:); scanf(%d,&num); getchar(); for(i=0;inumstus) printf(沒有查找所要的信息。n); return -1; return i; 6. 顯示模塊:需求分析:該模塊的功能是顯示所有學(xué)生記錄信息.程序:void welcome() printf(t*n); printf(tttt*學(xué)生成績管理

15、系統(tǒng)*ntttt 傾情奉獻(xiàn) 歡迎使用!n); printf(t*n); void showtable() printf(-n); printf(學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t歷史t政治t總分t平均分t名次n); printf(-n); void display(student stud,int n1,int n2) int i; showtable(); /*顯示表頭*/ for(i=n1;i=n2;i+) printf(%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn,studi.number,,studi.sex,s

16、tudi.subject0,studi.subject1,studi.subject2,studi.subject3,studi.subject4,studi.score,studi.average,studi.index); /*通過循環(huán)輸出數(shù)據(jù)*/ void display1() printf(tt本系統(tǒng)由計科二班制作nn); printf(tt制作人員列表: nn); printf(tt殷增鋒ttt邵超n); printf(nn); getchar(); 五 調(diào)試與測試在這次課程設(shè)計中,程序編寫過程中遇到了很多的問題,各種函數(shù)的運用也讓人頭疼,在上機(jī)編譯運行過程中出現(xiàn)了很多的錯誤,例如:

17、各種數(shù)據(jù)類型的定義,函數(shù)的調(diào)用等等。但最終還是在老師同學(xué)的幫助下進(jìn)行了各種代碼的編寫與修改,最終程序成功的運行。下面是各個模塊的界面圖(1) 主菜單函數(shù):(2): 輸入模塊:(3): 顯示模塊:(4): 刪除模塊:(5): 查找模塊:(6): 修改模塊:6 程序源#ifndef H_STUDENT_HH #define H_STUDENT_HH #include stdio.h #include string.h #include malloc.h #define LEN sizeof(struct message_student) /*一個結(jié)構(gòu)體數(shù)組元素的長度*/ #define numsu

18、bs 5 /*學(xué)科數(shù)目*/ typedef struct message_student /*結(jié)構(gòu)體定義*/ char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index; student; extern int numstus; /*學(xué)生數(shù)目*/ extern student *pointer; /*指向結(jié)構(gòu)體數(shù)組*/ extern int lens; int menu_select(); /*函數(shù)聲明*/ int openfile(student stu);

19、 int findrecord(student stud); int writetotext(student stud); void welcome(); void display1(); void showtable(); void sort(student stu); void deleterecord(student stu,int i); void addrecord(student stud); void display(student stud,int n1,int n2); void amendrecord(student stud); void count(student st

20、ud); void sortnum(student stud); void sortnum2(student stud); void sortname(student stud); void sortname2(student stud); void sortcount(student stud); void sortcount2(student stud); void statistic(student stud); void display1(); #endif /#include head.h int menu_select() char c; printf(nn); printf( |

21、 1. 增加學(xué)生記錄 5.統(tǒng)計信息 |n); printf( | 2. 查詢學(xué)生記錄 6.打開文件 |n); printf( | 3. 修改學(xué)生記錄 7.保存文件 |n); printf( | 4. 學(xué)生紀(jì)錄排序 8.顯示記錄 |n); printf( | 0. 退出系統(tǒng) |n); printf(nn); printf(請選擇(0-8):); c=getchar(); getchar(); return (c-0); /#include head.h int findrecord(student stud) /*查找信息*/ char str2; int i,num; if(numstus=0

22、) printf(沒有可被查找的記錄n); return -1; else printf(以何種方式查找?n1.學(xué)號t2.姓名t3.名次n); gets(str); if(str0=1) /*按學(xué)號查找*/ printf(請輸入學(xué)號:); gets(str); for(i=0;i=numstus;i+) if(strcmp(str,studi.number)=0) display(stud,i,i); break; else continue; else if(str0=2) /*按姓名查找*/ printf(請輸入姓名:); gets(str); for(i=0;i=numstus;i+)

23、if(strcmp(str,)=0) display(stud,i,i); break; else continue; else if(str0=3) /*按名次查找*/ printf(請輸入名次:); scanf(%d,&num); getchar(); for(i=0;inumstus) printf(沒有查找所要的信息。n); return -1; return i; /#includehead.h int openfile(student stu) int i=0,j; FILE *fp; char filename20,str2; if(numstus!=0) p

24、rintf(已經(jīng)有記錄存在,是否保存?(y/n); gets(str); if(str0=y|str0=Y) writetotext(stu); printf(請輸入文件名:); gets(filename); numstus=0; if(fp=fopen(filename,rb+)=NULL) printf(無法打開該文件n); return(-1); fscanf(fp,%d,&numstus); fgetc(fp); while(inumstus) fscanf(fp,%s,stui.number); fscanf(fp,%s,); fscanf(fp,%s,stui.

25、sex); for(j=0;jnumsubs;j+) fscanf(fp,%f,&stui.subjectj); fscanf(fp,%f,&stui.score); fscanf(fp,%f,&stui.average); fscanf(fp,%d,&stui.index); i+; fclose(fp); printf(文件讀取成功n); printf(是否顯示紀(jì)錄?(y/n); gets(str); if(str0=y|str0=Y) display(stu,0,numstus-1); return(0); /#include head.h void sort(student stud)

26、 int i,j=0; char str5; student *p; p=stud; if(numstus=0) printf(沒有可供查詢的記錄!); while(1) for(i=0;i+) printf( 請輸入查詢方式:); printf((直接輸入回車則結(jié)束查詢操作)n); printf(1.按照學(xué)號t); printf(2.按照姓名t); printf(3.按照名次n); gets(str); if(strlen(str)=0) break; if(str0=1) printf(請輸入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(s

27、tr); if(str0=1) sortnum2(p); else sortnum(p); display(stud,0,numstus-1); else if(str0=2) printf(請輸入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str); if(str0=1) sortname2(p); else sortname(p); display(stud,0,numstus-1); else if(str0=3) printf(請輸入排序次序:n); printf(1.升序排列t); printf(2.降序排列n); gets(str

28、); if(str0=1) sortcount2(p); else sortcount(p); display(stud,0,numstus-1); else printf(請輸入13); printf(是否退出排序?(y/n); gets(str); if(str0=y|str0=Y) break; return; void sortnum(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1

29、)=temp; void sortnum2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortname(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=

30、temp; void sortname2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; void sortcount(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;jstudj.index) temp=*(p+j); *(p+j)=*(p+j+1);

31、 *(p+j+1)=temp; void sortcount2(student stud) int i,j; student temp; student *p; p=stud; for(i=0;inumstus;i+) for(j=0;jstudj+1.index) temp=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=temp; /#includehead.h void statistic(student stud) /*新增功能,輸出統(tǒng)計信息*/ int i,j=0,k=0; char c1,str2; float averagenumsubs,sum=0; if(

32、numstus=0) printf(沒有可被查找的記錄n); else while(1) printf(下面將統(tǒng)計考試成績n); printf(請選擇你要統(tǒng)計哪科的成績 1.At2.Bt3.Ct4.Dt5.En); c1=getchar(); printf(t一共有個%d記錄n,numstus); /*總共記錄數(shù)*/ switch(c1) case 1: for(i=0;istudi.subject0) k=i; if(studj.subject0studi.subject0) j=i; average0=sum/numstus; printf(t科目A的最高分:n); /*最高分*/ pri

33、ntf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj.number,,studj.subject0); printf(t科目A的最低分是:n); /*最低分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studk.number,,studk.subject0); printf(t科目A的平均分是 %5.2fn,average0); /*平均分*/ break; case 2: for(i=0;istudi.subject1) k=i; if(studj.subject1studi.subject1) j=i; averag

34、e1=sum/numstus; printf(t科目B的最高分:n); /*最高分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj.number,,studj.subject1); printf(t科目B的最低分是:n); /*最低分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studk.number,,studk.subject1); printf(t科目B的平均分是 %5.2fn,average1); /*平均分*/ break; case 3: for(i=0;istudi.subject2) k=

35、i; if(studj.subject2studi.subject2) j=i; average2=sum/numstus; printf(t科目C的最高分:n); /*最高分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj.number,,studj.subject2); printf(t科目C的最低分是:n); /*最低分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studk.number,,studk.subject2); printf(t科目C的平均分是 %5.2fn,average2); /*平

36、均分*/ break; case 4: for(i=0;istudi.subject3) k=i; if(studj.subject3studi.subject3) j=i; average3=sum/numstus; printf(t科目D的最高分:n); /*最高分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj.number,,studj.subject3); printf(t科目D的最低分是:n); /*最低分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studk.number,,studk.su

37、bject3); printf(t科目D的平均分是 %5.2fn,average3); /*平均分*/ break; case 5: for(i=0;istudi.subject4) k=i; if(studj.subject4studi.subject4) j=i; average4=sum/numstus; printf(t科目E的最高分:n); /*最高分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj.number,,studj.subject4); printf(t科目E的最低分是:n); /*最低分*/ printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studk.number,,studk.subject4); printf(t科目E的平均分是 %5.2fn,average4); /*平均分*/ break; default:printf(輸入錯誤!請輸入15之間的數(shù)n); sum=0; getchar(); printf(是否繼續(xù)進(jìn)行統(tǒng)計?(y/n

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論