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頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ù)題目要

2、求,由于學(xué)生信息是存放在文件中,所以應(yīng)提供文件的輸入,輸出等操作; 在程序中需要瀏覽學(xué)生的信息,應(yīng)提供顯示,查找,排序等操作;另外還應(yīng)提供鍵盤式 選擇菜單實(shí)現(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)用,其中各 功能模塊用菜單方式選擇流程圖:程序:加學(xué)生記錄5.統(tǒng)計信息|n);printf(|2.查詢學(xué)生記錄6.打開文件|n);存 printf(|3.修改學(xué)生記錄7.保存文件|n

3、);printf(|4.學(xué)生紀(jì)錄排序8.顯示記錄|n);printf(|0.退出系統(tǒng) |n);prin tf(nn);printf(請選擇(0-8):);c=getchar(); getchar(); return(c-O);2.輸入模塊:分析:單獨(dú)看各數(shù)據(jù)信息,學(xué)號,姓名是字符型,可以采用字符型數(shù)組;分?jǐn)?shù)為整數(shù),采用整 數(shù);數(shù)據(jù)信息存放在文件中,一條記錄對應(yīng)一個學(xué)生,既符合習(xí)慣又方便信息管理 如果要存放若干學(xué)生信息就用結(jié)構(gòu)體數(shù)組:voidaddrecord(stude ntstud) in ti=0,j, num;charstr5;if(numstus!=0)printf( 已有記錄存在是否

4、覆蓋 ?(y/n)n); gets(str);if(str0=Y|str0=y)i=0;elsei=numstus;printf( 請輸入增加的學(xué)生信息條目數(shù) :); scanf(%d,&num);if(i=0) numstus=num;elsenumstus+=num; if(numstuslens)lens+=50; pointer=(student*)realloc(pointer,lens*LEN);printf( 請輸入學(xué)生信息 :n);for(;inumstus;i+) getchar();printf(請輸入學(xué)號:);gets(pointeri.number);printf( 請

5、輸入姓名 :);gets(); printf( 請輸入性別 (男/女 1/0):);gets(pointeri.sex); if(pointeri.sex0=0)strcpy(pointeri.sex, 女); elsestrcpy(poi nteri.sex,男);”的順序 ):);printf( 請輸入各科成績 :(按“語文,數(shù)學(xué),英語,歷史, studi.score=0;for(j=0;j0)i=menu_select();/*控制菜單 */switch(i) case1:addrecord(pointer);break;/增力卩學(xué)生信息 */ case2:fi

6、ndrecord(pointer);break;/喳詢學(xué)生信息 */ case3:amendrecord(pointer);break;/修改學(xué)生信息 */ case4:sort(pointer);break;/*學(xué)生信息排序 */ case5:statistic(pointer);break;/統(tǒng)計信息 */ case6:openfile(pointer);break;/*打開文件 */ case7:writetotext(pointer);break;/*保存文件 */ case8:display(pointer,0,numstus-1);break;/顯示記錄 */ case0:if(n

7、umstus!=0)printf(是否保存當(dāng)前記錄?(y/n); gets(str);if(str0=y|str0=Y) writetotext(poi nter);i=-1;break;/*退出系統(tǒng) */ default:printf(請輸入數(shù)字 08:n);i=1;/* 輸入錯誤 */printf(tt歡迎再次使用本系統(tǒng)。nn);display1();3修改模塊:,并提示分析:用戶輸入要修改學(xué)生的學(xué)號,根據(jù)學(xué)生的學(xué)號等信息查找學(xué)生記錄 用戶修改該記錄的哪部分信息根據(jù)用戶選擇修改相應(yīng)的信息.prin tf(nPLeaseshuruxiugaixuehao:);提示沒有 找到,wb+)=NUL

8、L)/*檢查是否出錯 */sca nf(%d,&i );getchar();while(fread(&data,sizeof(data),1,fp)=1) j=atoi;if(j=i)prin tf(xuehao:%snmin gzi:%snnian li ng:%sn,; prin tf(Pleaseshuru min gzi:);gets;prin tf(Pleaseshurushuxuescore:);gets(temp);0=atof(temp);prin tf(Please in puty in gyuscore:);gets(temp);1=atof(temp);prin tf(P

9、leasei nputwuliscore:);gets(temp);2=atof(temp);3 =0+1+2;fwrite(&data,sizeof(data),1,fp1);fseek(fp,0L,0);/*將位置指針移到離頭文件0個字節(jié)處*/ fseek(fp1,0L,0);while(fread(&data,sizeof(data),1,fp1)=1)fwrite(&data,sizeof(data),1,fp);fclose(fp);fclose(fp1);4.刪除模塊:分析:該模塊的功能是,用戶輸入要刪除的學(xué)生的學(xué)號,根據(jù)學(xué)生學(xué)號查找記錄并刪除流程圖:YN顯示找到的記錄voidco

10、 un t(stude ntstud)in ti,j;for(i=0;i nu mstus;i+)studi.i ndex=1;for(j=0;j studi.score) studi.i ndex+;5.查找模塊:需求分析:該模塊的功能是根據(jù)輸入的學(xué)生的姓名查找對應(yīng)的記錄,找到以后,顯示相應(yīng)的學(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

11、,i); break; elsecontinue;elseif(str0=2)/* 按姓名查找 */printf(請輸入姓名:); gets(str);for(i=0;i=numstus;i+) if(strcmp(str,)=0) display(stud,i,i); break; elsecontinue;elseif(str0=3)/* 按名次查找 */printf( 請輸入名次 :); scanf(%d,&num); getchar();for(i=0;inumstus)printf(沒有查找所要的信息。n); return-1;returni;6. 顯示模塊 :需

12、求分析 : 該模塊的功能是顯示所有學(xué)生記錄信息 程序:voidwelcome()printf(t*n);printf(tttt* 學(xué)生成績管理系統(tǒng) *ntttt 傾情奉獻(xiàn)歡迎使用 !n);printf(t*n);voidshowtable()printf(n);printf(學(xué)號t姓名t性別t語文t數(shù)學(xué)t英語t歷史t政治t總分t平均分t名次n);printf(n);voiddisplay(studentstud,intn1,intn2)inti;showtable();/*顯示表頭 */for(i=n1;i=n2;i+)printf(%st%st%st%.2ft%.2ft%.2ft%.2ft%

13、.2ft%.2ft%.2ft%dtn,studi.number,stu ,studi.sex,studi.subject0,studi.subject1,studi.subject2,studi.subject3,studi.subject4,studi.score,studi.average,studi.index);/*通過循環(huán)輸出數(shù)據(jù) */voiddisplay1()printf(tt 本系統(tǒng)由計科二班制作 nn);printf(tt 制作人員列表 :nn);printf(tt 殷增鋒 ttt 邵超 n);printf(nn);getchar();五 調(diào)試與測試在這次課程設(shè)

14、計中, 程序編寫過程中遇到了很多的問題, 各種函數(shù)的運(yùn)用也讓人頭疼, 在上機(jī)編譯運(yùn)行過程中出現(xiàn)了很多的錯誤, 例如:各種數(shù)據(jù)類型的定義, 函數(shù)的調(diào)用 等等。但最終還是在老師同學(xué)的幫助下進(jìn)行了各種代碼的編寫與修改 , 最終程序成功 的運(yùn)行。下面是各個模塊的界面圖(1) 主菜單函數(shù) :(2) :輸入模塊 :(3) :顯示模塊 :(4) :刪除模塊 :(5) : 查找模塊:(6) : 修改模塊 :六程序源#ifndefH_STUDENT_HH #defineH_STUDENT_HH#include#include#include#defineLENsizeof(structmessage_stude

15、nt)/* 一個結(jié)構(gòu)體數(shù)組元素的長度 */ #definenumsubs5/* 學(xué)科數(shù)目 */typedefstructmessage_student/* 結(jié)構(gòu)體定義 */charnumber6;charname20;charsex4;floatsubjectnumsubs;floatscore;floataverage;intindex;student;externintnumstus;/* 學(xué)生數(shù)目 */externstudent*pointer;/* 指向結(jié)構(gòu)體數(shù)組 */ externintlens;intmenu_select();/* 函數(shù)聲明 */ intopenfile(stud

16、entstu);intfindrecord(studentstud);intwritetotext(studentstud);voidwelcome();voiddisplay1();voidshowtable();voidsort(studentstu); voiddeleterecord(studentstu,inti);voidaddrecord(studentstud); voiddisplay(studentstud,intn1,intn2);voidamendrecord(studentstud); voidcount(studentstud); voidsortnum(stude

17、ntstud); voidsortnum2(studentstud); voidsortname(studentstud); voidsortname2(studentstud); voidsortcount(studentstud); voidsortcount2(studentstud); voidstatistic(studentstud); voiddisplay1();#endif加學(xué)生記錄 5. 統(tǒng)計信息 |n);printf(|2.查詢學(xué)生記錄6.打開文件|n);printf(|3.修改學(xué)生記錄7. 保存文件|n);printf(|4.學(xué)生紀(jì)錄排序8. 顯示記錄|n);print

