您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 数据结构课程设计学生成绩管理系统
12020年4月19日数据结构课程设计学生成绩管理系统文档仅供参考,不当之处,请联系改正。22020年4月19日课程设计报告]课程名称数据结构课题名称学生成绩管理系统专业通信工程班级1301学号0302姓名momom指导教师张鏖烽彭帧黄哲7月2日文档仅供参考,不当之处,请联系改正。32020年4月19日湖南工程学院课程设计任务书课程名称数据结构课题学生成绩管理系统专业班级通信工程1301学生姓名momom学号0302指导老师张鏖烽彭帧黄哲审批张鏖烽任务书下达日期6月29日任务完成日期7月5日文档仅供参考,不当之处,请联系改正。42020年4月19日目录一、课程设计的分析......................错误!未定义书签。1.课程设计目的:....................错误!未定义书签。2.课程设计题目......................错误!未定义书签。3.需求分析..........................错误!未定义书签。二、概要设计............................错误!未定义书签。三、详细设计............................错误!未定义书签。四、调试分析............................错误!未定义书签。(1)调试过程中遇到的问题.............错误!未定义书签。(2)经验和体会.......................错误!未定义书签。五、用户使用说明........................错误!未定义书签。六、测试结果............................错误!未定义书签。七、附录................................错误!未定义书签。八、课程设计评分表...................................37文档仅供参考,不当之处,请联系改正。52020年4月19日一、课程设计的分析1.课程设计目的:课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。一般,实习题中的问题比平时的习题复杂得多,也更接近实际。实习着眼于原理与应用的结合点,使读者学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。2.课程设计题目【课题】学生成绩管理系统【问题描述】根据自己这个学期的课程表,设计一个成绩管理系统管理自己班的成绩;每个学生记录包含学号、姓名、每门课程成绩、总分以及加权平均分。文档仅供参考,不当之处,请联系改正。62020年4月19日【基本要求】一个完整的成绩管理系统应具有以下功能:(1)输入:成绩录入;(2)输出:输出成绩表;(3)插入:在成绩表中适当位置插入某个学生成绩;(4)删除:在成绩表中删除某个学生成绩;(5)查找:根据某个关键字查找某个学生成绩;(6)排序:根据某一个或某几个关键字进行排序;(7)筛选:根据某个关键字筛选出符合某些条件的数据;【测试数据】用本班的成绩总表作为测试数据。3.需求分析本次课程设计的题目是学生成绩管理系统,要求能够存入学生,学生信息包括学生学号、姓名、每科成绩和平均成绩以及加权平均成绩等。该系统主要有以下七个功能,即对学生信息进行:输入、输出、插入、删除、查找、排序、筛选等功能。对学生进行操作能够有很多思路,而我选用的是单链表村学生信息那一条思路,即设置一个单链表,其中节点数据域保存学生基本信息。由于我们学号比较长,用整型数据无法保存,因此我定义char型的字符串来保存学号和姓名。用一个数组来保存学生文档仅供参考,不当之处,请联系改正。72020年4月19日每一科的成绩,另外在定义一个总分和平均分变量。定义学生如下:typedefstructStudent{charmun[12];//学号charname[20];//姓名floatscore[8];//成绩floatall_score;//总分floatave_score;//加权平均分structStudent*next;}LinkList;二、概要设计本程序采用链表的方法将每一个学生设置成为一个链表中的数据节点,节点中有字符型mun[12](学号)、name[20](姓名)、浮点型数据score[8](放置每一科成绩的数组)、all_score(总分)和ave_score(加权平均分)。主函数中在执行成绩管理系统之前会先创立一个链表,并调用voidInitList(LinkList*&L)函数来初始化链表;而后进入菜单选择项选择功能进行操作,主程序流程图如下:文档仅供参考,不当之处,请联系改正。82020年4月19日开始输入功能选项c1、添加2、输出3、插入4、删除5、查找6、排序7、筛选0、退出Creat_Studentoutput_StudentInsert_StudentLocate_Student、Delete_StudentSeek_StudentQueue_StudentFilter_Studentexit结束三、详细设计1、添加学生:2、输出学生:创立节点sLinkList*p=L-next;输入学生信息,计算总分与加权分for(m=1;m=总人数&&p!=NULL;m++)r-next=s;r=s;(尾插法插入链表)输出学生信文档仅供参考,不当之处,请联系改正。92020年4月19日息,p=p-nextcount=count+1;学生总数加1开始结束LinkList*p=L-next;m=n&&p!=NULL?输出学生信息p=p-nextm++m+1NY3、插入学生4、删除学生输入要插入的位置数字选择删除方式开始输入jIf(j==1)创建节点s并输入学生信息将节点s用尾插法插入学生链表结束YN文档仅供参考,不当之处,请联系改正。102020年4月19日scanf(%d,&w);按编号删除和学号删除调用插入函数1编号调用Delete_StudentInsert_Student(h,w);2学号调用Locate_Student找到学生位置,在用Delete_Student的流程图如下:Insert_Student函数Delete_Student的函数流程图:文档仅供参考,不当之处,请联系改正。112020年4月19日开始结束LinkList*p=L,*s;j=0;ji-1&&p!=NULL?j++;p=p-next;输出该学生信息YN开始结束LinkList*p=L,*s;j=0;ji-1&&p!=NULL?j++;p=p-next;删除该学生信息YNLocate_Student函数的流程图与如下:Locate_Student1的流程图类似,不再重复了开始结束LinkList*p=L;i=1;p!=NULL&&strcmp(p-mun,mun)!=0?i++;p=p-next;return(i)YN文档仅供参考,不当之处,请联系改正。122020年4月19日5查找学生:调用Seek_Student函数,分为按学号查找和按姓名查找1按编号调用Locate_Student函数返回i在调用Out_one_Student输出第i个学生2按姓名调用Locate_Student1函数返回i在调用Out_one_Student输出第i个学生6排序函数调用Queue_Student函数:其中有按学号,总分,各科成绩排序我这里采用的是冒泡排序法进行排序,分别定义了两个节点指针q指向头指针p指向q的下一个节点,在进入双重循环进行比较排序流程图如下:文档仅供参考,不当之处,请联系改正。132020年4月19日开始结束LinkList*q,*p,*t1,*t2;q=L,p=L-nextq-next!=NULL?Yq=q-nextp-next!=NULL?q的数据p的数据?交换位置YNNNY排序的方法都类似,知识比较数据不同,因此就没有一一画出来了7筛选创立另一个链表r用于存筛选出来的学生,并调用文档仅供参考,不当之处,请联系改正。142020年4月19日output_Student函数输出筛选程序流程图如下:开始结束输入筛选的数据L里的数据输入的数据?将该学生存入新的学生节点s将节点s用尾插法插入到链表r中调用output_Student输出链表rYN筛选程序又分为1按总分选2全部及格的人3按各科成绩1而总分筛选主要是输入一个数值,判断数据是否大于输入数据,大于的都输出2去不几个的人经过比较每一科成绩是否都大于60分,大于的就选出插入新链表并输出3各科成绩的话是只比较其中一科来创立链表并输出文档仅供参考,不当之处,请联系改正。152020年4月19日其比较流程图都如上图所示,这里便不再一一画出来了。文档仅供参考,不当之处,请联系改正。162020年4月19日四、调试分析(1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析在调试过程中遇到的第一个问题是输出学生的问题,因为输出的问题,其中总是发现输出乱码,找了好久,后来终于发现是输入时出了问题,因为姓名我定义了字符串型,而字符串长度我定义了20,在创立节点的时候我却把name[20]给了学生节点,导致输出时地址错误而输出乱码。第二个问题是查找,我开始一直想不到怎么把查找到的学生输出,后来想了很久,找到了方法,我先经过查找关键字去找到该学生是在链表的那个位置,在经过返回的位置的值来输出想要输出的那个学生,因此就定义了Locate_Student和Out_one_Student来完成查找功能。第三个问题是筛选功能的实现,我原来想经过比较,将符合关键字的学生筛选出来在输出,结果发现输出函数是已经定义成一次性全部输出的形式。导致我一直想不到好的方法来进行这个功能的代码编写。后来经过老师的指导,我知道了一种新的方法来编写,就是经过创立一个新的学生链表来存已经筛选出来的学生。然后在经过输出函数来将新链表进行输出,这样就能够达到筛选的目的。改进方法:现在想了一下,其实能够将输出函数进行改进,文档仅供参考,不当之处,请联系改正。172020年4月19日改成一个一个学生输出的形式,在经过一个判断语句进行选择性输出,用这个输出的方法能够减少代码的的量,而达到同样的效果。第四个问题是主函数的问题,因为我想让主函数看起来简洁一点,就把主函数分成两部分,一部分用于选择操作,另一部分用于进行选择好的操作,可是这样一来却出现了问题,就是输出数据之后无法暂停在输出界面,而是闪了一下就退出来进入主界面了,这个问题我开始以为是输出函数的问题,结果我去改了输出函数,结果还是无法停留。后来知道原因了,主函数退出switch循环之后会立即回到主菜单界面,到时无法停在输出界面。我在主函数最后加一个system(“pause”)之后才打到能够观察到的地方。改进方法:能够将主函数定义成一个,不用分开,去掉for(;;)这个循环会好点。(2)经验和体会本次课程设计的题目我一开始看到的时候以为很容易就能做出来,因此只是大概想了一下思路,就直接开始了,其实这个实验能够用顺序表做会思路更清晰一些,我没有选择顺序表来做,因为我在单链表这一部分有点模糊,因此想挑战一下用单链表来做。这个程序的每一个代码都是我经过一步一步分析写出来的,在编写的过程中遇到了很多的阻碍,很多自己无法预知的错误,文档仅供参考,不当之处,请联系改正。182020年4月19日在不断的找错过程中,我感觉到自己在c语言这一方面的不足,对算法的精髓还不是很了解,对于单链表的操作也不是很熟练,特别是在节点指针多起来的时候会有点乱,甚至搞不清指针到底指向哪里了。然而,在编程过程中,一次次的测试失败,再一次次修改
本文标题:数据结构课程设计学生成绩管理系统
链接地址:https://www.777doc.com/doc-6319379 .html