系统展示
一、系统简介
1.1 系统功能简介
基于J2EE的线上员工管理平台,满足工厂对雇员的人员调整,出勤,薪水记录与缺勤申请的审核。**
(1)有两种身份《经理》《员工》
(2)实现的功能有
(1)员工添加;
(2)员工上、下班打卡
(3)员工月内出勤记录查看;
(4)员工申请休假;
(5)经理审核员工的请假申请 ;
(6)每月自动计算工资;
1.2 系统技术平台简介
使用了MySql+Struts+Spring+Hibernate技术。
Mysql 版本:mysql-5.7.13
Struts版本:struts-2.1.7
使用的所有jar包打包在同一目录下的lib文件夹中。
二、总体设计
2.1 设计概述**
2.1数据库(蓝色代表主键,红色代表外键)
1.emp_table
emp_id emp_type emp_name emp_password emp_salary mgr_id dept_name
2.attend_table
attend_id punch_time ,is_come emp_id
2.app_table
app_id attend_id app_reason type_id attend_id
4.pay_table
pay_id pay_month pay_amount emp_id
5.Check_table
check_id app_id check_result mgr_id
**
## 系统架构如图所示:
**
下面分别对各个包,及其作用进行介绍:
1.doamin
domian包下包括所有表的实体类。通过Hiberbate注解方式进行配置。有每个表的属性,以及他们之间的一对一映射、一对多,多对一映射。Setter,getter方法。
2.dao 和daoImpl
dao层是包含了各个与数据库进行交互的方法的接口,daoImpl是对这些接口的实现包括对员工的增删改,员工申请保存等等操作。后面会细讲。
3.service 和serviceImpl
service是包含了业务逻辑的各个方法的接口,serviceImpl是对这些接口的实现。对各个表的业务逻辑操作都被包含在了EmpManager和MgrManager两张表中。
4.action 和action.authority和base
action是包含了接收前端数据,给前端返回数据的所有方法。
5.总体的功能有:
员工可以登录自己的账号,查看出勤记录,本月薪水,可以申请出勤假条。经理可以登录自己账号,可以进行上班打卡,查看出勤记录。
三、详细设计
3.1 本章节将详细列举出已有功能的介绍和自己的理解。
(1)登录验证
(2)员工打卡
(3)员工申请出勤异常
(4)经理审核请假表
(5)添加员工、删除员工
(6)计算月工资
实现经理登录与员工登录的验证区分。
(对照源码理解)
3.2 新增或修改功能介绍
本章节主要用来简要介绍自己修改或新增的功能及其介绍,如表2-1所示。
表2-1 修改和添加的功能说明
序号 功能 功能说明
1.添加(删除员工的功能) 经理登录后可选择删除该一个自己主管部门的员工
2.修改header.jsp,员工经理主页面 修改页面使呈现更加清晰简洁
3.修复了经理审核提交的bug
4.修改了员工打卡逻辑 员工只能在固定打卡时间进行打卡,否则打卡失败。
public int punch(String user, boolean isCome)
{
Employee emp = empDao.findByName(user);
if (emp == null)
{
return PUNCH_FAIL;
}
//找到员工本次打卡对应的出勤记录
Attend attend =new Attend();
System.out.println("============打卡==========");
//获取打卡时间
int punchHour = Calendar.getInstance()
.get(Calendar.HOUR_OF_DAY);
attend.setPunchTime(new Date());
attend.setIsCome(isCome);
attend.setEmployee(emp);
//随时可以打卡,但是上午按下班打卡没有用不插入记录。
if(punchHour<LATE_LIMIT) {
//上班打卡
if (isCome)
{
// 9点之前算正常
if (punchHour < COME_LIMIT)
{
attend.setType(typeDao.get(1));
}
// 9~11点之间算迟到
else if (punchHour < LATE_LIMIT)
{
attend.setType(typeDao.get(4));
}
attendDao.save(attend);
return PUNCH_SUCC;
}else {
return PUNCH_FAIL;
}
//11点之后算旷工,无需理会
//最晚8点下班打卡,否则不能打卡
}
else if(punchHour>EARLYNOON_LIMIT&&punchHour<ULTIMATE_LIMIT){
//下班打卡
if(!isCome) {
if (punchHour > LEAVE_LIMIT)
{
attend.setType(typeDao.get(1));
}
//16~18点之间算早退
else if (punchHour < EARLY_LIMIT)
{
attend.setType(typeDao.get(5));
}
attendDao.save(attend);
return PUNCH_SUCC;
}
}else
return PUNCH_FAIL;
return PUNCH_FAIL; //如果前面都没执行,就返回打卡失败
}`
```