基于二叉排序树的员工信息管理系统
来源:互联网 发布:剑网3丐哥捏脸数据 编辑:程序博客网 时间:2024/05/16 23:42
这学期因为“数据结构”这门课程的课程设计要求,用Java语言做了一个基于二叉排序树的简单的员工信息管理系统。
因为课程设计要求运用数据结构知识来做出一个成品,经过考虑后采用二叉排序树来设计一个员工信息管理系统。整个设计用了大约七天时间完成,系统界面比较简陋,功能也是比较简单。
一、实现的界面如下:
二、实现的功能如下:
- 权限控制。账户分为管理员账户和普通账户,两者拥有不同的权限,从而保障了管理系统的信息安全。管理员的账号名与密码均为:admin,普通用户的账号名与密码均为:user
- 信息查询。可以指定查询条件对信息进行检索,得到的信息以表格形式呈现,且按工号大小排列
- 信息增添。可以向管理系统添加新的员工信息,而每个员工的工号是其唯一标识,均为大于零整数且不可重复
- 信息修改。可以向系统中已经保存的员工信息进行修改,但其工号不可以修改
- 信息删除。可以删除系统中的员工信息,则其工号可以被下一个新的员工使用
三、数据结构的设计
- 每个员工的属性有姓名、性别、部门、电话、职务、工号、备注等七项,因此我创建了一个Employees类来表示员工信息,用集合List< Employees>来存储所有的员工信息
- 为了将员工信息组织起来且获得较高的检索效率,我采用了二叉排序树来构建数据模型,以每个员工的工号大小来作为构建二叉排序树时的标识符
- 二叉排序树的每个结点BitreeNode拥有四个属性:代表员工信息的Employees类型的的oneself,BitreeNode类型的结点的双亲结点parent,BitreeNode类型的结点的左孩子lchild,BitreeNode类型的结点的右孩子rchild
- 当查询所有员工信息时,数据是按工号大小排序的。而根据二叉排序树的结构特点,当对其进行中序遍历时即可得到排序结果。程序中提供了中序遍历InOrder算法。当指定查询条件为“工号”时,我设计了查找算法Search来查找对应的员工信息
- 当增添员工信息时,即是在原二叉排序树的基础上进行插入操作。在程序中提供了插入算法insert(BiTreeNode root, Employees item); root是原二叉排序树,item是要插入的员工信息
- 当修改员工信息时,可以通过查找算法Search来找到相应结点从而修改员工信息,但因为二叉排序树是根据员工信息集合List< Employees>来构建的,修改了二叉排序树后也要再来修改List< Employees>,效率低且没有必要。因此在修改算法Revise中我直接对List< Employees>进行修改操作,然后再通过插入算法insert(BiTreeNode root, Employees item)重新构建一个新的二叉排序树
- 当删除员工信息时,与修改操作一样可以通过直接操作List< Employees>来构建新的二叉排序树,这样操作简单且效率高。但因为在删除二叉排序树某个结点时,要考虑该结点是叶子结点、左右孩子均存在或者两者存一三种情况,算法较为复杂而且比较有锻炼意义。因此本课程设计中我依然保留了二叉排序树结点删除算法Delete,在结点删除后我再对List< Employees>进行了相应的删除操作。
四、整个工程的代码设计如下:
想要构建一个二叉排序树,就需要一步步地来设计结点构造与结点信息。我为每个员工设计的信息有以下几种:
// 名字 private String name; // 性别 private String sex; // 部门 private String section; // 电话 private String tel; // 职务 private String post; // 工号 private int id; // 备注 private String note;
二叉排序树的结点除了要包含员工信息外,还需要包含结点本身在二叉排序树中的结构信息:
// 员工的各项信息 private Employees oneself; // 结点的双亲 private BiTreeNode parent; // 结点的左孩子 private BiTreeNode lchild; // 结点的右孩子 private BiTreeNode rchild;
我将所有员工信息集合存放在:public static List< Employees> all当中,这样我们就可以运用二叉排序树的插入算法来构建二叉排序树了,增添员工信息实际上就是向all增添信息,随后再来构建新的二叉排序树:
/* * 二叉排序树插入算法 ,item是要插入的员工信息, root是二叉排序树 * “员工的工号不能相同且要大于零”这个条件已经在PanelIncrease限制 */ private void insert(BiTreeNode root, Employees item) { /* * 因为二叉排序树根结点已经初始化,所以不必考虑二叉排序树为null的情况 */ if (item.getId() < root.getOneself().getId()) { if (root.getLchild() == null) { BiTreeNode temp = new BiTreeNode(item); root.setLchild(temp); root.getLchild().setParent(root); } else { insert(root.getLchild(), item); } } else if (item.getId() > root.getOneself().getId()) { if (root.getRchild() == null) { BiTreeNode temp = new BiTreeNode(item); root.setRchild(temp); root.getRchild().setParent(root); } else { insert(root.getRchild(), item); } } }
删除员工信息也与增添操作类似,都是对all进行删添,随后构建新的二叉排序树。
查询面板中JTable对所有员工信息进行了排序,排序依据员工工号大小,根据二叉排序树的结构特点,对二叉排序树进行中序遍历即可得到排序结果:
// 中序遍历二叉排序树 private void inorder(BiTreeNode tree) { if (tree != null) { inorder(tree.getLchild()); str.add(new Employees(tree.getOneself().getName(), tree .getOneself().getSex(), tree.getOneself().getSection(), tree.getOneself().getTel(), tree.getOneself().getPost(), tree.getOneself().getId(), tree.getOneself().getNote())); inorder(tree.getRchild()); } }
Panel包中有三个类,分别是PanelIncrease,PanelInquiry,PanelUser,功能分别是管理员账户增添面板,管理员账户功能面板,普通用户查询面板。因为Frame包中的FrameAdmin类是管理员账户窗口,当中建立了一个JTabbedPane,则需要为之增添“增添”和“查询”两个选项卡面板,代码如下:
// 选项窗格 private JTabbedPane createTabPanel() { JTabbedPane jtp = new JTabbedPane(); jtp.addTab(" 增添 ", new PanelIncrease()); jtp.addTab(" 查询 ", new PanelInquiry()); return jtp; }
源代码下载:基于二叉排序树的员工信息管理系统
1 0
- 基于二叉排序树的员工信息管理系统
- MFC制作员工信息管理系统
- 员工信息管理系统--C语言
- C++抽象编程——简单的员工信息管理系统
- 基于 appfuse 的学生信息管理系统
- 基于linux下的学生信息管理系统
- 基于文件的学生信息管理系统
- 基于C++的学生信息管理系统
- 基于SSH的个人信息管理系统
- 基于QT的学生信息管理系统开发
- 基于javaweb的客户信息管理系统搭建
- 基于JavaSwing+MySql的学生信息管理系统
- 基于struts2开发的学生信息管理系统
- 基于链表的学生信息管理系统和基于MySQL的学生信息管理系统 -C语言
- 员工信息管理系统总结(链表)
- 员工信息管理系统(c++继承)
- Linux多线程编程之员工信息管理系统
- 基于三层架构的员工管理系统
- [Leetcode]Remove Duplicate Letters
- ansibleplaybook的使用
- jQuery ajax跨域调用出现No Transport
- linux初始
- QT5 添加 newtwork 库后还是无法找到库(LNK2019)的解决方法
- 基于二叉排序树的员工信息管理系统
- stm32f103串口驱动MFRC522阅读器
- NYOJ 312-20岁生日
- 九亭违规建造变电所,不顾周围100米内幼儿园、小学和大型社区的安危
- android中保存Bitmap图片到指定文件夹中的方法
- Process and Thread
- HDU 4790 Just Random
- elnet允许root用户登录
- linux初始对比