学生成绩信息管理系统_第1页
学生成绩信息管理系统_第2页
学生成绩信息管理系统_第3页
学生成绩信息管理系统_第4页
学生成绩信息管理系统_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 问题描述学生成绩管理系统学生成绩管理系统学生信息包括学期、学号、班级、姓名,和语文、数学、英语、计算机四门 课成绩。并按班级、学期查询学生成绩,并能录入、修改,求学生平均成绩和总 成绩,输出不及格科目,按班级输出成绩单,按班级对学生成绩进行排序。2 系统分析2.1 问题定义 学生成绩管理系统设计 学生成绩信息包括:学期,学号,班别,姓名,四门课程成绩 ( 语文、数学、 英语和计算机 ) 。主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改(2)能按班级统计学生的成绩, 求学生的总分及平均分, 设计并输出统计 报表(3)能查询学生成绩,不及格科目及学生名单(4)能按班级输出学生的成绩

2、单(5)能按班级,按课程,对学生成绩进行排序。 要求:使用二进制文件方式存储数据,系统以菜单方式工作2.2 开发工具 VC+6.02.3 数据结构typedef struct studentMarkint term;int classes;char name10;int number;char sex7;float chinese;float math;float english;float computer;struct studentMark *next; MARK; 这是定义一个结构体,主要包括学期,班级,姓名,学号,性别,语文成绩,数 学成绩,英语成绩,计算机成绩, 以及包括一个结构体

3、指针。 另外还用了 typedef这个关键字。因此,在程序的后面也可以用 MAR来定义结构体变量或结构体指 针变量。int term;int classes;char name10;int number;char sex7;定义学期,学期只能是第一学期或者第二学期。例如 int 1 ;则表示第一学期。 定义班级,班级只能是一班或者二班。 例如 int 2 ;则是表示定义为二班。 定义姓名,在数组中存放字符串。例如char name= “ yang”;则该学生的姓名为yang 定义学号,例如 int 1 ;则该学生学号为 1 号。 定义姓别,其性别最大长度为 7.例如char sex= “ ma

4、r”;说明该学生为男生。同样可 以这样定义女生。float chinese;定义语文成绩。float math;定义数学成绩。float english;定义英语成绩。定义一个结构体指针float computer;定义计算机成绩。struct studentMark *next;int main();主函数,程序的入口void m(MARK *head);主菜单的函数原型,在函数 m( head)中主要有选择创建学生成绩信息, 查询学生成绩信息, 修改学生成绩信息, 统计学生成绩信息, 输出学生成绩信息, 存储学生成绩信息于文件,以及退出体统等选项可供用户选择。MARK *creat(voi

5、d );创建函数的函数原型,在函数 creat ()中用户可以输入初始的学生信息: 其中包括学生的学期、班级、姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息void searchMark(MARK *head);查询菜单的函数原型,在函数searchMark (head)中用户可以自由选择是查询某一个学生的 成绩还是 查询不及 格学生的成 绩。而 这通过调用 函数searchMarkStusentone ( head)和函数 searchMarkFail(head )完成操作。 void searchMarkStusentone(MARK *head);查询某个学生成绩的函数原型

6、,在函数 searchMarkStuse nto ne ( head )中 用户可以按学号或 班级或者 是按学期 来查找某个 学生的 成绩。通过 函数searchnumber(head)和函数 searchclasses ( head)以及函数 searchterm( head) 完成操作。按学号查找学生的函数原型, 按班级查找学生的函数原型, 按学期查找学生的函数原型,void searchnumber(MARK *head) void searchclasses(MARK *head); void searchterm(MARK *head); void searchMarkFail(MA

7、RK *head);查询没有及格的学生的函数原型,通过这个函数可以查找学生不及格科目 及学生名单。MARK *changeMark(MARK *head);修改学生成绩信息的函数原型,可以修改学生的学期、班级、姓名、学号和 性别以及学生的语文、数学、英语和计算机等相关信息void conuntMark(MARK *head);统计学生成绩的函数原型,在函数conuntMark (head)中用户可以统计学生的总成绩以及平均成绩,通过调用函数totalMark ( head)和函数aveMark(head)完成操作。void totalMark(MARK *head);统计学生总成绩的函数原型,

