班级成绩管理系统C语言课程设计.docx
《班级成绩管理系统C语言课程设计.docx》由会员分享,可在线阅读,更多相关《班级成绩管理系统C语言课程设计.docx(26页珍藏版)》请在冰豆网上搜索。
班级成绩管理系统C语言课程设计
课程设计报告
课程名称C语言课程设计
课题名称班级成绩管理系统
专业土木工程
班级1381
学号0102
姓名金潼
指导教师王颖
2014年12月28日
湖南工程学院
课程设计任务书
课程名称C语言课程设计
课题班级成绩管理系统
专业班级土木工程1381
学生姓名金潼
学号0102
指导老师王颖
审批王颖
任务书下达日期2014年12月10日
任务完成日期2014年12月28日
前言
《C语言程序设计》课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。
是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。
通常,课程设计的课题比平时的习题复杂得多,也更接近实际。
课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。
为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。
学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。
学习委员将课程设计报告与磁盘收齐后交指导老师。
一、目的
全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
二、设计要求
掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的问题,为将来编写软件积累一些典型的案例处理经验。
1.设计正确,方案合理。
2.界面友好,使用方便。
3.程序精炼,结构清晰。
4.设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。
5.上机演示。
6.按学号顺序选课题号,并在规定的时间内独自完成相关课题的C源程序编写、调整和运行。
源程序及编译生成各文件均保存在软盘中;
7.按本任务书的要求,按附录的要求编写《课程设计报告》(Word文档格式)。
并用A4的复印纸打印并装订;
8.在2014年6月30日之前,请各班学习委员收齐课程设计报告和源程序交王颖老师,联系电话:
。
三、进度安排
第一周星期四:
课题讲解,查阅资料
第二周 星期一:
总体设计,详细设计
星期二:
编程,上机调试、修改程序
星期三:
上机调试、完善程序
星期四:
上机调试、完善程序
星期五:
答辩
星期六-星期天:
撰写课程设计报告
课程设计报告规范
一、需求分析
1、程序的功能。
2、输入输出的要求。
二、概要设计
1、程序由哪些模块组成以及一个模块之间的层次结构、模块的调用关系;每个模块的功能。
2、课题的总体数据结构和数据库结构;即要存储什么数据,这些数据是什么样的结构,它们之间有什么关系等。
三、详细设计
1、采用C语言定义相关的数据类型。
2、写出各模块的类C码算法。
3、画出函数的调用关系图。
四、调试分析以及设计体会
1、测试数据:
准备典型的测试数据和测试方案,包括正确的输入及输出结果和含有错误的输入及输出结果。
2、程序调试中遇到的问题以及解决问题的方法。
3、课程设计过程经验教训、心得体会。
五、使用说明
用户使用手册:
说明如何使用你编写的程序,详细列出每一步的操作步骤。
六、书写格式
1、设计报告要求用A4纸打印成册:
2、标题和正文要求见附1
3、封面格式如下页。
七、附录
1、参考书目
2、源程序清单(带注释)
第一章绪论
1.1课程背景
现代社会是飞速发展的信息社会,各行各业皆离不开信息管理与信息处理,正是计算机被广泛应用于信息管理系统的环境。
计算机的最大优点在于利用它的信息管理,使用计算机进行信息控制。
不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。
而C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
C语言也很适合搭配汇编语言来使用(往往可以通过内联汇编语言或与汇编语言目标文件一起连接。
对于任何一种操作系统环境。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
本程序可以在短时间内得到总成绩并且得到相应的排名,节省时间。
在多名同学参加多门科目考试时很便捷,只要考试成绩出来,输入电脑就可以在短时间内得到总成绩,并知道了某学生在班级的排名,班级的最高分与最底分的情况以及某门课程的平均分,提高了工作效率。
1.2本文所作工作
与同组同学一起审阅题目,认真分析该系统需要进行哪些步骤,如何操作,在草稿纸上定好提纲,将功能逐个解析。
遇到不懂或解决不了的地方,查阅书籍,参考文献,上网查资料和上机时向老师寻求帮助等。
第二章需求分析
对一个有N名学生,每个学生有M门课程的班级做一个系统,实现对班级学生的成绩的管理。
该系统应具备成绩输入,成绩查看,成绩查找,成绩统计,成绩排序,成绩修改,成绩添加,成绩删除,成绩保存,退出程序等功能。
输入和显示的信息应该为学生的姓名,学号,各科成绩等内容。
第三章总体设计
3.1文字描述
依次输入学生的姓名,学号和成绩,如果该生的信息在学生文件中没有记录,给出提示,完善学生信息,然后保存至学生文件中。
最后返回主菜单。
数据类型定义如下:
姓名char,学号char,课程名称char,成绩char。
3.1.2成绩查询
打开学生文件或输入相关学生信息后,可以按照学生的“学号”查询成绩,显示该名学生的成绩与信息;如果查询记录不存在,给出提示信息找不到该学生信息。
然后任意键返回主菜单。
3.1.3成绩修改
开打学生文件或输入相关学生信息后前,用户需输入密码,密码错误无权修改;密码正确则可以按照“学号”,查询信息,依次修改学生的“学号”,“姓名”,“语文成绩”,“数学成绩”,“英语成绩”和“计算机成绩”。
先将修改后的学生信息预览,最后保存至学生文件。
没有找到需要修改的信息,给出提示, 然后按任意键返回主菜单。
3.1.4成绩统计
打开学生文件或输入相关学生信息后,对所有科目进行统计,然后显示学生的“学号”,“姓名”以及各科“成绩”最高分的同学的信息和显示该科的平均分。
然后任意键返回主菜单。
3.1.5成绩查看
打开学生文件或输入相关学生信息后,按“科目名次”查询,进行“排序;如果查询信息不存在,给出提示。
然后任意键返回主菜单。
3.1.6成绩保存
其他功能的运行都需要从保存的学生文件中调用,对学生文件操作步骤后,利用指针与地址的作用,经过一系列操作,会将信息资料保存成.txt格式。
然后任意键返回主菜单。
3.1.7成绩添加
打开学生文件或输入相关学生信息发现遗漏的学生后,输入遗漏学生人数,然后依次输入学生的“学号”,“姓名”,“语文成绩”,“数学成绩”,“英语成绩”和“计算机成绩”,然后任意键返回主菜单。
3.1.8成绩删除
通过输入学生学号,然后显示该名同学信息,并提示是否删除。
操作完成后任意键返回主菜单。
3.1.9退出系统
每执行一个具体的功能,程序重新显示菜单;完成相关程序后,退出系统。
如果此前没有进行“保存文件”步骤,给出提示是否保存成功,然后任意键返回主菜单。
3.2模板划分图
3.2.1总层次图
3.2.2基本总流程图
3.3功能介绍图
3.3.1成绩查询流程图
3.3.2成绩添加功能
第四章详细设计
根据功能模块设计思路,主要功能模块的算法设计思路,班级内同学的相关信息应包括“学号”,“姓名”,“各科成绩”。
此程序应具备“成绩输入”,“成绩查看”,“成绩查找”,“成绩统计”,“成绩排序”,“成绩修改”,“成绩添加”,“成绩删除”,“成绩保存”,“退出程序”等功能。
详情如下:
4.1系统模块函数
4.1.1模块函数组成
01.主函数voidmain()
02.成绩输入函数enter()
03.成绩查询函数find()
04.成绩修改函数modify()
05.成绩统计函数count()
06.成绩察看函数look()
07.文件保存函数save()
08.成绩添加函数add()
09.成绩删除函数deleted()
10.主界面函数home()
11.退出系统函数exit()
4.1.2模块函数介绍
01.menu():
用switch执行功能选项;用do...while执行每种功能完成后返回菜单。
02.enter():
用scanf一一对应输入学生的信息;用for循环输入多门成绩;最后用save()函数保存。
(参考
03.find():
用于查询全班各科成绩,与学生姓名,学号,科目相对应。
为了美观采用5%换行输出,使信息简洁明了。
(参考
04.modify():
用于修改成绩或学生信息。
定义好一个密码以及mm=0;如果密码错误mm=1,用do...while执行是否重新输入密码;密码正确获得修改信息的权限。
(参考.1.3)
05.count():
调用一个menu1()执行菜单功能,用switch执行用户想进行的排序,调用paixu1(),paixu2(),再用menu()函数转回菜单。
(参考
06.look():
定义choice1(),根据用户需要对信息执行所需的排序(参考
07.save():
用于使用系统功能对学生文件产生变化后,保存学生文件。
(参考
4.2学生信息数组
typedefstructstudent
{
charnumber[10];
charname[20];
floatscore[M];
floataver;
}STU;
第五章测试
5.1测试图展示
图.1
主界面。
图.2
菜单栏。
图.3
查看成绩。
图.4
查询栏。
图.5
平均成绩。
图.6
添加功能。
图.7
删除功能。
图.8
保存功能。
5.2系统调试
01:
在enter()函数中对学生成绩的输入用scanf(“%d”,s);当输入一门成绩后就会跳回,使接下来的程序无法运行,改为for(j=1;j<=M;j++)scanf(“%d”,&s[i].score[j]);将错误解决。
02:
在enter函数中,输入姓名用scanf(“%s”,&s[i].name);错误,在scanf函数中的输入项如果是字符数组名代表该数组的起始地址.则应改为scanf(“%d”,s[i].name);
03:
在运行find()函数时,第四门课显示出来的分数并非输入项:
错误,在定义时将j=1,要改为j=0。
04:
学生成绩定义为浮点型,但与scanf连接不起来。
是由于所使用的系统不支持该项操作。
05:
在count()函数中,paixu3();输出的人数比实际的多一人,因为b++:
在循环结束之后会自增一次,则比实际的大一。
5.3分析结果
01:
为了使调试程序简便,先定义班级的人数N为2人,编译连接后,显示出菜单桌面,先输入学生成绩保存起来。
2:
选择2.在用循环输出学生的基本信息的最后加printf(“\n”);,则输出学生的基本信息是每行显示一位同学的信息。
3:
选择5.修改函数中用getchar()来覆盖原有的,则就可输出修改的信息。
4:
在modify()函数中,当输入一个错误的密码时会出现死循环,因为跳出的位置错误了。
第六章使用说明
运行系统以后,主界面需要输入帐号和密码,分别为“jintong”,“123456”。
进入菜单后,按“1”键进入“输入想添加的学生人数,相关信息与成绩”,按任意键返回主菜单;按“2”键进入“查看全班学生的信息与成绩”功能,可以按任意键返回主菜单;按“3”键进入“按学号查询班级内某个同学的信息与成绩”功能,可以按任意键返回主菜单;按“4”键进入“查询班级平均分与各科平均分”功能,可以按任意键返回主菜单;按“5”键进入“按学号查看和修改班级内某个同学的信息和成绩”功能,可以按任意键返回主菜单;按“6”键进入“想添加的人数和相关学生信息与成绩”功能,可以按任意键返回主菜单;按“7”键进入“按学号查询到班级内某个同学的相关信息并提示是否删除改名学生信息”功能,可以按任意键返回主菜单;按“8”键进入“保存全班同学信息”功能;按“9”键退出程序。
第七章总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在是生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是班级成绩管理系统的设计,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?
怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?
怎样让自己的业余更靠近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
机会是老师,学校,以及无数代教育工作者给的,而能力是自己的,耐性是需要的。
经过自己的琢磨,还查阅了很多书籍,才做到了心中有数,才了解了C语言课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。
我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体等等。
通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在郭老师的辛勤指导下,终于游逆而解。
同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢。
做完这个课程设计,我们的自信一下子提高了,我们也会写程序了;尽管对于有些人这种程序会很简单,可对于我们C语言初学者来说,已经很不容易了。
这次体验为以后的学习计算机的我们增强了信心。
享受劳动成果的滋味实在美妙啊!
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。
在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。
老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?
在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。
没有了柳暗花明的一天,那么我怎么能说经受住了考验?
谢谢老师的那句话,她说:
人力有所不能及,然而,人的精神是不会败倒的。
我鼓起勇气,到处问,到处查资料,黄天不负有心人,在一篇文章上,终于看到了我所特别要求的函数,我实现了组合是关键的理论。
不得不说这是精神的胜利,是永不言败的精神让我的程序重见天日。
谢谢给我指点迷津的老师。
附1:
源程序代码
#include
#include
#include
#include
#include
#defineN20
#defineM4
typedefstructstudent
{
charnumber[10];
charname[20];
floatscore[M];
floataver;
}STU;
STUstu[N];
intn;
voidenter();//输入
voidsave();//保存
voidavergescore();//平均分
voidhome();//主界面
voidlook();//查看
voidfind();//查找
voidcount();//统计
voidadd();//添加
voidmodify();//修改
voiddeleted();//删除
voidmenu();//菜单
voidexit();//退出
voidmain()//主函数开始
{
inti,k=0;
charusername[15],pwd[6];
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃******************************************┃\n");
printf("\t┃*******┃\n");
printf("\t┃***欢迎使用班级成绩管理系统****┃\n");
printf("\t┃*******┃\n");
printf("\t┃***湖南工程学院****┃\n");
printf("\t┃*******┃\n");
printf("\t┃***指导老师:
王颖****┃\n");
printf("\t┃*******┃\n");
printf("\t┃***操作学生:
金潼****┃\n");
printf("\t┃*******┃\n");
printf("\t┃******************************************┃\n");
printf("\t┗━━━━━━━━━━━━━━━━━━━━━┛\n");
for(i=0;i<3;i++)
{
printf("\n请输入我的名字:
");
gets(username);
printf("\n请输入权限密码:
");
gets(pwd);
if((strcmp(username,"jintong")==0)&&(strcmp(pwd,"123456")==0))
{
printf("\n您已经成功登录\n");
k=1;
for(i=0;i<20;i++)
{
printf(".");
Sleep(100);
}
system("cls");
home();
break;
}
else
printf("\n用户名或密码无效请重新输入:
\n");
continue;
}
if(k==0)
printf("\n连续输入错误3次将退出程序\n");
Sleep(2000);
exit(0);
}
voidhome()/*功能选项调用*/
{
intmm=0;
menu();
do
{
mm=1;
switch(getch())
{
case'1':
enter();break;/*成绩输入*/
case'2':
look();break;/*成绩查看*/
case'3':
find();break;/*成绩查找*/
case'4':
count();break;/*成绩统计*/
case'5':
modify();break;/*成绩修改*/
case'6':
add();break;/*成绩添加*/
case'7':
deleted();break;/*成绩删除*/
case'8':
save();break;/*成绩保存*/
case'9':
exit(0);/*退出程序*/
default:
printf("输入有误\n");
}
printf("按任意键继续\n");
getch();
menu();
}while(mm==1);
}
voidmenu()/*进入菜单*/
{
system("cls");
printf("\n");
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("┃********请选择相应的功能号(1---9):
*******┃\n");
}
voidenter()/*输入信息和成绩功能*/
{
inti,j;
system("cls");
printf("输入班级学生人数:
\n");
scanf("%d",&n);
for(i=0;i{
printf("请输入学生%d的学号姓名:
\n",i+1);
scanf("%s%s",stu[i].number,stu[i].name);
printf("请输入学生成绩:
\n");
printf("语文\t数学\t英语\t计算机\n");
for(j=0;jscanf("%f",&stu[i].score[j]);
}
printf("成功输入\n");
}
voidavergescore()/*计算平均分功能*/
{
inti,j;
for(i=0;i{
stu[i].aver=0;
for(j=0;j{
stu[i].aver+=stu[i].score[j];
}