数据结构大作业
文 档
1 设计
1.1 开发环境
1.2 功能实现
设计要求实现不同权限用户的登录管理。针对本系统,分为教师、学生两种权限。教
师权限可管理全部学生的所有信息;学生权限只能查看及修改自身的信息,但是不能够修
改成绩。
教师权限拥有以下功能:
显示记录
显示本用户信息
此功能对教师用户显示项目:姓名、性别、年龄、 号、负责班级、月
薪、工龄和权限的信息。
显示所有学生信息
将所有学生的所有信息项列表显示出来。
显示所有教师信息
将所有教师的所有信息项列表显示出来。
查询记录
单项查询
此功能对姓名、年龄、学号、班级、数学成绩、语文成绩、英语成绩、
平均分、总分进行单项查询。除了姓名、学号项目,其余项目是按范围查询,
即规定查询的上、下限,若查询某一个分数上面的学生,只需将上、下限都
设置为欲查询的分数即可。
多项查询
此功能对男生、女生、年龄、班级、数学成绩、语文成绩、英语成绩、
平均分、总分进行多项混合查询。除了男生、女生项目,其余项目规定范围
查询。进行多项查询时,需连续输入要查询项目前的编号,按回车即可查询。
增加记录
可以增加学生记录和教师记录。分别按要求输入各项目的详细信息即可。
删除记录
分别通过学生的学号和教师的 号删除学生、教师记录。删除时操作仅
限于内存,只有执行存储操作时,才能覆盖记录。
修改记录
可修改本人信息和学生信息。修改本人信息时,选择要修改的项目,进行修
改;修改学生信息时,首先选择要修改的项目,然后指定要修改的记录的编号,
最后进行修改。
记录排序
可分别按: 号、男女、年龄、数学成绩、语文成绩、英语成绩、平均分进
行排序。
显示统计信息
可按分数、年龄、性别比例进行统计。其中按分数统计包括:按分数段、不
及格统计,不及格统计分为一门、两门、三门不及格统计。年龄统计分别给出男
生和女生的最大年龄、最小年龄,以及算术平均年龄。性别比例统计给出男生个
数、女生个数以及男生、女生占总人数的百分比。
保存文件
将内存中的信息保存为文本文件,学生信息保存为:!"#;教师
信息保存为 !"$#。
% 结束运行
检查是否需要保存磁盘文件,以及退出程序。
学生权限拥有以下功能:
1. 修改密码
修改本用户密码。
2. 查询本用户信息
列出本用户的所有信息。
3. 修改个人信息
使用方法同教师帐户,学生用户只可修改年龄、性别、所在班级三项内容。
保存文件
将内存中的信息保存为文本文件,学生信息保存为:!"#。
结束运行
检查是否需要保存磁盘文件,以及退出程序。
1.3 总体设计
本设计由 个 $&& 文件, 个头文件组成。
问题的分析
1. 核心算法
这样一个学生管理系统,由于一个学生或者教师有很多的数据项,包括学号、年龄
等,若使用二叉树作为数据结构,只能满足一种数据项搜索需要,其余的数据项还是需要
遍历二叉树进行搜索,因此选用单链表作为数据结构。查找时,从链表的首节点开始搜
索,一直搜索到尾节点,找到查询记录则终止。这样的数据结构有利于编写程序,对每个
数据项的查找所消耗的时间基本相同,但是所耗时间较长。一个改进的方案是用哈希表进
行搜索。排序选用冒泡排序的算法。对于单链表,排序仅需要修改指针指向,所耗空间复
杂度较小。
2. 其他设计
用户登录由一个函数 '()*+,,-$$.组成,函数返回登录成功用户的
指针,方便识别权限、显示信息、修改信息等。为了列出表格显示信息,将表格框架与具
体的数据分别显示,组成表格。列表显示整齐、美观。
数据结构
用于保存数据的底层数据结构是单链表。由于有两种权限的用户,最好的方案是用两
个链表分别保存,这样利于管理。磁盘文件保存使用 $//的输入输出流技术存为扩展名为
# 的文本文件。
设计一个 ' 类实现数据封装,一个 ' 对象存储一个学生或者教师的信息。类中
使用一个变量 -0 区分学生权限与教师权限。
$'
1
&,
-0233用户权限.学生:;教师:
+233用户密码
+45233姓名
#233性别,表示男,表示女
6233年龄
7233班级
+233号
*233数学
7233语文
8+233英语
9233总分
!-+233平均分
'(#2
&!$,
)$)*+2
&0.233显示基本情况
'.+:+::::+::::233构造函数:姓名,密码,性别,年
龄,班级,,数学,语文,英语,权限
$*;233是否修改
<2
类中,*; 静态变量用以标识是否有对象被更改过,初始值为 ,表示没有更
改。若有更改则赋值为 。
其中友员类 )*+ 实现各种功能。
$)*+
1
&,
'("233学生首节点
'("233教师首节点
&!$,
)*+.233构造函数
=)*+.233析构函数
>"?+.233返回节点数
>"&.'(@:+2
'(>"A.233返回头指针.:学生;:老师
'(-$$.233用户登陆
>-0.'(233获得权限
?.233读取文件
.233保存文件"
B$.'(233保存文件"
-9'.233添加学生
-98-.233添加老师
.233删除
9.2
7+#.'(@2
7+.'(@233修改密码
7+6.'(@233修改年龄
7+7.'(@233修改班级
7+>.'(@233修改分数
7++.'(@2
7+0.'(@2
33排序
C0.233按号从小到大排序
C0#.233按男女排序。参数:为按男女排序;为按女男排序
C06.233按年龄排序。参数:为升序;为降序
'(C07.'(233按班级升序排序
C0*.233按数学成绩降序排序
C07.233按语文降序排序
C08+.233按英语降序排序
C0-+.233按平均分降序排序
33查询
'(7&0*.'(:@233将所有男生筛选,并且返回其指针
'(7&0D5.'(:@233将所有女生筛选,并且返回其指针
$C045.233按姓名查询
$C0.233按号查询
'($C06.'(:@233按年龄查询.下限、上限,返回符合条件的节点组成的链
表,参数为长度
'($C07.'(:@233按年级查询
'($C0*.'(:@233按数学成绩查询
'($C07.'(:@233按语文成绩查询