學(xué)生成績信息管理系統(tǒng)_第1頁
學(xué)生成績信息管理系統(tǒng)_第2頁
學(xué)生成績信息管理系統(tǒng)_第3頁
學(xué)生成績信息管理系統(tǒng)_第4頁
學(xué)生成績信息管理系統(tǒng)_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1 問題描述學(xué)生成績管理系統(tǒng)學(xué)生成績管理系統(tǒng) 學(xué)生信息包括學(xué)期、學(xué)號、班級、姓名,和語文、數(shù)學(xué)、英語、計算機四門課成績。并按班級、學(xué)期查詢學(xué)生成績,并能錄入、修改,求學(xué)生平均成績和總成績,輸出不及格科目,按班級輸出成績單,按班級對學(xué)生成績進行排序。2 系統(tǒng)分析2.1 問題定義學(xué)生成績管理系統(tǒng)設(shè)計學(xué)生成績信息包括:學(xué)期,學(xué)號,班別,姓名,四門課程成績(語文、數(shù)學(xué)、英語和計算機)。主要功能:(1) 能按學(xué)期、按班級完成對學(xué)生成績的錄入、修改(2) 能按班級統(tǒng)計學(xué)生的成績,求學(xué)生的總分及平均分,設(shè)計并輸出統(tǒng)計報表(3) 能查詢學(xué)生成績,不及格科目及學(xué)生名單(4) 能按班級輸出學(xué)生的成績單(5) 能按

2、班級,按課程,對學(xué)生成績進行排序。要求:使用二進制文件方式存儲數(shù)據(jù),系統(tǒng)以菜單方式工作2.2開發(fā)工具 VC+6.02.3數(shù)據(jù)結(jié)構(gòu) typedef struct studentMark int term; int classes; char name10; int number; char sex7; float chinese;float math;float english;float computer; struct studentMark *next; MARK;這是定義一個結(jié)構(gòu)體,主要包括學(xué)期,班級,姓名,學(xué)號,性別,語文成績,數(shù)學(xué)成績,英語成績,計算機成績,以及包括一個結(jié)構(gòu)體指針。另

3、外還用了typedef這個關(guān)鍵字。因此,在程序的后面也可以用MARK來定義結(jié)構(gòu)體變量或結(jié)構(gòu)體指針變量。int term; 定義學(xué)期,學(xué)期只能是第一學(xué)期或者第二學(xué)期。 例如int 1;則表示第一學(xué)期。 int classes; 定義班級,班級只能是一班或者二班。 例如 int 2;則是表示定義為二班。 char name10; 定義姓名,在數(shù)組中存放字符串。 例如 char name=“yang”;則該學(xué)生的姓名為yang int number; 定義學(xué)號,例如int 1;則該學(xué)生學(xué)號為1號。 char sex7; 定義姓別,其性別最大長度為7. 例如 char sex=“man”;說明該學(xué)生為

4、男生。同樣可以這樣定義女生。 float chinese; 定義語文成績。float math; 定義數(shù)學(xué)成績。float english; 定義英語成績。float computer; 定義計算機成績。 struct studentMark *next; 定義一個結(jié)構(gòu)體指針。int main(); 主函數(shù),程序的入口。void m(MARK *head); 主菜單的函數(shù)原型,在函數(shù)m(head)中主要有選擇創(chuàng)建學(xué)生成績信息,查詢學(xué)生成績信息,修改學(xué)生成績信息,統(tǒng)計學(xué)生成績信息,輸出學(xué)生成績信息,存儲學(xué)生成績信息于文件,以及退出體統(tǒng)等選項可供用戶選擇。 MARK *creat(void );

5、創(chuàng)建函數(shù)的函數(shù)原型,在函數(shù)creat()中用戶可以輸入初始的學(xué)生信息:其中包括學(xué)生的學(xué)期、班級、姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息。void searchMark(MARK *head); 查詢菜單的函數(shù)原型,在函數(shù)searchMark(head)中用戶可以自由選擇是查詢某一個學(xué)生的成績還是查詢不及格學(xué)生的成績。而這通過調(diào)用函數(shù)searchMarkStusentone(head)和函數(shù)searchMarkFail(head)完成操作。void searchMarkStusentone(MARK *head); 查詢某個學(xué)生成績的函數(shù)原型,在函數(shù)searchMarkSt