8、void aveMark(MARK *head);统计学生平均成绩的函数原型,void printClassMark(MARK *head);输出学生成绩信息的函数原型,通过此函数可以输出学生的学期、班级、 姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息到屏幕上。void saveFileMark(MARK *head);存储学生成绩信息于文件的函数原型, 通过此函数可以输出学生的学期、 班 级、姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息与文件 中。2.4算法描述(1) 创建主菜单(2) 实现学生成绩信息录入(3) 实现学生成绩信息查询(4) 实现学生成绩信息修

9、改(一)修改某个学生的成绩(a) 按学期查询学生的成绩(b) 按班级查询学生的成绩(c) 按学号查询学生的成绩(二)查询不及格的科目和学生名单(5) 实现学生成绩统计(a)按班级统计学生的总分。(b)按班级统计学生的平均分。(6) 实现学生成绩信息输出(7) 保存学生的成绩信息于文件(8) 流程图如下:输入学主莘本信息 学期、学号*姓 名、班级、成绮)抹改学生抠本信息遇出系绒计学生呈本僧息存晴学输出学生基本信息査询学生基本倍息姓修哎按名?翳询二进制 文件冇 式存fit值息总和均沪茨分平吩2.5 程序调试情况(1)源程序如下:#include<stdio.h>#include<

10、stdlib.h>#include<string.h>#include<conio.h>*)malloc(sizeof(struct#define MAR (struct studentMark studentMark)typedef struct studentMarkint term;int classes;char name10;int number;char sex7;float chinese;float math;float english;float computer;struct studentMark *next; MARK;void m(MAR

11、K *head);MARK *creat(void );void searchMark(MARK *head);void searchMarkStusentone(MARK *head);void searchnumber(MARK *head);void searchclasses(MARK *head);void searchterm(MARK *head);void searchMarkFail(MARK *head);MARK *changeMark(MARK *head); void conuntMark(MARK *head); void totalMark(MARK *head)

12、; void aveMark(MARK *head); void printClassMark(MARK *head); void saveFileMark(MARK *head); int main(void)MARK *head=NULL;printf("*n");#n");printf(" #欢迎进入学生成绩信息管理系统*printf("*n");*printf("n");head=creat();m(head);return(0);void m(MARK *head )int choose;while(1)

13、printf("f*n");printf(" 学生成绩信息管理 n");printf("f*n");printf(" 1创建成绩信息 n");printf("2查询成绩信息 n");printf("3修改成绩信息 n");printf("4统计成绩信息 n");printf("5按班级输出学生信息 n");printf("6保存成绩信息于文件 n");printf("7退出系统 n");print

14、f("*n");fflush(stdin);printf(" 请选择: "); scanf("%d",&choose); if(1=choose)head=creat();else 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(he

15、ad);elseprintf(" 退出系统 "); break;/ 创建一个学生成绩信息系统MARK *creat()MARK *head=NULL,*p1=NULL,*p2=NULL; char ch;fflush(stdin);printf(" 请问是否输入信息? (y 或 n)n"); scanf("%c",&ch);head=p1=p2=MAR;while(p1!=NULL && ch='y')p1=MAR;printf(" 请输入要录入学生信息的学期 ( 学期只能为 1 或

16、2 ):"); fflush(stdin);scanf("%d",&p1->term);while(p1->term!=1 && p1->term!=2)getchar();printf(" 输入错误 ! 请重新输入 :"); scanf("%d",&p1->term);printf(" 请输入要录入学生成绩信息的班级 :"); fflush(stdin);scanf("%d",&p1->classes);while