18、f(|0.退出系統(tǒng) |n);printf(nn);printf( 請選擇 (0-8):);c=getchar(); getchar(); return(c-0);號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;elsecontinue;elseif(str0=2)/* 按姓名查找 */printf( 請輸入姓名 :);gets(str);for(

19、i=0;i=numstus;i+) if(strcmp(str,)=0) display(stud,i,i);break;elsecontinue;elseif(str0=3)/* 按名次查找 */printf( 請輸入名次 :);scanf(%d,&num);getchar();for(i=0;inumstus)printf( 沒有查找所要的信息。 n);return-1;returni;umber);fscanf(fp,%s,);fscanf(fp,%s,stui.sex);for(j=0;jnumsubs;j+)fscanf(fp,%f,&stui.

20、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);照學(xué)號t);printf(2.按照姓名 t);printf(3.按照名次 n);gets(str);if(strlen(str)=0)break; if(str0=1)print

21、f( 請輸入排序次序: printf(1.升序排列 t);printf(2.降序排列 n);gets(str);if(str0=1)sortnum2(p);elsesortnum(p); display(stud,0,numstus-1);elseif(str0=2)printf( 請輸入排序次序: printf(1.升序排列 t);printf(2.降序排列 n);gets(str);if(str0=1) sortname2(p);elsesortname(p); display(stud,0,numstus-1);elseif(str0=3)printf( 請輸入排序次序: printf(

22、1.升序排列 t);printf(2.降序排列 n);gets(str);if(str0=1) sortcount2(p);elsesortcount(p); display(stud,0,numstus-1);elseprintf( 請輸入 13);n);n);n);printf( 是否退出排序 ?(y/n);gets(str); if(str0=y|str0=Y)break;return;voidsortnum(studentstud)inti,j;studenttemp;student*p;p=stud;for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+

23、j);*(p+j)=*(p+j+1);*(p+j+1)=temp;voidsortnum2(studentstud)inti,j;studenttemp;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;voidsortname(studentstud)inti,j; studenttemp; student*p; p=stud;for(i=0;inumstus;i+) for(j=0;j0) temp=*(p+j); *(p+j)=*(p+j+1); *(p+

24、j+1)=temp;voidsortname2(studentstud) inti,j; studenttemp; 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; voidsortcount(studentstud) inti,j; studenttemp; student*p; p=stud;for(i=0;inumstus;i+) for(j=0;jstudj.index)temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=t

