1、 课 程 设 计 报 告 课程名称《数据结构》 课题名称_学生成绩管理系统 专 业 计算机科学与技术专业 班 级计算机 学 号 姓 名*** 指导教师 *** 2012年 12 月9 日 前 言 设计课题八三十:学生成绩管理系统 一、问题描述: 现有学生成绩信息文件1(1。txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 6
2、8 82 56 王露 04 56 45 77 陈东明 05 67 38 47 …。 .。 。。 。。 … 学生成绩信息文件2(2。txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 4
3、7 58 77 …。 试编写一管理系统,要求如下: 1) 实现对两个文件数据进行合并,生成新文件3。txt 2) 抽取出三科成绩中有补考的学生并保存在一个新文件4。txt 3) 对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现) 4) 输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现) 5) 要求使用结构体,链或数组等实现上述要求。 二、功能要求: 1、实现对两个文件数据进行合并,生成新文件3。txt。 2、本系统显示这样的菜单: 请选择系统功能项: 0.退出 1.显示学生信息 2.显示按学号排
4、序后的学生信息 3。显示按总分排序后的学生信息 4。按学号查学生各科分数和总分 5。按姓名查学生各科分数和总分 6.抽取出三科成绩中有补考的学生并保存 三、算法提示: 1、 数据结构:结构体类型数组 2、 数据库结构:下表构成该系统的基本数据库。 姓名 学号 语文 数学 英语 Char int int int int 四、测试数据: 学生人数N=10 五、其它: 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能. 目录 第一章 绪论 第一节 课程背景 第二节 本文所做工作 第二章 需求分析 第三章 总体设计 第四章 详细
5、设计 第五章 测试 第六章 使用说明 第七章 总结 附录A 源代码 附录B 参考资料 第一章绪论 学生成绩管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生成绩管理系统应该能够为用户提供充足的信息和快捷的查询手段。 学生档案管理系统是典型的信息管理系统(MIS),经过分析如此情况,我们用code#blocks开发工具,利用其提供的各种面向对象的开发工具和功能强大的SQL(结构化查询语言)。 第一节 课程背景 在我国,各大中小学校的各类信息管理系统并非一个新的课题,但也有的学校根本就没有信息任何管理系统,所有的工作几乎还是手工操
6、作来完成。计算机技术在日新月异的发展,但是有的很多学校,特别是在西部贫困地区,学校的种类管理都依然由手工操作来完成,这十分落后,效率极低,成本很大,而且极异出错。随着社会的发展,信息化是社会进程的必然趋势,学校管理只有只有快,准,精才能发挥其价值. 所以机器代替人力是必然的历史发展趋势,只有领导的重视和支持才能从人工操作改为计算机的自动化系统.人工操作必将被计算机代替. 有些学校虽使用了计算机,甚至管理系统,但是仍然存在很多问题,问题一日不解决,效率就一日提不上去。 第二节 本文所做工作 本系统是将现代化的计算机技术和传统的教学、教务工作相结合,按照学院的工作流程设计完成的。为了使系统
7、在学院的管理中发挥更大的作用,实现工作过程的计算机化,提高工作效率和工作质量,现提出如下的系统开发目标: (1)系统管理员进入学生成绩管理系统学生档案管理的主要功能是:实现添加学生的基本信息、修改学生的基本信息、查询学生的基本信息、删除学生的基本信息等基本功能。 (2)系统管理员进入学生成绩管理系统学生成绩管理的主要功能是:实现学生成绩的录入、学生成绩的修改与保存等基本功能. (3)系统管理员进行学生成绩管理系统查询与统计的主要功能是:实现根据某个学生的基本信息查询他的成绩,还可以根据学生成绩的高低进行排序等基本功能。 1。1 编写目的 本需求的编写目的在于研究学生成绩管理系统软件的开
8、发途径和应用方法。 1。2 背景及范围 本项目的名称:学生成绩管理系统。 本软件基本上能具体化、合理化的管理学生的学籍档案,用结构化的思维方式去了解计算机的基本工作原理和高级程序设计语言。 1.3 功能 主要功能:学生成绩录入、学生信息和成绩修改、查询成绩。 第二章 系统需求分析 可以使用户录入学生信息,并在系统中显示出来,还能对录入的信息进行保存,当需要时还可以对信息进行修改和删除,还能分别用学号、姓名、性别、年龄对学生信息进行查询,用户进入系统需要输入密码。 第三章 总体设计 struct student:一个结构体类型,他能存放姓名、学号、语文、数学、
9、英语等成绩等不同类型数据组成的组合型的数据结构。 void main():主函数。 FILE * fp:定义一个指向文件的指针变量fp。 fp=fopen(”学生成绩”,”w +"):将fopen函数的返回值赋给指针变量fp,或者说,fp指向了学生信息这个文件.如果文件不存在,则建立一个新的文本文件。 Fscanf,fprintf:用格式化的方式读写文件。 Strcmp:字符串比较函数。 Strcpy:字符串复制函数。 程序中还用到当型循环、swith分支语句、if语句等. system(”cls");:清屏函数,使界面更简洁. 第四章 系统调试 系统主界面 显示学生
10、信息 显示按学号排序后的学生信息(按升序) 显示按总分排序后的学生信息 按学号查学生各科分数和总分 按姓名查学生各科分数和总分 抽取出三科成绩中有补考的学生并保存 第五章 使用说明 利用结构体函数类型,使函数显得没那么繁琐,利用文件指针,输入的信息将保存在文件中,以便下次查询和修改,使用“w+”方式读写文件,当指定那个文件不存在时,将建立一个文件,不会出现出错信息。利用fscanf和fprintf实现对文件的读写.不足之处:录入的信息没能保存,每次便已运行需要重新输入数据,对所学的东西没有合理结合。 第七章 总结 当刚开始听到要课程设计时,心里有点怕怕的,因为毕竟刚接触c语
11、言,虽说也学到了一些皮毛,但当听到要自己去编写程序时,才发现自己不会的不懂的还多着呢,要编写一个程序还是有一些困难的,当真的让我去编写程序时,真的是有点怕怕的感觉.刚入学时,听到要学习c语言时,我是非常的感兴趣,也非常高兴,因为那游戏、软件都要用c语言来实现,我想探究一下那到底是怎么实现的,能达到那样的效果,所以刚开始我很有激情,每节课我都认真听讲,虽然刚开始听起来有点困难,但是我相信功夫不负有心人,我知道课堂上的知识是不够的,所以我利用课下时间,积极搜寻与之相关的信息,去图书馆借阅相关资料和习题,来增长自己的知识。 当程序写完了,我终于可以松口气了,经过一个思考,查资料,写源程序,上机调试
12、现在终于告一段落了.看到自己的劳动成果,心中不免有些惊喜,没想到自己还能独立完成初次的课程设计,虽然不敢说这个程序都是我一个人写的,但其中大部分都是我的成果,另外我还参考了别人的意见,对自己的程序进行修改和完善. 这种课程设计对我们是非常有好处的,对C这门程序语言的掌握却有非常大的作用。从开始对题目的分析,就注定摆在我这样一个对C了解不多的新手面前的是一段艰难的旅程.但最终很庆幸的是我居然能够坚持下来,而且完成了设计工作。 C语言是很难学的,这也许是因人而异,但对我来说确实是一个障碍。如今要自己完成一个课程设计,无疑是对自己的一个挑战。先是上网查找有关的资料,分析题目所需的数据,要用到哪
13、些函数等等,星期二上网初步调试,将函数用些结构和语句连接起来,做这个工作时,又将书本翻阅了一遍,重新获得许多东西。如带参函数的特点,以及一些语句的运用及特点等等。将工作分配到每块是我完成这个设计的主要方法,然而将每块都完成看起来比较轻松,但实际操作起来却是比较麻烦的。由于平时对C知识的积累较为匮乏,(这可能是最主要的原因了),所以操作起来真是寸步难行,没办法,只有拿出课本找到相应的知识点,临阵磨枪。费了一番功夫,再上机调试时就是最痛苦的时候了,错误一大堆,要一个一个的修改.经过几翻调试修改之后终于可以执行了,那时还兴奋了好长时间呢!然而执行出来的结果是不令人满意的,界面不美观不说,最重要的是输
14、入太烦琐,而且受到的限制太多,如只能以某种方式输入,且个数受限制.于是又发费了大量时间去修改,终于比较满意了,但也到了星期五了,也就是答辩的时间.答辩的时候我才发现还有好多知识是我不会的,老师问了我一些问题,我回答出来的却不多,我体会到我还要很努力的学习,在C的学习上我还有很长的一段路要走.今天不管怎样把这个设计作出来是件很高兴的事情,不过能够把这个设计顺利完成要归功于我的指导老师,帮了我很多忙,也让我发现了我有好多欠缺的地方,真的很感谢你们,谢谢! 不管怎么说,我还是完成了这个设计。虽说累了点,但我想这对我们进一步掌握C,并为下学期的C二级考试是有很大的帮助的。能够编出程序,其实本身就是对
15、自己的一种肯定,是对自己前面一段时间学习C综合水平的一个检阅.当然完成后的兴喜,只有经历过了才能体会到,而我体会到了。 C语言课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。 从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际
16、相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。 这次课程设计我最要感谢的就是我们的几位指导老师,老师们每天都不辞劳苦为我们服务,不管我们有什么问题,他们都耐心的为我们解答,我们有什么错误他们都积极给我们指正出来,虽然有时也批评一下
17、但这对我们是有很大帮助的,有这么多优秀的指导老师,我想我以后的学习会更上一层楼.
附录A 源代码
# include
18、 int sum; }Node; Node student[1000]; int n; char text[50]; int cmp(const void *a, const void *b) { return (*(Node *)b).sum 〉 (*(Node *)a)。sum?1:—1; } int cmpnum(const void *a, const void *b) { return (*(Node *)a)。num > (*(Node *)b)。num?1:—1; } void showstudent() { int
19、 i; printf(” \t姓名\t学号\t语文\t数学\t英语\t总分\n”); for(i=0;i〈n;i++) { printf("\t%s\t%d\t%d\t%d\t%d\t%d\n”,student[i]。name,student[i]。num,student[i]。Chinese,student[i].Math,student[i].English,student[i]。sum); } getch(); menu(); } void sortnum() { int i,j,k; char a[55]; for(i=
20、0;i〈n;i++)
{
for(j=0;j
21、 student[j]。Math=student[j+1]。Math; student[j+1]。Math=k; k=student[j].English; student[j].English=student[j+1]。English; student[j+1]。English=k; k=student[j]。sum; student[j]。sum=student[j+1]。sum; student[j+1]。sum=k; strcpy(a,student[j].name); strcpy(
22、student[j].name,student[j+1]。name); strcpy(student[j+1]。name,a); } } } showstudent(); getch(); menu(); } void sortsum() { qsort(student, n, sizeof(Node), cmp); showstudent(); getch(); menu(); } void searchnum(int number) { int min = 0, max = n
23、1, mid; bool escape = false; qsort(student, n, sizeof(Node), cmpnum); while(min 〈= max) { mid = (min + max) / 2; if(student[mid].num 〉 number) { max = mid — eps; } else if(student[mid]。num 〈 number) {
24、 min = mid + eps; } else { escape = true; printf("\t姓名\t学号\t语文\t数学\t英语\t总分\n”); printf("\t%s\t%d\t%d\t%d\t%d\t%d\n”, student[mid]。name, student[mid]。num, student[mid]。Chinese, student[mid]。Math, student[mid]。English, student[mid]。sum
25、 break; } } if(!escape) { printf(”\t查无此人”); } getch(); menu(); } void searchname() { int i; for(i=0;i〈n;i++) { if(strcmp(text,student[i].name)==0) { printf(”\t姓名\t学号\t语文\t数学\t英语\t总分\n”); printf(”\t%s\t%d\t
26、d\t%d\t%d\t%d\n”, student[i]。name, student[i]。num, student[i]。Chinese, student[i].Math, student[i].English, student[i].sum); break; } } if(i〉=n) { printf(”\t查无此人\n”); } getch(); menu(); } void save() { FILE *fp; fp=fopen("4。txt",”w"); int i; fprintf(fp, ”\t
27、姓名\t学号\t语文\t数学\t英语\t总分\n”); for(i=0;i〈n;i++) { if(student[i].Chinese〈60||student[i].Math〈60||student[i].English<60) { printf(”\t%s\t%d\t%d\t%d\t%d\n”,student[i].name,student[i]。num,student[i]。Chinese,student[i]。Math,student[i]。English); fprintf(fp,"\t%s\t%d\t%d\t%d\t%d\n",studen
28、t[i]。name,student[i]。num,student[i]。Chinese,student[i]。Math,student[i].English); } } printf(”\n"); printf(”┏━━━━┓\n"); printf("┃保存成功┃\n”); printf(”┗━━━━┛\n”); getch(); menu(); } void menu() { int choice; system(”cls”); printf(” 菜单\n”)
29、 printf(”┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n”); printf(”┃ 0。退出 ┃\n”); printf("┃ 1.显示学生信息 ┃\n"); printf(”┃ 2。显示按学号排序后的学生信息 ┃\n”); printf(”┃
30、 3。显示按总分排序后的学生信息 ┃\n”); printf(”┃ 4。按学号查学生各科分数和总分 ┃\n”); printf(”┃ 5。按姓名查学生各科分数和总分 ┃\n"); printf("┃ 6。抽取出三科成绩中有补考的学生并保存 ┃\n"); printf(”┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n”); p
31、rintf(" 选择代码(0,1,2,3,4,5,6): ”); scanf("%d”, &choice); switch(choice) { case 0: { system("cls”); printf("谢谢使用!\n”); exit(0); } case 1: { system(”cls"); show
32、student(); } case 2: { system("cls"); sortnum(); } case 3: { system("cls"); sortsum(); } case 4: { system("cls”); int num; print
33、f(”\t请输入要查找学生的学号:”); scanf(”%d", &num); searchnum(num); } case 5: { system("cls"); printf(”\t请输入要查找学生的姓名:"); scanf("%s”, text); searchname(); } case 6: { s
34、ystem("cls"); save(); } } } int main() { n = 0; FILE * fp; fp=fopen("1。txt”,”r+”); { while(fscanf(fp, "%s %d %d %d %d”, student[n]。name, &student[n]。num, &student[n].Chinese, &student[n].Math, &student[n]。English)!=EOF) {
35、 student[n]。sum = 0; student[n]。sum += student[n]。Chinese; student[n]。sum += student[n].Math; student[n].sum += student[n]。English; n++; } fclose(fp); } fp=fopen("2。txt”,"r+”); { while(fscanf(fp, "%s %d %d
36、d %d", student[n]。name, &student[n]。num, &student[n]。Chinese, &student[n].Math, &student[n].English)!=EOF) { student[n].sum = 0; student[n]。sum += student[n].Chinese; student[n]。sum += student[n].Math; student[n]。sum += student[n]。English; n++; } fclose(fp); } menu(); return 0; } 附录B 参考资料 《C程序设计(第三版)》 谭浩强主编 清华大学出版社 《C语言常用函数速查手册》 陈 超主编 化学工业出版社 《C语言程序设计实用教程》 曹 岩、刘 佳主编 西北工业大学出版社 《算法竞赛入门》 刘汝佳主编 清华大学出版社 18
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818