C语言课程设计班级成绩管理系统.docx
- 文档编号:25870410
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:48
- 大小:610.43KB
C语言课程设计班级成绩管理系统.docx
《C语言课程设计班级成绩管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计班级成绩管理系统.docx(48页珍藏版)》请在冰豆网上搜索。
C语言课程设计班级成绩管理系统
课程设计报告
课程名称C语言程序设计
课题名称班级成绩管理系统
专业
班级
学号
姓名
指导教师
年月日
湖南工程学院
课程设计任务书
课程名称C语言程序设计
课题班级成绩管理系统
专业班级
学生姓名
学号
指导老师
审批
任务书下达日期年月日
任务完成日期年月日
一、设计内容与设计要求
1.设计内容:
班级成绩管理系统设计
涉及的知识点:
①掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句;
②掌握数组的基本概念。
熟练掌握一维数组、二维数组的应用、掌握字符数组
与字符串的关系以及字符串的简单处理。
③掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解函数的作用域。
④掌握结构体的概念,结构体类型的定义,结构体变量的定义和初始化,结构体成员的表示,结构体变量的赋值含义,结构体与指针、函数的关系。
⑤掌握文件、文件类型指针的基本概念,熟练掌握文件的打开与关闭以及文件的建立、读写等有关操作。
2.设计要求:
1)用C语言实现系统;利用结构体数组实现班级成绩的数据结构设计;系统的各个功能模块要求用函数的形式实现;应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观;各项显示数据均要求以表格的形式输出;在各功能子模块中应设计相应的二级菜单。
2)建立一个班级学生成绩数据库,文件名为bjcjk.txt,并从该文件中读取数据;
3)班级成绩管理系统应能提供以下功能:
(1)主菜单界面设计。
通过提示用户输入一个数字选项,调用相应的功能函数。
(2)学生成绩显示:
完成班级全部学生成绩的显示,显示时按表格的形式,且应有表头;
(3)学生成绩追加:
完成新增一个(或多个)学生的成绩记录,要求在追加过程中有相应的提示信息,完成追加后能重新计算学生平均成绩并显示;
(4)学生成绩修改:
要求能按学号和按姓名两种定位方式,且可以按用户要求修改记录中除学号和姓名以外的指定内容,并重新计算学生的平均成绩;
(5)学生成绩信息的查询;要示系统能按学号、按姓名查询以及能查总分在某一指定范围内的学生信息,且能显示符合条件的所的记录,若所需查询的信息不存在时应有相应的提示信息。
(6)学生成绩信息的删除;要求可按指定的学号和指定的姓名两种定位方式删除学生的成绩记录。
(7)要求在删除模块、修改模块和查询模块中若找不到所需的记录时,系统设计中应有一定的提示信息。
(8)成绩排序:
按学生平均成绩进行排序;
(9)成绩统计:
①统计并以表格的形式显示所有课程的平均分;
②统计并显示选定的某门课程的平均分以及超过该平均分的人数,同时能将超过该平均分的学生记录以表格的形式显示出来。
4)说明:
(1)要求将修改后的数据写入到一个新的数据文件nwejck.txt中。
(2)对系统有兴趣的同学可以在实现基本要求的基础上,完善系统的其它功能。
5)班级成绩管理系统采用一个结构体数组,学生成绩数据库结构如下:
intxh/*学号*/
charname[10]/*姓名*/
doubleyy/*英语*/
doublemat/*数学*/
doublejsj/*计算机*/
doublewl/*物理*/
doublezf/*总分*/
注意:
学号不能重复且不少于4位数字,各项字符串的长度要求在4~10之间,数据库应有10条或多于10条以上的记录。
6)要求:
1要求每个学生必须独立思考,认真并按时完成本课程设计所包含的所有内容;
2要求学生必须按照课程设计报告的完整格式说明设计内容,设计任务分析过程和算法,给出程序流程图和全部源程序;
3设计报告的完整格式应包括以下部分的内容:
1系统设计总体思路;
2系统的主要功能;
3系统功能模块的划分(要求画出总体模块框图);
4主要功能的实现和各个程序模块说明(每个功能模块的框图统主模块的流程图,各个功能模块至少要有一个主要的流程图);
程序调试过程及各模块调试中相应的部分截图
7)分组及安排
所选题目根据学生班号和学号确定,(班号+学号)%6+1。
如你的班号为01班、学号为01,则所选题目号为:
(1+1)%6+1=3,即课题号为3。
8)成绩评定
①系统设计方案是否合理;②程序设计是否正确;③调试结果;④设计说明书的质量高低;⑤答辩时回答问题情况;⑥课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。
二、进度安排
第16周星期三14:
00——17:
00讲课、布置任务
星期五8:
00——12:
00机房上机调试程序
第17周星期三19:
00——22:
00机房上机调试程序
星期四14:
00——18:
00机房上机调试程序
星期五8:
00——12:
00机房上机调试程序、答辩
附:
课程设计报告排版、打印和装订要求
1.课程设计报告装订顺序:
封面、任务书、目录、正文、附件、评分表。
按A4大小的纸张排版和打印。
2.设计报告的页码从目录之后开始使用;
3.正文的格式:
一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22磅。
正文中程序清单(英文)用英文字体TimesNewRoman,单倍行间距。
4.正文的内容:
一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试(各模块至少有一个程序调试的截图);五、总结(不少于500字);六、参考文献;七、附件(包含所有程序的原代码,且程序中应有必要的注释)。
八.正文总字数要求在5000字以上(不含程序原代码)。
5.设计报告中任务书和评分表不需重新排版。
一、引言
1.1前言
C语言课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧的培养。
是与课堂听讲、自学和练习相结合的必不可少的一个环节。
课程设计的课题比平时的习题复杂得多,也更接近实际。
全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。
1.2设计目的
随着电脑技术的发展越来越快,管理系统得到人们广泛的应用。
本课题中编写班级成绩管理系统主要是为了方便我们能更加高效快捷地管理学生的各项成绩信息,能够对学生成绩进行追加、修改、删除等操作。
并能对输入的数据进行平均分、总分的计算以及总分的排序,进而清楚明朗地显示出来。
二、总体设计
2.1主要功能
主要实现对学生成绩信息实现成绩的显示,成绩的追加,成绩的修改,成绩的查询,成绩的删除,成绩的排序和统计等功能。
班级成绩管理系统具体提供以下功能:
a、成绩显示:
完成全班同学全部学生成绩的显示,以表格形式显示出来,并带有表头。
b、成绩追加:
新增学生成绩记录,在追加过程中有相应的提示信息并实现连续追加的功能。
追加成功的成绩能重新计算学生的平均成绩并显示。
c、成绩修改:
实现按学号修改和按姓名修改两种修改方式,并可以对指定的学生的各科成绩进行修改,修改过程中有相应的提示信息。
修改后能重新计算学生的平均成绩。
d、成绩删除:
对指定的学号或者指定的姓名进行定位删除,并有相应的提示信息。
e、成绩查询:
对指定的学号或指定的姓名进行定位查询,并能显示出符合条件的查询结果。
查询的信息不存在时有相应的提示信息。
f、成绩排名:
按学生平均成绩进行排序,并以表格形式显示。
g、成绩统计:
以表格的形式显示所有课程的平均分,并显示选定的某门课程的平均分以及超过该平均分的人数,同时将超过该平均分的学生记录以表格的形式显示出来。
2.2功能模块划分
(1)本程序由八个模块构成,其中主模块是由系统函数搭建而成,其重要功能是显示出功能主菜单,由用户作出选择进入子菜单。
在子菜单中操作完毕后,能够准确返回到功能主菜单。
系统主要模块流程图如下:
(2)模块说明
主界面main()用户选择界面
显示模块Disp()显示所有学生的成绩信息
追加模块Appe()添加学生成绩信息
修改模块Modi()修改学生某项成绩信息
删除模块Dele()删除学生某项成绩信息
查询模块Query()查询学生成绩信息
排序模块Sort()按成绩总分排序
统计模块Total()统计各科目平均分信息
退出模块Quit()退出系统并保存信息
三、详细设计
3.1主要功能的实现(下面以追加模块和修改模块为例)
(1)追加模块流程图
(2)修改模块流程图
3.2程序调试
各模块运行步骤及界面
3.2.1功能主菜单选择界面
3.2.2显示模块(输入“1”进入全班成绩显示菜单)
3.2.2显示模块截图
3.2.3追加模块(在功能主菜单输入“2”进入成绩追加界面,这里输入一组追加信息后,系统会提示是否继续追加,从而实现了“连续追加”的功能)
3.2.4追加模块截图
(注:
这里的总分输入值为0,因为在该程序中,总分会计算出来)
3.2.4修改模块(在功能主菜单输入“4”进入成绩修改菜单,这里可以根据学号和姓名查找到对应学生成绩信息进行修改。
下面以按姓名修改为例,对姓名为“ww”的学生的计算机成绩进行修改后,系统还能提示是否对该生的其他科目成绩进行继续修改,实现了“一人多项”的修改功能。
修改完系统会退到所有学生成绩菜单,可以清楚地看到修改后的学生的成绩信息)
3.2.4修改模块截图
3.2.5删除模块(在功能主菜单输入“4”进入删除方式菜单,此功能可以对学生成绩信息进行按学号删除和按姓名删除两种删除方式。
下面以对姓名为“ww”的学生成绩进行删除,输入该生姓名后,系统能显示该生的各项成绩信息,并提示是否确认删除。
删除后,系统还能提示是否继续进行删除操作。
这里的删除模块实现了“多人多项”的删除功能,操作使用起来十分便利高效。
如果不继续,选择“2”能退出到删除方式菜单,进行接下来的删除操作)
3.2.5删除模块截图
3.2.6查询模块(在功能主菜单输入“5”系统进入成绩查询菜单。
此功能可以对学生成绩信息按学号查询和按姓名查询,以下以按学号查询为例。
输入学号为“******”的学生学号,系统以表格的形式显示出该生的成绩信息。
输入“1”能返回到查询菜单继续查询,输入任意键系统退出到主菜单界面)
3.2.6查询模块截图
3.2.7排序模块(在功能主菜单输入“6”进入成绩排名的界面,成绩排名以总分的高低由高向低以表格的形式显示出来)
3.2.7排序询模块截图
3.2.8统计模块(在功能主菜单输入“7”进入平均分统计菜单界面,菜单显示:
1、所有课程平均分2、单一课程平均分3、退出。
以下输入“2”进入单一课程平均分界面,菜单界面显示各科目的选择列表,输入“2”查询数学成绩的平均分,结果以表格形式输出超过该科平均分的学生信息。
查询完数学这项后,还能继续对其他科目的平均分统计信息进行查询。
实现了“多次循环”的功能)
3.2.8统计模块截图
3.2.9退出模块(在完成对该系统的所有操作后,在功能主菜单界面输入“8”进入退出界面,如下图:
键入任意键即可退出该系统)
3.2.9退出模块截图
四、问题分析及总结
4.1问题分析
从接到这个课题开始,我们就开始了为期一周的C语言课程设计。
首先是针对本次课题设计进行建库工作,在开始建库的过程中,就遇到了一点困难。
建库的时候一不留神就会使输入的数据库前功尽弃,为此尝试了几次,最后耐心地一项一项输才建好库。
针对这个课题,老师给我们分了7人一组的小组进行合作,我在组中主要负责了修改模块程序的编写和整个系统的美化工作。
在调试过程中遇到了不少的错误、警告等信息,有时候因为一个符号的失误导致程序的错误达到十几个。
在做完修改模块后,个人觉得修改的方式还是不够妥当,不能实现多想同时修改而只能一项一项进行修改保存。
这是我个人觉得修改模块存在的值得改进的地方。
4.2总结
学习C语言已经半年了,半年来,从接触C语言这门课程到后来逐渐了解这门课程的点滴知识,使我自己对计算机方面的知识有了更加深刻的认识。
作为一个电脑爱好者,平时和同学们在一起就喜欢讨论java编程和电脑系统方面的知识。
从一年前拿到自己的第一台智能手机刷机开始,渐渐了解一点关于安卓apk程序的开发及框架。
每次的刷机都会使我自己对安卓系统有进一步的了解,同时,每次解决一个问题,都会有一点点小小的成就感。
最近的半年,由于电脑的使用频率的增加,注意力开始转移到电脑系统的安装以及自己学习封装win7系统。
由于对电脑软件的使用和电脑知识了解较多,很多同学们电脑有问题都会找我帮忙,这半年中,拆过许多笔记本电脑,用各种方法装过很多台电脑的系统,还装了几台机子的内存以及对电脑主板上灰尘的进行清理。
这些在我看来简单的操作给我自己带来了许多快乐,同时也给别人带去了方便。
刚接触到C语言这门课程时就感觉到了它的难度,但通过渐渐的学习,我认识到了它的重要性,更认识到这是一种能力的培养。
经过几次的上机操作,看到自己设计的程序能运行出正确的结果,开始对C语言产生了兴趣。
同时,学习的东西越来越复杂,遇到的困难也越来越多。
拿到我们组的课题时,心里十分的没底,觉得很难不知道该如何下手。
原因是自己没把知识真正学到手,不知道自己学的东西能不能用得上。
但学习就是要不断的发现问题,不断的解决问题的。
于是,在试探中开始了建库的工作。
曾以为建库是很简单很容易的,但是开始建立的时候,就很容易出错。
通过几次失败,几次重试,终于建好了库文件。
接下来的任务就是做好我负责的修改模块,在做修改模块的时候,问题的困难程度还是显现出来了,调用函数的时候经常出错。
程序运行起来不能对指定的学生成绩信息进行连续的修改,经过同学们一起努力,慢慢改正了一点错误。
上机调试的时候,在指导老师的帮助下逐渐将不能连续修改的问题解决。
接着就遇到了程序运行完毕不能退出到主菜单的问题,在几次尝试修改语句后,终于知道了语句缺失的命令,最后完美地解决了这个问题。
在解决问题的过程中,对于课堂上学的for,Switch和while语句还有结构体的使用和指针的用法与作用都有了进一步的认识。
后来遇到问题的时候,查阅了课本知识,通过网络查找到与之类似的问题加以解决。
经过几次上机调试后,其余同学已经将剩下的模块做得差不多了。
但是我发现一个普遍的问题,那就是所有界面的布局都不够合理。
于是接下来的工作就把各模块的显示菜单进行美化,使界面看起来清晰美观。
这个看似简单的工作做起来却是很费时间,因为要想把显示得居中,同时清晰明朗,得加入空格或者是加入“\t”,可能就因为一个空格对不齐就不能很好地显示对应的信息。
另外我发现程序运行界面就是黑白相间,显得不够美观,于是在查阅资料后弄明白了,加入一个头文件然后再主函数中加入颜色的调用命令。
在网上查找了关于颜色的代码,添加进去后运行界面显得很漂亮,比以前黑白相间的界面更明朗美观。
一周的时间很快就过去了,C语言答辩安排就在老师安排下开始了。
周五上午,我就在机房里完成了答辩。
现在觉得有点遗憾的就是,老师问我的问题因为紧张了一定就没回答得很好,觉得有点失望。
但是我的程序做得还是比较合理,因为在答辩运行时,老师所要求的所有操作我的程序都能实现,而且完美无瑕,这让我觉得付出还是有回报的。
经过这次的C语言课程设计,我才真正了解到理论知识转为实践的重要性。
其实从刚接到课题任务的时候,心里还是有点畏惧的,毕竟这个系统的源程序就有好几页,看着就头痛。
但是看着同学们一个个认真的坐在电脑面前几个小时一点点摸索,自己才开始冷静地思考着问题。
通过自己的努力,同学们的帮助和老师的指导,终于完成了这个课题的设计任务。
同时,也使我对C语言课程有了更为深刻的认识,让我对自己有了信心。
我想,若干年后,当看到我做的这份报告,都会是一段美好的回忆。
这段短短几天的努力也会给我动力,给我在以后的学习中以鞭策,更加加深我对计算机知识的了解。
五、参考文献
[1]贾宗璞,许合利.C语言程序设计.人民邮电出版社
[2]陈世清,李杰君.C语言程序设计.浙江大学出版社
[3]郑莉.C++语言程序设计.清华大学出版社
六、附件
源程序清单:
#include
#include
#include
#include
intN=0;
structstu
{
intxh;/*学号*/
charname[18];/*姓名*/
doubleyy;/*英语*/
doublemat;/*数学*/
doublejsj;/*计算机*/
doublewl;/*物理*/
doublezf;/*总分*/
}s[20];
voidRe_file()
{
FILE*fp;
fp=fopen("bjcjk.txt","r");
while(fscanf(fp,"%d\n%s\n%lf\n%lf\n%lf\n%lf\n%lf\n",&s[N].xh,s[N].name,&s[N].yy,&s[N].mat,&s[N].jsj,&s[N].wl,&s[N].zf)!
=EOF)N++;
fclose(fp);
}
voidWr_file()
{inti;
FILE*fp;
fp=fopen("nwejck.txt","w");
for(i=0;i fprintf(fp,"%d\n%s\n%lf\n%lf\n%lf\n%lf\n%lf\n",s[i].xh,s[i].name,s[i].yy,s[i].mat,s[i].jsj,s[i].wl,s[i].zf); fclose(fp); } voidJs()/*计算总分*/ {inti; for(i=0;i s[i].zf=s[i].yy+s[i].mat+s[i].jsj+s[i].wl; } voidSort()/*排序模块*/ {intj,k; doubleave[20],t; structstum; Js(); for(k=0;k ave[k]=s[k].zf/4;/*计算平均分*/ for(k=0;k for(j=k+1;j if(ave[k] {t=ave[k];ave[k]=ave[j];ave[j]=t;/*对平均分排序*/ m=s[k];s[k]=s[j];s[j]=m;}/*按平均分整体排序*/ } voidDisp()/*显示模块*/ { Js(); inti; printf("\n\t\t\t\t全班学生成绩表\n"); printf("\t--------------------------------------------------------------\n"); printf("\t学号姓名英语数学计算机物理总分平均分\n"); printf("\t--------------------------------------------------------------\n"); for(i=0;i { printf("\t%d\t%s\t%.1lf\t%.1lf\t%.1lf\t%.1lf\t%.1lf%.1lf\n",s[i].xh,s[i].name,s[i].yy,s[i].mat,s[i].jsj,s[i].wl,s[i].zf,s[i].zf/4); printf("\t--------------------------------------------------------------\n"); } printf("按回车键返回主菜单: "); getchar(); } voidTotal()/*统计模块*/ { doubleav[4]={0.0}; intxz,sum0,sum1,sum2,sum3; intxz2; intk,i; sum0=sum1=sum2=sum3=0; for(k=0;k {av[0]+=s[k].yy; av[1]+=s[k].mat; av[2]+=s[k].jsj; av[3]+=s[k].wl; } av[0]=av[0]/N; av[1]=av[1]/N; av[2]=av[2]/N; av[3]=av[3]/N; for(k=0;k { if(s[k].yy>av[0])sum0++; if(s[k].mat>av[1])sum1++; if(s[k].jsj>av[2])sum2++; if(s[k].wl>av[3])sum3++; } while (1) {/*统计菜单一*/ printf("\n\n\n"); printf("平均分统计菜单\n"); printf("**********************************\n"); printf("*--------------------------------*\n"); printf("*1.所有课程平均分*\n"); printf("*2.单一课程平均分*\n"); printf("*3.退出*\n"); printf("*--------------------------------*\n"); printf("**********************************\n"); printf("\n\n"); printf("请输入您要统计的方式: "); while (1) { scanf("%d",&xz); if(xz==1||xz==2||xz==3)break; elseprintf("\n\n\n\n输入错误! 请重新输入! "); break; } if(xz==1) { printf("\n\n\n"); printf("各科成绩平均分\n"); printf("---------------------------------------------\n"); printf("英语计算机数学物理\n"); printf("--------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 班级 成绩管理系统