25、emp;voidsortcount2(studentstud)inti,j;studenttemp;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;ubject0;if(studk.subject0studi.subject0)k=i;if(studj.subject0studi.subject0)j=i;average0=sum/numstus;printf(t 科目A的最高分:n);/* 最高分*/printf(tt學(xué)號:%s 姓名:%

26、s 分?jǐn)?shù):.2fn,studj. nu mber,studj. name,studj.subjectO);printf(t 科目A的最低分是:n);/* 最低分*/printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studk. nu mber,studk. name,studk.subjectO);printf(t 科目 A 的平均分是 n,averageO);/* 平均分 */ break;case2:for(i=O;istudi.subject1)k=i;if(studj.subject1studi.subject1)j=i;average1=sum/numstus;printf(

27、t 科目B的最高分:n);/*最高分*/printf(tt 學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studj. nu mber,studj. name,studj.subject1);printf(t 科目B的最低分是:n);/* 最低分*/printf(tt 學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studk. nu mber,studk. name,studk.subject1);printf(t 科目 B 的平均分是 n,average1);/* 平均分 */ break;case3:for(i=0;istudi.subject2)k=i;if(studj.subject2studi.

28、subject2)j=i;average2=sum/numstus;printf(t 科目C的最高分:n);/* 最高分*/printf(tt 學(xué)號:%s 姓名:%s 分?jǐn)?shù):%.2fn,studj. nu mber,studj. name,studj.subject2);printf(t 科目C的最低分是:n);/* 最低分*/printf(tt 學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studk. nu mber,studk. name,studk.subject2);printf(t 科目 C 的平均分是 n,average2);/* 平均分 */ break;case4:for(i=0;

29、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. nu mber,studj. name,studj.subject3);printf(t 科目D的最低分是:n);/* 最低分*/printf(tt 學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studk. nu mber,studk. name,studk.subject3);printf(t 科目 D 的平均分是

30、 %n,average3);/* 平均分 */ break;case5: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. nu mber,studj. name,studj.subject4);printf(t科目E的最低分是:n);/* 最低分*/printf(tt學(xué)號:%s 姓名:%s 分?jǐn)?shù):.2fn,studk. nu mber,studk. n

