资源描述
数据结构课程设计报告课题名称 学生成绩管理系统姓名学院系科班级指导老师日期2018年 1月 17日目录3学生成绩管理系统34现有学生成绩信息文件11.txt ),内容如下4姓名学号语文数学英语5张明明 0167788215李成友02789188张辉灿0368825625王露0456457735陈东明05673847 5.学生成绩信息文件2 实现对两个文件数据进行合并, 生成新文件 3.txt2 抽取出三科成绩中有补考的学生并保存在一个新文件4.txt3 对合并后的文件 3.txt 中的数据按总分降序排序 ( 至少采用两种排序方法实现 4 输入一个学生姓名后 , 能查找到此学生的信息并输出结果 ( 至少采用两种查找方法实现 5 要求使用结构体和数组实现上述要求.三、设计目的1)培养学生综合程序设计的能力,训练学生灵活应用所学数据结构知识,独立完成问题分析、总体设计、详细设计和编程实现等软件开发全过程的综合实践能力。2)巩固、深化学生的理论知识,提高编程水平,培养严谨的科学态度和良好的学习作风。为今后学习其他计算机课程打下基础。3)将书本上的理论知识和工作、生产实际有机地结合起来,从而锻炼学生分析问题、解决实际问题的能力,提高编程序能力和创新意识。四、概要设计3/16学生成绩管理系统读读取取文文件件12五、详细设计1)主要数据结构:struct studentchar name6 。int num 。long int chi。long int math。long int eng。long int sum。 。合把并补两考文的件放放在在文文件件43查找文件中的人信息退出2)模块功能:合并模板、提取模板、排序模板、查询模板、模块功能1、生成文件 3:实现对两个文件数据进行合并,生成新文件3.txt ;2、查看文件 3:显示文件 3 里的所有信息;3、生成文件补考文件 4:抽取出三科成绩中有补考的学生并保存在一个新文件 4.txt ;4、查看文件 4:显示文件 4 里的所有信息;5、排序后的文件 3:对合并后的文件 3.txt 中的数据按总分降序排序 冒泡、插入);4/166、查找学生信息:按姓名查找学生的信息并输出结果顺序、折半);3)调用关系主函数可调用其它函数六、源程序#include#includestruct studentchar name6。int num 。long int chi。long int math。long int eng。long int sum。 。structstudent stu1100,stu2100,stu3100,stu4100,t,tmp。FILE *fp。int i,j。void creat1(/对 1.txt的成绩进行读取 int i。for(i=1。ifscanf(fp,%s %d %ld %ld %ld,stu1i.name,&stu1i.num,&stu1i.chi,&stu1i.math,&stu1i.eng。printf(n1.txt 中学生的成绩如下 :n 。 printf( 姓名 学号 语文 数学 英语 n 。 for(i=1 。iprintf(%s%d %ld %ld %ldn,stu1i.name,stu1i.num,stu1i.chi,stu1i.math,stu1i.eng。void creat2(int i。for(j=1/对 2.txt。j的成绩进行读取fscanf(fp,%s %d %ld %ld %ld,stu2j.name,&stu2j.num,&stu2j.chi,&stu2j.math,&stu2j.eng。printf(n2.txt中学生的成绩如下 :n 。5/16printf(姓名 学号语文数学英语 n 。for(j=1。 jprintf(%s%d %ld %ld %ldn,stu2j.name,stu2j.num,stu2j.chi,stu2j.math,stu2j.eng。void hb(/把合并后的成绩赋值到新的结构体数组stu3a中int i。for(i=1。istu3i=stu1i。for(i=6。istu3i=stu2i-5。printf(n3.txt中所有学生的成绩名单 :n 。printf(姓名 学号语文数学英语总分 n 。for(i=1。 istu3i.sum=stu3i.math+stu3i.eng+stu3i.chi。printf(%s%d %ld %ld %ld %ldn,stu3i.name,stu3i.num,stu3i.chi,stu3i.math,stu3i.eng,stu3i.sum。fprintf(fp,%s%d %ld %ld %ld %ldn,stu3i.name,stu3i.num,stu3i.chi,stu3i.math,stu3i.eng,stu3i.sum。int extract(/把成绩中需要补考的学生成绩保存在数组stu4j中int j。j=1。for(i=1。iif(stu3i.math60|stu3i.eng60|stu3i.chistu4j=stu3i。j+ 。6/16printf(n补考学生成绩名单如下 :n 。printf(姓名学号语文数学英语 n 。for(i=1。ifprintf(fp,%5s %3d %4d %4d %4n,stu4i.name,stu4i.num,stu4i.chi,stu4i.math,stu4i.eng。printf(%5s %3d %4d %4d %4dn,stu4i.name,stu4i.num,stu4i.chi,stu4i.math,stu4i.eng。void sort1(/冒泡排序for(i=1。ifor(j=i+1。jif(stu3j.sumstu3i.sum t=stu3j。stu3j=stu3i。stu3i=t。printf(n按总分由高到低排序 ( 冒泡 后的成绩如下 :n 。printf(姓名学号语文数学英语总分 n 。for(i=1。iprintf(%s%d %ld %ld %ld %ldn,stu3i.name,stu3i.num,stu3i.chi,stu3i.math,stu3i.eng,stu3i.sum。void sort2(/插入排序for(i=2。iif(stu3i.sumstu3i-1.sumtmp=stu3i。stu3i=stu3i-1。for(j=i-1。j0&tmp.sumstu3j.sum。j-7/16stu3j+1=stu3j。stu3j+1=tmp。printf(n按总分由高到低排序 ( 插入 后的成绩如下 :n 。printf(姓名学号语文数学英语总分 n 。for(i=1。iprintf(%s%d %ld %ld %ld %ldn,stu3i.name,stu3i.num,stu3i.chi,stu3i.math,stu3i.eng,stu3i.sum。void search1(/名字查找方式 。scanf(%s,&fname 。for(i=1。 iif(!strcmp(stu3i.name,fnameprintf(n你所查找 ( 名字顺序 的学生成绩如下 :n 。printf(姓名学号语文数学英语总分 n 。printf(%s%d %ld %ld %ld %ldn,stu3i.name,stu3i.num,stu3i.chi,stu3i.math,stu3i.eng,stu3i.sum。void search2(/名字查找方式 。scanf(%s,&fname 。while(lowmid=(low+high/2。if(strcmp(stu3mid.name,fname=0 break。else if(strcmp(fname,stu3mid.name0high=mid。else low=mid。8/16printf(n你所查找 ( 名字折半 的学生成绩如下 :n 。printf(姓名学号语文数学英语总分 n 。printf(%s%d %ld %ld %ld %ldn,stu3mid.name,stu3mid.num,stu3mid.chi,stu3mid.math,stu3mid.eng,stu3mid.sum。void main(char digit。printf(*系统功能菜单*n。printf(-n。printf(*n 。printf(*1.读取 3.txt的成绩 ( 合并 * *2.读取 4.txt的成绩( 补考 *n。printf(*n 。printf( *3. 按总分排序 ( 冒泡 * *4. 按总分排序 ( 插入 * n 。printf(*n 。printf( *5. 按名字查找 ( 顺序 * *6. 按名字查找 ( 折半 * n 。printf(*n 。printf(*7.退出系统*n。printf(*n 。printf(-n。printf(请选择菜单编号 : 。scanf(%c,&digit。9/16switch(digitcase 1:fp=fopen(d:1.txt,r+。creat1(。fclose(fp。fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。break。case 2:fp=fopen(d:1.txt,r+。creat1(。fclose(fp。fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。fp=fopen(d:4.txt,w。extract(。fclose(fp。break。case 3:fp=fopen(d:1.txt,r+。creat1(。fclose(fp。fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。sort1(。break。case 4:fp=fopen(d:1.txt,r+。creat1(。fclose(fp。10/16fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。sort2(。break。case 5: fp=fopen(d:1.txt,r+。creat1(。fclose(fp。fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。search1(。break。case 6: fp=fopen(d:1.txt,r+。creat1(。fclose(fp。fp=fopen(d:2.txt,r+。creat2(。fclose(fp。fp=fopen(d:3.txt,w。hb(。fclose(fp。search2(。break。case 7: break。七、测试结果1)合并:11/162)排序:冒泡排序:12/16插入排序:13/163)抽出补考学生:4)按姓名查找:顺序查找:14/16折半查找:八、心得体会本系统设计是为了合并两个信息表,然后对信息表进行排序,从信息中查询信息。由于 C 语言学的不扎实,编程时遇到了很多困难,开始调试的时候经常出现很多的错误,经常容易烦躁,但是经过一段的时间的锻炼使得我能够一步一步的去解决问题。在程序设计方面,逐渐感觉到模块化设计的重要性,应该分析出功能模块,然后对其细节中的共性和特性作分析。这次的设计,让我大大地感觉到,成功的程序设计是要建立在熟悉语言的基础之上的。每一次程序设计能大大地增加对语言的熟悉和感知,能使理论与实际应用相结合,提高了自己组织数据及编写程序的能力。培养了基本的、良好的程序设计技能以及合作能力。在上机操作的过程中,培养了我实际分析问题、编程和动手能力,使我掌握了程序设计的基本技能,提高了我适应实际和实践编程的能力。15/16总的来说,这次课程设计让我获益匪浅,对数据结构也有了进一步的理解和认识。九、参考文献:1. 数据结构 C语言版)严蔚敏,吴伟明 清华大学出版社2.C 程序设计 第三版)谭浩强清华大学出版社3. 百度搜索16/16
展开阅读全文