没有合适的资源?快使用搜索试试~ 我知道了~
实习题目一 学生成绩管理系统指导书.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 187 浏览量
2022-06-21
18:05:57
上传
评论
收藏 606KB DOC 举报
温馨提示
试读
64页
实习题目一 学生成绩管理系统指导书
资源推荐
资源详情
资源评论
实习题目一 学生成绩管理系统
【需求规格说明】
学生成绩管理是高等学校教务管理的重要组成部分,主要包括学生注册、考试成绩的录入及修
改、成绩的统计分析等等。设计一个系统实现对学生成绩的管理。
【基本要求】
要求系统应具有以下基本功能:
(1)学生注册登记;
(2)增加、删除某一班级的学生数;
(3)成绩录入:输入学生的考试成绩;
(4)成绩修改:若输入错误可进行修改;
(5)统计分析:对某个班级学生的单科成绩进行统计,求出平均成绩;求出成绩处于指定分
数段内的学生人数;求出每个学生一学期各科的平均成绩等;
(6)查找:查找某个学生的某门课程成绩,查找某门课程成绩处于指定分数段内的学生名单
等等。
(7)打印:打印一个班级学生的单科成绩;打印某一课程成绩处于指定分数段内的学生名单 ;
打印学生在某一学期的成绩报告单;
(8)排序:按照学生成绩的总分排序学生记录。
【算法设计】
(1)设计思想:
本题的核心操作是查询,因为哈希表的查找效率很高,应此在实现该系统的时候考虑到应用
哈希表这样一种数据结构. 哈希函数的设计采用除留余数法,解决碰撞冲突采用线性探测在散列的
方法。另外考虑到要排序,而且为了实现排序算法的时间复杂度尽可能低,采用了二叉排序树的
数据结构解决排序问题。
由于哈希表的关键字项只能有一项,为了实现按学号或按姓名查找和按班级插入和删除学生
信息,设计了三个哈希表来实现该学生管理系统,其中学号哈希表存放所有的学生信息,包括学号 .
姓名.班号.C 语言成绩.数学成绩.英语成绩.总分以及平均分,其中学号哈希表的表项关键字为学号;
姓名哈希表以学生姓名的 ASCII 码值为表项关键字,其中该姓名哈希表存放了学生的学号作为索引
项;班级哈希表以班号为表项关键字,该班级哈希表用一个数组存放了该班所有学生的学号。
二叉排序树以学生成绩的总分作为关键字项,另外存放了学生的学号与姓名作为索引信息,
排序时,将学生的学号,姓名和总分依次插入二叉排序树,按照成绩总分排序只要中序遍历此二叉
树便可得到。
实现按学号和按姓名查找,并且实现三个表的动态的修改即(插入和删除),当插入(删除)学生
信息到学号哈希表时,先到学号哈希表去查找学生的相关信息,未找到时(找到时)就在学号哈希表
中插入(删除)该学生的所有信息,同时也要把学生的信息反映到姓名哈希表和班级哈希表中。当从
姓名哈希表插入(删除)学生信息时,计算该学生姓名的 ASCII 码值作为关键字到姓名哈希表中时,
到哈希表中去对应信息,如果找不到(找到)就在姓名哈希表中插入(删除)姓名的 ASCII 码关键字的
值,同时在姓名哈希表中插入(删除)该学生的学号。当从班级哈希表中插入(删除)学生信息时,把
班号作为关键字到班级哈希表中去查找对应的信息,如果找不到就提示不存在该班级,找到该班号
就在班号哈希表的班级数组中插入该学生的学号,增加该班级的学生人数。
三个哈希表及二叉树之间的对应关系见下图:
2008.7 数据结构课程设计
- 1 -
班号哈希表
班编号
0005
0008
0002
0010
。。。。
0003
0006
0001
0007
学号哈希表
关键字项 数据项
学号 班号 姓 名 其它信息
2006 0010 huang
2007 0008 kai
2008 0002 tao
2009 0003 liu
2010 0004 zhang
2011 0009 li
2012 0002 wang
2013 0006 chen
2014 0008 wen
2015 0007 yang
2016 0006 song
2017 0008 jiang
2018 0005 xu
2019 0006 ren
2020 0010 hu
。。。。 。。。。 。。。
。。。。 。。。。 。。。
2006 0007 lai
2007 0006 lei
2008 0004 long
2009 0002 jun
2010 0001 xun
2011 0003 mei
2012 0001 ling
2013 0002 ri
2014
2018
2010
2016
2017
2018
2040
2104
姓名哈希表
关键字 学号
zhang 2025
wang 2027
yang 2030
song 2031
kai 2022
huang 2021
wen 2029
。 。 。
。。。
ren 2034
lai 2014
jiang 2032
xun 2018
二叉排序树
关键字 数据项
总分 学号 姓名
256 2006 lai
258 2009 jun
260 2012 wang
267 2013 ri
268 2011 mei
269 2010 xun
。 。 。 。 。 。
。。。
280 2015 yang
数据结构课程设计
(2)数据结构设计:
/*****************学号哈希表*****************/
typedef struct
{
DataType number;//学号
char name[10];//姓名
int classnumber;//班号
int cgrade;//语言成绩
int mgrade;//数学成绩
int egrade;//英语成绩
DataType total;//总分
float ave;//平均分
kindofitem info;//当前状态(是否被访问的标志)
}Hashitemnum;
typedef struct
{
Hashitemnum *ht;// 学号哈希表数组
int tablesize;//表长
int currentsize;//当前表的长度
}Hashtablenum;//建立的关键字为学号的学号哈希表
/*****************姓名哈希表*****************/
typedef struct
{
DataType na;//存放姓名的 ascii 码的关键字(相当于索引项)
int number;//班号
kindofitem info;//当前状态
}Hashitemname;
typedef struct
{
Hashitemname *ht;// 姓名哈希表数组
int tablesize;
int currentsize;
}Hashtablename;//建立的关键字为姓名的姓名哈希表
/*****************班级哈希表*****************/
typedef struct
{
DataType classnumber;//存放班号的关键字
int number[50];//存放本班学生学号的数组(相当于索引项)
int size;//本班学生的人数
kindofitem info; //当前状态
}Hashitemclassnumber;
typedef struct
- 2 -
2008.7 数据结构课程设计
{
Hashitemclassnumber *ht;// 班级哈希表数组
int tablesize;
int currentsize;
}Hashtableclassnumber;//建立的关键字为班号的班级哈希表
/*************二叉排序树的数据结构**************/
typedef struct tree
{
DataType data;//关键字域
int number;//学号
char name[10];//姓名
struct tree *leftchild;//左孩子
struct tree *rightchild;//右孩子
}bitree;//二叉树
(3)详细设计说明:
三个哈希表的总体设计:结构体哈希表由哈希表数组,数组个数和当前哈希表项个数三部分组
成,其中哈希表数组中每个表项的数据类型是结构体 HashItem。结构体 HashItem 由数据元素和表
项状态两部分组成,其中数据元素仅包括一个关键字域,表项状态的数据类型为枚举类型,表项状
态有 Empty,Active 和 Deleted 三种状态,分别表示表项的空,已占用和被删除三种状态。
数据结构定义如下:哈希表项包括三个,一个是数据元素关键字项,一个是元素的其它信息,
还有一个是元素项的当前状态(info).数据元素的当前状态有三种:空,占用(或称活动)和删除,因此,
需要定义一个有三个取值 Empty,Active 和 Deleted 的枚举类型 KindofItem。
存放三个哈希表的数组采用动态数组,初始化时哈希表的表的表长采用总人数的 1.5 倍。
本题的核心算法是哈希表的插入,查找和删除。其中,插入和删除操作首先需要查找数据元素
是否在哈希表中存在。查找函数共有三种情况:查找到,返回数据元素的哈希地址(值为正);未查找
到,返回一个负值(插入操作可在哈希表的该返回值的绝对值位置插入数据元素);未找到,且哈
希表已满无法插入,此时返回为-tablesize.
插入函数首先调用查找函数,返回值(设为 i)为负(说明数据原素不存在)且返回值不等于
- tablesize(说明哈希表未满)时,在哈希表的-i 位置插入数据元素。
【函数模块】
- 3 -
数据结构课程设计
,
) ;
!
"!#
"
""
$""
程序执行中函数调用关系和流程如下:
【测试数据】
欢迎使用学生成绩管理系统
菜 单
学生登记注册与学生成绩录入 增加某一班的学生记录
删除某一班的学生记录 修改学生成绩
- 4 -
学生信息的登记
与成绩录入
完成对三个表
的创建
增加学生记录
删除学生记录
修改学生记录
Create()
Add()
Delete()
xiugai()
统计学生记录
查找学生记录
打印学生记录
排序学生记录
tongji()
chazhao()
print()
Paixu()
Initiatenum()
Initiatename()
Initiatenumber()
Insertnum ()
Insertname ()
Insertclassnumber()
((( ()
Insertnum () ; Insertname ();
Insertclassnumber();
Deletebynum();
Deletebyname()
Findnumber();Findnum();
Findnumber()
Deletenumber()
Deletename()
Deletenum()
Findnumber();Findnum()
Findname();Findnum();
insert(bitree**root,Hashitemnm item)
Traverse(bitree*root)
剩余63页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 83
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功