31、ame,studk.subject4);printf(t科目 E 的平均分是 n,average4);/* 平均分 */break;default:printf( 輸入錯誤!請輸入 15之間的數(shù) n);sum=0;getchar();printf( 是否繼續(xù)進(jìn)行統(tǒng)計 ?(y/n);gets(str);if(str0=y|str0=Y);elsebreak;intwritetotext(studentstud)/*將所有記錄寫入文件 */inti=0,j;FILE*fp;charfilename20;printf( 輸入文件名稱 :);gets(filename);fp=fopen(filena

32、me,w);fprintf(fp,%dn,numstus);while(inumstus)fprintf(fp,%s%s%s,studi.number,,studi.sex);for(j=0;jnumsubs;j+)fprintf(fp,%f,studi.subjectj); fprintf(fp,%f%f%d,studi.score,studi.average,studi.index); i+;fclose(fp);printf( 已成功存儲 !n); display(stud,0,numstus-1); numstus=0;return0; voidwelcome()p

33、rintf(t*n);printf(tttt* 學(xué)生成績管理系統(tǒng) *ntttt 傾情奉獻(xiàn)歡迎使用!n);printf(t*n); voidshowtable() printf(n);printf( 學(xué)號t姓名t性別tAtBtCtDtEt 總分t平均分t名次n); printf(n); voiddisplay(studentstud,intn1,intn2)inti;showtable();/* 顯示表頭 */for(i=n1;i=n2;i+)printf(%st%st%st%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%.2ft%dtn,studi.number,studi.na

34、me,studi.sex,studi.subject0,studi.subject1,studi.subject2,studi.subject3,studi.subject4,studi.score, studi.average,studi.index);/* 通過循環(huán)輸出數(shù)據(jù) */voiddisplay1()printf(tt本系統(tǒng)由計科二班制作 nn);printf(tt制作人員列表 :nn);prin tf(tt殷增鋒 ttt 邵超 n);printf(nn);getchar();#include voidamendrecord(studentstud)charstr5;/* 供用戶輸入

35、 */inti=-1,j;if(numstus=0)/* 沒有記錄返回 */ printf( 沒有可供修改的記錄! ); while(i=0)printf( 要刪除這個學(xué)生的信息嗎 ?(y/n); gets(str);if(str0=y|str0=Y) deleterecord(stud,i); count(stud);elseprintf( 確定要修改這個學(xué)生的信息嗎 ?(y/n); gets(str);if(str0=y|str0=Y)printf( 下面請重新輸入學(xué)生的信息 :n); printf( 請輸入學(xué)號 :);gets(studi.number);printf( 請輸入姓名 :)

36、; gets();printf( 請輸入性別(男/女 1/0):); gets(str);if(str0=0)strcpy(studi.sex,女);elsestrcpy(studi.sex,男);studi.score=0;printf( 請按順序輸入成績 :); for(j=0;j=0)for(j=i;jnumstus;j+) stuj=stuj+1;numstus-;printf( 刪除成功 !n);voidcount(studentstud)inti,j;for(i=0;inumstus;i+) studi.index=1;for(j=0;jstudi.score) studi.index+;voidaddrecord(studentstud)inti=0,j,num;charstr5; if(numstus!=0)printf( 已有記錄存在是否覆蓋 ?(y/n)n); gets(str

溫馨提示

  • 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

提交評論