学生成绩管理系统 高质量C语言程序.docx
《学生成绩管理系统 高质量C语言程序.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统 高质量C语言程序.docx(27页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统高质量C语言程序
学生成绩管理系统
摘要:
学生成绩管理系统是学校不可或缺的一个组成部分,随着计算机技术的逐渐发展,计算机在教育系统中的应用得到了巨大的发展。
教务管理正在逐步迈向管理信息现代化。
但是我国的教务管理信息化水平还处在初级阶段,主要表现在对学生的成绩管理、学生的课程管理还是采用原有的人工管理方式。
学校的规模不断扩大,学生数量急剧增加,有关学生的各种数据也成倍增长。
面对庞大的信息量,这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高学生成绩管理工作的效率。
过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和减少人为的错误。
本次我们组选的就是学生成绩管理系统,要实现对学生成绩、课程的相关管理。
关键词:
成绩管理、C语言项目、程序设计、程序分析
1.设计目的和要求
1.1目的
1.2要求
2.总体设计
2.1模块设计
2.2类的分析与设计
3.详细设计
3.1修改数据功能模块设计
3.1.1详细功能描述
3.1.2设计思想
3.1.3主要代码
3.2删除数据功能模块设计
3.2.1详细功能描述
3.2.2设计思想
3.2.3主要代码
3.3增加数据功能模块设计
3.3.1详细功能描述
3.3.2设计思想
3.3.3主要代码
4.调试分析
4.1修改数据功能
4.2删除数据功能
4.3增加数据功能
5.总结
6.答辩记录
7.教师意见
1、设计目的和要求
1.1目的
以本班同学的高等数学、大学物理、C语言、大学英语的成绩为基础,建立一个可以实现以下功能的学生成绩管理系统。
1.2要求
A.信息维护
信息数据以文件形式保存,要求能够实现对学生信息数据的维护,其中包括增加、删除以及修改学生信息。
B.信息查询
要求能够能够实现按学生姓名和学号两种方式查询学生各课成绩。
C.成绩统计
输入任意课程名和一个分数段,统计该课程在该分数段的学生信息。
D.成绩排序
对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果。
2、总体设计
2.1模块设计
根据设计目的和要求,我们首先将程序分成四个模块,分别为信息维护、信息查询、成绩统计及成绩排序。
而在各个主模块中,我们又将其分成若干个小模块,从而实现程序设计的要求。
其中,模块设计如下:
信息维护—1、增加学生信息2、删除学生信息3、修改学生信息;信息查询--1、按学号查询2、按姓名查询;成绩统计;成绩排序—1、按高数排序2、按大物排序3、按C语言排序4、按英语排序。
所以最终实现的功能有:
1、增加学生信息2、删除学生信息3、修改学生信息4、按学号查询成绩5、按姓名查询成绩6、成绩按某门课程某个分数段统计7、成绩按某门课程排序。
一个方便学校使用的学生成绩管理系统,这个系统的功能比较完善。
使用类内函数和主函数中的switch语句实现多分支选择结构,进而实现该系统的各项功能。
该系统能实现7项功能。
设计本次实验所用到的知识点有:
类、指针、数组,构造函数,动态内存分配,switch语句、if语句、while()语句等。
2.2类的分析与设计
student类中的构造函数是来实现当类生成对象时用于对数据的初始化。
例如stud[].name是对学生姓名的初始化,stud[].math是对学生高等数学成绩的初始化,而stud[].Clanguage是对学生c语言成绩的初始化。
而student类将有内在联系的,成组出现的学生姓名,学号,各科成绩结合在一起,形成一种组合型数据结构。
3.详细设计
3.1修改数据功能模块设计
3.1.1详细功能描述
该部分是用来修改已录入的学生的数据信息。
3.1.2设计思想
我们采用通过学号修改的方法来修改已录入的学生的数据信息。
当输入学生学号后,系统会提示“请选择您要修改的内容:
”同时给出要修改的选项,包括姓名高数、大物、c语言、英语、及退出供您选择。
当做出选择后,会得到“请输入新数据”的提示。
该部分通过if语句、switch语句和while语句实现其功能。
3.1.3主要代码
voidxiugai(structStudent_typestud[])/*修改*/
{
inti=0,choice;
intu;
printf("请输入您要修改的学生的学号:
\n");
scanf("%s",&u);
for(i=0;i{
printf("请选择您要修改的内容:
\n");
printf("----------------------\n");
printf("|姓名请按1|\n");
printf("|高数请按2|\n");
printf("|大物请按3|\n");
printf("|c语言请按4|\n");
printf("|英语请按5|\n");
printf("|退出请按0|\n");
printf("+----------------------+\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice)
{
case0:
break;
case1:
printf("请输入新姓名:
");
scanf("%s",stud[i].name);
break;
case2:
printf("请输入新的高数分数:
");
scanf("%d",&stud[i].math);
break;
case3:
printf("请输入新的大物分数:
");
scanf("%d",&stud[i].physic);
break;
case4:
printf("请输入新的c语言分数:
");
scanf("%d",&stud[i].Clanguage);
break;
case5:
printf("请输入新的英语分数:
");
scanf("%d",&stud[i].English);
break;
default:
printf("\n无效选项!
");
break;
}break;
}
printf("修改成功\n");
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
3.2删除数据功能模块设计
3.2.1详细功能描述
该部分是用来删除已录入的学生的数据信息。
3.2.2设计思想
我们采用按姓名查找,删除一条记录的方法实现删除功能。
首先,输入要删除记录的名字,然后通过if语句和strcmp函数找到对应的数据,最后借用strcpy函数一一将下一数据的值覆盖到上一个数据,从而实现删除数据的的功能。
该部分通过if语句和strcmp函数以及strcpy函数实现其功能。
3.2.3主要代码
voidshanchu()/*按姓名查找,删除一条记录*/
{
chars[10];
intj,i=0;
printf("输入要删除记录的姓名:
");
scanf("%s",s);
for(i=0;i{if(strcmp(stud[i].name,s)==0)
{
for(j=i;j{
{
stud[j].num=stud[j+1].num;
strcpy(stud[j].name,stud[j+1].name);
stud[j].physic=stud[j+1].physic;
stud[j].math=stud[j+1].math;
stud[j].Clanguage=stud[j+1].Clanguage;
stud[j].English=stud[j+1].English;
}
}
}
}
printf("DeleteSuccessed!
\n");
saved();
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
3.3增加数据功能模块设计
3.3.1详细功能描述
该部分是用来新增学生的数据信息。
3.3.2设计思想
首先设计一个save函数,先打开文件数据库,能够实现保存并关闭文件后,通过fread写入一组数据,从而达到新增数据的目的。
3.3.3主要代码
voidsave()
{
FILE*fp;inti;
if((fp=fopen("chengjidan.dat","ab"))==NULL)
{
printf("canopenfile\n");
return;
}
if(fwrite(&stud[SIZE],sizeof(structStudent_type),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
printf("添加成功\n");
for(i=0;i{
fread(&stud[i],sizeof(structStudent_type),1,fp);
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);
}
}
voidzengjia()
{
printf("请输入新学生信息\n");
scanf("%s%d%d%d%%d%d",stud[SIZE].name,&stud[SIZE].num,&stud[SIZE].math,&stud[SIZE].physic,&stud[SIZE].Clanguage,&stud[SIZE].English);
save();
}
4、调试分析
4.1修改数据功能
修改数据功能如下图:
4.2删除数据功能
删除数据功能如下图:
4.3增加数据功能
增加数据功能如下图:
5、总结
本学生成绩管理系统能够实现增加,修改,删除记录的信息维护功能、按姓名,学号查询学生成绩信息功能、某一课程在某一分数段的统计功能及某一课程的排序功能。
编好程序,运行完毕后,我们也发现了一些缺陷。
比如,修改只能通过输入学号对该记录数据组进行修改,而删除也只做了输入学号删除记录的设定。
当然,缺憾是补课避免的。
总体上来讲,计算机综合课程设计上完了,完成了一个基本的学生成绩管理系统,从系统需求分析、数据库设计开始到系统的设计实施,逐步熟悉了c语言程序设计。
在组长的带领下我们经过了好几周的时间反复编写和调试程序,从课本和网上查阅相关资料,终于完成了整个课程设计。
过程中,也遇到不少困难,如编程逻辑把握不住,经验太少,不太善于调试程序等。
不过我们还是一步一步的自己动手做,不会的地方参考别人的程序自己再试着写或请教老师,在此过程中收获多多。
6、答辩记录
7、教师意见
附录:
#include
#include
#include
#defineSIZE5
structStudent_type
{
charname[10];
intnum;
intmath;
intphysic;
intClanguage;
intEnglish;
}
stud[SIZE];
intweihuxuanze()
{
inti;
printf("*1.增加学生信息*");
printf("\t*2.删除学生信息*\n");
printf("*3.修改学生信息*");
printf("*请选择你所需的功能的序号*\n");
scanf("%d",&i);
returni;}
voidsaved()
{
FILE*fp;
inti;
if((fp=fopen("chengjidan.dat","wb"))==NULL)
{
printf("canopenfile\n");
return;
}
for(i=0;iif(fwrite(&stud[i],sizeof(structStudent_type),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
}
voidsave()
{
FILE*fp;inti;
if((fp=fopen("chengjidan.dat","ab"))==NULL)
{
printf("canopenfile\n");
return;
}
if(fwrite(&stud[SIZE],sizeof(structStudent_type),1,fp)!
=1)
printf("filewriteerror\n");
fclose(fp);
printf("添加成功\n");
for(i=0;i{
fread(&stud[i],sizeof(structStudent_type),1,fp);
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);
}
}
voidzengjia()
{
printf("请输入新学生信息\n");
scanf("%s%d%d%d%%d%d",stud[SIZE].name,&stud[SIZE].num,&stud[SIZE].math,&stud[SIZE].physic,&stud[SIZE].Clanguage,&stud[SIZE].English);
save();
}
voidxiugai(structStudent_typestud[])/*修改*/
{
inti=0,choice;
intu;
printf("请输入您要修改的学生的学号:
\n");
scanf("%s",&u);
for(i=0;i{
printf("请选择您要修改的内容:
\n");
printf("----------------------\n");
printf("|姓名请按1|\n");
printf("|高数请按2|\n");
printf("|大物请按3|\n");
printf("|c语言请按4|\n");
printf("|英语请按5|\n");
printf("|退出请按0|\n");
printf("+----------------------+\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice)
{
case0:
break;
case1:
printf("请输入新姓名:
");
scanf("%s",stud[i].name);
break;
case2:
printf("请输入新的高数分数:
");
scanf("%d",&stud[i].math);
break;
case3:
printf("请输入新的大物分数:
");
scanf("%d",&stud[i].physic);
break;
case4:
printf("请输入新的c语言分数:
");
scanf("%d",&stud[i].Clanguage);
break;
case5:
printf("请输入新的英语分数:
");
scanf("%d",&stud[i].English);
break;
default:
printf("\n无效选项!
");
break;
}break;
}
printf("修改成功\n");
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
voidshanchu()/*按姓名查找,删除一条记录*/
{
chars[10];
intj,i=0;
printf("输入要删除记录的姓名:
");
scanf("%s",s);
for(i=0;i{if(strcmp(stud[i].name,s)==0)
{
for(j=i;j{
{
stud[j].num=stud[j+1].num;
strcpy(stud[j].name,stud[j+1].name);
stud[j].physic=stud[j+1].physic;
stud[j].math=stud[j+1].math;
stud[j].Clanguage=stud[j+1].Clanguage;
stud[j].English=stud[j+1].English;
}
}
}
}
printf("DeleteSuccessed!
\n");
saved();
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
voidpaixu_math(structStudent_typestud[])/*按高树成绩排序*/
{inti,j,k=0,p,q,r,w;
doubley;
charx[10];
intt;
for(i=0;i{k=i;
for(j=i+1;jif(stud[j].math>stud[k].math)
{
k=j;
p=stud[i].physic;stud[i].physic=stud[k].physic;stud[k].physic=p;
q=stud[i].math;stud[i].math=stud[k].math;stud[k].math=q;
r=stud[i].English;stud[i].English=stud[k].English;stud[k].English=r;
w=stud[i].Clanguage;stud[i].Clanguage=stud[k].Clanguage;stud[k].Clanguage=w;
t=stud[i].num;stud[i].num=stud[k].num;stud[k].num=t;
strcpy(x,stud[i].name);
strcpy(stud[i].name,stud[k].name);
strcpy(stud[k].name,x);
}
}
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
voidpaixu_physic(structStudent_typestud[])/*按大物成绩排序*/
{inti,j,k=0,p,q,r,w;
doubley;
charx[10];
intt;
for(i=0;i{k=i;
for(j=i+1;jif(stud[j].physic>stud[k].physic)
{
k=j;
p=stud[i].physic;stud[i].physic=stud[k].physic;stud[k].physic=p;
q=stud[i].math;stud[i].math=stud[k].math;stud[k].math=q;
r=stud[i].English;stud[i].English=stud[k].English;stud[k].English=r;
w=stud[i].Clanguage;stud[i].Clanguage=stud[k].Clanguage;stud[k].Clanguage=w;
t=stud[i].num;stud[i].num=stud[k].num;stud[k].num=t;
strcpy(x,stud[i].name);
strcpy(stud[i].name,stud[k].name);
strcpy(stud[k].name,x);
}
}
for(i=0;i{
printf("%-10s%8d%4d%4d%4d%4d\n",stud[i].name,stud[i].num,stud[i].math,stud[i].physic,stud[i].Clanguage,stud[i].English);}
}
voidpaixu_Clanguage(structStudent_typestud[])/*按C语言成绩排序*/
{inti,j,k=0