17、(p1->classes!=1 && p1->classes!=2)getchar();printf(" 输入错误 ! 请重新输入 :"); scanf("%d",&p1->classes);printf(" 请输入该班的学生信息 !n");printf(" 请输入学生学号: ");fflush(stdin);scanf("%d",&p1->number);printf(" 请输入学生姓名: ");fflush(stdi

18、n);scanf("%s",p1->name);printf(" 请输入学生姓别: ");fflush(stdin);scanf("%s",p1->sex);fflush(stdin);printf(" 请输入语文成绩 (0-100):");scanf("%f",&p1->chinese);fflush(stdin);printf(" 请输入数学成绩 (0-100):");scanf("%f",&p1->math);

19、fflush(stdin);printf(" 请输入英语成绩 (0-100):");scanf("%f",&p1->english);fflush(stdin);printf(" 请输入计算机成绩 (0-100):");scanf("%f",&p1->computer);p2->next=p1;p2=p1;printf(" 是否还要输入信息 (y/n):");fflush(stdin);scanf("%c",&ch);链表结尾/p2-

20、>next = NULL;return(head);/ 查找学生成绩信息void searchMark(MARK *head)int choose1; while(1)printf("*n");printf("查询学生成绩信息 n");printf("1查询某个学生成绩 n");printf("2查询不及格学生成绩 n");printf("3返回主菜单 n");printf("*n");fflush(stdin);printf(" 请选择: ");s

21、canf("%d",&choose1);if(1=choose1) searchMarkStusentone(head);else if(2=choose1) searchMarkFail(head);elseprintf(" 返回主菜单 ");break;/ 修改学生成绩信息(按学期或按学号修改)MARK *changeMark(MARK *head)int choose2;MARK *p=head->next; char name10;char ch;*n");int number;printf("你所需要修改的 n

22、")printf("1修改学号 n");printf("2修改姓名 n");printf("3修改班级 n");printf("4修改性别 n");printf("5修改成绩 n");printf("f*n");printf("f*fflush(stdin); printf(" 请选择: ");scanf("%d",&choose2);while(1)while(p!=NULL) if(1=choose2)p

23、rintf(" 你 要 修 改 的 信 息 是 : 学 号 !n"); / 按姓名修改学号fflush(stdin);printf(" 请输入你要修改的学生姓名 :"); scanf("%s",name);if (strcmp(name,p->name)=0)fflush(stdin);printf(" 请 输 入 该 学 生 新 的 学 号 :");/ 输入新学号scanf("%d",&p->number);printf(" 修改学生的学号后: n");

