数据结构课程设计(学生成绩管理系统)(22页).doc
《数据结构课程设计(学生成绩管理系统)(22页).doc》由会员分享,可在线阅读,更多相关《数据结构课程设计(学生成绩管理系统)(22页).doc(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-数据结构课程设计(学生成绩管理系统)-第 20 页目 录一、运行环境1一、运行环境1二、设计目的和意义2设计目的2设计意义2三、算法思想2四、模块划分5五、数据结构5六、程序流程图6七、程序源代码7八、程序调试过程分析17九、测试数据17十、测试结果及分析19十一、小结21参考文献22一、运行环境硬件环境:电脑二、设计目的和意义此次课程设计的目的是让学生在学习完C、数据结构等课程基础上,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。此次设计意义在于让我们更好的去掌握C的基本语
2、法、函数以及Visual C+集成编译环境。掌握树、图、链表等基本数据结构及其应用。掌握程序流程以及基本应用方法。应用软件工程方面的知识,熟悉软件开发的流程。通过本课程设计,培养学生进行软件设计能力。首先进行需求分析,针对目标对象完成程序结构设计、对象设计、主要数据结构设计、输入输出设计、人机界面设计等。三、算法思想整个系统除了主函数外,另外还有12个函数,实现十大功能:菜单选择、输入功能、显示功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改。各个函数的详细设计说明分别如下:1、 主函数 main()利用无限次循环for(;)和swithch()实现各函数的调用,系统根据
3、输入的数字选项来调用相应的函数。2、 初始化函数 STUDENT *init()这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为NULL。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!3、 菜单选择函数 int menu_select();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4、 输入记录函数 STUDENT *create()这是一个无参函数,用来执行第
4、学生成绩记录的输入,当学生为0时停止输入,函数结束后,带回一个指向链表头的指针head。算法:先声明一个首节点head,并将head-next设为NULL。每输入一个数据就声明一个新节点p,把p-next设为NULL,并且链接到之前列表的尾端。5、 显示记录函数 void print(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。算法:先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。然后再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。重
5、复执行此步聚直到p指针指向NULL为止。6、 查找记录函数 void search(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,实现按姓名对某个学生进行查找,并显示所查找到的记录。算法:采用线性查找法往下一个节点查找。输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p-name,s) & p != NULL时,使p后移一个结点,如果p!=NULL,输出p所指的结点。7、 删除记录函数 STUDENT *delete(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该
6、学生信息,等确认后便可按“Y”进行删除。算法:从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的那个学号。如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,直到遇到表尾为止。8、排序函数 STUDENT *sort(STUDENT *head)这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。9、修改函数 STUDENT *xiugai(STUDENT *head)这是一个有参数函数,形参为“链表头的指针”,首先按学生姓名对要修改的学生记录进行查找,然后对找到的记录进行修改。算法:采用线性查找法往下一个节点查找。
7、输入所要查找的学生的姓名s,设一个指针变量p,先指向第一个结点,当strcmp(p-name,s) & p != NULL时,使p后移一个结点,如果p!=NULL,修改p所指的结点的相关记录,修改完成后对记录进行输出,然后重新调用排序sort函数,对新修改的数据进行排序。10、 插入函数 STUDENT *insert(STUDENT *head,STUDENT *new)这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。算法:先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求按平均分
8、的高低顺序插入。先用指针变量p0指向待插入的结点,p1指向第一个结点。如果p0-averageaverage,则待插入的结点不应插在p1所指的结点之前。此时将p1后移,并使p2指向刚才p1所指的结点。重复以上的步骤,直到p0-average=p1-average为止。这时将p0指向的结点插到p1所指结点之前。但是如果p1所指的已是表尾结点,则p1就不应后移了。如果p0-average比所有结点的average都小,则应将p0所指的结点插到链表末尾。如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值赋给p2-,使p2-next指向待插入的结点,然后将p1的值赋给p0-next,
9、使得p0-next指向p1指向的变量。如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0-next。如果要插到表尾之后,应将p0赋给p1-next,NULL赋给p0-next。最后再调用排序的函数,将学生成绩重新排序.11、保存数据到文件函数 void save(STUDENT *head)这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。12、从文件读数据函数 STUDENT *load()这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。四、模块划分 学生成绩管理的设计,除了主函数和初始化
10、函数外,主要还设计了十个功能函数:菜单选择、输入功能、输出功能、查找功能、删除功能、排序功能、插入功能、保存功能、读取功能、修改函数。通过分组设计现实现部分功能函数说明如下:1、菜单选择:int menu_select(); 提供十种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。2、输入功能:STUDENT *create(); 通过一个for循环语句的控制,可以一次完成无数条记录的输入。并将其存入链表。 3、输出功能:void print(STUDENT *head); 通过一个while的循环控制语句,在指针p
11、!=0时,完成全部学生记录的显示。知道不满足循环语句,程序再次回到菜单选择功能界面。4、查找功能:void search(STUDENT *head); 通过strcmp来判断是否找到所需查找的学生记录,在不满足该条件时,通过while语句完成结点的下移,最后若查找成功则完成显示。返回主菜单界面。5、删除功能: STUDENT *Delete(STUDENT *head); 按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。6、修改功能:STUDENT *xi
12、ugai(STUDENT *head);首先通过想核对想要修改的学生姓名进行查到,相当于调用一次查找函数search,如果查找成功则对数据进行修改,最后计算其总分和平均分,调用一次排序函数sort,重新进行排序,并重新存储记录。五、数据结构定义了一个typedef struct stu 的结构体数组,相关描述如下:#define LEN sizeof(STUDENT)typedef struct stu /*定义结构体数组用于缓存数据*/char num6;char name20;int score3;int sum;float average;int order;struct stu *ne
13、xt;STUDENT;六、程序流程图61、程序的总体模块流程图如下:删除学生记录读写文件对学生成绩进行排序查询学生记录修改学生记录输出学生记录输入学生记录初始化主界面插入学生记录退出学生成绩管理系统图6-162、删除学生记录流程图如下:P1=P2=head输入要删除的学生的学号Strcmp(P1-sum,s),P1!=NULL输出该记录P2-next=P1-.nextFree(P1)返回主菜单是P1指向下一个结点P2=P1否图6-26.3、插入学生记录流程图如下:P2=P1=headP0指向要插入的结点向P0输入要插入的学生信息P0-averageP1-average&P1-next!=NUL
14、LP2=P1 P1=P1-nextP2-next=P0 P0-next=P1调用排序函数sort返回主菜单是否图6-3七、程序源代码#include #include#include /*其它说明*/#include /*字符串函数*/#include /*字符操作函数*/#define LEN sizeof(STUDENT)typedef struct stu /*定义结构体数组用于缓存数据*/char num6;char name20;int score3;int sum;float average;int order;struct stu *next;STUDENT;/*函数原型*/ST
15、UDENT *init(); /*初始化函数*/int menu_select(); /*菜单函数*/STUDENT *create(); /*创建链表*/void print(STUDENT *head); /* 显示全部记录*/void search(STUDENT *head); /*查找记录*/STUDENT *Delete(STUDENT *head); /*删除记录*/STUDENT *sort(STUDENT *head); /*排序*/STUDENT *insert(STUDENT *head,STUDENT *New); /*插入记录*/STUDENT *xiugai(STU
16、DENT *head); /*修改记录*/void save(STUDENT *head); /*保存文件*/STUDENT *load(); /*读文件*/*主函数界面*/void main()STUDENT *head,New;head=init(); /*链表初始化,使head的值为NULL*/for(;) /*循环无限次*/switch(menu_select() case 1:head=create();break; case 2:print(head);break; case 3:search(head);break; case 4:head=Delete(head);break;
17、 case 5:head=sort(head);break; case 6:head=insert(head,&New);break; /*&new表示返回地址*/ case 7:save(head);break; case 8:head=load(); break; case 9:xiugai(head);break; case 10:exit(0); /*如菜单返回值为9则程序结束*/*初始化函数*/STUDENT *init()return NULL; /*返回空指针*/*菜单选择函数*/menu_select()int n;printf(*n);printf(tt Welcome to
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 学生 成绩管理系统 22
限制150内