《学生成绩管理系统,数据结构课程设计.pdf》由会员分享,可在线阅读,更多相关《学生成绩管理系统,数据结构课程设计.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 课程设计任务书 学生姓名:专业班级:指导教师:工作单位:题 目:学生成绩管理系统 已知技术参数和设计要求:现有学生成绩信息文件 1(cj1。txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47.。.。学生成绩信息文件 2(cj2.txt),内容如下:姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77.。.试
2、编写一管理系统,其基本功能要求:实现对两个文件数据进行合并,生成新文件 cj3.txt 抽取出三科成绩中有补考的学生并保存在一个新文件 cj4.txt 对合并后的文件 3。txt 中的数据按总分降序排序(至少采用两种排序方法实现)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实现)要求使用结构体,链或数组等实现上述要求。采用多种方法且算法正确者,可适当加分。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)数据结构课程设计说明书 一、需求分析 1、问题描述 现如今,学校人数的暴涨,对学生基本信息的录入,保存量越来越大,为了简化对工作人员的
3、操作,故设计一个程序来完成对学生基本信息的录入,保存,编辑等简单操作。2、基本任务 (1)对学生信息表 cj1 和 cj2 进行合并;(2)把合并的信息生成 cj3;(3)把 cj3 中有补考的学生信息生成 cj4;(4)对合并后的文件 3。txt 中的数据按总分降序排序;(5)输入一个学生姓名后,能查找到此学生的信息并输出结果。二、概要设计 为了完成需求分析的基本任务,主要从以下 3 个方面进行设计:1、主界面设计 为了实现学生成绩管理系统的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。系统主控菜单运行界面如图 1 所示:图 1 学生成绩管理系统主
4、菜单 2、数据结构设计 系统采用链表的顺序存储结构.一个字符数组存储学生姓名。四个整型数存储学生学号语文成绩数学成绩英语成绩。和一个结构体数组。3、系统功能设计(1)从 c 盘下读取 cj1。txt 和 cj2。txt 中的学生成绩信息.程序会给出提示,因为如果在 c 盘下不存在这两个文件那么程序将不能继续会自动退出.(2)程序给出选择是否将从 c 盘读取的学生信息保存到 c 盘下 cj3。txt 中,如果您选择是,那么程序将执行。如果在 c 盘存在一个名为 cj3。txt 的文件,那么程序将用读取的信息将其覆盖.如果不存在,则系统会自动生成一个名为 cj3.txt 的文件将数据放入其中。(3
5、)程序会给出选择是否将 cj3.txt 中有补考的学生信息生成一个 cj4.txt 的文件.如果您选择是。那么程序将会执行。对于在 c 盘是否有名为 cj4.txt 的文件的处理和上面一样.(4)程序会给出按总分大小排序的选项.程序设计了两种排序方法直接插入法排序和冒泡排序.(5)最后程序设计了一个循环,实现根据学生姓名查找学生成绩信息。如果你所输入的学生姓名不存在,程序将会输出“查无此人的提示符并提示是否继续查找。你可根据需要选择.如果选择否,程序退出。三、模块设计【主程序模块】:void main()fp=fopen(”c:cj1。txt,”rt”);/从文本文件 cj1.txt 中读取数
6、据传向 cj3.txt fp=fopen(”c:cj2。txt,”rt);/从文本文件 cj2。txt 中读取数据接到 cj3。txt 的后面 fp=fopen(c:cj3。txt”,rt);/从合成后的 cj3。txt 读取数据,生成链表 fp=fopen(”c:cj4。txt,”wt”);/把三科成绩中有补考的学生信息放入 cj4.txt for(i=1;i10;i+)/直接插入法排序 for(i=0;ino=x;for(i=0;iyw=x;for(i=0;i5;i+)fgetc(fp);x=fgetc(fp)48;x=x*10+fgetc(fp)-48;ssx=x;for(i=0;i5;
7、i+)fgetc(fp);x=fgetc(fp)48;x=x10+fgetc(fp)48;syy=x;snext=p-next;pnext=s;ch=fgetc(fp);fclose(fp);(4)把有补考的同学存入cj4。txt中。在链表中扫面,如果有一科成绩不及格怎存放到cj4。txt.实现方法和前面相似。主要代码:fp=fopen(”c:cj4。txt,”wt);/把三科成绩中有补考的学生信息放入cj4.txt fputs(”姓 名 学号 语文 数学 英语,fp);fclose(fp);fp=fopen(”c:cj4。txt,”a);s=p-next;while(s!=NULL)if(s
8、yw60|ssx60|syyname,fp);for(i=0;i5;i+)ch=;fputc(ch,fp);ch=sno/10+48;fputc(ch,fp);ch=s-no-(sno/10)*10+48;fputc(ch,fp);for(i=0;iyw/10+48;fputc(ch,fp);ch=syw-(syw/10)*10+48;fputc(ch,fp);for(i=0;i5;i+)ch=;fputc(ch,fp);ch=ssx/10+48;fputc(ch,fp);ch=ssx(s-sx/10)10+48;fputc(ch,fp);for(i=0;i5;i+)ch=;fputc(ch,
9、fp);ch=s-yy/10+48;fputc(ch,fp);ch=s-yy-(syy/10)10+48;fputc(ch,fp);s=snext;else s=snext;fclose(fp);(5)用一个结构体数组存放学生信息,然后用直接插入法和冒泡法进行总分降序排列,先用直接插入法排好序后打乱,再用冒泡法排序,这两个过程比较简单,就不多作介绍.(6)最后是查找,分别在数组和链表中查找,这个过程也比较简单,但要注意的是在输入要查找的人的姓名时如果人名为两个字则要在中间加两个空格。这样才能成功查找到。五、调试分析(1)编译,调试过后,运行程序。(2)输入选择,进行两表的合成和生成cj4.tx
10、t。(3)合成成功后,选择对总分进行直接插入法排序.(4)打乱排序,再用冒泡法排序。(5)输入姓名进行查找 六、用户手册 1、本程序的特点是我们不在需要从键盘上输入数据,而是直接从已有文件中读取数据,这在数据量很大时或者需要反复使用同一个数据时有很大的优势。2、要程序运行的关键是在 c 盘下存在 cj1.txt 和 cj2.txt 两个文件,用户在使用是需得注意。3、本人在写程序时重心主要放在对数据的处理上,所以在界面设计方面还做得不好,请多多包涵。4、程序操作很简单,只要按提示操作即可完成要求的内容。七、参考文献 1、数据结构教程(第三版)李春葆 尹为民 等编著 清华大学出版社 2、C 语言
11、程序设计(第三版)何钦铭 颜 晖 主编 高等教育出版社 3、数据结构教程上机实验指导 李春葆 编著 清华大学出版社 八、程序设计总结 通过两个星期的折腾,总算把课程设计给完成了,这是一个坚苦而又漫长的过程。是啊,读了那么多年的书,课程设计可是第一次。看着劳动成果,很欣慰!虽然这不是我一个人做的,是大家的共同努力得来的。“也许完成不了!两个星期前我们这样说,“完成他没问题!”一个星期前我们这样说,现在我们可以说:“哈哈,完成啦”!刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于画图方面的,可是这点小进展远远不够,这只是一个小小的开始。下一步是上网查,找到了些与我们题目相似的,那时我
12、们每个人都很高兴,可是那还不是我们要的,于是又上网查到了些有关的函数等等,终于在我们大家的努力下,完成了这个程序。虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!世上无难事,只怕有心人,的确如此.做完这个程序最大的收获就是感受到了集体的力量,当然个人的智慧也是很重要的哦!做完这个课程设计,我们的自信一下子提高了,我们也会写程序了;尽管对于有些人这种程序会很简单,可对我们 C 语言初学者来说,已经很不容易了.这次体验为以后的学习计算机的我们增强了信心。享受劳动成果的滋味实在很美妙啊!九、程序源代码附录#includestdio.h#include void ma
13、in()typedef struct LNode char name6;int no;int yw;int sx;int yy;struct LNode*next;LinkList;struct NameNo int no;int yw;int sx;int total;char name6;st10;FILE*fp,*fp1;char ch,sname6;int x,i,j;NameNo tmp;LinkList p,s;printf(n);printf(”-);printf(学生成绩管理系统);printf(”-);printf(nn);printf(”在您的C盘根目录下是否有cj1。tx
14、t和cj2。txt文件?如果有请输入,);printf(”否则输入;如果没有,那么程序将终止!or 0?”);scanf(”d,i);if(i=0)return;printf(nn);printf(对cj1.txt和cj2。txt进行合成请按);scanf(%d”,&i);if(i!=1)return;printf(”正在把cj1.txt和cj2.txt中的数据进行合并n”);printf(.。.。.n.。.n。.。n.。.n.。n。n”);if(fp=fopen(c:cj1.txt”,”rt”))=NULL)/从文本文件cj1.txt中读取数据传向cj3。txt printf(无cj1.tx
15、t文本文件,程序结束。n”);return;fp1=fopen(c:cj3。txt,”wt);ch=fgetc(fp);while(ch!=EOF)fputc(ch,fp1);ch=fgetc(fp);fclose(fp1);fclose(fp);if(fp=fopen(c:cj2.txt,”rt”))=NULL)/从文本文件cj2.txt中读取数据接到cj3.txt的后面 printf(无cj12。txt文本文件,程序结束.n”);return;fp1=fopen(c:cj3。txt,a”);for(i=0;i37;i+)fgetc(fp);ch=fgetc(fp);while(ch!=EO
16、F)fputc(ch,fp1);ch=fgetc(fp);fclose(fp1);fclose(fp);printf(”合并成功!现在你可以在C盘根目录下看到一个cj3。txt文件n);printf(”nn”);p=(LinkList*)malloc(sizeof(LinkList));pnext=NULL;fp=fopen(”c:cj3。txt,”rt”);/从合成后的cj3。txt读取数据,生成链表 for(i=0;iname,7,fp);for(i=0;i5;i+)fgetc(fp);x=fgetc(fp)48;x=x*10+fgetc(fp)48;sno=x;for(i=0;i5;i+
17、)fgetc(fp);x=fgetc(fp)48;x=x10+fgetc(fp)48;syw=x;for(i=0;isx=x;for(i=0;inext=p-next;p-next=s;ch=fgetc(fp);fclose(fp);printf(对cj3。txt中有不及格的学生信息生成cj4。txt请按”);scanf(”%d”,i);if(i!=1)return;printf(正在生成cj4.txtn);printf(”。.。.n。.n.。n.。n.n。n”);if(i=1)fp=fopen(c:cj4。txt”,wt);/把三科成绩中有补考的学生信息放入cj4。txt fputs(姓 名
18、 学号 语文 数学 英语,fp);fclose(fp);fp=fopen(”c:cj4。txt,a);s=pnext;while(s!=NULL)if(s-ywsx60|syy60)ch=n;fputc(ch,fp);fputs(s-name,fp);for(i=0;ino-(s-no/10)10+48;fputc(ch,fp);for(i=0;i5;i+)ch=;fputc(ch,fp);ch=syw/10+48;fputc(ch,fp);ch=s-yw(syw/10)10+48;fputc(ch,fp);for(i=0;i5;i+)ch=;fputc(ch,fp);ch=ssx/10+48
19、;fputc(ch,fp);ch=ssx(ssx/10)*10+48;fputc(ch,fp);for(i=0;i5;i+)ch=;fputc(ch,fp);ch=syy/10+48;fputc(ch,fp);ch=syy(s-yy/10)*10+48;fputc(ch,fp);s=s-next;else s=snext;fclose(fp);printf(”生成成功!现在你可以在C盘根目录下看到一个cj4。txt文件);printf(nn);s=pnext;/将学生信息从链表复制到数组中 for(i=0;isx;sti。total=s-yw+s-sx+syy;for(j=0;j7;j+)st
20、i。namej=s-namej;s=s-next;printf(用直接插入法排序请按:”);scanf(”d”,&i);printf(nn”);if(i=1)for(i=1;i10;i+)/直接插入法排序 tmp=sti;j=i1;while(j=0&tmp。totalstj。total)stj+1=stj;j-;stj+1=tmp;printf(”直接插入法排序后总分从大到小排序为n);printf(nn”);printf(”姓 名 学号 语文 数学 英语 总分n”);for(i=0;i10;i+)if(sti。nonext;/将排好序的数组打乱,从新用冒泡法排序 for(i=0;i10;i
21、+)sti。no=sno;sti。yw=syw;sti.sx=ssx;sti.total=syw+s-sx+syy;for(j=0;j7;j+)sti.namej=s-namej;s=snext;printf(用冒泡法排序请按:);scanf(”%d,i);printf(”nn);if(i=1)for(i=0;ii;j-)if(stj.totalstj1.total)tmp=stj;stj=stj-1;stj-1=tmp;printf(冒泡法排序后总分从大到小排序为n);printf(”nn);printf(姓 名 学号 语文 数学 英语 总分n”);for(i=0;i10;i+)if(sti
22、。no10)printf(%s ”,sti。name);printf(”d,0);printf(”%d ”,sti.no);printf(%d ,sti.yw);printf(”%d ”,sti。sx);printf(d ,sti.total-sti。ywsti.sx);printf(%dn,sti.total);printf(”n);else printf(s ”,sti。name);printf(%d ,sti。no);printf(d ,sti.yw);printf(”%d ”,sti.sx);printf(%d ,sti.totalsti。yw-sti。sx);printf(%dn,s
23、ti。total);printf(n);printf(n);printf(”请输入你要查找的学生姓名:(注意:如果名字为两个字,则中间用两个空格!)n”);do x=1;if(i=1)printf(输入姓名:”);getchar();for(i=0;inext;while(s!=NULL)/在链表中顺序查找 for(i=0;s-namei=snamei;i+)if(i=6)printf(”链表中查找结果);printf(nn);printf(”姓 名 学号 语文 数学 英语 总分n”);printf(s”,sname);printf(”%d,sno);printf(d”,syw);printf(”d”,ssx);printf(d”,s-yy);printf(”dnn,syw+s-sx+s-yy);x=0;s=s-next;if(x!=0)printf(”查无此人!n”);i=0;printf(继续查找请按”);scanf(”%d”,i);while(i=1);printf(nn”);printf(-谢谢使用!-nn”);时间安排:正确理解所设计的题目并进行问题抽象,确定设计方案 1 天 编代码 3 天 调试和测试 2 天 编写设计说明书 1 天 系统验收及成绩评定 1 天 指导教师签名:年 月 日 Byruis
限制150内