6、usentone(head)中用戶可以按學(xué)號或班級或者是按學(xué)期來查找某個學(xué)生的成績。通過函數(shù)searchnumber(head)和函數(shù) searchclasses(head)以及函數(shù)searchterm(head)完成操作。void searchnumber(MARK *head) 按學(xué)號查找學(xué)生的函數(shù)原型,;void searchclasses(MARK *head); 按班級查找學(xué)生的函數(shù)原型,void searchterm(MARK *head); 按學(xué)期查找學(xué)生的函數(shù)原型,void searchMarkFail(MARK *head); 查詢沒有及格的學(xué)生的函數(shù)原型,通過這個函數(shù)可以查

7、找學(xué)生不及格科目及學(xué)生名單。MARK *changeMark(MARK *head); 修改學(xué)生成績信息的函數(shù)原型,可以修改學(xué)生的學(xué)期、班級、姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息。void conuntMark(MARK *head); 統(tǒng)計學(xué)生成績的函數(shù)原型,在函數(shù)conuntMark(head)中用戶可以統(tǒng)計學(xué)生的總成績以及平均成績,通過調(diào)用函數(shù)totalMark(head)和函數(shù)aveMark(head)完成操作。void totalMark(MARK *head); 統(tǒng)計學(xué)生總成績的函數(shù)原型,void aveMark(MARK *head); 統(tǒng)計學(xué)生平均成績的

8、函數(shù)原型,void printClassMark(MARK *head); 輸出學(xué)生成績信息的函數(shù)原型,通過此函數(shù)可以輸出學(xué)生的學(xué)期、班級、姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息到屏幕上。void saveFileMark(MARK *head); 存儲學(xué)生成績信息于文件的函數(shù)原型,通過此函數(shù)可以輸出學(xué)生的學(xué)期、班級、姓名、學(xué)號和性別以及學(xué)生的語文、數(shù)學(xué)、英語和計算機等相關(guān)信息與文件中。2.4算法描述(1)創(chuàng)建主菜單(2)實現(xiàn)學(xué)生成績信息錄入(3)實現(xiàn)學(xué)生成績信息查詢(4)實現(xiàn)學(xué)生成績信息修改 (一)修改某個學(xué)生的成績 (a)按學(xué)期查詢學(xué)生的成績 (b)按班級查詢學(xué)生的成

9、績 (c)按學(xué)號查詢學(xué)生的成績 (二)查詢不及格的科目和學(xué)生名單(5)實現(xiàn)學(xué)生成績統(tǒng)計 (a)按班級統(tǒng)計學(xué)生的總分。(b)按班級統(tǒng)計學(xué)生的平均分。(6)實現(xiàn)學(xué)生成績信息輸出(7)保存學(xué)生的成績信息于文件(8)流程圖如下:2.5程序調(diào)試情況(1)源程序如下: #include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define MAR (struct studentMark *)malloc(sizeof(struct studentMark)typedef st

10、ruct studentMark int term; int classes; char name10; int number; char sex7; float chinese;float math;float english;float computer; struct studentMark *next; MARK;void m(MARK *head); MARK *creat(void );void searchMark(MARK *head);void searchMarkStusentone(MARK *head);void searchnumber(MARK *head);voi

