# JavaWeb_Attendance
1. 软件开发流程(可说明软件的开发流程包括几个阶段,每个阶段做什么任务,出什么文档)z
1) 分析理解前端页面,将前端的html页面改成Jsp页面,JSP页面加入page标签
2) 将JSP页面中的静态数据 修改为从数据库查询到的动态数据,通过JSTL的ForEach进行循环遍历数据,并通过EL表达式取出数据。
3) 修改JSP代码中的分页查询部分代码, 并将(总记录条数,总页码数,每页要显示的数据List<T> 当前页码,每页显示的记录条数(默认为5) 封装到PageBean类中)
4) 通过JSP中的<a>标签的href属性 或 form的action属性 或 js代码的自定义提交方法进行跳转到Servlet层
5) Servlet层调用Dao层的操作数据库的方法,包括: 数据库的增删改查。添加、删除、查询、多表查询、模糊搜索。
6) 面向接口编程,先写dao接口 再写dao的实现类。
7) 操作完数据库,如果是查询数据 将结果集返回到servlet页面,通过setAttribute(key,value)将数据存入request作用域,跳转回JSP页面,再通过JSP页面的EL表达式获取存入的数据。
8) 如果是修改数据,修改完成后直接跳转页面就可
2. 项目整体功能概要(大体说明整个项目的功能)
所有功能全部实现
- 登录、注册(用户添加)
- 登录后的首页,显示的是本地时间
- 用户管理
* 分页查询用户信息
* 修改用户用户信息(数据回显,修改)
* 删除用户信息
* 添加用户信息
* 模糊搜索用户信息
* 批量删除用户信息
- 部门管理
* 分页查询部门信息
* 修改部门信息(数据回显,修改)
* 删除部门信息(部门下人数为0才可删除,不为0就不能是删除)
* 添加部门信息
* 模糊搜索部门信息
* 批量删除部门信息
- 日报管理
* 分页查询日报信息
* 修改日报信息(数据回显,修改)
* 删除日报信息
* 添加日报信息
* 模糊搜索日报信息
* 批量删除日报信息
- 加班管理
* 加班申请分页查询
* 修改加班申请(数据回显,修改)
* 删除加班申请
* 添加
* 模糊搜索
* 批量删除加班信息
- 休假管理
* 休假申请分页查询
* 修改休假申请(数据回显,修改)
* 删除加休假申请
* 添加休假申请
* 模糊搜索休假信息
* 批量删除休假信息
- 审批管理(审批加班申请 和 审批休假申请)
* 待处理的加班申请 的 分页查询
* 通过加班申请
* 驳回加班申请
* 待处理的休假申请 的 分页查询
* 通过休假申请
* 驳回休假申请
* 模糊搜索 待处理的 加班申请和休假申请
- 个人信息修改
* 根据登录的id查询数据库进行 数据的回显,保存后完成信息修改
- 我的桌面
* 当审批信息后,该页面就会显示通过还是驳回的信息及审批时间
4. 个人承担的开发任务说明(标明个人模块的完成情况,所开发的每个模块功能详细说明及界面)
- 登录、注册(用户添加)
从输入框输入数据,在servlet层通过request.getParameter()获取form表单提交的参数,将获得的用户名、密码作为参数调用dao层的方法进行查询数据库,select * from t_user_info where username=? andpassword =? 如果数据库查询结果集不为空,则说明数据库中有该用户名和密码,可以登录成功。登录成功返回main.jsp页面,登录失败则提示账号或密码错误的信息。
public int searchId(Users u) {
String sql = "select id from t_user_info where name = ? and password = ? ";
conn = du.getConn();
ps = du.getPs(conn,sql);
int myId = 0;
try {
ps.setString(1,u.getName());
ps.setString(2,u.getPassword());
rs = ps.executeQuery();
if(rs.next()){
myId = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
du.closeAll(rs,ps,conn);
}
return myId;
}
- 登录后的首页,显示的是本地时间
该显示页面只需修改JSP页面中的数据显示即可,使用
<%= new SimpleDateFormat("YYYY-MM-dd HH:mm").format(new Date()) %>
- 用户管理
分页查询
在前台的JSP页面中,将固定的分页代码改为动态的代码,如果页数过多 则显示前5条和后4条中间用省略号代替。 点击用户管理后 进入后台servlet调用dao的层的数据库,将分页查询到的user存入list集合中,将其存入pageBean的list集合中。连同查出总记录条数返回到servlet层 , 存入request域中,并在前端页面通过EL表达式取出。
- int totalCount --> 总记录条数
- int totalPage --> 总页码数 = totalCount % 每页显示的数目 == 0 ? totalCount / 每页显示的数目 : totalCount / 每页显示的数目 +1
- List list --> 每页的数据 list集合
前台传至后台的数据:
- int currentPage --> 当前页码
- int rows --> 每页显示的数据条数
- 将5条信息其封装成一个类,取名为pageBean
- totalCount = select count(*) from users;
- totalPage = 提供每页显示的数据条数; rows
- list = select * from user limit ? , ? --> 第一个? 开始查询的索引,第二个 ? rows每页显示的条数
- currentPage = 提供当前页码给服务器
- 开始查询的索引 = ( currentPage - 1 )* rows
- 步骤: 接收请求参数currentPage,rows
- //创建空的pageBean 对象
- //设置currentPage 属性和rows属性
- //调用dao完成查询 totalCount 总记录数 dao.findTotalCount()
- // start索引: (currentPage-1)*rows
- //调用dao去查询list集合 dao.findByPage(int start, int rows)
- //计算总页码: 返回pageBean对象
-
- userDao层
- // 查询总记录数
- int findTotalCount(){}
- //分页查询list
- List findByPage(int start,int rows)
List<UserShow> list = new ArrayList<UserShow>();
String sql1 ="select * from ((select tu.ID, tu.ACCOUNT, tu.NAME, tu.DEPARTMENT_ID,td.DEPARTMENT_NAME, tu.SEX, tu.BIRTHDAY, tu.MOBILE, tu.EMAIL, tu.USER_TYPE, tu.CREATE_TIME , ROWNUM as r from T_USER_INFO tu,T_DEPARTMENT td where tu.DEPARTMENT_ID = td.DEPARTMENT_ID order by tu.ID )) where r between ? and ?";
String sql2 = " select * from (select * from (select tu.ID, tu.ACCOUNT, tu.NAME, tu.DEPARTMENT_ID, td.DEPARTMENT_NAME, tu.SEX, tu.BIRTHDAY, tu.MOBILE, tu.EMAIL, tu.USER_TYPE, tu.CREATE_TIME, rownum as r from T_USER_INFO tu, T_DEPARTMENT td where tu.DEPARTMENT_ID = td.DEPARTMENT_ID and tu.name like ? and tu.DEPARTMENT_ID = ? order by tu.ID ) temp) where r between ? and ? ";
String sql = sql1;
if(name!=null && !"".equals(name)){ //如果有查询条件有值 则执行sql语句2
sql = sql2;
}
conn = du.getConn();
ps = du.getPs(conn,sql);
try {
if(name!=null && !"".equals(name)){ //如果查询条件有值 则对后两个参数赋值
name = "%"+name+"%";
ps.setString(1,name);
ps.setInt(2,department_id);
ps.setInt(3,start);
ps.setInt(4,start+rows-1);
}else{
ps.setInt(1,start);
ps.setInt(2,start+rows-1);
}
rs = ps.executeQuery();
while (rs.next()){
UserShow us = new UserShow();
us.setId(rs.getInt(1));
us.setAccount(rs.getString(2));
us.setName(rs.getString(3));
us.setDeparment_id(rs.getInt(4));
us.setDepartment_name(rs.getString(5));
us.setSex(rs.getString(6));
us.setBirthday(rs.getString(7));
us.setMobile(rs.getString(8));
us.setEmail(rs.getString(9));
us.setUser_type(rs.getString(10));
us.setCreate_time(rs.getString(11));
list.add(us);
}
} catch (SQLException e) {
e.printStackTrace();
}
用户信息修改
要修改用户信息首先要进行数据回显,只有显示了要修改用户的信息才能进行修改。
数据回显:点击修改按钮后 通过路径