228尹龙海--上机报告(1)学生成绩管理系统

上传人:桔**** 文档编号:459469909 上传时间:2022-12-17 格式:DOC 页数:22 大小:360.50KB
返回 下载 相关 举报
228尹龙海--上机报告(1)学生成绩管理系统_第1页
第1页 / 共22页
228尹龙海--上机报告(1)学生成绩管理系统_第2页
第2页 / 共22页
228尹龙海--上机报告(1)学生成绩管理系统_第3页
第3页 / 共22页
228尹龙海--上机报告(1)学生成绩管理系统_第4页
第4页 / 共22页
228尹龙海--上机报告(1)学生成绩管理系统_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《228尹龙海--上机报告(1)学生成绩管理系统》由会员分享,可在线阅读,更多相关《228尹龙海--上机报告(1)学生成绩管理系统(22页珍藏版)》请在金锄头文库上搜索。

1、数据结构实验报告撰写人:_日 期:_数学与计算机学院实 验 报 告( 2011 / 2012 学年 第 1 学期)课程名称数据结构课程代码6014279实验时间2011年11月16日指导单位软件工程系指导教师周立章学生姓名尹龙海年 级2010级学 号专 业软件工程实验成绩精品范文模板 可修改删除实验名称学生成绩管理系统指导教师周立章实验类型设计实验学时2+10实验时间2011.11一、 实验目的和要求(1)掌握线性表的顺序存储结构,在顺序存储结构基础上进行的插入、删除、查找等算法的思想和实现;(2)掌握线性表的链式存储结构。掌握线性表的链式存储结构的建立。在链表中插入、删除和查找算法的思想和算

2、法实现。(3)掌握线性表在顺序存储、链式存储结构的基础进行的各种应用。(4)掌握链表的定义和基础知识以及链表的存储和链式存储结构及其应用。(5)掌握队列的基础知识,循环顺序队列、链队列及其应用。(6)会用结构体正确描述每一条学生记录的信息,掌握链表结构存储所处理的数据。(7)设计友好的人机交互菜单,通过相应的流程控制语句的正确使用,使得在主函数中体现对各功能模块的调用,从而实现一个完整的小型管理系统。 要求:课内实验学时2学时,课后学时要求为10学时。二、实验环境(实验设备) 硬件: 微型计算机P4软件: Windows XP+Microsoft Visual C+6.0三、实验原理及内容实验

3、题目 利用链式存储结构存储学生的成绩信息,设计一个学生成绩管理系统,具有以下功能:(1)定义学生结构体类型struct Student,每个学生包括学号、姓名、3门功课(课程名自己定义)、总分。(2)建立双向循环链表:输入若干学生的信息(当输入学生的学号为0000时结束,要求自动计算总分),并按输入的顺序建立双向循环链表;(3)输出学生成绩信息:遍历双向循环链表,输出所有学生的完整信息到屏幕;(4)查找指定学号的学生信息。如果查找成功,输出所有学生信息,否则输出失败。(5)插入学生信息:以队列的方式将新学生成绩信息插入到链表中;(6)删除学生信息:给出学生姓名,删除链表所有相同姓名的学生的信息

4、(即姓名相同的结点);(7)修改学生信息:给出学生学号,修改该生的三门课程成绩信息;(8)按总分排序:在原来的双向循环链基础上按总分降序进行就地排列。即不能增加额外的空间开销;实验前准备:完成上述(1)-(4)算法,并要求上机验证通过。实验时完成(5)-(6)。实验后,完成算法(7),(8) ,并要求上机验证通过。实验解答:1) 画出主函数的流程图 2)数据类型定义 (1)学生成绩信息结构体类型的定义struct student/(1)题学生成绩结构体类型定义char no8;/学号(数组大小要适当,小于5会错)char name8;int score3;/语文,英语,日语int total;

5、/总分; (2)双向链表结点的定义。是否将结点的数据类型定义为学生成绩信息结构体类型? struct DLink/(2)题双向链表节点定义student data;DLink *prior,*next; 双向链表的节点由两个指针域和一个数据域组成,数据域中的数据为学生成绩信息结构体类型。而不是将节点定义为学生成绩信息结构体类型。3)为了能够完成链表的各项操作,你给出的测试数据有哪些?主要用于测试哪些方面?为了能够完成链表的各项操作,需要具体的给出N个学生的基本信息,基本信息包括学号no,学生姓名name,学生的各项成绩score【3】等。菜单界面如下:创建链表函数和显示函数的测试数据如下,组要

