成绩分析系统C语言Word文档下载推荐.docx
《成绩分析系统C语言Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《成绩分析系统C语言Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
管理;
信息;
学生成绩分析系统。
1.绪论
在现代,高科技的飞跃发展,计算机的大量普及,使得人们生活节奏越来越快。
因此对教育行业的多元信息进行有效的管理工作,也成为教育行业中的重中之重。
目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入高校,但还未普及,而对于学生成绩管理来说,目前还没有一套完整的、统一的系统。
为各高校教务工作人员减轻负,提高工作效率,所以制作了学生成绩分析系统。
学生成绩分析系统依据开发要求主要应用于教育系统,完成对日常的教育工作中学生成绩档案的数字化管理。
比较系统地对教务、教学上的各项服务和信息进行管理,使数据管理更现代化、自动化、智能化、人性化。
同时,减轻了学院教务人员管理的工作量,缩小开支,提高工作效率和准确率,使其变得更具有条理性,科学性,为教育行业做出了巨大的贡献,也为今天的民办教育在未来市场的竞争力有所提高。
学生成绩分析系统使用了全新的成绩管理理念,系统从完善的基础信息管理,和对创建新用户、已创建的成绩数据的录入,修改,浏览,统计等功能操作,基本能够满足各高校教师的需要。
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
(1).学生基本信息及成绩所选科目成绩的录入。
(2).基本信息的查询(分系、班级;
分科目)与修改。
(3).对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
(4).对所开课程的成绩分析(求其平均成绩,最高分和最低分);
2.系统分析
2.1可行性分析
可行性分析
不管是从计算机软件环境或我们自己的技术能力的角度来看,学生成绩分析系统的开发都是具有一定的可行性。
这是个超小型的管理系统,从投入的人力,财力与物力来讲是非常之小的,只要一台电脑,一台打印机,这个系统就可以搞起来,考虑到学校里有电脑,现只要购置一台打印机就可以了。
从节省人力方面,可以让管理人员从繁与复杂的工作中解脱出来,做更多的工作,可以给教学管理提高一个层次。
2.1.3操作可行性可行性
本系统设计清晰,有良好的用户接口,操作简洁,符合教务管理的工作需要,并达到操作过程中的直观、方便、实用、安全等要求,因此操作方面具有可行性。
综上所述,本系统的开发是可行的。
2.2需求分析
设计一个学生成绩分析系统,有关该系统信息的描述,如:
学号、姓名、班级、和所选科目及各科成绩等。
主要内容如下:
(2).基本信息的查询(分系、班级)与修改。
(4).对所开课程的成绩分析(求其平均成绩,最高分和最低分)。
本次课程设计的题目为学生成绩分析系统,编程者要掌握学生的基本信息,包括学号、姓名、班级、和所选科目及各科成绩等。
并对录入的记录进行添加、删除、修改等基本操作,还可按照分系、班级分别对基本信息进行查询;
除此外,用户还可对所开课程进行成绩分析。
2.2.3性能需求
学生成绩分析系统记录了一些私人的事务,外不能打开该记录,这就要求本系统要具备一定的安全性。
根据用户的要求,学生的基本信息不会丢失或自动更改,不能出现差错,确保记录的稳定性和可靠性。
再就是学生成绩分析系统的占用的电脑空间要小,便于携带,程序要简单,操作不会占用用户很多时间,这就要求程序的响应速度要快。
3.总体设计
3.1系统结构
3.2功能模块设计
根据系统功能的要求,工作备忘录主要分为5个模块,分别执行要求中的功能。
学生基本信息及成绩所选科目成绩的录入,基本信息的查询(分系、班级)与修改,对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率),对所开课程的成绩分析(求其平均成绩,最高分和最低分)。
系统管理中用于系统退出。
[1]学生信息录入模块:
在登录界面上输入学生信息。
[2]基本信息的查询模块:
在界面上输入用班级或系查询学生信息。
[3]记录修改模块:
修改窗体上表中的工作记录表信息,并保存修改的信息。
[4]课程程序分析模块:
输入科目,显示其平均成绩,最高分和最低分。
3.3系统设计方案
根据系统功能的要求,制作了学生成绩分析系统界面,学生信息录入,基本信息的查询,成绩分析等程序。
建立如下结构:
{
charnumber[6];
charname[20];
charsex[4];
charclas[20];
charxi[10];
floatsubject[numsubs];
floatscore;
floataverage;
intindex;
}student;
定义函数:
externintnumstus;
/*学生数目*/
externstudent*pointer;
/*指向结构体数组*/
externintlens;
intmenu_select();
/*函数声明*/
intopenfile(studentstu[]);
intfindrecord(studentstud[]);
intwritetotext(studentstud[]);
voidwelcome();
voiddisplay1();
voidshowtable();
voidsort(studentstu[]);
voiddeleterecord(studentstu[],inti);
voidaddrecord(studentstud[]);
voiddisplay(studentstud[],intn1,intn2);
voidamendrecord(studentstud[]);
voidcount(studentstud[]);
voidsortnum(studentstud[]);
voidsortnum2(studentstud[]);
voidsortname(studentstud[]);
voidsortname2(studentstud[]);
voidsortcount(studentstud[]);
voidsortcount2(studentstud[]);
voidstatistic(studentstud[]);
3.4各功能模块设计与实现
3.4.1学生信息录入模块
在界面上输入学生信息。
流程图如下所示
3.4.2学生信息的查询模块
在界面上输入用班级或系查询学生信息,进行查询。
查询功能的流程如下所示
3.4.3学生信息修改模块
将学生信息进行修改,再将修改的信息保存到数据库中。
修改功能的流程图如下所示:
4.调试与测试
系统的开发经过了问题的定义、可行性研究、需求分析、总体设计、详细设计和编码阶段以后就进入系统的调试和测试阶段。
在测试过程中发现系统中存在的疏漏,要对程序做相应的修改和完善工作。
由于系统中的缺陷通常是由于某些特定情况考虑不周造成的,因此测试不是为了表明程序正确,测试的目的是以尽可能少的代价和时间找出系统中潜在的错误和缺陷。
4.1调试
调试是软件开发过程中的一个重要环节,也是最复杂,对软件开发者者来说也是最艰巨的任务。
调试的任务是及时改正测试过程中发现的软件错误。
具体地说,调试过程由两个步骤组成,它从表示程序中存在错误的某迹象开始,首先确定错误的准确位置,也就是找出哪个模块或哪个语句引起的错误。
然后仔细研究推断代码以确定问题的原因,并设法改正。
本系统调试过程中遇到问题、原因和解决方法如下面介绍
(1)查询模块
当正确输入查找信息时,系统却不能够得到所要查找的学生信息。
解决办法及步骤
1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息。
2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。
4.2测试
测试时要遵循:
⑴录入数据时数据库是否正确录入;
修改后的数据能否再正常录入数据库;
处理数据时,数据库中的数据能否正常输出;
查询数据时,数据能否从数据库中正常输出。
⑸删除数据时,数据能否从数据库中正常删除。
在测试时,首先要仔细认真的输入正确数据,这样才能保证测试的正确性和有效性。
在修改数据库后,要注意数据能否正常录入。
在修改数据库后,一定不能忘了保存。
处理数据时,要注意数据是否输出,如果不能的话,重新连接数据库再试。
查询数据时,要注意数据能否从数据库中正常输出。
删除数据时,要注意数据能否数据库中正常删除,若不能,则查看删除语句是否正确。
测试该系统中的功能基本上符合设计要求,系统稳定性良好,运行正常。
至此,本次测试圆满结束。
5.结论
经过两周的努力,课程设计终于顺利完成,课程设计的任务书上要求的功能也都成功实现。
只是对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率)由于能力有限无法完成十分遗憾。
结束语
经过一周的课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
在这次课程设计中我遇到许多问题和麻烦,得到了老师的帮助和指导,才能够使得这次课程设计顺利的进行下去,另外,在程序调试过程中,也得到很多同学的帮助,给我及时指出错误,提出许多宝贵意见。
在此对老师和同学们表示感谢!
参考文献
[1]谭浩强.C语言程序设计(第三版).清华大学出版社
[2]姜灵芝,余健.C语言课程设计案例精编.清华大学出版社,2008
附录1-用户手册
点击运行,首先出现的是登录界面,输入回车。
界面如下
按所需要的功能输入对应数字,界面如下
学生成绩添加,界面如下
学生信息查询,界面如下
学生信息修改,界面如下
科目成绩分析,界面如下
附录2-源程序
主要模块源代码清单:
#ifndefH_STUDENT_HH/*xxx如果没有定义xxx*/
#defineH_STUDENT_HH/*xxx定义xx*/
#include"
stdio.h"
string.h"
malloc.h"
#defineLENsizeof(structmessage_student)/*一个结构体数组元素的长度*/
#definenumsubs5/*学科数目*/
typedefstructmessage_student/*结构体定义*/
#endif
intmenu_select()
charc;
printf("
\n\n"
);
|1.增加学生记录5.统计信息|\n"
|2.查询学生记录6.打开文件|\n"
|3.修改学生记录7.保存文件|\n"
|4.学生纪录排序8.显示记录|\n"
|0.退出系统|\n"
请选择(0-8):
"
c=getchar();
getchar();
return(c-'
0'
}
intfindrecord(studentstud[])/*查找信息*/
charstr[2];
inti,num;
if(numstus==0)
没有可被查找的记录\n"
return-1;
else
以何种方式查找?
\n1.班级\t2.系\t3.名次\n"
gets(str);
if(str[0]=='
1'
)/*按班级查找*/
请输入班级:
for(i=0;
i<
=numstus;
i++)
if(strcmp(str,stud[i].clas)==0)
display(stud,i,i);
break;
elsecontinue;
elseif(str[0]=='
2'
)
请输入系:
if(strcmp(str,stud[i].xi)==0)
3'
)/*按名次查找*/
请输入名次:
scanf("
%d"
&
num);
if(num==stud[i].index)
if(i>
numstus)
没有查找所要的信息。
\n"
returni;
intopenfile(studentstu[])
inti=0,j;
FILE*fp;
charfilename[20],str[2];
if(numstus!
=0)
已经有记录存在,是否保存?
(y/n)"
y'
||str[0]=='
Y'
writetotext(stu);
请输入文件名:
gets(filename);
numstus=0;
if((fp=fopen(filename,"
rb+"
))==NULL)
无法打开该文件\n"
return(-1);
fscanf(fp,"
numstus);
fgetc(fp);
while(i<
%s"
stu[i].number);
stu[i].name);
stu[i].sex);
for(j=0;
j<
numsubs;
j++)
%f"
stu[i].subject[j]);
stu[i].score);
stu[i].average);
stu[i].index);
i++;
fclose(fp);
文件读取成功\n"
是否显示纪录?
display(stu,0,numstus-1);
return(0);
voidsort(studentstud[])
inti,j=0;
charstr[5];
student*p;
p=stud;
没有可供查询的记录!
while
(1)
;
请输入查询方式:
(直接输入回车则结束查询操作)\n"
1.按照学号\t"
2.按照姓名\t"
3.按照名次\n"
if(strlen(str)==0)break;
请输入排序次序:
1.升序排列\t"
2.降序排列\n"
sortnum2(p);
sortnum(p);
display(stud,0,numstus-1);
sortname2(p);
sortname(p);
sortcount2(p);
sortcount(p);
elseprintf("
请输入1~3"
是否退出排序?
)break;
return;
voidsortnum(studentstud[])
inti,j;
studenttemp;
numstus;
numstus-i-1;
if(strcmp(stud[j+1].number,stud[j].number)>
0)
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
voidsortnum2(studentstud[])
if(strcmp(stud[j].number,stud[j+1].number)>
voidsortname(studentstud[])
if(strcmp(stud[j+1].name,stud[j].name)>
voidsortname2(studentstud[])
if(strcmp(stud[j].name,stud[j+1].name)>
voidsortcount(studentstud[])
for(