学年论文(数据结构2015-2016第一学期)题目:数据结构课程设计作者:陈炳宏所在学院:信息科学与工程学院专业年级:信息安全14-1指导教师:刘淑娴职称:副教授2016年1月4日1一.学生成绩管理系统................................................................................................21.1需求分析..........................................................................................................21.1.1程序分析:...........................................................................................21.1.2执行方式:...........................................................................................21.1.3程序执行的命令包括:......................................................................21.1.4测试数据:.............................................................................................31.2概要设计..........................................................................................................31.2.1线性表的抽象数据类型定义为:........................................................41.2.2结点的抽象数据类型定义为:............................................................41.2.3指针的抽象数据类型定义为:.............................................................41.2.4本程序包含8个模块:.......................................................................51.3详细设计..........................................................................................................61.3.1元素类型、结点类型和指针类型......................................................61.3.2函数说明..............................................................................................61.3.3功能函数..............................................................................................61.4调试分析.......................................................................................................161.5用户手册.......................................................................................................161.6测试结果........................................................................................................182一.学生成绩管理系统1.1需求分析1.1.1程序分析:本程序是一个基于线性表结构编写的学生成绩管理系统,学生可以进行包括学生信息建立、在不同位置插入学生信息、查询指定学生信息、删除指定学生信息和输出显示所有学生信息这五项功能,功能操作简单,效率高,可延展性强。为保证信息的真实性,学生信息中学号长度num=11,姓名长度name=8,性别gender=3,成绩仍意输入,并且学号和成绩只能为数字,否则程序出错。1.1.2执行方式:本程序以用户和计算机的对话方式执行,即在计算机终端上显示7个共能选择的“提示信息”之后,由用户在键盘上输入本程序中规定的功能指令;相应的输人数据(并能滤去输入中的非法字符)和显示信息来处理结果。1.1.3程序执行的命令包括:(1)学生信息链表的建立;建立后仍意建继续输入,n和N退出;(2)插入学生信息;输入插入的位置;(3)查询学生信息;选择两种方式之一查找并查询;(4)删除学生信息;选择两种方式之一查找并删除;(5)修改学生信息;选择两种方式之一查找并修改;(6)输出所有学生信息;(7)退出管理系统。31.1.4测试数据:(1)建立三个学生信息:学号(11)姓名(8)性别成绩20141305210,cc,n,8920141302399,sxz,w,9920151432596,sad,n,88(2)插入一个学生信息:学号(11)姓名(8)性别成绩2016,scs,n,79输入插入位置:2(3)查询学生信息:按1选择学号查询,输入学号:20141305210按2选择姓名查询,输入姓名:scz(4)删除学生信息:按2选择姓名删除,输入姓名:cc(5)修改学生信息:按1选择学号修改,输入学号:20141302399输入修改后的数据:学号(11)姓名(8)性别成绩20141312399,scz,w,691.2概要设计为实现上述程序功能,首先需要创建一个建立信息链表的函数,用于建立线性链表并对每个结点进行顺序的信息存储,然后创建其他五个函数,来依次实现插入、删除、查询、修改、输出信息。其中插入信息需要利用循环使得指针循环指向指定结点,而删除、查询和修改均需要利用循环判断来找到指定数据。41.2.1线性表的抽象数据类型定义为:typedefstruct{数据对象:charnum,name,genger,score;数据关系:一对一的线性关系}DataType;基本操作:建立一对一的信息组1.2.2结点的抽象数据类型定义为:typedefstructnode{数据对象:DataTypedata;structnode*next;数据关系:*next∈data;}ListNode;基本操作:ListNode*findList(LinkListhead);初始条件:链表指针类型的建立操作结果:查询函数为指针类型voidchangeNode(LinkListhead);初始条件:查询函数调度成功,选择处有数据操作结果:新数据覆盖原数据来修改voiddelNode(LinkListhead);初始条件:查询函数调度成功,选择处有数据操作结果:选中数据被释放voidprintList(LinkListhead);初始条件:线性表存在且其余操作完成操作结果:输出显示最终数据1.2.3指针的抽象数据类型定义为:typedef{数据对象:ListNode*LinkList;LinkListhead;数据关系:LinkList初始为head基本操作:LinkListcreateList(void)初始条件:建立一对一的信息组5操作结果:建立信息链表函数1.2.4本程序包含8个模块:(1)主程序模块:BEGIN{main}初始化;SWITCH接受命令;处理命令;UNTIL数据处理结束;END.(通过返回的菜单选择函数值进行功能选择并调用实现功能;)(2)菜单选择——单纯的选择功能序号并返回给主函数;(3)链表建立函数——实现顺序链表的建立并输入相应的数据进行结点的存储;(4)插入信息函数——通过找到指定节点并进行结点插入的函数;(5)查询信息函数——通过循环对输入的学号和姓名和已经存在数据一个一个往后对比来查找全部函数;(6)删除信息函数——通过查询函数的基本原理,找到指定函数后,释放指定结点;(7)修改信息函数——通过查询函数的基本原理,找到指定函数后,修改并覆盖原结点;(8)输出所有信息函数——利用循环依次输出结点直到结点为空为止。各模块之间的调用关系如图1:图1模块调用关系图主程序链表建立函数插入信息函数菜单查询信息函数删除信息函数修改信息函数输出61.3详细设计1.3.1元素类型、结点类型和指针类型TYPEDEFDataType—char,int;{元素类型}LinkList—head;{指针类型}ListNode—node;{结点类型}data:DataType;next:*node;END;ViSitProc—PROCEDURE(p:LinkType);{访问结点的过程类型}1.3.2函数说明intmenu_select();LinkListcreateList(void);voidprintList(LinkListhead);intinsertNode(LinkListhead,ListNode*p,inti);ListNode*findList(LinkListhead);voiddelNode(LinkListhead);voidchangeNode(LinkListhead);1.3.3功能函数(1)建立链表函数LinkListcreateList(void){ListNode*p,*rear;//结点指针charflag;//判断是否继续输入的标志head=(ListNode*)malloc(sizeof(ListNode));//头节点指针开辟内存rear=head;//开始头与尾相同while(flag!='n'&&flag!='N'){p=(ListNode*)malloc(sizeof(ListNode));//结点指针开辟空间printf(\n学号(11)姓名(8)性别成绩\n);7scanf(%s%s%s%d,p-data.num,p-data.name,p-data.gender,&p-data.score);rear-next=p;//让尾结点指向当前结点的下一结点,并且该节点赋值为p结点rear=rear-next;//尾结点指针指向下一结点printf(按n或N退出,按其他键继续输入\n);getchar();//对标志赋值判断是否继续scanf(%c,&flag);}rear-next=NULL;//让尾结点的下一结点为空来结束链表returnhead;//返回头指针}(2)插入信息函数intinsertNode(LinkListhead,ListNode*p,inti){ListNode*p1;intj=1;p1=head;if(p1-next==NULL)//判断如果为空表,则插入作为第一个结点*//{if(i==0){p1-next=p;//让头节点的指向下一节点,且该结点为p结点p-next=NULL;//p结点的下一结点为空来结束链表}elsereturn-1;//如果在空表情况下输入大于0位置,则返回-1。}while((j=i-1)&&(p1!=NULL))//找到第i-1个结点,p1指向该结点//{p1=p1-next;j++;}if(p1==NULL)