c語言課程設計學生成績管理系統_第1頁
c語言課程設計學生成績管理系統_第2頁
c語言課程設計學生成績管理系統_第3頁
c語言課程設計學生成績管理系統_第4頁
c語言課程設計學生成績管理系統_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、條記錄對應一個學生,既符合習慣又方便信息管理.如果要存放若干學生信息就用結構體數組: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(請輸入增加的學生信息條目數:); scanf(%d,&num); if(i=0) numstus=num; else numstus+=num; if(numstuslens) lens+=50; point

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

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

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(是否保存當前記錄?(y/n); gets(str); if(str0=y|str0=Y) writetotext(pointer); i=-1;break; /*退出系統*/ default:printf(請輸入數字08:n);i=1; /*輸入錯誤*/ pr

8、intf(tt歡迎再次使用本系統。nn); display1(); 3. 修改模塊:分析:用戶輸入要修改學生的學號,根據學生的學號等信息查找學生記錄,并提示用戶修改該記錄的哪部分信息.根據用戶選擇修改相應的信息.流程圖:輸入要修改的學號找到? Y N提示沒有找到顯示記錄,調用修改函數返回主菜單繼續? 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個字節處*/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. 刪除模塊: 分析:該模塊的功能是,用戶輸入要刪除的學生的學號,根據學生學號查找記錄并刪除.流程圖: 輸入要刪除的學號找到? Y N提示沒有找到顯示記錄,調用刪除函數返回主菜單繼續? 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. 查找模塊:需求分析:該模塊的功能是根據輸入的學生的姓名查找對應的記錄,找到以后,顯示相應的學生信息.流程圖:輸入學生學號返回主菜單詢問是否繼續提示沒有找到顯示找到的記錄是否找到學生記錄 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.學號t2.姓名t3.名次n); gets(str); if(str0=1) /*按學號查找*/ printf(請輸入學號:); 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. 顯示模塊:需求分析:該模塊的功能是顯示所有學生記錄信息.程序:void welcome() printf(t*n); printf(tttt*學生成績管理

15、系統*ntttt 傾情奉獻 歡迎使用!n); printf(t*n); void showtable() printf(-n); printf(學號t姓名t性別t語文t數學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); /*通過循環輸出數據*/ void display1() printf(tt本系統由計科二班制作nn); printf(tt制作人員列表: nn); printf(tt殷增鋒ttt邵超n); printf(nn); getchar(); 五 調試與測試在這次課程設計中,程序編寫過程中遇到了很多的問題,各種函數的運用也讓人頭疼,在上機編譯運行過程中出現了很多的錯誤,例如:

17、各種數據類型的定義,函數的調用等等。但最終還是在老師同學的幫助下進行了各種代碼的編寫與修改,最終程序成功的運行。下面是各個模塊的界面圖(1) 主菜單函數:(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) /*一個結構體數組元素的長度*/ #define numsu

18、bs 5 /*學科數目*/ typedef struct message_student /*結構體定義*/ char number6; char name20; char sex4; float subjectnumsubs; float score; float average; int index; student; extern int numstus; /*學生數目*/ extern student *pointer; /*指向結構體數組*/ extern int lens; int menu_select(); /*函數聲明*/ 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. 增加學生記錄 5.統計信息 |n); printf( | 2. 查詢學生記錄 6.打開文件 |n); printf( | 3. 修改學生記錄 7.保存文件 |n); printf( | 4. 學生紀錄排序 8.顯示記錄 |n); printf( | 0. 退出系統 |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.學號t2.姓名t3.名次n); gets(str); if(str0=1) /*按學號查找*/ printf(請輸入學號:); 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(已經有記錄存在,是否保存?(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(是否顯示紀錄?(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((直接輸入回車則結束查詢操作)n); printf(1.按照學號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) /*新增功能,輸出統計信息*/ int i,j=0,k=0; char c1,str2; float averagenumsubs,sum=0; if(

32、numstus=0) printf(沒有可被查找的記錄n); else while(1) printf(下面將統計考試成績n); printf(請選擇你要統計哪科的成績 1.At2.Bt3.Ct4.Dt5.En); c1=getchar(); printf(t一共有個%d記錄n,numstus); /*總共記錄數*/ 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學號:%s 姓名:%s 分數:%.2fn,studj.number,,studj.subject0); printf(t科目A的最低分是:n); /*最低分*/ printf(tt學號:%s 姓名:%s 分數:%.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學號:%s 姓名:%s 分數:%.2fn,studj.number,,studj.subject1); printf(t科目B的最低分是:n); /*最低分*/ printf(tt學號:%s 姓名:%s 分數:%.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學號:%s 姓名:%s 分數:%.2fn,studj.number,,studj.subject2); printf(t科目C的最低分是:n); /*最低分*/ printf(tt學號:%s 姓名:%s 分數:%.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學號:%s 姓名:%s 分數:%.2fn,studj.number,,studj.subject3); printf(t科目D的最低分是:n); /*最低分*/ printf(tt學號:%s 姓名:%s 分數:%.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學號:%s 姓名:%s 分數:%.2fn,studj.number,,studj.subject4); printf(t科目E的最低分是:n); /*最低分*/ printf(tt學號:%s 姓名:%s 分數:%.2fn,studk.number,,studk.subject4); printf(t科目E的平均分是 %5.2fn,average4); /*平均分*/ break; default:printf(輸入錯誤!請輸入15之間的數n); sum=0; getchar(); printf(是否繼續進行統計?(y/n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論