11、d searchclasses(MARK *head);void searchterm(MARK *head);void searchMarkFail(MARK *head);MARK *changeMark(MARK *head);void conuntMark(MARK *head);void totalMark(MARK *head); void aveMark(MARK *head);void printClassMark(MARK *head);void saveFileMark(MARK *head);int main(void)MARK *head=NULL; printf(&q

12、uot; *n"); printf(" # 歡迎進入學(xué)生成績信息管理系統(tǒng)#n"); printf(" *n");printf("n");head=creat();m(head);return(0);void m(MARK *head )int choose;while(1) printf("*n"); printf(" 學(xué)生成績信息管理n"); printf("*n"); printf(" 1創(chuàng)建成績信息n"); printf(" 2查

13、詢成績信息n"); printf(" 3修改成績信息n"); printf(" 4統(tǒng)計成績信息n"); printf(" 5按班級輸出學(xué)生信息n"); printf(" 6保存成績信息于文件n"); printf(" 7退出系統(tǒng)n"); printf("*n");fflush(stdin);printf("請選擇:");scanf("%d",&choose);if(1=choose)head=creat();else

14、if(2=choose)searchMark(head);else if(3=choose)head=changeMark(head);else if(4=choose)conuntMark(head);else if(5=choose)printClassMark(head);else if(6=choose)saveFileMark(head);elseprintf("退出系統(tǒng)");break;/創(chuàng)建一個學(xué)生成績信息系統(tǒng)MARK *creat() MARK *head=NULL,*p1=NULL,*p2=NULL;char ch;fflush(stdin);printf

15、("請問是否輸入信息?(y 或n)n");scanf("%c",&ch);head=p1=p2=MAR; while(p1!=NULL && ch='y') p1=MAR; printf("請輸入要錄入學(xué)生信息的學(xué)期(學(xué)期只能為 1 或 2 ):"); fflush(stdin); scanf("%d",&p1->term); while(p1->term!=1 && p1->term!=2) getchar(); printf(&q

16、uot;輸入錯誤!請重新輸入:"); scanf("%d",&p1->term); printf("請輸入要錄入學(xué)生成績信息的班級:"); fflush(stdin); scanf("%d",&p1->classes); while(p1->classes!=1 && p1->classes!=2) getchar(); printf("輸入錯誤!請重新輸入:"); scanf("%d",&p1->classes);

17、 printf("請輸入該班的學(xué)生信息!n"); printf("請輸入學(xué)生學(xué)號:"); fflush(stdin); scanf("%d",&p1->number); printf("請輸入學(xué)生姓名:"); fflush(stdin); scanf("%s",p1->name); printf("請輸入學(xué)生姓別:"); fflush(stdin); scanf("%s",p1->sex); fflush(stdin); prin

18、tf("請輸入語文成績(0-100):"); scanf("%f",&p1->chinese); fflush(stdin); printf("請輸入數(shù)學(xué)成績(0-100):"); scanf("%f",&p1->math); fflush(stdin); printf("請輸入英語成績(0-100):"); scanf("%f",&p1->english); fflush(stdin); printf("請輸入計算機成績(

19、0-100):"); scanf("%f",&p1->computer); p2->next=p1; p2=p1; printf("是否還要輸入信息(y/n):"); fflush(stdin); scanf("%c",&ch);p2->next = NULL; /鏈表結(jié)尾return(head);/查找學(xué)生成績信息void searchMark(MARK *head)int choose1;while(1)printf("*n");printf(" 查詢學(xué)生成

20、績信息n");printf(" 1查詢某個學(xué)生成績n");printf(" 2查詢不及格學(xué)生成績n");printf(" 3返回主菜單n");printf("*n");fflush(stdin);printf("請選擇:");scanf("%d",&choose1);if(1=choose1)searchMarkStusentone(head);else if(2=choose1)searchMarkFail(head);elseprintf("返

21、回主菜單");break;/修改學(xué)生成績信息(按學(xué)期或按學(xué)號修改)MARK *changeMark(MARK *head)int choose2;MARK *p=head->next;char name10;char ch;int number; printf("*n");printf(" 你所需要修改的n");printf(" 1修改學(xué)號n");printf(" 2修改姓名n");printf(" 3修改班級n"); printf(" 4修改性別n");pr

22、intf(" 5修改成績n");printf("*n");fflush(stdin);printf("請選擇:");scanf("%d",&choose2);while(1)while(p!=NULL)if(1=choose2) printf("你要修改的信息是:學(xué)號!n"); /按姓名修改學(xué)號 fflush(stdin); printf("請輸入你要修改的學(xué)生姓名:"); scanf("%s",name); if (strcmp(name,p-&

23、gt;name)=0) fflush(stdin); printf("請輸入該學(xué)生新的學(xué)號:"); /輸入新學(xué)號scanf("%d",&p->number);printf("修改學(xué)生的學(xué)號后:n");printf("%s學(xué)生的新學(xué)號是%dn",p->name,p->number);break; else if(2=choose2) printf("你要修改的信息是:姓名!n"); fflush(stdin); printf("請輸入你要修改的學(xué)生的學(xué)號:&qu

24、ot;); scanf("%d",&number); if(number=p->number) /輸入學(xué)號,判斷條件 fflush(stdin); printf("請輸入該學(xué)生的姓名:"); scanf("%s",p->name); /輸入要做修改的學(xué)生姓名 printf("修改學(xué)生的姓名后:n"); printf("%s是該學(xué)生的新姓名n",p->name); break; else if(3=choose2)printf("你要修改的信息是:班級!n&qu

25、ot;); /按學(xué)號修改班級fflush(stdin);printf("請輸入你要修改的學(xué)生的學(xué)號:");scanf("%d",&number);if(number=p->number) fflush(stdin); printf("請輸入該學(xué)生的班級:"); /輸入要做修改的班級 scanf("%d",&p->classes); printf("修改班級后n"); printf("該學(xué)生的新班級為:%dn",p->classes); bre

26、ak; else if(4=choose2)printf("你要修改的信息是:性別!n"); /按學(xué)號修改性別fflush(stdin);printf("請輸入你要修改的學(xué)生的學(xué)號:");scanf("%d",&number);if(number=p->number) fflush(stdin); printf("請輸入該學(xué)生的性別:"); /輸入要做修改的性別 scanf("%s",p->sex); printf("修改該學(xué)生的性別后n"); print

27、f("該學(xué)生的新性別為:%sn",p->sex); break;else if(5=choose2) printf("你要修改的信息是:成績!n"); /按學(xué)號修改成績fflush(stdin); printf("請輸入你要修改的學(xué)生的學(xué)號:");scanf("%d",&number);if(number=p->number) /輸入學(xué)號 fflush(stdin); printf("請輸入該學(xué)生新的語文成績:n"); scanf("%f",&p-

28、>chinese); fflush(stdin); printf("請輸入該學(xué)生新的數(shù)學(xué)成績:n"); scanf("%f",&p->math); /輸入新的四門成績 fflush(stdin); printf("請輸入該學(xué)生新的英語成績:n"); scanf("%f",&p->english); fflush(stdin); printf("請輸入該學(xué)生新的計算機成績:n"); scanf("%f",&p->computer)

29、; printf("修改后的成績n"); printf("該學(xué)生新的語文成績:%fn",p->chinese); printf("該學(xué)生新的數(shù)學(xué)成績:%fn",p->math); printf("請該學(xué)生新的英語成績:%fn",p->english); printf("該學(xué)生新的計算機成績:%fn",p->computer); break;elsep=p->next; printf("是否還要繼續(xù)修改信息(y/n):n"); /判斷,是否還要修改

30、信息,跳出循環(huán) fflush(stdin); if(ch=getchar()='n')break; return(head);/統(tǒng)計學(xué)生成績總分和平均分void conuntMark(MARK *head) MARK *p=head->next;int classes;char ch1,ch2; fflush(stdin);printf("請輸入要統(tǒng)計成績的班級(1或2):"); scanf("%d",&classes);printf("正在統(tǒng)計該班級學(xué)生的總分,請稍侯!n");while(1) tota

31、lMark(p); printf("是否還要繼續(xù)統(tǒng)計其他學(xué)生的成績(y/n):");fflush(stdin);if(ch1=getchar()='n')break; printf("是否統(tǒng)計該班級學(xué)生平均分?(y/n):");fflush(stdin); if(ch2=getchar()!='n')printf("正在統(tǒng)計該班學(xué)生平均分進行統(tǒng)計,請稍侯!n");aveMark(p); /調(diào)用平均分函數(shù)printf("n");/按班級輸出學(xué)生信息void printClassMark

32、(MARK *head) MARK *p;p=head->next;printf("*n");printf("學(xué)期t學(xué)號t班別t姓名t性別t語文tt數(shù)學(xué)tt英語tt計算機ttn");printf("*n");while(p!=NULL) printf("%dt",p->term); printf("%dt",p->number); printf("%dt",p->classes); printf("%st",p->name);

33、 printf("%st",p->sex);printf("%ft",p->chinese); printf("%1ft",p->math);printf("%1ft",p->english);printf("%1ft",p->computer);p=p->next;printf("n");printf("*n");/保存學(xué)生成績信息于文件void saveFileMark(MARK *head)char *fileNa

34、me;FILE *stu;MARK *p=head->next;if(p=NULL)printf("沒有任何信息,請先存入信息!n");printf("請按任意鍵返回主菜單!n");getchar();else fileName=(char *)malloc(sizeof(char); fflush(stdin); printf("請輸入你要保存的文件名!n"); gets(fileName); fileName=strcat(fileName,".txt"); stu=fopen(fileName,&quo

35、t;wb+"); while(p!=NULL) fprintf(stu,"%d %d",p->term ,p->classes ); fprintf(stu,"%s %d",p->name,p->number); fprintf(stu,"%s",p->sex ); fprintf(stu,"%f %f %f %f",p->chinese ,p->math ,p->english ,p->computer ); p=p->next ; fclos

36、e(stu); printf("已經(jīng)保存文件在%s中!n",fileName); printf("請按任意鍵返回主菜單!n"); getchar();/查找某個學(xué)生的成績void searchMarkStusentone(MARK *head)char ch1,ch2; MARK *p=head->next; if(p=NULL)printf("沒有任何信息,請先存入信息!n");printf("請按任意鍵返回主菜單!n");getchar();elsewhile(1) printf(" 你要選擇何

37、種方式查詢成績!n"); printf(" n"); printf(" a、學(xué)號: n"); printf(" b、班級: n"); printf(" c、學(xué)期: n"); printf(" n"); fflush(stdin); scanf("%c",&ch1); switch(ch1) case 'a':searchnumber(head);break; case 'b':searchclasses(head);break

38、; case 'c':searchterm(head);break; printf("n"); printf("是否還要繼續(xù)查詢學(xué)生的信息(y/n):"); fflush(stdin); if(ch2=getchar()='n') break; /查詢不及格學(xué)生void searchMarkFail(MARK *head)MARK *p=head->next ;char name10;int number,flag=0;int choose5;dofflush(stdin);printf("請輸入! (1按

39、姓名查詢 2按學(xué)號查詢 3 返回)n");scanf("%d",&choose5);switch(choose5)case 1 :fflush(stdin);printf("請輸入要查找的名字n");gets(name);while(p!=NULL)if(!strcmp(name,p->name)printf("姓名 學(xué)號n");printf("%s %dn",p->name ,p->number );if(p->chinese <60)printf("%s

40、 的語文成績不及格n",p->name );if(p->math <60)printf("%s 的數(shù)學(xué)成績不及格n",p->name );if(p->english <60)printf("%s 的英語成績不及格n",p->name );if(p->computer <60)printf("%s 的計算機成績不及格n",p->name ); flag+;printf("n"); p=p->next;if(flag=0)printf(&quo

41、t;沒有你要找的信息!n");break;case 2 :fflush(stdin);printf("請輸入你想要查找的學(xué)號:n");scanf("%d",&number); while(p!=NULL)if(number=p->number)printf("姓名 學(xué)號n");printf("%s %dn",p->name ,p->number );if(p->chinese <60)printf("%s 的語文成績不及格n",p->name

42、 );if(p->math <60)printf("%s 的數(shù)學(xué)成績不及格n",p->name );if(p->english <60)printf("%s 的英語成績不及格n",p->name );if(p->computer <60)printf("%s 的計算機成績不及格n",p->name ); flag+;printf("n"); p=p->next;if(flag=0)printf("沒有你要找的信息!n");break;c

43、ase 3:printf("請按任意鍵返回!n");getchar();break; default:printf("你輸入的有誤!請重新選擇n");break;while(choose5!=1 && choose5!=2 && choose5!=3);printf("按任意鍵返回!n");getchar();/按學(xué)號查詢void searchnumber(MARK *head) MARK *p=head->next; int number,i=0; printf("請輸入你要查詢的學(xué)生

44、學(xué)號:n"); scanf("%d",&number); while(p!=NULL) if(number=p->number) printf("-n"); printf("t學(xué)期t學(xué)號t班別t姓名t性別t語文t數(shù)學(xué)t英語t計算機tn"); printf("-n"); printf("%dt",p->term); printf("%dt",p->number);printf("%dt",p->classes); p

45、rintf("%st",p->name); printf("%st",p->sex); printf("%1ft",p->chinese); printf("%1ft",p->math); printf("%1ft",p->english); printf("%1ft",p->computer); i=2; p=p->next; if(i=0) printf("沒找到該學(xué)生的信息!"); /按班級查詢成績void searchclasses(MARK *head) int classes,i=0; MARK *p=head->next; printf("請輸入你要查詢成績的班級:"); scanf("%d",&classes); printf("請輸出%d班所有同學(xué)的成績:n",classes); printf("-n"); printf("t學(xué)期t學(xué)號t班別t姓名t性別t語文t數(shù)學(xué)t英語t計算機tn"); printf("-n"); while

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論