数据结构课程设计-学生成绩管理系统.pdf
《数据结构课程设计-学生成绩管理系统.pdf》由会员分享,可在线阅读,更多相关《数据结构课程设计-学生成绩管理系统.pdf(37页珍藏版)》请在咨信网上搜索。
1、1课 程 设 计 报 告课程名称课程名称 数据结构 课题名称课题名称 学生成绩管理系统 专专 业业 通信工程 班班 级级 1301 学学 号号 201303020102 姓姓 名名 momom 指导教师指导教师 张鏖烽 彭帧 黄哲 2015 年年 7 月月 2 日日2湖南工程学院课 程 设 计 任 务 书课程名称 数据结构 课 题 学生成绩管理系统 专业班级 通信工程 1301 学生姓名 momom 学 号 201303020102 指导老师 张鏖烽 彭帧 黄哲 审 批 张鏖烽 任务书下达日期 2015 年 6 月 29 日任 务 完成日期 2015 年 7 月 5 日 3目目 录录一、课程设
2、计的分析一、课程设计的分析.41.1.课程设计目的:课程设计目的:.42.2.课程设计题目课程设计题目.43.3.需求分析需求分析.5二、概要设计二、概要设计.5三、详细设计三、详细设计.6四、调试分析四、调试分析.11(1)调试过程中遇到的问题调试过程中遇到的问题.11(2)经验和体会经验和体会.11五、用户使用说明五、用户使用说明.12六、测试结果六、测试结果.13七、附录七、附录.18八、八、课程设计评分表课程设计评分表.374一、课程设计的分析一、课程设计的分析1.1.课程设计目的:课程设计目的:课程设计是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环
3、节。通常,实习题中的问题比平时的习题复杂得多,也更接近实际。实习着眼于原理与应用的结合点,使读者学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的目的。平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。2.2.课程设计题目课程设计题目【课题】学生成绩管理系统学生成绩管理系统【问题描述】根据自己这个学期的课程表,设计一个成绩管理系统管理自己班的成绩;每个学生记录
4、包含学号、姓名、每门课程成绩、总分以及加权平均分。【基本要求】一个完整的成绩管理系统应具有以下功能:(1)输入:成绩录入;(2)输出:输出成绩表;(3)插入:在成绩表中适当位置插入某个学生成绩;(4)删除:在成绩表中删除某个学生成绩;(5)查找:根据某个关键字查找某个学生成绩;(6)排序:根据某一个或某几个关键字进行排序;(7)筛选:根据某个关键字筛选出符合某些条件的数据;【测试数据】用本班的成绩总表作为测试数据。53.3.需求分析需求分析本次课程设计的题目是学生成绩管理系统,要求可以存入学生,学生信息包括学生学号、姓名、每科成绩和平均成绩以及加权平均成绩等。该系统主要有以下七个功能,即对学生
5、信息进行:输入、输出、插入、删除、查找、排序、筛选等功能。对学生进行操作可以有很多思路,而我选用的是单链表村学生信息那一条思路,即设置一个单链表,其中节点数据域保存学生基本信息。由于我们学号比较长,用整型数据无法保存,所以我定义 char 型的字符串来保存学号和姓名。用一个数组来保存学生每一科的成绩,此外在定义一个总分和平均分变量。定义学生如下:typedef struct Studentchar mun12;/学号char name20;/姓名float score8;/成绩float all_score;/总分float ave_score;/加权平均分struct Student*nex
6、t;LinkList;二、概要设计二、概要设计本程序采用链表的方法将每一个学生设置成为一个链表中的数据节点,节点中有字符型 mun12(学号)、name20(姓名)、浮点型数据 score8(放置每一科成绩的数组)、all_score(总分)和 ave_score(加权平均分)。主函数中在执行成绩管理系统之前会先创建一个链表,并调用 void InitList(LinkList*&L)函数来初始化链表;而后进入菜单选择项选择功能进行操作,主程序流程图如下:6开始输入功能选项c1、添加2、输出3、插入4、删除5、查找6、排序7、筛选0、退出Creat_Studentoutput_StudentI
7、nsert_StudentLocate_Student、Delete_StudentSeek_StudentQueue_StudentFilter_Studentexit结束三、详细设计三、详细设计1、添加学生:2、输出学生:创建节点 s LinkList*p=L-next;输入学生信息,计算总分与加权分 for(m=1;mnext=s;r=s;(尾插法插入链表)输出学生信息,p=p-nextcount=count+1;学生总数加 17开始结束LinkList*p=L-next;mnextm+m+1NY3、插入学生4、删除学生输入要插入的位置 数字选择删除方式scanf(%d,&w);按编号删
8、除和学号删除调用插入函数 1 编号 调用 Delete_StudentInsert_Student(h,w);2 学号 调用 Locate_Student 找到 学生位置,在用 Delete_Student的流程图如下:Insert_Student 函数 Delete_Student 的函数流程图:开始输入jIf(j=1)创建节点s并输入学生信息将节点s用尾插法插入学生链表结束YN8 开始结束LinkList*p=L,*s;j=0;jnext;输出该学生信息YN开始结束LinkList*p=L,*s;j=0;jnext;删除该学生信息YNLocate_Student 函数的流程图与如下:Loc
9、ate_Student1 的流程图类似,不再重复了 开始结束LinkList*p=L;i=1;p!=NULL&strcmp(p-mun,mun)!=0?i+;p=p-next;return(i)YN95 查找学生:调用 Seek_Student 函数,分为按学号查找和按姓名查找1 按编号 调用 Locate_Student 函数返回 i 在调用 Out_one_Student 输出第 i 个学生2 按姓名调用 Locate_Student1 函数返回 i 在调用 Out_one_Student 输出第 i 个学生6 排序函数 调用 Queue_Student 函数:其中有按学号,总分,各科成绩
10、排序我这里采用的是冒泡排序法进行排序,分别定义了两个节点指针 q 指向头指针p 指向 q 的下一个节点,在进入双重循环进行比较排序 流程图如下:开始结束LinkList*q,*p,*t1,*t2;q=L,p=L-nextq-next!=NULL?Yq=q-nextp-next!=NULL?q的数据p的数据?交换位置YNNNY排序的方法都类似,知识比较数据不同,所以就没有一一画出来了107 筛选创建另一个链表 r 用于存筛选出来的学生,并调用 output_Student 函数输出筛选程序流程图如下:开始结束输入筛选的数据L里的数据输入的数据?将该学生存入新的学生节点s将节点s用尾插法插入到链表
11、r中调用output_Student输出链表rYN筛选程序又分为 1 按总分选 2 全部及格的人 3 按各科成绩1 而总分筛选主要是输入一个数值,判断数据是否大于输入数据,大于的都输出2 去不几个的人通过比较每一科成绩是否都大于 60 分,大于的就选出插入新链表并输出3 各科成绩的话是只比较其中一科来创建链表并输出其比较流程图都如上图所示,这里便不再一一画出来了。11四、调试分析四、调试分析(1)调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析在调试过程中遇到的第一个问题是输出学生的问题,因为输出的问题,其中总是发
12、现输出乱码,找了好久,后来终于发现是输入时出了问题,因为姓名我定义了字符串型,而字符串长度我定义了 20,在创建节点的时候我却把name20给了学生节点,导致输出时地址错误而输出乱码。第二个问题是查找,我开始一直想不到怎么把查找到的学生输出,后来想了很久,找到了方法,我先通过查找关键字去找到该学生是在链表的那个位置,在通过返回的位置的值来输出想要输出的那个学生,所以就定义了Locate_Student 和 Out_one_Student 来完成查找功能。第三个问题是筛选功能的实现,我本来想通过比较,将符合关键字的学生筛选出来在输出,结果发现输出函数是已经定义成一次性全部输出的形式。导致我一直想
13、不到好的方法来进行这个功能的代码编写。后来经过老师的指导,我知道了一种新的方法来编写,就是通过创建一个新的学生链表来存已经筛选出来的学生。然后在通过输出函数来将新链表进行输出,这样就可以达到筛选的目的。改进方法:现在想了一下,其实可以将输出函数进行改进,改成一个一个学生输出的形式,在通过一个判断语句进行选择性输出,用这个输出的方法可以减少代码的的量,而达到同样的效果。第四个问题是主函数的问题,因为我想让主函数看起来简洁一点,就把主函数分成两部分,一部分用于选择操作,另一部分用于进行选择好的操作,可是这样一来却出现了问题,就是输出数据之后无法暂停在输出界面,而是闪了一下就退出来进入主界面了,这个
14、问题我开始以为是输出函数的问题,结果我去改了输出函数,结果还是无法停留。后来知道原因了,主函数退出 switch 循环之后会立即回到主菜单界面,到时无法停在输出界面。我在主函数最后加一个 system(“pause”)之后才打到可以观察到的地方。改进方法:可以将主函数定义成一个,不用分开,去掉 for(;)这个循环会好点。(2)经验和体会经验和体会12本次课程设计的题目我一开始看到的时候以为很容易就能做出来,所以只是大概想了一下思路,就直接开始了,其实这个实验可以用顺序表做会思路更清晰一些,我没有选择顺序表来做,因为我在单链表这一部分有点模糊,所以想挑战一下用单链表来做。这个程序的每一个代码都
15、是我经过一步一步分析写出来的,在编写的过程中遇到了很多的阻碍,很多自己无法预知的错误,在不断的找错过程中,我感觉到自己在 c 语言这一方面的不足,对算法的精髓还不是很了解,对于单链表的操作也不是很熟练,尤其是在节点指针多起来的时候会有点乱,甚至搞不清指针到底指向哪里了。然而,在编程过程中,一次次的测试失败,再一次次修改正确却让我慢慢的熟悉了数据结构一些用法,渐渐的知道要编写一个系统,需要各种功能协调才能算一个系统,而每一个功能有需要很多函数之间的相互联系来调用与支撑。同时要想将课程设计完成的好,就需要积极提问,遇到不懂的地方可以找老师或同学相互交流经验,这样才会更加有效率的完成课设。经过这一段
16、时间的课设,我学到的不仅仅是数据结构的想关知识,也懂得了团队协作的重要性,知道学习需要真正扎实去学习,这样才能真正学到知识,并灵活运用这些所学知识。五、用户使用说明五、用户使用说明1、添加学生功能:进入系统后先选择 1 回车即可进入输入界面,然后按照提示输入学生学号、姓名和数据结构、数字信号处理、数字电子技术基础的分数在按回车,如果还想再继续添加就按 1 继续,否则可以按任何键退出。2、输出学生:用户在输入完学生数据后既可以按 2 输出所输入的全部学生3、插入学生:用户需在主界面按 3 即可以进入插入界面,此时可以按数字键在选择要插入的位置,如输入 1 即可以将要插入的学生插入到第一个位置,可
17、以在主界面输入 2 进行查看是否插入到指定位置。4、删除学生:用户可以在主界面输入 4 进入删除,在通过选择编号来删除要删除的学生。5、查找:查找查找功能有按学号和姓名查找,如按一进入学号查找,可以输入要查找的学号,回车即可以输出要查找的学生。6、排序:排序可以通过学号,总分,和各科成绩,输入 1 可以按学号从小到大排序,输入 2 可以按总分从小到大进行排序,输入 3 可以进入科目选择,13再按 1 进行数据结构排序,2 进行数字型号处理排序,3 进行数电的排序。7、筛选:可以按 1 进入总分筛选,进入之后输入筛选多少分以上的人,输入分数,如:200,即可输出所有大于 200 分的学生;在筛选
18、界面输入 2 可以输出全部及格的学生;按 3 可以进入各科成绩的筛选,再按 1 选出所有数据结构及格的学生、再按 2 选出所有数字信号处理及格的学生、再按 3 选出所有数字电子技术基础及格的学生。8、退出:退出程序只需要在主界面按 0 再回车即可以退出程序。六、测试结果六、测试结果1、添加学生:2、输出学生:143、插入学生:154、删除学生:165、查找学生:6、排序177、筛选0、退出程序:18七、附录七、附录#include#include#include#include int count=0;/记录学生人数typedef struct Studentchar mun12;/学号cha
19、r name20;/姓名float score8;/成绩float all_score;/总分float ave_score;/加权平均分struct Student*next;LinkList;void InitList(LinkList*&L)/初始化链表L=(LinkList*)malloc(sizeof(LinkList);L-next=NULL;void Creat_Student(LinkList*&L)/输入学生并添加到链表里面LinkList*r=L,*s;int i=0,j=1;float all=0,ave,a8;while(j=1)while(r-next!=NULL)r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 学生 成绩管理系统
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。