1、滁州学院课程设计报告课程名称: 数据结构 设计题目: 学生成绩信息管理系统 系 别: 计算机科学与技术 专 业: 计算机科学与技术 组 别: 第十四组 起止日期: 11年5 月 20日 11年 6 月20 日 指导教师: 杨 斌 总体要求: 格式很不符合要求,请参照模板计算机科学与技术系二0一一年制课程设计题目学生成绩信息管理系统组长孙大成学号2010211119班级计科(1)班系别计算机科学与技术系专业计算机科学与技术组员陈凤霞 高 山 陈士光 指导教师杨 斌课程设计目的设计一个对学生成绩进行管理的程序课程设计所需环境Microsoft Visual C+6.0课程设计任务要求从文本中得到数
2、据、处理数据、存储数据课程设计工作进度计划序号起止日期工 作 内 容分工情况5/20安排所每个人的工作内容孙大成5/21将文件中数据调到数组中,对数组中的成绩进行合并后输出陈凤霞5/22排序算法的实现选择排序陈士光5/23直接排序算法的实现孙大成5/24查找算法的实现,把不合格的学生信息放到文本文件高山5/25所有组员一起对综合的文件提建议后修改孙大成、高山、陈凤霞、陈世光指导教师签字: 年 月 日教研室审核意见:教研室主任签字: 年 月 日目 录一、引言11.1、课程简介11.2、课程设计的背景11.3、课程设计的内容:11.3.1、题目11.3.2、要求11.3.3、该功能的描述3二、需求
3、分析32.1、课程设计的题目32.2、课程设计任务32.3、课程设计要求32.4、课程设计思想32.5、软硬件运行环境42.6、开发工具4三、概要设计43.1、课程设计图43.2、课程设计中的数据结构53.3、完成本课程设计所用的方法及原理6四、详细设计64.1、程序源代码6五、调试及操作说明175.1、成绩的合并后输出17图(二)、降序排列成绩175.1.1、成绩的降序输出175.1.2、成绩的升序输出185.1.3、不及格成绩学生的信息:195.1.4、查找某个学生的成绩:205.1.5、课件的价值205.1.6、参考文献20六、课程设计总结与体会21七、组员总结21“图(二)、降序排列成
4、绩图”不要放在目录里,整体字体不对,。,请按第三组的格式认真修改和模板的格式认真修改!27一、引言1.1、课程简介当今社会,计算机技术和通信技术已经不断发展,处理和传输的数据量越来越庞大。文本文件存储的方式是普通人熟悉的数据管理的方式,我们要做的就是在文本中读取数据,在程序中处理数据,生成新的数据再保留在文本文档中,供其他人应用。1.2、课程设计的背景课程设计是为了让同学们了解学习数据结构的作用和意义。数据结构是计算机科学与技术专业的专业基础课。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,想要更好地运用计算机来解决实际问题,仅仅掌握几门计算机程序设计语言是远远难以应付当前众
5、多复杂的课题,想要有效地使用计算机,充分发挥它的性能,还必须学习和掌握好数据结构的有关知识,打好数据结构这门课的基础,对于学习计算机专业其它的课程,如操作系统、软件工程、编译原理、数据库、人工智能等十分有益。1.3、课程设计的内容:1.3.1、题目学生成绩管理系统 1.3.2、要求现有学生成绩信息文件1(1.txt),内容如下姓名 学号 语文 数学 英语 张明明 01 67 78 82李成友 02 78 91 88张辉灿 03 68 82 56王露 04 56 45 77陈东明 05 67 38 47. . . . 学生成绩信息文件2(2.txt),内容如下:姓名 学号 语文 数学 英语 陈果
6、 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77. . . .(文件内容可根据测试要求,自行制定)试编写一个管理系统,要求如下:1)、实现对两个文件数据进行合并,生成新文件3.txt2)、抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)、对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)4)、输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)、要求使用结构体,链或数组等实现上述要求.采用多种方法且算法正确者,可适当加分.1.3.3、
7、该功能的描述1)、对学生的姓名、学号和各科成绩的录入;2)、基本信息的查询;3)、对每位同学的成绩进行分析,并对成绩进行降序排序;二、需求分析2.1、课程设计的题目 对学生成绩的管理。2.2、课程设计任务 设计一个程序实现对学生成绩的分析并进行降序处理。2.3、课程设计要求 要求使用结构体,链表或数组等实现学生成绩的查询、分类和降序排序。2.4、课程设计思想 利用文件对学生成绩等基本信息进行保存,并将其中的两文件合并成一个,生成新的文件;学生成绩的分析,将应补考的同学的基本信息保存在另一个文件中;利用合并进行降序。2.5、软硬件运行环境Microsoft Windows XP 版本2002 S
8、ervice Pack 3或以上版本Microsoft Windows 7 旗舰版2.6、开发工具 Microsoft Visual C+6.0三、概要设计3.1、课程设计图课程设计中算法的函数模块学生信息的建立void create(Data stu)一些学生的信息的排序(合并排序)void hebing(Data stu)/hebing paixu补考同学信息的合并void bukao(Data stu)主函数的建立void main()结束图(一)、分工图3.2、课程设计中的数据结构typedef struct datachar name10;intXhao;int china;int
9、math;int english;int sum;Data;3.3、完成本课程设计所用的方法及原理利用文件对学生成绩等基本信息进行保存,并将其中的两文件合并成一个,生成新的文件;对学生成绩的分析,将应补考的同学的基本信息保存在另一个文件中;利用合并进行降序。四、详细设计4.1、程序源代码#include#include#include/为了输入字符串#includetypedef struct data【1】char name10;intXhao;int china;int math;int english;int sum;Data;int k;/void create(Data stu)in
10、t i=0;【1】FILE *fp1,*fp2;if(fp1=fopen(E:c语言课程设计作业t1.txt,r)=NULL)printf(FILE not found!n);exit(0);if(fp2=fopen(E:c语言课程设计作业t2.txt,r)=NULL)printf(FILE not found!n);exit(0);while(!feof(fp1)fscanf(fp1,%s%d%d%d%d,stui.name,&stui.Xhao,&stui.china,&stui.math,&stui.english);stui.sum=stui.china+stui.math+stui.
11、english;i+;i-;while(!feof(fp2)fscanf(fp2,%s%d%d%d%d,stui.name,&stui.Xhao,&stui.china,&stui.math,&stui.english);stui.sum=stui.china+stui.math+stui.english;i+;i-;k=i;printf(学号 姓名 语文 数学 英语 总分n);for(int j=0;ji;j+)printf(%d %-5s %d %d %d %d n,stuj.Xhao,stuj.name,stuj.china,stuj.math,stuj.english,stuj.sum
12、);coutendl;/1、选择排序void hebing(Data stu)int max,jj,i;Data t;FILE *fp3;if(fp3=fopen(E:c语言课程设计作业t3.txt,w)=NULL)printf(FILE not found!n);exit(0);for(jj=0;jjk;jj+)max=jj;for(i=jj+1;ik;i+)if(stumax.sumstui.sum)t=stumax;stumax=stui;stui=t;for(int j=0;jk;j+)fprintf(fp3,%d %-5s %d %d %d %dn,stuj.Xhao,stuj.na
13、me,stuj.china,stuj.math,stuj.english,stuj.sum);printf(%d %-5s %d %d %d %dn,stuj.Xhao,stuj.name,stuj.china,stuj.math,stuj.english,stuj.sum);/2、直接插入排序void hebing2(Data stu)int t,i;Data temp;FILE *fp5;if(fp5=fopen(E:c语言课程设计作业t5.txt,w)=NULL)printf(FILE not found!n);exit(0);for(i=2;i stu0)stut+1=stut;t=t
14、-1;stut+1= stu0;for(int j=1;j=k;j+)fprintf(fp5,%d %-5s %d %d %d %dn,stuj.Xhao,stuj.name,stuj.china,stuj.math,stuj.english,stuj.sum);printf(%d %-5s %d %d %d %dn,stuj.Xhao,stuj.name,stuj.china,stuj.math,stuj.english,stuj.sum);/void bukao(Data stu)FILE *fp4;if(fp4=fopen(E:c语言课程设计作业t4.txt,w)=NULL)printf
15、(FILE not found!n);exit(0);for(int i=0;ik;i+)if(stui.china60)fprintf(fp4,%d-%s-%d ,stui.Xhao,stui.name,stui.china);printf(%d-%s-%d ,stui.Xhao,stui.name,stui.china);fprintf(fp4,%sn,语文不及格:);printf(%sn,语文不及格:);if(stui.math60)fprintf(fp4,%d-%s-%d ,stui.Xhao,stui.name,stui.math);printf(%d-%s-%d ,stui.Xha
16、o,stui.name,stui.math);fprintf(fp4,%sn,数学不及格:);printf(%sn,数学不及格:);if(stui.english60)fprintf(fp4,%d-%s-%d ,stui.Xhao,stui.name,stui.english);printf(%d-%s-%d ,stui.Xhao,stui.name,stui.english);fprintf(fp4,%sn,英语不及格:);printf(%sn,英语不及格:);/void search(Data stu)int j,flag=0;char name10;printf(输入一个学生的姓名:n)
17、;scanf(%s,name);fflush(stdin);for(int i=0;ik;i+)j=strcmp(name,stui.name);if(j=0)flag=1;printf(%d-%s-%d-%d-%d-%dn,stui.Xhao,stui.name,stui.china,stui.math,stui.english,stui.sum);if(flag=0)coutnot foundendl;/void prf()cout#*#endl;cout #*输入“1”,降序排列成绩*结果见文本文件t3*#endl;cout #*输入“2”,升序排列成绩*结果见文本文件t5*#endl;
18、cout #*输入“3”,补考信息*结果见文本文件t4*#endl;cout #*输入“4”,查找学生信息*#endl;cout #*输入“0”,结束服务*#endl;void main()int j=1;char ch;Data stu20;Data A20;prf();cout请输入要执行的步骤(以1,2,3,4,5,0 ):endl;scanf(%c,&ch);fflush(stdin);create(stu);for(int i=0;ik;i+,j+)/构建哨兵数组【2】,实现直接插入排序Aj=stui;while(ch!=0)switch(ch)case1:cout降序排列endl;
19、hebing(stu);break;case2:cout升序排列endl;hebing2(A);break;case3:cout补考信息endl;bukao(stu);break;case4:printf(查找信息);search(stu);break;cout请输入要执行的步骤(以1,2,3,4,0 ):endl;ch=getchar();fflush(stdin);五、调试及操作说明5.1、成绩的合并后输出图(二)、降序排列成绩5.1.1、成绩的降序输出学号 姓名 语文 数学 英语 总分2 李成友 78 91 88 25732 李华明 88 90 68 2461 张明明 67 78 82
20、22731 陈果 57 68 82 2073 张辉灿 68 82 56 20634 李明国 50 45 87 18235 陈道亮 47 58 77 1824 王露 56 45 77 1785 陈东明 67 38 47 15233 张明东 48 42 56 1465.1.2、成绩的升序输出学号 姓名 语文 数学 英语 总分33 张明东 48 42 56 1465 陈东明 67 38 47 1524 王露 56 45 77 17834 李明国 50 45 87 18235 陈道亮 47 58 77 1823 张辉灿 68 82 56 20631 陈果 57 68 82 2071 张明明 67 78
21、 82 22732 李华明 88 90 68 2462 李成友 78 91 88 257图(三)、成绩的升序排列5.1.3、不及格成绩学生的信息:31-陈果-57 语文不及格:3-张辉灿-56 英语不及格:34-李明国-50 语文不及格:34-李明国-45 数学不及格:35-陈道亮-47 语文不及格:35-陈道亮-58 数学不及格:4-王露-56 语文不及格:4-王露-45 数学不及格:5-陈东明-38 数学不及格:5-陈东明-47 英语不及格:33-张明东-48 语文不及格:33-张明东-42 数学不及格:33-张明东-56 英语不及格:图(三)、不及格学生信息5.1.4、查找某个学生的成绩
22、:图(五)、查找信息5.1.5、课件的价值通过对代码的调试,可以成功的实现要求的功能,可以对需求的信息生成文本文档,便于操作者直接对学生成绩进行管理。可直观的看出学生的优越性和差距。5.1.6、参考文献何钦明。C语言程序设计。北京。高等教育出版社。2010/7版。胡学刚。数据结构(C语言版)。北京。高等教育出版社。2010/12版。六、课程设计总结与体会在课程设计中,我们组的成员分工合作。他们每个人遇到过不同程度的问题都会想着去解决去实现,当一个人解决不了的时候,团队的优越性就体现出来了。我们一起探讨,研究终于完成了这次的课程设计,虽然这只是一个小的程序,没有牵涉到什么外围的人力和物理资源。但
23、是我们能够了解做课程设计的精髓,为以后的学术报告做好铺垫。七、组员总结见附表。学生管理系统总结-第十组组长:孙大成时间过得很快,一个学期又过去了。在期末,按照老师的要求,我们一组四个人设计了一个学生管理系统。借此来考察我们的学习成绩。在设计的过程中,我编写的是将文件中的数据读取到数组中,然后对数据进行总分的直接排序算法。每个人都很认真的完成自己的那一份任务,但我遇到困难时,他们也会义无反顾的来帮助我。比如,在实现排序的过程时我不知道怎样来利用三门功课的成绩来判断学生层次问题,他们想到用数组中加入成绩总分的方式来比较。这样比较直接也很方便。我采纳了他们的意见,问题很快就迎刃而解了。编辑的过程中还
24、有一个问题,就是当从文件中读取数据的时候读到最后一行后还要继续读取下一行,计数变量就多了一个。所以我的调试总是有问题,经过我多次断点调试之后终于发现问题的所在,我成功的靠着自己的努力解决了这一难题。和他们的交流的时光很美好,这次的团队编程让我了解到了什么是团队合作,集体的智慧是个人无法达到的,而且集体的交流中充满着各种各样的乐趣,让看似有些沉闷的程序变得很有乐趣。这就是我的收获。课程设计总结与心得-第十组组员:陈凤霞这次我们小组所抽到的题目是有关学生成绩信息管理系统的安排,原以为课程设计不怎么好做,但是很幸运的是也不是太难,经过本小组成员在一起商量后,给各成员均分配了相应的合适的任务,而我的任
25、务是将数组中的成绩进行合并后输出,也就是整个原程序中的学生信息系统的创建。这个部分的程序首先是读出文件一和文件二,两个文件中所显示的内容则是学生姓名、学号以及语文、数学和英语的成绩。在编写时出现了以下几种情况:第一,其中“fp1=fopen(E:c语言课程设计作业t1.txt,r)”的意思就是打开文本文件一进行只读,同理下面的也是一样。程序的一开始利用两个if语句来判断文件是否存在,记得一开始在用“记事本”程序编辑文件时忘了进行保存,导致了磁盘上不能产生记事本数据文件,由于此为读文件,所以指定的文件必须存在,否则就出错,而这两个if语句则加强了程序的健壮性。第二,在while循环中,一开始不知
26、循环条件该怎么写,后看了c语言文件的那章内容,知道这里应该利用文件结尾函数feof( )。第三,程序中调用fscanf( )函数将文件中的数据读入到变量name、xhao、china、math和english中,并通过printf( )函数把结果输出到屏幕。由于在一开始的编写过程中,不太熟悉文件,所以在调用fscanf( )函数时却写成了scanf( )函数,导致程序也无法正常运行。第四,此问题是花时间最长的一个,也是相对不易想通的一个难题。在while循环后,程序添加了i-,这是由于在一开始编写完后与其他程序组合在一起,运行时发现后产生一连串的乱码,然后与其他成员一起研究发现在第一个whil
27、e循环中,由于i+的存在,导致了i直接到了6,而第二个while循环中的i则要从5开始进行循环,所以加一个i-,使得了6减1后得到想要的5,而后再运行时,则一切均正常。虽说本小组的题目不算太难,但其中遇到了不少的困难,也出现不少的错误。通过这次的课程设计,学到了不少的东西和处事能力。本来不了解文件的具体内容,由于这次的课程设计特地将其搞懂了。遇到一些不懂得地方学会去图书馆和上网进行查找。是在一人无法解决时,小组成员会在一起进行讨论,例如上述中所述说的第四个难题,就是四个人在一起解决的。不仅如此,这次的课程设计使得我们的编程能力得到有利的提高。当然最重要的是使我们认识到团结的重要性,每个成员负责
28、不同的部分,而每一个部分都是不可缺少的,如果我们小组不够团结的话,这个程序也不可能能够成功的编写出来。在最后,则要郑重感谢老师能给我们这个机会,去学习一些不知道的知识,去学会与他人合作等等,我相信我们这个小组能够取得一个好的成绩。课程设计心得 -第十组成员:陈士光本次我们小组课程设计的题目是,生成一个对学生成绩的管理系统。首先,实现对两个文件数据进行合并,生成新文件3.txt。然后,抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。再对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)。最后,输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法
29、实现)。在本次课程设计中,我主要负责对合并后的文件3.txt中学生总成绩降序排序。我所采用的是选择排序。通过这次课程设计,使我收获了很多。由于本次课程设计有很多内容涉及到文件,在接到题目之后,我们请了赵瑞斌老师给我们上了一节关于文件的课,弥补了我们在这方面的缺陷。对于这次课程设计,我觉得,认真学习书本知识,充足的理论是编程的基础;其次,注意细节,熟练调试,及时发现错误是我们完成设计的关键。但是,最主要的,我觉得是团队合作。一个复杂的程序,也许对一个人来说,很庞大。需要花费大量的时间和精力去完成。但是,对于一个团队,当队长将其化成几小块,分配到小队成员后。就会变得轻松、简单,设计就能很快完成。一
30、个团队需要一个好的队长,善于分工。队员们相互配合,遇到问题,相互商讨,很快就能解决。这次课程设计,锻炼了我们的的合作意识。也锻炼了我们的个人能力,这些都是以后工作中需要的!课程设计心得-第十组成员:高山本小组的任务是做出学生成绩的管理系统。相对而言是较简单的一个。经过仔细的商讨后,小组成员基本分工完毕。我的任务主要是抽出三科成绩中补考补考的同学并保存在文件四中和输入一个同学的姓名后能够查找到此同学的信息并输出其结果的相关程序的编写及课程设计文档的部分编写。补考的程序主要是通过if语句的进行循环实现,较为简单。查找则是通过输入的姓名与文件中的姓名进行字符串比较,通过循环找到并输出相关信息。程序编
31、写主要问题:1:由于编写不正确,导致运行时的输出会出现乱码2:姓名字符的长度会影响后面成绩的输出(如图)程序的编写是最难的一块,几乎是要求完美的,因为即使一个标点,一个单词,一个赋值或者一个变量的错误,都会使程序无法正常运行。中间也的确遇到很多困难,程序代码较长,长时间高度集中精力,难免遇到很多细节问题。最后终于编写完成,并与其他成员的程序组合在一起,进入最后的调试阶段,调试时发现很多不正常的地方,刚开始也是令我们一筹莫展。经过长时间的与小组其他成员在一起进行分析与完善,最终我们完成了程序的编写。由我写了程序设计的总结报告,汇报了我们程序编码中很多不足的地方。尤其是第一次的团队合作,使我们获得
32、很多知识,增长很多经验。总结发现许多学识在讨论中记忆更深刻,只有经过激烈的辩论才会获得最确切的真理。通过这次课程设计,很好的锻炼了自己的c语言编程能力,养成良好的c语言编程风格。不管怎样,这些都是一种锻炼,一种知识的积累和能力的提高。完全可以把这个当作基础东西,只有掌握了这些最基础的,才可以更进一步,取得更好的成绩。很少有人会一步登天吧,永不言弃才是最重要的。设计中不止是小组成员的相互讨论,就可以解决一切问题的。必要时向老师请教也是很关键的,尤其面对毫无头绪的问题时,经验丰富的老师会给我们详细的讲解,以达到化问题为平路的目的。最后感谢老师给我们提供一次这么好的机会,使我们获得尝试合作解决实验设计的经验。只有在实践中才可以充分的成长。尤其对毕业以后的职业路上,有很大的帮助,毕竟把理论化为实践,不是一件很简单的事情。因为计划总会有漏洞的,实际操作中会遇到很多想象不到的问题,必须保持警惕的心理,做好随时陷入死局的准备。