24、printf("%s 学 生 的 新 学 号是 dn ",p->n ame,p->nu mber);break;else if(2=choose2)printf("你要修改的信息是:姓名!n");fflush(stdin);printf(" 请输入你要修改的学生的学号 :");scanf("%d",&number);if(number=p->number)/ 输入学号,判断条件fflush(stdin);printf(" 请输入该学生的姓名 :");scanf(&quo

25、t;%s",p->name);/ 输入要做修改的学生姓名printf(" 修改学生的姓名后 :n");printf("%s 是该学生的新姓名 n",p->name);break;else if(3=choose2)printf(" 你 要 修 改 的 信 息 是 : 班 级 !n");/ 按学号修改班级fflush(stdin);printf(" 请输入你要修改的学生的学号 :");scanf("%d",&number);if(number=p->number

26、)fflush(stdin);printf(" 请 输 入 该 学 生 的 班 级 :");/ 输入要做修改的班级scanf("%d",&p->classes);printf(" 修改班级后 n");printf(" 该学生的新班级为 :%dn",p->classes);break;else if(4=choose2)printf(" 你 要 修 改 的 信 息 是 : 性 别 !n");/ 按学号修改性别fflush(stdin);printf(" 请输入你要修改

27、的学生的学号 :");scanf("%d",&number);if(number=p->number)fflush(stdin);printf(" 请 输 入 该 学 生 的 性 别 :");/ 输入要做修改的性别scanf("%s",p->sex);printf(" 修改该学生的性别后 n");printf(" 该学生的新性别为 :%sn",p->sex);break;else if(5=choose2)printf(" 你要修改的信息是 : 成绩

28、 !n");/ 按学号修改成绩fflush(stdin);printf(" 请输入你要修改的学生的学号 :");scanf("%d",&number);if(number=p->number)/ 输入学号fflush(stdin);printf(" 请输入该学生新的语文成绩 :n");scanf("%f",&p->chinese);fflush(stdin);printf(" 请输入该学生新的数学成绩 :n"); scanf("%f",&

29、amp;p->math);/ 输入新的四门成绩fflush(stdin);printf(" 请输入该学生新的英语成绩 :n");scanf("%f",&p->english);fflush(stdin);printf(" 请输入该学生新的计算机成绩 :n"); scanf("%f",&p->computer);printf("printf("修改后的成绩 n");该学生新的语文成绩 :%fn",p->chinese);printf(&q

30、uot;该学生新的数学成绩 :%fn",p->math);printf("printf("请该学生新的英语成绩 :%fn",p->english); 该学生新的计算机成绩 :%fn",p->computer);break;elsep=p->next;printf("/ 判断,是否还要修改信息还 要 继 续 修 改 信 息 (y/n):n"); , 跳出循环fflush(stdin);if(ch=getchar()='n') break;return(head);/ 统计学生成绩总分和平

31、均分void conuntMark(MARK *head) MARK *p=head->next;int classes;char ch1,ch2;fflush(stdin);printf(" 请 输 入 要 统 计 成 绩 的 班 级 (1 或 2):"); scanf("%d",&classes);printf(" 正在统计该班级学生的总分 , 请稍侯 !n");while(1)totalMark(p);printf(" 是否还要继续统计其他学生的成绩 (y/n):");fflush(stdin)

32、;if(ch1=getchar()='n')break;printf(" 是否统计该班级学生平均分? (y/n):"); fflush(stdin);if(ch2=getchar()!='n')printf(" 正 在 统 计 该 班 学 生 平 均 分 进 行 统 计 , 请 稍侯!n");aveMark(p);/ 调用平均分函数printf("n");/ 按班级输出学生信息void printClassMark(MARK *head) MARK *p; p=head->next;printf(

33、"f*printf(" 学期t学号t班别t姓名t性别t语文tt 数学tt tt 计算机 ttn");英语printf("f*n");while(p!=NULL)printf("%dt",p->term);printf("%dt",p->number);printf("%dt",p->classes);printf("%st",p->name); printf("%st",p->sex);printf("%f

34、t",p->chinese);printf("%1ft",p->math);printf("%1ft",p->english); printf("%1ft",p->computer);p=p->next;printf("n");printf("f*n");/ 保存学生成绩信息于文件void saveFileMark(MARK *head) char *fileName;FILE *stu;MARK *p=head->next; if(p=NULL)p

35、rintf(" 没有任何信息,请先存入信息! n");printf(" 请按任意键返回主菜单! n");getchar();elsefileName=(char *)malloc(sizeof(char);fflush(stdin);printf(" 请输入你要保存的文件名! n"); gets(fileName);fileName=strcat(fileName,".txt");stu=fopen(fileName,"wb+");while(p!=NULL)fprintf(stu,"

36、%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->comp uter );p=p->next ;fclose(stu);printf(" 已经保存文件在 %s 中! n",fileNa

37、me); printf(" 请按任意键返回主菜单! n"); getchar();/ 查找某个学生的成绩void searchMarkStusentone(MARK *head)char ch1,ch2;MARK *p=head->next;if(p=NULL)printf(" 没有任何信息,请先存入信息! n");printf(" 请按任意键返回主菜单! n"); getchar();elsewhile(1)printf(" 你要选择何种方式查询成绩 !n");printf("printf(&qu

38、ot;a、学号:n");printf("b、班级:n");printf("c、学期:n");printf("n");fflush(stdin); scanf("%c",&ch1);switch(ch1)case 'a':searchnumber(head);break; case 'b':searchclasses(head);break; case 'c':searchterm(head);break;printf("n");p

39、rintf(" 是否还要继续查询学生的信息 (y/n):");fflush(stdin);if(ch2=getchar()='n')break;/ 查询不及格学生void searchMarkFail(MARK *head)MARK *p=head->next ;char name10;int number,flag=0;int choose5;do返回)n");fflush(stdin);printf(" 请输入!(1 按姓名查询 2 按学号查询 3scanf("%d",&choose5);switch

40、(choose5)case 1 :fflush(stdin);printf(" 请输入要查找的名字 n");gets(name);while(p!=NULL)if(!strcmp(name,p->name)printf(" 姓名 学号 n");printf("%s %dn",p->name ,p->number );if(p->chinese <60)printf("%s 的语文成绩不及格 n",p->name );if(p->math <60)printf(&quo

41、t;%s 的数学成绩不及格 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;case 2 :fflush(stdin);printf(&quo

42、t; 请输入你想要查找的学号: n");scanf("%d",&number);while(p!=NULL)if(number=p->number) printf(" 姓名 学号 n");printf("%s %dn",p->name ,p->number ); if(p->chinese <60)printf("%s 的语文成绩不及格 n",p->name ); if(p->math <60)printf("%s 的数学成绩不及格 n&q

43、uot;,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;case 3: printf(" 请按任意键返回! n");getch

44、ar(); break;default:printf(" 你输入的有误!请重新选择 n"); break;while(choose5!=1 && choose5!=2 && choose5!=3); printf(" 按任意键返回! n");getchar();/ 按学号查询void searchnumber(MARK *head)MARK *p=head->next;int number,i=0;printf(" 请输入你要查询的学生学号 :n"); scanf("%d",&

45、amp;number);while(p!=NULL) if(number=p->number)printf("n");printf("t学期t学号t班别t姓名t性别t语文t数学t英语t计算机tn");printf("n");printf("%dt",p->term); printf("%dt",p->number); printf("%dt",p->classes);printf("%st",p->name); printf(

46、"%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(" 没找到该学生的信息 !");/ 按班级查询成绩void searchclasses(MARK *head)int classes,i=0;MARK

47、*p=head->next;printf(" 请输入你要查询成绩的班级 :");scanf("%d",&classes);printf("请输出c班所有同学的成绩:n",classes);printf("n");printf("t学期t学号t班别t姓名t性别t语文t数学t英语t计算机tn");printf("n");while(p!=NULL)if(classes=p->classes)printf("%dt",p->term);

48、printf("%dt",p->number);printf("%dt",p->classes);printf("%st",p->name);printf("%st",p->sex); printf("%1ft",p->chinese); printf("%1ft",p->math); printf("%1ft",p->english); printf("%1ft",p->computer

49、);printf("n");printf("n");i=2;p=p->next;if(i=0)printf(" 没找到学生信息 !n");/ 按学期查询void searchterm(MARK *head)int term,i=0;MARK *p=head->next;printf(" 请输入你要查询成绩的学期 :");scanf("%d",&term);printf(" 请输出第c学期所有班级的信息:n");printf("n");p

50、rintf("t 学期t学号t班别t姓名t性别t语文t数学t英语t 计算机 tn");printf("n");while(p!=NULL)if(term=p->term)printf("%dt",p->term); printf("%dt",p->number); printf("%dt",p->classes); printf("%st",p->name);printf("%st",p->sex); printf("%1ft",p->chinese); printf("%1ft",p->math); printf("%1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论