数据结构课程设计(学生成绩管理系统)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、运行环境 0
一、运行环境 (1)
二、设计目的和意义 (1)
2.1设计目的 (1)
2.2设计意义 (1)
三、算法思想 (1)
四、模块划分 (4)
五、数据结构 (5)
六、程序流程图 (6)
七、程序源代码 (8)
八、程序调试过程分析 (18)
九、测试数据 (18)
十、测试结果及分析 (19)
十一、小结 (23)
参考文献 (24)
一、运行环境
硬件环境:电脑
软件环境:vc++6.0
二、设计目的和意义
2.1设计目的
此次课程设计的目的是让学生在学习完C、数据结构等课程基础上,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。
2.2设计意义
此次设计意义在于让我们更好的去掌握C的基本语法、函数以及Visual C++集成编译环境。掌握树、图、链表等基本数据结构及其应用。掌握程序流程以及基本应用方法。应用软件工程方面的知识,熟悉软件开发的流程。
通过本课程设计,培养学生进行软件设计能力。首先进行需求分析,针对目标对象完成程序结构设计、对象设计、主要数据结构设计、输入输出设计、人机界面设计等。
三、算法思想
整个系统除了主函数外,另外还有12个函数,实现十大功能:菜单选择、输入功能、显示功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改。各个函数的详细设计说明分别如下:
1、主函数 main()
利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
2、初始化函数 STUDENT *init()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
3、菜单选择函数 int menu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4、输入记录函数 STUDENT *create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。
算法:先声明一个首节点head,并将head->next设为NULL。每输入一个数据就声明一个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。
5、显示记录函数 void print(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重复执行此步聚直到p指针指向NULL为止。
6、查找记录函数 void search(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按姓名对某个学生进行查找,并显示所查找到的记录。
算法:采用线性查找法往下一个节点查找。输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s) && p != NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。
7、删除记录函数 STUDENT *delete(STUDENT *head)
这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。
算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。
8、排序函数 STUDENT *sort(STUDENT *head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
9、修改函数 STUDENT *xiugai(STUDENT *head)
这是一个有参数函数,形参为“链表头的指针”,首先按学生姓名对要修改的学生记录进行查找,然后对找到的记录进行修改。
算法:采用线性查找法往下一个节点查找。输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p->name,s) && p != NULL时,使p后移一个结点,如果p!=NULL,修改p所指的结点的相关记录,修改完成后对记录进行输出,然后重新调用排序sort函数,对新修改的数据进行排序。
10、插入函数 STUDENT *insert(STUDENT *head,STUDENT *new)
这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。
算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分的高低顺序插入。先用指针变量p0指向待插入的结点,p1指向第一个结点。如果p0->average