1、学生成绩信息管理系统讲解滁州学院课程设计报告课程名称: 数据结构 设计题目: 学生成绩信息管理系统 系 别: 计算机科学与技术 专 业: 计算机科学与技术 组 别: 第四组 起止日期: 11年5 月 20日 11年 6 月20 日 指导教师: 杨 斌 总体要求: 格式很不符合要求,请参照模板计算机科学与技术系二0一一年制“图(二)、降序排列成绩图”不要放在目录里,整体字体不对,。,请按第三组的格式认真修改和模板的格式认真修改!一、引言1.1、课程简介当今社会,计算机技术和通信技术已经不断发展,处理和传输的数据量越来越庞大。文本文件存储的方式是普通人熟悉的数据管理的方式,我们要做的就是在文本中读
2、取数据,在程序中处理数据,生成新的数据再保留在文本文档中,供其他人应用。1.2、课程设计的背景课程设计是为了让同学们了解学习数据结构的作用和意义。数据结构是计算机科学与技术专业的专业基础课。所有的计算机系统软件和应用软件都要用到各种类型的数据结构。因此,想要更好地运用计算机来解决实际问题,仅仅掌握几门计算机程序设计语言是远远难以应付当前众多复杂的课题,想要有效地使用计算机,充分发挥它的性能,还必须学习和掌握好数据结构的有关知识,打好数据结构这门课的基础,对于学习计算机专业其它的课程,如操作系统、软件工程、编译原理、数据库、人工智能等十分有益。1.3、课程设计的内容:1.3.1、题目学生成绩管理
3、系统 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),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82李华明 32 88 90 68张明东 33 48 42 56李明国 34 50 45 87陈道亮 35 47 58 77. . . .(文件内容可根据测试要求,自行制定)试编写一个管理系统,要求如下:1)、实现对两个文件数据进行合并,生
4、成新文件3.txt2)、抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3)、对合并后的文件3.txt中的数据按总分降序排序(至少采用两种排序方法实现)4)、输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)5)、要求使用结构体,链或数组等实现上述要求.采用多种方法且算法正确者,可适当加分.1.3.3、该功能的描述1)、对学生的姓名、学号和各科成绩的录入;2)、基本信息的查询;3)、对每位同学的成绩进行分析,并对成绩进行降序排序;二、需求分析2.1、课程设计的题目 对学生成绩的管理。2.2、课程设计任务 设计一个程序实现对学生成绩的分析并进行降序处理。2.3
5、、课程设计要求 要求使用结构体,链表或数组等实现学生成绩的查询、分类和降序排序。2.4、课程设计思想 利用文件对学生成绩等基本信息进行保存,并将其中的两文件合并成一个,生成新的文件;学生成绩的分析,将应补考的同学的基本信息保存在另一个文件中;利用合并进行降序。2.5、软硬件运行环境Microsoft Windows XP 版本2002 Service Pack 3或以上版本Microsoft Windows 7 旗舰版2.6、开发工具 Microsoft Visual C+6.0三、概要设计3.1、课程设计图结束图(一)、分工图3.2、课程设计中的数据结构typedef struct data
6、 char name10; int Xhao; int china; int math; int english; int sum;Data;3.3、完成本课程设计所用的方法及原理利用文件对学生成绩等基本信息进行保存,并将其中的两文件合并成一个,生成新的文件;对学生成绩的分析,将应补考的同学的基本信息保存在另一个文件中;利用合并进行降序。四、详细设计4.1、程序源代码#include#include#include/为了输入字符串#includetypedef struct data【1】 char name10; int Xhao; int china; int math; int engl
7、ish; int sum;Data;int k;/void create(Data stu) int 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,&st
8、ui.math,&stui.english); stui.sum=stui.china+stui.math+stui.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 %
9、d %d %d n,stuj.Xhao,stuj.name,stuj.china,stuj.math,stuj.english,stuj.sum); 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;stu
10、max=stui;stui=t; for(int j=0;jk;j+) fprintf(fp3,%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); /2、直接插入排序void hebing2(Data stu) int t,i; Data temp; FILE *fp5; if(fp5=fop
11、en(E:c语言课程设计作业t5.txt,w)=NULL) printf(FILE not found!n); exit(0); for(i=2;i stu0) stut+1=stut; t=t-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.mat
12、h,stuj.english,stuj.sum); /void bukao(Data stu) FILE *fp4; if(fp4=fopen(E:c语言课程设计作业t4.txt,w)=NULL) printf(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,语文不及格:);
13、printf(%sn,语文不及格:); if(stui.math60) fprintf(fp4,%d-%s-%d ,stui.Xhao,stui.name,stui.math); printf(%d-%s-%d ,stui.Xhao,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,stu
14、i.english); fprintf(fp4,%sn,英语不及格:); printf(%sn,英语不及格:); /void search(Data stu) int j,flag=0; char name10; printf(输入一个学生的姓名:n); 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,
15、stui.sum); if(flag=0) coutnot foundendl; /void prf() cout#*#endl; cout #*输入“1”,降序排列成绩*结果见文本文件t3*#endl; cout #*输入“2”,升序排列成绩*结果见文本文件t5*#endl; cout #*输入“3”,补考信息*结果见文本文件t4*#endl; cout #*输入“4”,查找学生信息*#endl; cout #*输入“0”,结束服务*#endl;void main() int j=1; char ch; Data stu20; Data A20; prf(); cout请输入要执行的步骤(以
16、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; hebing(stu); break; case2: cout升序排列endl; hebing2(A); break; case3: cout补考信息endl; bukao(stu); break; case4: printf(查找信息); search(stu); break; c
17、out请输入要执行的步骤(以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 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
18、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 82 22732 李华明 88 90 68 2462 李成友 78 91 88 257图(三)、成绩的升序排列5.1.3、不及格成绩学生的信息:31-陈果-57 语文不及格:3-张辉灿-56 英语不及格:34-李明国-50 语文不及格:34-李明国
19、-45 数学不及格:35-陈道亮-47 语文不及格:35-陈道亮-58 数学不及格:4-王露-56 语文不及格:4-王露-45 数学不及格:5-陈东明-38 数学不及格:5-陈东明-47 英语不及格:33-张明东-48 语文不及格:33-张明东-42 数学不及格:33-张明东-56 英语不及格:图(三)、不及格学生信息5.1.4、查找某个学生的成绩:图(五)、查找信息5.1.5、课件的价值通过对代码的调试,可以成功的实现要求的功能,可以对需求的信息生成文本文档,便于操作者直接对学生成绩进行管理。可直观的看出学生的优越性和差距。5.1.6、参考文献何钦明。C语言程序设计。北京。高等教育出版社。2
20、010/7版。胡学刚。数据结构(C语言版)。北京。高等教育出版社。2010/12版。六、课程设计总结与体会在课程设计中,我们组的成员分工合作。他们每个人遇到过不同程度的问题都会想着去解决去实现,当一个人解决不了的时候,团队的优越性就体现出来了。我们一起探讨,研究终于完成了这次的课程设计,虽然这只是一个小的程序,没有牵涉到什么外围的人力和物理资源。但是我们能够了解做课程设计的精髓,为以后的学术报告做好铺垫。七、组员总结见附表。学生管理系统总结-第十组组长:孙大成时间过得很快,一个学期又过去了。在期末,按照老师的要求,我们一组四个人设计了一个学生管理系统。借此来考察我们的学习成绩。在设计的过程中,
21、我编写的是将文件中的数据读取到数组中,然后对数据进行总分的直接排序算法。每个人都很认真的完成自己的那一份任务,但我遇到困难时,他们也会义无反顾的来帮助我。比如,在实现排序的过程时我不知道怎样来利用三门功课的成绩来判断学生层次问题,他们想到用数组中加入成绩总分的方式来比较。这样比较直接也很方便。我采纳了他们的意见,问题很快就迎刃而解了。编辑的过程中还有一个问题,就是当从文件中读取数据的时候读到最后一行后还要继续读取下一行,计数变量就多了一个。所以我的调试总是有问题,经过我多次断点调试之后终于发现问题的所在,我成功的靠着自己的努力解决了这一难题。和他们的交流的时光很美好,这次的团队编程让我了解到了
22、什么是团队合作,集体的智慧是个人无法达到的,而且集体的交流中充满着各种各样的乐趣,让看似有些沉闷的程序变得很有乐趣。这就是我的收获。课程设计总结与心得-第十组组员:陈凤霞这次我们小组所抽到的题目是有关学生成绩信息管理系统的安排,原以为课程设计不怎么好做,但是很幸运的是也不是太难,经过本小组成员在一起商量后,给各成员均分配了相应的合适的任务,而我的任务是将数组中的成绩进行合并后输出,也就是整个原程序中的学生信息系统的创建。这个部分的程序首先是读出文件一和文件二,两个文件中所显示的内容则是学生姓名、学号以及语文、数学和英语的成绩。在编写时出现了以下几种情况:第一,其中“fp1=fopen(E:c语
23、言课程设计作业t1.txt,r)”的意思就是打开文本文件一进行只读,同理下面的也是一样。程序的一开始利用两个if语句来判断文件是否存在,记得一开始在用“记事本”程序编辑文件时忘了进行保存,导致了磁盘上不能产生记事本数据文件,由于此为读文件,所以指定的文件必须存在,否则就出错,而这两个if语句则加强了程序的健壮性。第二,在while循环中,一开始不知循环条件该怎么写,后看了c语言文件的那章内容,知道这里应该利用文件结尾函数feof( )。第三,程序中调用fscanf( )函数将文件中的数据读入到变量name、xhao、china、math和english中,并通过printf( )函数把结果输出
24、到屏幕。由于在一开始的编写过程中,不太熟悉文件,所以在调用fscanf( )函数时却写成了scanf( )函数,导致程序也无法正常运行。第四,此问题是花时间最长的一个,也是相对不易想通的一个难题。在while循环后,程序添加了i-,这是由于在一开始编写完后与其他程序组合在一起,运行时发现后产生一连串的乱码,然后与其他成员一起研究发现在第一个while循环中,由于i+的存在,导致了i直接到了6,而第二个while循环中的i则要从5开始进行循环,所以加一个i-,使得了6减1后得到想要的5,而后再运行时,则一切均正常。虽说本小组的题目不算太难,但其中遇到了不少的困难,也出现不少的错误。通过这次的课程
25、设计,学到了不少的东西和处事能力。本来不了解文件的具体内容,由于这次的课程设计特地将其搞懂了。遇到一些不懂得地方学会去图书馆和上网进行查找。是在一人无法解决时,小组成员会在一起进行讨论,例如上述中所述说的第四个难题,就是四个人在一起解决的。不仅如此,这次的课程设计使得我们的编程能力得到有利的提高。当然最重要的是使我们认识到团结的重要性,每个成员负责不同的部分,而每一个部分都是不可缺少的,如果我们小组不够团结的话,这个程序也不可能能够成功的编写出来。在最后,则要郑重感谢老师能给我们这个机会,去学习一些不知道的知识,去学会与他人合作等等,我相信我们这个小组能够取得一个好的成绩。课程设计心得 -第十组成员:陈士光本次我们小组课程设计的题目是,生成一个对学生成绩的管理系统。首先,实现对两个文件数据进行合并,生成新文件3.txt。然后,抽取出三科成绩中有补考的学生并保存在一个新文件4.txt。再对合并后的
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1