




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
課程設計目的和要求(一).課程設計目的本課程設計是重要的實踐性環(huán)節(jié)之一,是在學生學習完《程序設計語言(C)》課程后進行的一次全面的綜合練習。本課程設計的目的和任務:鞏固和加深學生對C語言課程的基本知識的理解和掌握掌握C語言編程和程序調(diào)試的基本技能利用C語言進行基本的軟件設計掌握書寫程序設計說明文檔的能力提高運用C語言解決實際問題的能力(二).課程設計要求分析課程設計題目的要求寫出詳細設計說明編寫程序代碼,調(diào)試程序使其能正確運行設計完成的軟件要便于操作和使用4.設計完成后提交課程設計報告課程設計任務內(nèi)容設計一個學生成績管理系統(tǒng)。系統(tǒng)功能:1) 具備對學生基礎數(shù)據(jù)的維護功能(添加、刪除、修改)2) 具備對課程基礎數(shù)據(jù)的維護功能(添加、刪除、修改)3) 具備對學生成績數(shù)據(jù)的維護功能(添加、刪除、修改)4) 具備對成績的查詢功能(按學號、姓名、或課程名查詢成績,排序等)5) 具備對成績的統(tǒng)計功能(最高分,最低分,平均分,及格率等)6) 采用菜單界面總體設計說明工程設計說明(工程中有哪些文件組成,各有什么作用)該工程文件中有student.h,studentmain.c,student.c,course.c,scgrade.cquery.c#c。student.h是頭文件,主要存放一些其他函數(shù)共用的東西,比如結(jié)構(gòu)體之類的。Studentmain.c存放main函數(shù)主菜單程序。其他幾個是存放的實現(xiàn)各個功能的函數(shù)。另外,還有STUDENT.DAT,COURSE.DAT,GRADE.DAT三個文件,主要存放學生,課程,成績的信息的。還有一個TEMP.DAT文件,用于暫時存放數(shù)據(jù)。菜單結(jié)構(gòu)設計(列出各級菜單)C-C■U:\STUDEMT\pebug\STUDENT.eKe"請輸」.數(shù)字選擇,加改除霍刪M栗據(jù)裾糞主數(shù)數(shù)數(shù)系..筑三戶蘭出1230汎'D:\STUDEIVT\pebug\STUDENT.exe'|n|1230請輸」.數(shù)字選擇,C-C■U:\STUDEMT\pebug\STUDENT.eKe"1230加改除霍刪M栗據(jù)裾糞
主數(shù)數(shù)數(shù)系|n|I簪鸚成成成成查單詢詢詢詢菜名主查查查查誘統(tǒng)七萬名名名汎'D:\STUDEIVT\pebug\STUDENT.exe'1234501224請輸a^T選擇=B'c-c■U:\STUDEMT\pebug\STUDENT.eKe"皴A咸中績績績1-良成成成統(tǒng)藝m-算名名平主統(tǒng)經(jīng)班班爰統(tǒng)衍P名名名各系一糸課班課葬出按按.3數(shù)據(jù)結(jié)構(gòu)設計(三個數(shù)據(jù)文件用到的的結(jié)構(gòu)定義)學生結(jié)構(gòu)體:structstudent{longsno;charsname[20];charsclass[20];};課程結(jié)構(gòu)體:structcourse{intcno;charcname[30];};成績結(jié)構(gòu)體:structscgrade{longsno;intcno;floatgrade;};詳細設計說明1學生數(shù)據(jù)維護子系統(tǒng)設計說明(每個功能模塊的設計思路,哪些功能是自己增強的,加注釋的源代碼)#include<stdio.h>#include"STUDENT.H"http://該部分為學生主菜單程序,分別調(diào)用添加,修改,刪除三個函數(shù)。voidstudentmenu(){voidaddstudent();voidmodistudent();voiddeletestudent();chara;while(1){puts("\n");puts("系統(tǒng)主菜單");puts("1:學生數(shù)據(jù)添加");puts("2:學生數(shù)據(jù)修改");puts("3:學生數(shù)據(jù)刪除");puts("0:退出系統(tǒng)");printf("請輸入數(shù)字選擇:”);a=getche();switch(a){case'1':addstudent();break;case'2':modistudent();break;case'3':deletestudent();break;case'0':system("cls");return;default:return;}}}//添加數(shù)據(jù)voidaddstudent(){FILE*fp;structstudents;structstudentsw;charch;intflag=0;//打開文件。fp=fopen("d:\\STUDENT\\STUDENT.dat","ab+");if(!fp){printf("Createfileerror!\n");return;}do{do{/*輸入一條學生信息,另外,增加了檢驗數(shù)據(jù)是否重復的功能*/printf("\nEnterastudentnumbernameclass:");fflush(stdin);scanf("%ld%s%s",&s.sno,s.sname,s.sclass);rewind(fp);while(!feof(fp)){fread(&sw,sizeof(sw),1,fp);if(sw.sno==s.sno){flag=1;printf("數(shù)據(jù)輸入重復,請重新輸入?。 ?;break;}}}while(flag);fwrite(&s,sizeof(s),1,fp);//提示是否繼續(xù)輸入。printf("Inputanotherstudent?[y/n]");ch=getche();}while(ch=='y');fclose(fp);}//修改數(shù)據(jù)voidmodistudent(){FILE*fp;charch;structstudents,modis;intfound=0;fp=fopen("D:\\STUDENT\\STUDENT.dat","rb+");if(!fp){printf("Createfileerror!\n");return;}/*顯示文件中的所有學生信息*/fread(&s,sizeof(s),1,fp);PRINT1;while(!feof(fp)){PRINT2;PRINT1;fread(&s,sizeof(s),1,fp);}/*提示輸入要修改的學生號,存入modis.sno*/printf("pleaseenterthenoofthemodify");scanf("%ld",&modis.sno);/*找到要修改的學生并顯示*/rewind(fp);while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;if(s.sno==modis.sno){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)?。?);return;}elsePRINT2;printf("\n你確實要修改該學生的其他信息嗎?(Y/N)");ch=getche();if(ch=='Y'||ch=='y'){/*提示輸入要修改的學生姓名,存入modis.sname*/printf("\npleaseenterthenameofthemodify\n");scanf("%s",modis.sname);printf("\npleaseentertheclassofthemodify\n");scanf("%s",modis.sclass);fseek(fp,-(int)sizeof(s),SEEK_CUR); /*從當前位置向前移動一個s的長度*//*將modis寫到文件(覆蓋原數(shù)據(jù))*/fwrite(&modis,sizeof(s),1,fp);}fclose(fp);}//刪除數(shù)據(jù)。voiddeletestudent(){FILE*fp,*fp1;charch;intfound=0,num;structstudents;fp=fopen("D:\\student\\student.dat","rb");if(!fp){printf("Createfileerror!!");return;}/*顯示文件中的所有學生信息*/fread(&s,sizeof(s),1,fp);PRINT1;while(!feof(fp)){PRINT2;PRINT1;fread(&s,sizeof(s),1,fp);}printf("pleaseenterthenoofthedelete");scanf("%d",&num);//找到要修改的學生信息,顯示!rewind(fp);while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;if(s.sno==num){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}elsePRINT2;printf("\n你確實要刪除該學生的信息嗎?(Y/N)");ch=getche();〃將刪除后的信息復制到temp文件中。if(ch=='Y'||ch=='y'){fp1=fopen("D:\\student\\temp.dat","wb");rewind(fp);while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;if(s.sno!=num){fwrite(&s,sizeof(s),1,fp1);}}}fclose(fp1);fclose(fp);將temp文件的信息再重新覆蓋掉原來的student文件。fp=fopen("D:\\student\\student.dat","wb");fp1=fopen("D:\\student\\temp.dat","rb");while(1){fread(&s,sizeof(s),1,fp1);if(feof(fp1))break;fwrite(&s,sizeof(s),1,fp);}fclose(fp1);fclose(fp);}2課程數(shù)據(jù)維護子系統(tǒng)設計說明#include<stdio.h>#include"STUDENT.H"voidcoursemenu(){voidaddcourse();voidmodicourse();voiddeletecourse();chara;while(1){puts("\n");puts("系統(tǒng)主菜單");puts("1:課程數(shù)據(jù)添加");puts("2:課程數(shù)據(jù)修改");puts("3:課程數(shù)據(jù)刪除");puts("0:退出系統(tǒng)");printf("請輸入數(shù)字選擇:”);a=getche();switch(a){case'1':addcourse();break;case'2':modicourse();break;case'3':deletecourse();break;case'0':system("cls");return;default:return;}}}//添加數(shù)據(jù)。voidaddcourse(){FILE*fp;structcoursec,cw;charch;intflag=0;fp=fopen("d:\\STUDENT\\COURSE.dat","ab+");if(!fp){printf("Createfileerror!\n");return;}//輸入一條課程信息,提示是否重新輸入,另外增加檢驗數(shù)據(jù)是否重復的功能do{do{printf("\nEnteracoursenumbername:");fflush(stdin);scanf("%d%s",&o,ame);rewind(fp);while(!feof(fp)){fread(&cw,sizeof(cw),1,fp);if(o==o){flag=1;printf("數(shù)據(jù)輸入重復,請重新輸入!!”);break;}}}while(flag);fwrite(&c,sizeof(c),1,fp);printf("Inputanothercourse?[y/n]");ch=getche();}while(ch=='y');fclose(fp);}//修改數(shù)據(jù)voidmodicourse(){FILE*fp;charch;structcoursec,modis;intfound=0;fp=fopen("D:\\STUDENT\\COURSE.dat","rb+");if(!fp){printf("Createfileerror!\n");return;}/*顯示文件中的所有課程信息*/fread(&c,sizeof(c),1,fp);PRINT1;while(!feof(fp)){PRINT3;PRINT1;fread(&c,sizeof(c),1,fp);}/*提示輸入要修改的課程號,存入modis.sno*/printf("pleaseenterthenoofthemodify");scanf("%d",&o);/*找到要修改的課程并顯示*/rewind(fp);while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(o==o){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)?。?);return;}elsePRINT3;printf("\n你確實要修改該課程的其他信息嗎?(Y/N)");ch=getche();if(ch=='Y'||ch=='y'){/*提示輸入要修改的課程名,存入ame*/printf("\npleaseenterthenameofthemodify\n");scanf("%s",ame);}fseek(fp,-sizeof(c),SEEK_CUR); /*從當前位置向前移動一個s的長度*//*將modis寫到文件(覆蓋原數(shù)據(jù))*/fwrite(&modis,sizeof(c),1,fp);fclose(fp);}//刪除數(shù)據(jù)。voiddeletecourse(){FILE*fp,*fp1;charch;intfound=0,num;structcoursec;fp=fopen("D:\\student\\COURSE.dat","rb");if(!fp){printf("Createfileerror!!");return;}//顯示文件中的信息。fread(&c,sizeof(c),1,fp);PRINT1;while(!feof(fp)){PRINT3;PRINT1;fread(&c,sizeof(c),1,fp);}/*提示輸入要修改的課程號,存入num*/printf("pleaseenterthenoofthedelete");scanf("%d",&num);/*找到要修改的課程并顯示*/rewind(fp);while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(o==num){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}elsePRINT3;printf("\n你確實要刪除該學生的信息嗎?(Y/N)");ch=getche();〃將刪除后的文件復制到temp文件中。if(ch=='Y'||ch=='y'){fp1=fopen("D:\\student\\temp.dat","wb");rewind(fp);while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(o!=num){fwrite(&c,sizeof(c),1,fp1);}fclose(fp1);fclose(fp);〃將temp文件中的信息覆蓋掉原來course的文件中。fp=fopen("D:\\student\\COURSE.dat","wb");fp1=fopen("D:\\student\\temp.dat","rb");while(l){fread(&c,sizeof(c),1,fp1);if(feof(fpl))break;fwrite(&c,sizeof(c),l,fp);}fclose(fpl);fclose(fp);}3成績數(shù)據(jù)維護子系統(tǒng)設計說明#include<stdio.h>#include"STUDENT.H"voidgrademenu(){voidaddgrade();voidmodigrade();voiddeletegrade();chara;while(l){puts("\n");puts("系統(tǒng)主菜單");puts("l:成績數(shù)據(jù)添加");puts("2:成績數(shù)據(jù)修改");puts("3:成績數(shù)據(jù)刪除");puts("0:退出系統(tǒng)");printf("請輸入數(shù)字選擇:");a=getche();switch(a){case'l':addgrade();break;case'2':modigrade();break;case'3':deletegrade();break;case'0':system("cls");return;default:return;}}}//添加成績!voidaddgrade(){FILE*fp;structscgradesc;structscgradescw;charch;intflag=0;fp=fopen("d:\\STUDENT\\GRADE.dat","ab+");if(!fp){printf("Createfileerror!\n");return;}//輸入一條成績信息,提示是否重新輸入,另外增加檢驗數(shù)據(jù)是否重復的功能do{do{printf("\nEnterastudentnumber,acoursenumber,grade:");fflush(stdin);scanf("%ld%d%f",&sc.sno,&o,&sc.grade);if(sc.grade<0||sc.grade>100){flag=1;printf("\n輸入成績格式不正確,請重新輸入");}rewind(fp);while(!feof(fp)){fread(&scw,sizeof(scw),1,fp);if(o==o&&scw.sno==sc.sno){flag=1;printf("\n數(shù)據(jù)輸入重復,請重新輸入?。?);break;}}while(flag);fwrite(&sc,sizeof(sc),1,fp);printf("Inputanotherstudent'sgrade?[y/n]");ch=getche();}while(ch=='y');fclose(fp);}//修改數(shù)據(jù)voidmodigrade(){FILE*fp;charch;structscgradesc,modis;intfound=0;fp=fopen("D:\\STUDENT\\GRADE.dat","rb+");if(!fp){printf("Createfileerror!\n");return;}/*顯示文件中的所有成績信息*/fread(&sc,sizeof(sc),1,fp);PRINT1;while(!feof(fp)){PRINT4;PRINT1;fread(&sc,sizeof(sc),1,fp);}/*提示輸入要修改的學生號,存入modis.sno*/printf("pleaseenterthenoofthemodify");scanf("%ld",&modis.sno);/*找到要修改的學生成績并顯示*/rewind(fp);while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(sc.sno==modis.sno){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)?。?);return;}elsePRINT4;printf("\n你確實要修改該學生的其他信息嗎?(Y/N)");ch=getche();if(ch=='Y'||ch=='y'){/*提示輸入要修改的學生課程名和成績,存入o和modis.grade*/printf("\npleaseenterthecoursenumberofthemodify\n");scanf("%d",&o);printf("\npleaseenterthegradeofthemodify\n");scanf("%f",&modis.grade);}fseek(fp,-(int)sizeof(sc),SEEK_CUR); /*從當前位置向前移動一個sc的長度*//*將modis寫到文件(覆蓋原數(shù)據(jù))*/fwrite(&modis,sizeof(sc),1,fp);fclose(fp);}//刪除數(shù)據(jù)voiddeletegrade(){FILE*fp,*fp1;charch;intfound=0,num;structscgradesc;fp=fopen("D:\\student\\GRADE.dat","rb");if(!fp){printf("Createfileerror!!");return;}//顯示文件中的信息fread(&sc,sizeof(sc),1,fp);PRINT1;while(!feof(fp)){PRINT4;PRINT1;fread(&sc,sizeof(sc),1,fp);}/*提示輸入要刪除的學號,存入num*/printf("pleaseenterthenoofthedelete");scanf("%d",&num);/*找到要刪除的成績并顯示*/rewind(fp);while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(sc.sno==num){found=1;break;}}if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}elsePRINT4;printf("\n你確實要刪除該學生的信息嗎?(Y/N)");ch=getche();〃將刪除后的文件復制到temp文件中。if(ch=='Y'||ch=='y'){fp1=fopen("D:\\student\\temp.dat","wb");rewind(fp);while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(sc.sno!=num){fwrite(&sc,sizeof(sc),1,fp1);}}}fclose(fp1);fclose(fp);〃將temp文件中的信息覆蓋掉原來course的文件中。fp=fopen("D:\\student\\GRADE.dat","wb");fp1=fopen("D:\\student\\temp.dat","rb");while(l){fread(&sc,sizeof(sc),1,fp1);if(feof(fpl))break;fwrite(&sc,sizeof(sc),l,fp);}fclose(fpl);fclose(fp);4查詢數(shù)據(jù)維護子系統(tǒng)設計說明#include<stdio.h>#include<string.h>#include"STUDENT.H"voidquery(){voidsnoquery();voidsnamequery();voidcnamequery();voidcnamequeryson();voidclassandcnamequery();chara;while(1){puts("\n");puts("系統(tǒng)主菜單");puts("1:按學號查詢成績");puts("2:按姓名查詢成績");puts("3:按課名查詢成績");puts("4:按課名查詢成績(子函數(shù))");puts("5:按班名課名查詢成績");puts("0:退出系統(tǒng)");printf("請輸入數(shù)字選擇:”);a=getche();switch(a){case'1':snoquery();break;case'2':snamequery();break;case'3':cnamequery();break;case'4':cnamequeryson();break;case'5':classandcnamequery();break;case'0':system("cls");return;default:return;}}}//按學號查詢voidsnoquery(){FILE*fp;structscgradesc;charch;longno;intfound=0;fp=fopen("d:\\STUDENT\\GRADE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}//提示要查詢成績的學號。printf("\nEnterastudentnumberofthequery:");scanf("%ld",&no);//顯示并輸出。while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(sc.sno==no){found=1;PRINT1;PRINT4;}}PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)?。?);return;}fclose(fp);//按姓名查詢voidsnamequery(){FILE*fp;structstudents;structscgradesc;charch,name[20];longno;intfound=0;fp=fopen("d:\\STUDENT\\STUDENT.dat","rb");if(!fp){printf("Createfileerror!\n");return;}//提示輸入要查詢成績的姓名。printf("\nEnterastudentnameofthequery:");scanf("%s",name);//找到該生的的學號。while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;if(strcmp(s.sname,name)==0){found=1;no=s.sno;//PRINT1;//PRINT2;}}//PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}fclose(fp);fp=fopen("d:\\STUDENT\\GRADE.dat","rb");found=0;if(!fp){printf("Createfileerror!\n");return;}//找到該生成績,并顯示。while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(sc.sno==no){found=1;PRINT1;PRINT4;}PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)?。?);return;}fclose(fp);}//按課名查詢voidcnamequery(){FILE*fp;structcoursec;structscgradesc,temp;structscgradegrades[80];charname[20];intno,i,j,n=0;intfound=0;fp=fopen("d:\\STUDENT\\COURSE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}//提示輸入要查詢的課程名printf("\nEnteracoursenameofthequery:");scanf("%s",name);//找到該課程的課稱號。while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(strcmp(ame,name)==0){found=1;no=o;//PRINT1;//PRINT3;}}//PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)!!");return;fp=fopen("d:\\STUDENT\\GRADE.dat","rb");found=0;if(!fp){printf("Createfileerror!\n");return;}//在成績信息中找到該課程號的成績while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(o==no){found=1;grades[n]=sc;n=n+1;//PRINT1;//PRINT4;}}//排序for(i=0;i<n;i++){for(j=i+1;j<=n;j++){if(grades[i].grade<grades[j].grade){temp=grades[i];grades[i]=grades[j];grades[j]=temp;}}}//顯示for(i=0;i<n;i++){PRINT1;printf("%-5ld%5d%15f",grades[i].sno,grades[i].cno,grades[i].grade);}PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}fclose(fp);}//按課程名,用子函數(shù)查詢。voidcnamequeryson(){intgetcno(charname[]);//獲取課程號。intgetgrade(intcno,structscgradegrades]]);/獲取成績voidsort(structscgradegrades[],intn);//排序voiddisplay(structscgradegrades[],intn);//顯示structscgradegrades[80];charname[20];intcno,n;printf("\nEnteracoursenameofthequery:");scanf("%s",name);cno=getcno(name);if(cno==-1) {puts("Nosuchcourse!");return;}n=getgrade(cno,grades);sort(grades,n);display(grades,n);}intgetcno(charname[]){FILE*fp;structcoursec;intfound=0,no;fp=fopen("d:\\STUDENT\\COURSE.dat","rb");if(!fp){printf("Createfileerror!\n");return-1;}//獲取課程號。while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(strcmp(ame,name)==0){found=1;no=o;//PRINT1;//PRINT3;}}//PRINT1;returnno;if(!found){printf("未找到你要找的數(shù)據(jù)!!");return-1;intgetgrade(intcno,structscgradegrades[]){FILE*fp;structscgradesc;intn=0,found=0;fp=fopen("d:\\STUDENT\\GRADE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}//通過課程號,找到成績。while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(o==cno){found=1;grades[n]=sc;n=n+1;//PRINT1;//PRINT4;}}returnn;if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}}//排序voidsort(structscgradegrades[],intn){inti,j;structscgradetemp;for(i=0;i<n;i++){for(j=i+1;j<=n;j++){if(grades[i].grade<grades[j].grade){temp=grades[i];grades[i]=grades[j];grades[j]=temp;}}}}//顯示voiddisplay(structscgradegrades[],intn){inti;for(i=0;i<n;i++){PRINT1;printf("%-5ld%5d%15f",grades[i].sno,grades[i].cno,grades[i].grade);}PRINT1;}//按班名和課名查詢voidclassandcnamequery(){intandgetsno(charname[],longsnos[]);intandgetcno(charname[]);intandgetgrades(intcno,intn,longsnos[],structscgradegrades[]);voidsort(structscgradegrades[],intn);voiddisplay(structscgradegrades[],intn);structscgradegrades[80];charname1[20],name2[20];longsnos[80];intcno,n,m;//提示輸入班名和課名。printf("\nEnteraclassandacoursenameofthequery:");scanf("%s%s",name1,name2);n=andgetsno(name1,snos);//snos是調(diào)用函數(shù)后的符合條件學生號cno=andgetcno(name2);//獲取課程號。if(cno==-1) {puts("Nosuchcourse!");return;}m=andgetgrades(cno,n,snos,grades);//grades是調(diào)用函數(shù)后的符合條件的成績。m是個數(shù)。sort(grades,m);〃扌非序display(grades,m);顯示}//獲取學號intandgetsno(charname[],longsnos[]){FILE*fp;intfound=0,n=0;structstudents;fp=fopen("d:\\STUDENT\\STUDENT.dat","rb");if(!fp){printf("Createfileerror!\n");return;}rewind(fp);while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;if(strcmp(s.sclass,name)==0){found=1;snos[n]=s.sno;n=n+1;//PRINT1;//PRINT2;}}//PRINT1;returnn;if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}fclose(fp);}//獲取課程號intandgetcno(charname[]){FILE*fp;structcoursec;intfound=0,no;fp=fopen("d:\\STUDENT\\COURSE.dat","rb");if(!fp){printf("Createfileerror!\n");return-1;}while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(strcmp(ame,name)==0){found=1;no=o;//PRINT1;//PRINT3;}}//PRINT1;returnno;if(!found){printf("未找到你要找的數(shù)據(jù)!!");return-1;}fclose(fp);
}//獲取成績intandgetgrades(intcno,intn,longsnos[],structscgradegrades[]){FILE*fp;intfound=0,i,m=0;structscgradesc;fp=fopen("d:\\STUDENT\\GRADE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(o==cno){for(i=0;i<n;i++){if(sc.sno==snos[i]){grades[m]=sc;m=m+1;}}}}returnm;fclose(fp);}5統(tǒng)計數(shù)據(jù)維護子系統(tǒng)設計說明#include<stdio.h>#include<string.h>#include"STUDENT.H"voidtongji(){voidcnametongji();voidclasstongji();voidclassandcnametongji();voidclassandcnametongjifour();voidclassesaverage();chara;while(1){系統(tǒng)主菜單");系統(tǒng)主菜單");puts("puts("1:按課名統(tǒng)計成績");puts("2:按班名統(tǒng)計成績");puts("3:按課名班名統(tǒng)計成績");puts("4:按課名班名優(yōu)良中差人數(shù)");puts("5:統(tǒng)計各班平均成績");puts("0:退出系統(tǒng)");printf("請輸入數(shù)字選擇:”);a=getche();switch(a){case'1':cnametongji();break;case'2':classtongji();break;case'3':classandcnametongji();break;case'4':classandcnametongjifour();break;case'5':classesaverage();break;case'0':system("cls");return;default:return;}}}//按課名統(tǒng)計voidcnametongji(){FILE*fp;structcoursec;structscgradesc;structscgradegrades[80];charname[20];intno,i,p=0,n=0;intfound=0;floatmax=0,min=0,sum=0,average,peng;fp=fopen("d:\\STUDENT\\COURSE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}//提示輸入要統(tǒng)計的課程名。printf("\nEnteracoursenameofthetongji:");scanf("%s",name);//找到該課程的課程號。while(1){fread(&c,sizeof(c),1,fp);if(feof(fp))break;if(strcmp(ame,name)==0){found=1;no=o;//PRINT1;//PRINT3;}}//PRINT1;if(!found){printf("未找到你要找的數(shù)據(jù)!!");return;}fclose(fp);fp=fopen("d:\\STUDENT\\GRADE.dat","rb");found=0;if(!fp){printf("Createfileerror!\n");return;}//找到該課程的相關(guān)成績。while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;if(o==no){found=1;grades[n]=sc;n=n+1;//PRINT1;//PRINT4;}}//求最大值,最小值,平均值,及格率。max=grades[1].grade;min=grades[1].grade;for(i=0;i<n;i++){if(max<grades[i].grade){max=grades[i].grade;}if(min>grades[i].grade){min=grades[i].grade;}if(grades[i].grade>=60)p=p+1;sum=sum+grades[i].grade;}average=sum/n;peng=p/n;PRINT5;PRINT6;if(!found){printf("未找到你要找的數(shù)據(jù)??!");return;}fclose(fp);}//按班名統(tǒng)計voidclasstongji(){intandgetsno(charname[],longsnos[]);FILE*fp;structscgradegrades[80],sc;charname[20];intfound=0,i,n=0,m=0,p=0;longsnos[80];floatmax=0,min=0,sum=0,average,peng;//提示要統(tǒng)計的班名。printf("\nEnteraclassnameofthetongji:");scanf("%s",name);fp=fopen("d:\\STUDENT\\GRADE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}n=andgetsno(name,snos);〃通過調(diào)用函數(shù),獲取學生號//取得這些學生的成績。while(1){fread(&sc,sizeof(sc),1,fp);if(feof(fp))break;for(i=0;i<n;i++){if(sc.sno==snos[i]){grades[m]=sc;m=m+1;}}}//求最大值,最小值,平均值,及格率。max=grades[1].grade;min=grades[1].grade;for(i=0;i<m;i++){if(max<grades[i].grade){max=grades[i].grade;}if(min>grades[i].grade){min=grades[i].grade;}if(grades[i].grade>=60)p=p+1;sum=sum+grades[i].grade;}average=sum/m;peng=p/m;PRINT5;PRINT6;}//按班名,課名統(tǒng)計voidclassandcnametongji(){intandgetsno(charname[],longsnos[]);intandgetcno(charname[]);intandgetgrades(intcno,intn,longsnos[],structscgradegrades[]);structscgradegrades[80];charname1[20],name2[20];longsnos[80];intcno,n,m,i,p=0;floatmax=0,min=0,sum=0,average,peng;//提示要輸入的班名和課名printf("\nEnteraclassandacoursenameofthetongji:");scanf("%s%s",name1,name2);n=andgetsno(namel,snos);〃調(diào)用函數(shù)獲得學生號cno=andgetcno(name2);〃調(diào)用函數(shù)獲得課號。if(cno==-l){puts("Nosuchcourse!");return;}m=andgetgrades(cno,n,snos,grades);〃求得成績和個數(shù)//求最大值,最小值,平均值,及格率。max=grades[l].grade;min=grades[l].grade;for(i=0;i<m;i++){if(max<grades[i].grade){max=grades[i].grade;}if(min>grades[i].grade){min=grades[i].grade;}if(grades[i].grade>=60)p=p+l;sum=sum+grades[i].grade;}average=sum/m;peng=p/m;PRINT5;PRINT6;}//按課名,班名統(tǒng)計優(yōu)良中差。voidclassandcnametongjifour(){intandgetsno(charname[],longsnos[]);intandgetcno(charname[]);intandgetgrades(intcno,intn,longsnos[],structscgradegrades[]);structscgradegrades[80];charnamel[20],name2[20];longsnos[80];intcno,n,m,i,p=0,q=0,r=0,s=0,t=0;floatmax=0,min=0,sum=0,average,peng;
printf("\nEnteraclassandacoursenameofthetongji:");scanf("%s%s",name1,name2);n=andgetsno(name1,snos);//調(diào)用函數(shù)獲得學生號cno=andgetcno(name2);//調(diào)用函數(shù)獲得課號if(cno==-1){puts("Nosuchcourse!");return;}m=andgetgrades(cno,n,snos,grades);//獲取成績,及個數(shù)。//比較for(i=0;i<m;i++){if(grades[i].grade>=90)p+=1;elseif(grades[i].grade>=80)q+=1;elseif(grades[i].grade>=70)r+=1;elseif(grades[i].grade>=60)s+=1;elset+=1;不及格");不及格");%d",p,q,rprintf("\n優(yōu) 良 中 及printf("\n%d %d %d %d,s,t);}//求各班的平均分voidclassesaverage(){FILE*fp;inti,j,n=1,flag=1,m=0,w=0;structstudents;structscgradesc,grades[80];charclasses[80][20];longsnos[80][80];floatsum=0,average[80];fp=fopen("d:\\STUDENT\\STUDENT.dat","rb");if(!fp){printf("Createfileerror!\n");return;}fread(&s,sizeof(s),1,fp);strcpy(classes[0],s.sclass);while(1){fread(&s,sizeof(s),1,fp);if(feof(fp))break;for(i=0;i<n;i++){flag=strcmp(classes[i],s.sclass);if(flag==0)break;}if(flag!=0){strcpy(classes[n],s.sclass);n=n+l;〃獲取有多少班級}}fclose(fp);fp=fopen("d:\\STUDENT\\GRADE.dat","rb");if(!fp){printf("Createfileerror!\n");return;}for(i=0;i<n;i++){sum=0;w=0;m=andgetsno(classes[i],snos[i]);//獲取學生號,人數(shù)rewind(fp);while(l){fread(&sc,sizeof(sc),l,fp);if(feof(fp))break;for(j=0;j<m;j++){if(sc.sno==snos[i][j]){grades[w]=sc;w=w+1;〃找到class[i]的所有成績}}}for(j=0;j<w;j++){sum=sum+grades[j].grade;}average[i]=sum/w;〃求均,打印。printf("\n%s班平均分: %f",classes[i],average[i]);}fclose(fp);}四.軟件使用說明
(軟件操作說明,注意事項,讓用戶會使用,主要操作界面用截圖)運行程序進入到如下界面:vl>.從鍵盤輸入數(shù)字1得:■t:\STUDEHT\pebug\STUDENT.eKe"加改除
霍刪M采據(jù)據(jù)墓主數(shù)數(shù)數(shù)系.凱匕HT匕一出J盂千學遑.12301?鍵入數(shù)字1,添加數(shù)據(jù),如圖:1230加改除單主數(shù)數(shù)數(shù)系統(tǒng)4注4岀astudentnumriermaneclass:9500&kk98anothei*student?astudentnuinlieranothei*student?Ly/nJynaneclass=95007ff89[jj/nlni]r改除單主數(shù)數(shù)數(shù)系統(tǒng)蘭匕一蘭出2?鍵入數(shù)字22?鍵入數(shù)字2,修改數(shù)據(jù),如圖:95006V5M07pleaseenterthenoofthemodif^9500695006 kk 98你確實要修咬該學邙笊耳依信黒北S)ypleaseentsrthenaneofthemodifyPPplcaeccrtei*theclasso£themodify99FTi,D:\5TUDENT\Debug\STUDENT.eae11classl95003ccclassl95004class295005eeclass295001aaclassl95007pleaseeritei*therhnofthedel
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 0705三級基礎知識真題
- 預制型跑道施工方案
- 三股東投資協(xié)議合同范本
- 買房10萬定金合同范例
- 產(chǎn)品顧問協(xié)議合同范本
- 公司采購禮品合同范本
- 中介合同 網(wǎng)簽合同范例
- 公司門面房購買合同范例
- 做模具合同范例
- 中介幫過戶合同范本
- DB37∕T 5107-2018 城鎮(zhèn)排水管道檢測與評估技術(shù)規(guī)程
- 2022新冠疫苗疑似預防接種異常反應監(jiān)測和處置方案
- 電磁學第三版趙凱華答案
- 酒精溶液體積濃度、質(zhì)量濃度與密度對照表
- 主要腸內(nèi)營養(yǎng)制劑成分比較
- 老年人各系統(tǒng)的老化改變
- 小學五年級綜合實踐課教案
- 煤礦井下供電常用計算公式及系數(shù)
- ISO14001:2015中文版(20211205141421)
- 汽車總裝車間板鏈輸送線的應用研究
- 工作日志模板
評論
0/150
提交評論