学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统
《高级语言程序设计》
课程设计报告
题目:
学生成绩管理系统
专业:
班级:
姓名:
指导教师:
成绩:
计算机与信息工程系
2014年6月20日
目录
1设计内容及要求1
1.1需求分析1
1.2功能分析1
2概要设计2
2.1系统总体框架2
2.2模块设计与分析2
2.2.1输入学生资料模块2
2.2.2输出学生资料模块3
2.2.3按学生姓名进行排列模块3
2.2.4添加学生资料模块3
2.2.5按姓名查找,删除该学生资料模块3
2.2.6查找并显示学生资料模块3
2.2.7按姓名查找,修改学生资料模块4
2.2.8从文件中读入数据模块4
2.2.9储存学生资料并退出系统模块4
2.3类的设计与分析4
2.4特色算法分析5
3程序代码7
4设计结果14
5总结17
参考文献18
1设计内容及要求
1.1需求分析
学生成绩管理系统主要提供成绩查询,方便管理的网上的信息查阅平台,学生可以通过该系统查阅与自己相关信息,查看留言、提交留言。
教师可以通过成绩管理系统查阅学生成绩信息,教师信息,查看教师留言、学生留言、提交留言、留言的管理等相关操作。
系统管理员可以实现以上的所有功能,还有对学生的添加、删除、修改、教师的添加、删除、修改,数据库的备份、数据库的还原等相关操作。
根据开发要求,学生成绩管理系统主要应用于教育系统,完成对日常的教学、教务、教师以及学生的计算机化的管理。
开发学生成绩管理系统可使学院教职员工减轻工作压力,比较系统地对教务、教学上的各项服务和信息进行管理,同时,可以减少劳动力的使用,加快查询速度、加强管理,以及国家各部门关于信息化的步伐,使各项管理更加规范化。
目前,学校工作繁杂、资料重多。
目前,管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
因此,开发一套适和大众的、兼容性好的系统是很有必要的。
1.2功能分析
“学生成绩管理系统”包括九个模块:
输入学生资料,输出学生资料,学生姓名按顺序排列,添加学生资料,按姓名查找,删除该学生资料,查找并显示学生资料,按姓名查找,修改该学生资料,从文件中读入数据,储存学生资料并退出系统。
这九个模块既相互联系又相互独立。
本系统根据学生成绩管理的需要,而建立一个“学生成绩管理系统”,以方便对成绩的各项管理操作。
本系统能对成绩进行输入和输出;能按姓名对学生进行排序,并显示学生资料、成绩等,不过得以系统输入学生资料、成绩为前提;能添加学生成绩资料;能根据学生的姓名来查询该学生的成绩资料,并修改或是删除该学生信息;能够从文件中读取学生信息,并且添加到系统中;能把对系统所进行的操作进行保存,以及时更新系统中的数据。
2概要设计
2.1系统总体框架
图1
2.2模块设计与分析
2.2.1输入学生资料模块
主要功能用来对学生的成绩进行收集和输入。
在学生信息保存在系统中的前提下,成绩录入需要输入学生资料,比如班级,学号,姓名。
在准确输入学生资料后,就可以对该学生的各科成绩进行录入。
该学生各科成绩输入成功后,系统会提示是否继续进行操作,如果想继续输入学生成绩就输入y,不想再输入学生成绩的话就输入n,再输入n之后,系统返回到主菜单。
2.2.2输出学生资料模块
主要功能用来对学生的成绩进行输出。
在系统已经录入了学生资料成绩的前提下,使用该功能可以显示所有学生的信息,资料等等。
具体包括学生的班级,学号,姓名和各科成绩。
在查看学生的资料,成绩各方面的信息后,按任意键就可以返回到主菜单。
2.2.3按学生姓名进行排列模块
主要功能是用来对学生的资料按姓名进行排序。
在系统保存学生资料,成绩的前提下,使用此功能可以对学生的资料按姓名进行排序,这样就方便查找姓氏相同或是相近的同学的资料。
2.2.4添加学生资料模块
主要功能是用来添加学生资料,成绩。
如果系统有保存学生资料的情况下,想录入学生成绩的话,就不用添加学生资料这模块。
如果系统没有保存该学生信息的话,就要使用此模块,在成功添加学生资料后,就可以对该学生进行其他的操作。
2.2.5按姓名查找,删除该学生资料模块
主要功能是用来删除学生资料。
在系统保存学生资料的前提下,想删除某学生的资料,可以输入学生姓名,系统查找该学生资料后,就可以删除了。
由于学生辍学,毕业等原因,及时对系统进行更新,删除一些没用的信息,可以使系统更加优化
2.2.6查找并显示学生资料模块
主要功能是用来查找学生资料。
在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,这样系统就会显示该学生资料和各科成绩等信息
2.2.7按姓名查找,修改学生资料模块
主要功能是用来修改学生资料。
在系统保存了某学生资料的前提下,想要查找该学生资料,可以输入该学生姓名,系统就会显示该学生资料和各科成绩等信息,这样就可以修改该学生的资料,成绩等信息。
2.2.8从文件中读入数据模块
主要功能是用来从文件中读入学生数据。
由于一些资料可以用Word文档或Excel表格输入,故在此模块中增加了导入数据的功能。
这样就方便很多,不用把学生资料一个一个添加,节省了很多时间精力。
2.2.9储存学生资料并退出系统模块
主要功能是用来储存学生资料。
在对系统进行一系列操作,比如添加、删除、修改学生资料后,对系统的最新操作进行保存,及时更新系统,方便下一次的操作。
2.3类的设计与分析
Student类类图
typedefclass
{
public:
charnum[10];
charcla[10];
charname[20];
charbyyl[10];
charjsjzc[20];
charsjk[10];
charjsjyy[20];
}Student;
表1Student类说明表
名称
属性
说明
num
数据成员
说明学生学号
cla
数据成员
说明学生班级
name
数据成员
说明学生名字
byyl
数据成员
说明学生编译原理成绩
jsjzc
数据成员
说明学生计算机组成成绩
sjk
数据成员
说明学生数据库成绩
jsjyy
数据成员
说明学生计算机英语成绩
2.4特色算法分析
功能:
定义菜单函数,通过输出函数显示系统功能。
利用switch语句实现多分支选择结构。
算法思路:
switch语句的执行流程是:
首先计算switch后面圆括号中表达式的值,然后用此值依次与各个case的常量表达式比较,若圆括号中表达式的值与某个case后面的常量表达式的值相等,就执行此case后面的语句,执行后遇break语句就退出switch语句。
流程图:
3程序代码
1.源代码
#include
#include
#include
#include
#defineN30
#defineM3
typedefstructstudent
{charnumber[10];
charname[20];
floatscore[M];
floataver;
floattotal;
}STU;
STUstu[N];
intn;
voidinputscore(void);
voidsavescore(void);
voidavergescore(void);
voidtotal(void);
voidmodifyscore(void);
voidlookscore(void);
voidsearchscore(void);
voidstatistic(void);
voidadd(void);
voidmodify(void);
voiddelscore(void);
voidmenu(void);
voidmain()
{shortintflag=0;
menu();
do
{flag=1;
switch(getch())
{case'1':
inputscore();break;/*输入成绩*/
case'2':
lookscore();break;/*查看成绩*/
case'3':
searchscore();break;/*查找成绩*/
case'4':
statistic();break;/*成绩统计*/
case'5':
modify();break;/*修改成绩*/
case'6':
add();break;/*添加成绩*/
case'7':
delscore();break;/*删除成绩*/
case'8':
savescore();break;/*保存成绩*/
case'9':
exit(0);/*退出程序*/
default:
printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
}while(flag==1);
}
voidmenu(void)
{
system("cls");
printf("\n");
printf("*********欢迎进入学生成绩管理系统**************\n");
printf("菜单\n");
printf("输入成绩-------------------------------------1\n");
printf("查看成绩及成绩排序---------------------------2\n");
printf("查询学生成绩---------------------------------3\n");
printf("成绩统计-------------------------------------4\n");
printf("修改成绩-------------------------------------5\n");
printf("添加成绩-------------------------------------6\n");
printf("删除成绩-------------------------------------7\n");
printf("保存成绩-------------------------------------8\n");
printf("退出系统-------------------------------------9\n");
printf("**********************************************\n");
printf("请输入您的选择\n");
}
/***************输入各个同学的学生信息(王超)******************************/
voidinputscore(void)
{inti,j;
system("cls");
printf("请输入学生总数:
\n");
scanf("%d",&n);
printf("提示:
*输入学号时请输入由1位大写字母和8位数字组成的学号,如P01214000*\n");/*因二维表上下需对正故有此要求*/
for(i=0;i{printf("请输入学生%d的学号姓名:
\n",i+1);
scanf("%s%s",stu[i].number,stu[i].name);
printf("请输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);
}
printf("成功输入\n");
}
/*****************计算各个同学的总分(孙友)*****************************/
voidtotal(void)
{inti,j;
for(i=0;i{stu[i].total=0;
for(j=0;j{
stu[i].total+=stu[i].score[j];
}
}
}
/*****************计算各个同学的平均分*****************************/
voidavergescore(void)
{inti,j;
for(i=0;i{stu[i].aver=0;
for(j=0;j{
stu[i].aver+=stu[i].score[j];
}
stu[i].aver=stu[i].aver/M;
}
}
/************查看学生成绩及根据平均分对学生进行排序*********************/
voidlookscore(void)
{inti,j,k;
STUt;
total();
avergescore();
system("cls");
for(i=0;i{for(k=i,j=i+1;jif(stu[j].aver>stu[k].aver)
k=j;
if(k!
=j)
{t=stu[k];
stu[k]=stu[i];
stu[i]=t;
}
}
printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");
for(i=0;i{printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
}
}
/*****************通过输入学号查找学生成绩***************************/
voidsearchscore(void)
{chara[10];
inti,j;
system("cls");
printf("请输入需查询的学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
break;/*找到该学生成绩信息后跳出for循环*/
}
else
printf("未找到该学生信息\n");
}
}
/*******统计学生成绩信息,平均分及格率,优秀率****************/
voidstatistic(void)
{STU*p=stu;
inti,j;
floatcount=0.0,sum=0.0;
system("cls");
for(i=0;i{sum+=(p+i)->aver;}
printf("该班级平均分为%4.2f\n",sum/n);/*平均分计算*/
for(i=0;i{if((p+i)->aver>=60)
count++;
}
printf("该班级及格率为%4.2f%%\n",count/n*100);/*及格率计算*/
count=0.0;
for(i=0;i{if((p+i)->aver>=90)
count++;
}
printf("该班级优秀率为%4.2f%%\n",count/n*100);/*优秀率计算*/
printf("平均分低于60的学生名单\n");
for(i=0;i{
if(stu[i].aver<60)
printf("%s\n",stu[i].name);
}/*统计不及格学生名单*/
}
/***************修改学生成绩*****************/
voidmodify(void)
{chara[10];
inti,j;
system("cls");
printf("请输入需要修改成绩的学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
printf("请重新输入该学生的学号姓名:
\n");
scanf("%s%s",stu[i].number,stu[i].name);
printf("请重新输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);/*找到该学生成绩后进行修改,跳出for循环*/
printf("修改成功\n");
break;
}
else
printf("请确认该学生是否为本班学生!
\n");
}
}
/*****************添加学生成绩********************/
voidadd(void)
{inta,i,j;
system("cls");
printf("请输入新增加的学生人数:
\n");
scanf("%d",&a);
n=n+a;
for(i=n-a;i{printf("请输入学生%d的学号姓名:
\n",i+1);
scanf("%s%s",stu[i].number,stu[i].name);
printf("请输入学生成绩:
\n");
printf("高数\t物理\tC语言\n");
for(j=0;jscanf("%f",&stu[i].score[j]);
printf("添加成功\n");
}
}
/*******************删除学生成绩*************************/
voiddelscore(void)
{inti,j,c;
charm,a[10];
system("cls");
printf("请输入学生学号\n");
scanf("%s",a);
for(i=0;i{if(strcmp(a,stu[i].number)==0)
{printf("名次\t学号\t\t姓名\t高数\t物理\tC语言\t总分\t平均分\n");
printf("%d\t%s\t%s\t",i+1,stu[i].number,stu[i].name);
for(j=0;jprintf("%4.2f\t",stu[i].score[j]);
printf("%4.2f\t",stu[i].total);
printf("%4.2f",stu[i].aver);
printf("\n");
c=i;
break;
}
else
printf("未找到该学生信息\n");
}
printf("是否删除该学生成绩(y/n)\n");
scanf("%s",&m);
if(m=='y')
{
for(i=c;istu[i]=stu[i+1];/*结构体整体赋值将后一位学生成绩信息拷贝进入前一位学生信息的存储位置*/
n=n-1;/*删除该学生信息后学生总数减一*/
printf("删除成绩成功\n");
}
else
printf("删除成绩失败\n");
}
/******************保存学生成绩************************/
voidsavescore(void)
{FILE*fp;
inti,flag=1;
charm;
system("cls");
puts("是否保存学生成绩(y/n)");
scanf("%s",&m);
if(m=='y')
{if((fp=fopen("score.dat","wb"))==NULL)
{printf("文件打开失败\n");
return;
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)
{printf("保存失败\n");
flag=0;
}
if(flag==1)
printf("保存成功!
\n");
fclose(fp);
}
else
return;
}
4设计结果
功能运行
图1学生成绩管理系统主菜单页面
图2输入学生资料模块
图3输出学生资料模块
图4按学生姓名进行排列模块
图5添加学生资料模块
图6按姓名查找