6、用于测试函数能否成功创建链表,并将结果显示出来。录入学生信息界面如下:输出学生成绩界面如下:按学号查询学生信息界面如下: (1) (2)插入学生成绩时,有两种情况,一种是插入的位置在链表节点之间,界面如下:另一种是插入的位置长于链表总长,则尾插法,界面如下:删除学生信息界面如下:将链表数据输出来如下界面,再接合以上相关界面信息便知道删除成功了的。修改学生信息界面如下: (1) (2)将链表数据输出来如下界面,再接合以上相关界面信息便知道修改成功了的。总分排序界面如下:将链表数据输出来如下界面,再接合以上相关界面信息便知道排序成功了的。结束程序界面如下:实 验 报 告4)你是否在实验前完成了算法

7、(1)-(4)?如果完成了难点在哪儿?。如果没有完成,理由是什么? 实验前,为成功的完成第二点。首先,在初始化链表,创建链表头结点分配空间,若未分配成功则由exit(0)正常结束程序。if(!p)cout分配内存失败!endl;exit(0);/stdlib.hreturn L;忘记一个十分关键的大括号。应为:if(!p)cout分配内存失败!endl;exit(0);/stdlib.hReturn L;5)建立双向循环链表,你采用的是后插法还是前插法?写出C+语言代码。我采用尾插法创建双向量表。void LinkListC:creatList()/采用尾插法建立双向循环链表DLink *p,

8、*q; q=L;p=new DLink;if(!p)cout分配内存失败!endl;exit(0);/stdlib.hcoutp-data.no;while(strcmp(p-data.no,0000)/输入学号为0000时结束coutp-data.name;coutendl;cout依次输入语文 英语 日语3门课程的成绩p-data.score0p-data.score1p-data.score2; p-data.total=p-data.score0+p-data.score1+p-data.score2;q-next=p;p-prior=q;p-next=L;L-prior=p;q=q-

9、next;/p=new DLink;/coutendl;coutp-data.no;实 验 报 告6)在遍历双向循环链表时,你是如何判断遍历结束的?如何控制对结点的访问?给出算法的代码。 我是通过循环结束条件p=L实现的,通过建立指向结点的指针p,以及循环,使p不断地更新,指向下一个结点,并输出学生成绩信息。void LinkListC:displayLink()/显示学生表信息int i;DLink *p;p=L-next;cout学生成绩如下:endl;cout学号 姓名 语文 英语 日语 总分endl;coutendl;docoutdata.no ;coutdata.name ;for(

10、i=0;i3;i+)coutdata.scorei ;coutdata.total;/coutnext;while(p!=L);coutdata;(2)可以直接取Student A;A =L-next-data; 8)插入算法:当按队列的方式进行插入运算时,新学生信息是插入到什么位置?写出算法。 按队列的形式插入运算,即链表的尾插法,即将新学生信息插在链表的最后面。void LinkListC:insert(int i) int j=1,k;/DLink *p,*q;p=new DLink;if(!p)coutnext;/q=L;while(jnext!=L)j+;q=q-next;if(jn

11、ext=L)/在末尾插入节点(即尾插法)cout现在进行插入操作!endl;coutp-data.no;coutp-data.name;cout依次输入语文 英语 日语3门课程的成绩endl;for(k=0;kp-data.scorek;p-data.total=p-data.score0+p-data.score1+p-data.score2; q-next=p;p-prior=q;p-next=L;L-prior=p;9)如果要求将新学生信息插入到链表中指定的i位置,写出插入算法的代码,并给出时间复杂度。插入操作使用了查找算法和插入算法,插入算法的时间主要花在查找算法上,其时间复杂度为o(n),n为除头结点外结点的个数其中插入时分两种情况,一种是插入的位置在链表节点之间,另一种是插入的位置长于链表总长,则采用尾插法。void LinkListC:insert(int i)/在第i个位置插入学生信息int j=1,k;/DLink *p,*q;p=new DLink;if(!p)coutnext;/q=L;while(jnext!=L)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号