学生成绩信息管理系统021921.docx
《学生成绩信息管理系统021921.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统021921.docx(19页珍藏版)》请在冰点文库上搜索。
![学生成绩信息管理系统021921.docx](https://file1.bingdoc.com/fileroot1/2023-5/16/e62ec8f5-9887-4d3b-90e0-9bd93996427f/e62ec8f5-9887-4d3b-90e0-9bd93996427f1.gif)
学生成绩信息管理系统021921
1问题描述
学生成绩管理系统
学生成绩管理系统
学生信息包括学期、学号、班级、姓名,和语文、数学、英语、计算机四门课成绩。
并按班级、学期查询学生成绩,并能录入、修改,求学生平均成绩和总成绩,输出不及格科目,按班级输出成绩单,按班级对学生成绩进行排序。
2系统分析
问题定义学生成绩管理系统设计学生成绩信息包括:
学期,学号,班别,姓名,四门课程成绩(语文、数学、英语和计算机)。
主要功能:
(1)能按学期、按班级完成对学生成绩的录入、修改
(2)能按班级统计学生的成绩,求学生的总分及平均分,设计并输出统计报表
(3)能查询学生成绩,不及格科目及学生名单
(4)能按班级输出学生的成绩单
(5)能按班级,按课程,对学生成绩进行排序。
要求:
使用二进制文件方式存储数据,系统以菜单方式工作
开发工具VC++
数据结构
typedefstructstudentMark
{
intterm;
intclasses;
charname[10];
intnumber;
charsex[7];
floatchinese;
floatmath;
floatenglish;
floatcomputer;
structstudentMark*next;
}MARK;这是定义一个结构体,主要包括学期,班级,姓名,学号,性别,语文成绩,数学成绩,英语成绩,计算机成绩,以及包括一个结构体指针。
另外还用了typedef这个关键字。
因此,在程序的后面也可以用MARK来定义结构体变量或结构体指针变量。
intterm;
intclasses;
charname[10];
intnumber;
charsex[7];
定义学期,学期只能是第一学期或者第二学期。
例如int1;则表示第一学期。
定义班级,班级只能是一班或者二班。
例如int2;则是表示定义为二班。
定义姓名,在数组中存放字符串。
例如charname[]=“yang”;则该学生的姓名为yang定义学号,例如int1;则该学生学号为1号。
定义姓别,其性别最大长度为7.
例如charsex[]=“man”;说明该学生为男生。
同样可以这样定义女生。
floatchinese;定义语文成绩。
floatmath;定义数学成绩。
floatenglish;定义英语成绩。
floatcomputer;定义计算机成绩。
定义一个结构体指针
structstudentMark*next;
intmain();
主函数,程序的入口
voidm(MARK*head);
主菜单的函数原型,在函数m(head)中主要有选择创建学生成绩信息,查询学生成绩信息,修改学生成绩信息,统计学生成绩信息,输出学生成绩信息,存储学生成绩信息于文件,以及退出体统等选项可供用户选择。
MARK*creat(void);
创建函数的函数原型,在函数creat()中用户可以输入初始的学生信息:
其中包括学生的学期、班级、姓名、学号和性别以及学生的语文、数学、英语和
计算机等相关信息
voidsearchMark(MARK*head);
查询菜单的函数原型,在函数searchMark(head)中用户可以自由选择是查询某一个学生的成绩还是查询不及格学生的成绩。
而这通过调用函数
searchMarkStusentone(head)和函数searchMarkFail(head)完成操作。
voidsearchMarkStusentone(MARK*head);
查询某个学生成绩的函数原型,在函数searchMarkStusentone(head)中用户可以按学号或班级或者是按学期来查找某个学生的成绩。
通过函数
按学号查找学生的函数原型,按班级查找学生的函数原型,按学期查找学生的函数原型,
searchnumber(head)和函数searchclasses(head)以及函数searchterm(head)完成操作。
voidsearchnumber(MARK*head)voidsearchclasses(MARK*head);voidsearchterm(MARK*head);voidsearchMarkFail(MARK*head);
查询没有及格的学生的函数原型,通过这个函数可以查找学生不及格科目及学生名单。
MARK*changeMark(MARK*head);
修改学生成绩信息的函数原型,可以修改学生的学期、班级、姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息
voidconuntMark(MARK*head);
统计学生成绩的函数原型,在函数conuntMark(head)中用户可以统计学生的总成绩以及平均成绩,通过调用函数totalMark(head)和函数aveMark(head)完成操作。
voidtotalMark(MARK*head);统计学生总成绩的函数原型,
voidaveMark(MARK*head);统计学生平均成绩的函数原型,
voidprintClassMark(MARK*head);
输出学生成绩信息的函数原型,通过此函数可以输出学生的学期、班级、姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息到屏幕上。
voidsaveFileMark(MARK*head);
存储学生成绩信息于文件的函数原型,通过此函数可以输出学生的学期、班级、姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息与文件中。
算法描述
1)创建主菜单
2)实现学生成绩信息录入
3)实现学生成绩信息查询
4)实现学生成绩信息修改
(一)修改某个学生的成绩
(a)按学期查询学生的成绩
(b)按班级查询学生的成绩
(c)按学号查询学生的成绩
(二)查询不及格的科目和学生名单
5)实现学生成绩统计
(a)按班级统计学生的总分。
(b)按班级统计学生的平均分。
6)实现学生成绩信息输出
7)保存学生的成绩信息于文件
8)流程图如下:
程序调试情况
(1)源程序如下:
#include<>
#include<>
#include<>
#include<>
*)malloc(sizeof(struct
#defineMAR(structstudentMarkstudentMark))
typedefstructstudentMark
{
intterm;
intclasses;
charname[10];
intnumber;
charsex[7];
floatchinese;
floatmath;
floatenglish;
floatcomputer;
structstudentMark*next;
}MARK;
voidm(MARK*head);
MARK*creat(void);
voidsearchMark(MARK*head);
voidsearchMarkStusentone(MARK*head);
voidsearchnumber(MARK*head);
voidsearchclasses(MARK*head);
voidsearchterm(MARK*head);
voidsearchMarkFail(MARK*head);
MARK*changeMark(MARK*head);voidconuntMark(MARK*head);voidtotalMark(MARK*head);voidaveMark(MARK*head);voidprintClassMark(MARK*head);voidsaveFileMark(MARK*head);intmain(void)
{
MARK*head=NULL;
printf("
**\n");
##\n");
printf("##
欢迎进入学生成绩信息管理系统
printf("
**\n");
printf("\n");
head=creat();
m(head);
return(0);
}
voidm(MARK*head)
{
intchoose;
while
(1)
{
**\n");
printf("
printf("学生成绩信息管理\n");
**\n");
printf("
printf("
2
查询成绩信息\n");
printf("
3
修改成绩信息\n");
printf("
4
统计成绩信息\n");
printf("
5
按班级输出学生信息\n");
printf("
6
保存成绩信息于文件\n");
printf("
7
退出系统\n");
printf("************************************\n");
fflush(stdin);
printf("请选择:
");scanf("%d",&choose);
if(1==choose)head=creat();
elseif(2==choose)searchMark(head);
elseif(3==choose)head=changeMark(head);
elseif(4==choose)conuntMark(head);
elseif(5==choose)printClassMark(head);
elseif(6==choose)saveFileMark(head);
else
printf("退出系统");
break;
}
}
xt");
stu=fopen(fileName,"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;
}
fclose(stu);
printf("已经保存文件在%s中!
\n",fileName);printf("请按任意键返回主菜单!
\n");getchar();
}
}
//查找某个学生的成绩
voidsearchMarkStusentone(MARK*head)
{
charch1,ch2;
MARK*p=head->next;
if(p==NULL)
{
printf("没有任何信息,请先存入信息!
\n");
printf("请按任意键返回主菜单!
\n");
getchar();
}
else
while
(1)
printf("
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");
printf("是否还要继续查询学生的信息(y/n):
");fflush(stdin);
if((ch2=getchar())=='n')
break;
}
}
//查询不及格学生
voidsearchMarkFail(MARK*head)
{
MARK*p=head->next;
charname[10];
intnumber,flag=0;
intchoose5;
do
{
fflush(stdin);
printf("请输入!
(1按姓名查询2按学号查询3返回)\n");scanf("%d",&choose5);
switch(choose5)
{
case1:
fflush(stdin);
printf("请输入要查找的名字\n");
gets(name);
while(p!
=NULL)
{
if(!
strcmp(name,p->name))
{
printf("姓名学号\n");
printf("%s%d\n",p->name,p->number);
if(p->chinese<60)
printf("%s的语文成绩不及格\n",p->name);
if(p->math<60)
printf("%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;
case2:
fflush(stdin);
printf("请输入你想要查找的学号:
\n");scanf("%d",&number);
while(p!
=NULL)
{
if(number==p->number)
{
printf("姓名学号\n");
printf("%s%d\n",p->name,p->number);if(p->chinese<60)
printf("%s的语文成绩不及格\n",p->name);if(p->math<60)
printf("%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;
case3:
printf("请按任意键返回!
\n");
getchar();
break;
default:
printf("你输入的有误!
!
请重新选择\n");
break;
}
}while(choose5!
=1&&choose5!
=2&&choose5!
=3);
printf("按任意键返回!
\n");
getchar();
}
//按学号查询
voidsearchnumber(MARK*head)
{
MARK*p=head->next;
intnumber,i=0;
printf("请输入你要查询的学生学号:
\n");
scanf("%d",&number);
while(p!
=NULL)
{
if(number==p->number)
{
printf("
\n");
printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t
数学\t英语\t计算机\t\n");
printf("
\n");
printf("%d\t",p->term);
printf("%d\t",p->number);
printf("%d\t",p->classes);
printf("%s\t",p->name);
printf("%s\t",p->sex);
printf("%1f\t",p->chinese);
printf("%1f\t",p->math);
printf("%1f\t",p->english);
printf("%1f\t",p->computer);
i=2;
}
p=p->next;
}
if(i==0)
printf("没找到该学生的信息!
");
}
//按班级查询成绩
voidsearchclasses(MARK*head)
{
intclasses,i=0;
MARK*p=head->next;
printf("请输入你要查询成绩的班级:
");
scanf("%d",&classes);
printf("请输出%d班所有同学的成绩:
\n",classes);
printf("
\n");
printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t数学\t英语
\t计算机\t\n");printf("
\n");
while(p!
=NULL)
{
if(classes==p->classes)
{
printf("%d\t",p->term);printf("%d\t",p->number);printf("%d\t",p->classes);printf("%s\t",p->name);
printf("%s\t",p->sex);
printf("%1f\t",p->chinese);printf("%1f\t",p->math);
printf("%1f\t",p->english);
printf("%1f\t",p->computer);
printf("\n");
printf("\n");
i=2;
}p=p->next;
if(i==0)
printf("没找到学生信息!
\n");
}
//按学期查询
voidsearchterm(MARK*head)
{
intterm,i=0;
MARK*p=head->next;
printf("请输入你要查询成绩的学期:
");
scanf("%d",&term);
printf("请输出第%d学期所有班级的信息:
\n");
printf("
\n");
printf("\t学期\t学号\t班别\t姓名\t性别\t语文\t数学\t英语\t
计算机\t\n");
printf("
\n");
while(p!
=NULL)
{
if(term==p->term)
{
printf("%d\t",p->term);
printf("%d\t",p->number);
printf("%d\t",p->classes);
printf("%s\t",p->name);
printf("%s\t",p->sex);
printf("%1f\t",p->chinese);
printf("%1f\t",p->math);
printf("%1f\t",p->english);
printf("%1f\t",p->computer);
printf("\n");
printf("\n");
i=2;
}
p=p->next;
}
if(i==0)
printf("没找到学生信息!
\n");
}
//学生总分
voidtotalMark(MARK*head)
{
floattotal=0;
inti=0;
MARK*p=head->next;
while(p!
=NULL)
{
total=p->chinese+p->math+p->english+p->computer;
printf("第%d个学生的总分为:
%1f!
\n",i+1,total);
printf("\n");
printf("已经统计了第%d个学生的总成绩!
\n",i+1);
printf("\n");
printf("\n");
i++;
p=p->next;
}
//学生平均分
voidaveMark(MARK*head){
floattotal=0,ave=0;
inti=0;
MARK*p=head->next;
while(p!
=NULL)
{
total=p->chinese+p->math+p->english+p->computer;
ave=total/4;
printf("第%d个学生的平均分:
%1f!
\n",i+1,ave);
printf("\n");
printf("已经统计了第%d个学生的平均成绩!
\n",i+1);
printf("\n");printf("\n");
i++;
p=p->next;
}
}
2)调试结果如下:
(a)创建学生成绩信息
b)查找学生成绩信息
心得及体会
在做这学生成绩管理系统时,自我感觉还好,在大的方面能够较为准确的把握,只是在一些小的细节不能做的很好,这一点是值得思考的地方。
是不是在平时的时候自己动手太少了。
忙碌了两个星期,我顺利完成了对此程序的编译及运行。
在设计程序的过程中,我了解到要设计一个完整的程序,其中最难的可能就属设计整个程序的框架。
虽然感觉自己在这方面还行,但也用来一个星期来完成。
在编译运行时遇到了这样或那样的bug,而这需要经过很多次的修改与调试,
所以必须要有耐心,直至最后设计出自己想要的程序。
可以说锻炼自己的耐心是在这次课程设计中的巨大收获。
总的来说,这次程序设计让我获益匪浅,对C语言也有了进一步的认识:
C语言功能高、表达能力强、使用灵活方便等等。
因此,在今后的学习中我也会更深入的学习c语言,希望c在以后的工作中能成为自己的核心竞争力。
参考文献或网站
C语言程序设计教程主编:
杨有安人民邮电出版社
C语言实验实训主编:
李春贵华兰理工大学出版社