1、 1 / 66 1 需求分析 1.1 课题设计目的 使用面向对象语言 java 设计一个员工工资管理程序,有显示、储存、显示、修改和删 除功能。每个员工有员工工号、姓名、基础工资、职务工资、奖金和工资总额。其中员工工 号不需要用户输入,存储时,数据库系统按顺序自动递增。 1.2 功能要求 (1) 查询功能中,用户查询时可以选择按工号查询,也可以选择姓名进行查询,也可 以选择查询工资总额在某个范围内的员工的工资信息,比如查询工资总额在 10002000 的 全体员工的信息,还以查询全体员工工资,并且选择按某种方式排序。 (2)修改功能中,用户可以选择修改方式,比如修改某一行,即选择修改某个员工的
2、 工资,此时需要输入修改项,即基础工资、职务工资和奖金中的一项,因为工资总额是基础 工资、职务工资和奖金的综合,故不能直接修改,同时还需要输入工号,为了避免误改,所 以需要确认修改后才能修改;也可以选择修改某一列,即选择修改全体员工的某一项工资, 所以还需要选择修改项,其中的修改项也只有基础工资、职务工资和奖金三项。 (3) 储存功能即增加用户的功能中, 用户不需要输入员工工号, 但必须输入员工姓名, 其他几项均可以不输入,基础工资、职务工资、奖金和工资总额均被系统初始化为零。 (4)删除功能中,必须慎重操作,删除时必须输入员工工号,先查询出来,把员工的 各项信息显示在下方的文本框中, 在用户
3、点击确认删除时系统就将该工号的用户的各项信息 从数据库中删除。 在此说明一点,由于工资总额是员工基础工资、职务工资和奖金的综合。基础工资、职 务工资和奖金中的任意一项改变都会影响工资总额的数值, 当修改频繁是, 将会大大增加数 据库系统的负担,且设计起来更加繁琐,所以工资总额并没有真正的储存在数据库中, 每 一次的查询或者其他显示工资总额的地方全都是用SQL 或者 HQL 的函数查询语句来实现的。 2 / 66 1.3 设计流程 设计流程采用先界面后模型 图 1 界面设计: 外层全局界面设计 查 询 模 块设计 储 存 模 块设计 修 改 模 块设计 擅 长 模 块设计 各组件事件处理功能实现
4、设计: 外层全局界面各组件事件处理设计 查 询 模 块 各 组 件 事 件 处理 储 存 模 块 各 组 件 事 件 处理 修 改 模 块 各 组 建 事 件 处理 删 除 模 块 各 组 件 事 件 处理 Hiberna te 实现 查询功 能 Hiberna te 实现 储存功 能 Hiberna t和jdbc 实现修 改功能 Hiberna te 删除 功能 数据库及表的设计 3 / 66 1.4 工资表模式 根据上述目的和各项功能要求, 选择如表 1 的数据库表来储存员工各项工资信息其中的 Id 号即为员工工号。 表 1 ID 姓名 基础工资 职务工资 奖金 3 张三 5000 200
5、0 3000 1.5 开发环境 JDK1.6 Myeclipse6.5 Mysql5.22 Hibernate annotation3.4 测试工具:junit4.7 注明: (1)在详细设计中的代码均为局部的关键代码,完整代码均在附录里; (2)数据库里的信息只为了测试,与其含义没有关系; (3)所有模块的模样图中,圆角框表示容器,直角框表示组件。 4 / 66 2 详细设计 2.1 外层模块设计 2.1.1 外层模块模样 根据个人设计思路,设计的外侧模块的模样如图 2 图 2 外侧模块设计,首先新建一个叫 MyApplet 的类,并继承 java 下 applet 包中的 Applet 类
6、,在这里,也可以自己定义一个自己的框架的类,去继承 Frame 类,但是简单起见,我 就定义了自己的框架的类,并继承了 Applet 类,这样有些 Applet 已经实现的功能就不需要 我自己去实现了, 比如当你点击这个类运行而得的窗口的右上角的 “X” 时, 窗口就关闭了, 如果没有继承 Applet 类, 那么这些功能将由自己实现, 查看 java 的那套 api 会发现里面有个 一属性常量,给定义的窗口设置该属性就可以解决。 参考印旻主编的java 与面向对象程序设计教程第八章的布局设计可知:FlowLayout 的布局方式虽然非常简单, 但是这种布局的容器会将容器的里的组件按照加入的顺序一个个 从左往右,从上往下的排列。这样的布局显然不合适,也不美观。而 BorderLayout 则将整个 容器分为东、西、南、北、中,这样的布局比较死,限制了设计者自己定义布局的功能。 GridLayout 的布局形式,虽然给了设计者自己定义布局的一部分功能,但是还是存在很大一 外层模块 Myplet 子容器 Panel1 子容器 Panel2 子容器