今日思考, 完成一个工资管理系统项目, 需要实现哪些功能?
此类项目常见描述如下:
随着经济的发展, 企业正向着大型化, 规模化发展, 而对于大中型企业, 员工, 职称等跟工资管理有关的信息随之急剧增加. 在这种情况下单靠人工来处理员工的工资不但显得力不从心, 而且极容易出错. 如何设计一个小型企业工资的数据库管理系统, 由计算机代替人工执行一系列诸如增加新员工, 删除旧员工, 工资查询, 统计等操作. 这样就使办公人员可以轻松快捷地完成工资管理的任务.
SSM(MYECLIPSE) 框架及其适合本类项目, 使用 MVC 的思想可以极大程度减少重复工作量. 和 SSM(MYECLIPSE) 框架最配的开发工具是 MYECLIPSE.MYECLIPSE 集成了大量插件, 可以更好的使用 SSM(MYECLIPSE) 进行项目的开发, 使得项目开发时事半功倍.
通过对工资管理系统系统的仔细分析, 可以得出工资管理系统系统是一个 后台项目.
在这样一个项目中, 系统的登录角色是必不可少的, 对每个登录角色设置账号, 密码. 以确保系统可以正常登录使用. SSM(MYECLIPSE) 项目中包含的登录角色有管理员, 用户.
总结得出该系统所有数据为: 管理员 (admin), 用户 (yonghu), 员工增加 (yuangongzengjia), 工资清单 (gongziqingdan)
管理员表
字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 管理员 id
username | VARCHAR(255) | | 账号
password | VARCHAR(255) | | 密码
用户表
字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 用户 id
xingming | VARCHAR(255) | | 姓名
zhiwu | VARCHAR(255) | | 职务
nianling | VARCHAR(255) | | 年龄
xingbie | VARCHAR(255) | | 性别
quanxian | VARCHAR(255) | | 权限
username | VARCHAR(255) | | 账号
password | VARCHAR(255) | | 密码
员工增加表
字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 员工增加 id
xingming | VARCHAR(255) | | 姓名
nianling | VARCHAR(255) | | 年龄
xingbie | VARCHAR(255) | | 性别
xueli | VARCHAR(255) | | 学历
工资清单表
字段名 | 类型 | 属性 | 描述
id | INT(11) | PRIMARY KEY | 工资清单 id
jibengongzi | VARCHAR(255) | | 基本工资
yejiticheng | VARCHAR(255) | | 业绩提成
jiangligongzi | VARCHAR(255) | | 奖励工资
- package org.mypro.front;
- import java.io.File;
- import java.io.IOException;
- import java.math.BigDecimal;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Calendar;
- import java.util.Collections;
- import java.util.Date;
- import java.util.List;
- import javax.jms.Session;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.mypro.dao.GongziqingdanMapper;
- import org.mypro.entity.Gongziqingdan;
- import org.mypro.entity.GongziqingdanExample;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.RequestMethod;
- import org.springframework.Web.multipart.MultipartFile;
- @Controller
- @RequestMapping(VALUE = "/")
- public class GongziqingdanController {
- private static final Log logger = LogFactory.getLog(GongziqingdanController.class);
- @Autowired
- private GongziqingdanMapper gongziqingdandao;
- // 定义方法 tianjiagongziqingdan, 响应页面 tianjiagongziqingdan 请求
- @RequestMapping(VALUE = "tianjiagongziqingdan")
- public String tianjiagongziqingdan(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,String backurl) {
- logger.debug("GongziqingdanController.tianjiagongziqingdan ......");
- IF(backurl != NULL && backurl.indexOf("tianjiagongziqingdan.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "tianjiagongziqingdan";
- }
- @RequestMapping(VALUE = "tianjiagongziqingdanact")
- public String tianjiagongziqingdanact(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,Gongziqingdan gongziqingdan,String backurl) throws IOException {
- logger.debug("GongziqingdanController.tianjiagongziqingdanact ......");
- gongziqingdandao.insert(gongziqingdan);
- request.setAttribute("message", "添加工资清单成功");
- IF(backurl != NULL && backurl.indexOf("tianjiagongziqingdanact.action") == -1){
- RETURN "forward:/" + backurl;
- }
- // 返回 tianjiagongziqingdan 方法
- RETURN "forward:/tianjiagongziqingdan.action";
- }
- // 定义 gongziqingdanguanli 方法响应页面请求
- @RequestMapping(VALUE = "gongziqingdanguanli")
- public String gongziqingdanguanli(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,String backurl) {
- logger.debug("GongziqingdanController.gongziqingdanguanli ......");
- GongziqingdanExample example = NEW GongziqingdanExample();
- List gongziqingdanall = gongziqingdandao.selectByExample(example);
- request.setAttribute("gongziqingdanall", gongziqingdanall);
- IF(backurl != NULL && backurl.indexOf("gongziqingdanguanli.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "gongziqingdanguanli";
- }
- // 定义 gongziqingdanchakan 方法
- @RequestMapping(VALUE = "gongziqingdanchakan")
- public String gongziqingdanchakan(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,String backurl) {
- logger.debug("GongziqingdanController.gongziqingdanchakan ......");
- GongziqingdanExample example = NEW GongziqingdanExample();
- List gongziqingdanall = gongziqingdandao.selectByExample(example);
- request.setAttribute("gongziqingdanall", gongziqingdanall);
- IF(backurl != NULL && backurl.indexOf("gongziqingdanchakan.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "gongziqingdanchakan";
- }
- // 定义 xiugaigongziqingdan 方法
- @RequestMapping(VALUE = "xiugaigongziqingdan")
- public String xiugaigongziqingdan(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,INT id,String backurl){
- logger.debug("GongziqingdanController.xiugaigongziqingdan ......");
- Gongziqingdan gongziqingdan = gongziqingdandao.selectByPrimaryKey(id);
- request.setAttribute("gongziqingdan", gongziqingdan);
- IF(backurl != NULL && backurl.indexOf("xiugaigongziqingdan.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "xiugaigongziqingdan";
- }
- // 定义 xiugaigongziqingdanact 处理工资清单修改
- @RequestMapping(VALUE = "xiugaigongziqingdanact")
- public String xiugaigongziqingdanact(HttpServletRequest request, HttpServletResponse response,Gongziqingdan gongziqingdan,HttpSession SESSION,String backurl) throws IOException {
- logger.debug("GongziqingdanController.xiugaigongziqingdanact ......");
- gongziqingdandao.updateByPrimaryKeySelective(gongziqingdan);
- request.setAttribute("message", "修改工资清单信息成功");
- IF(backurl != NULL && backurl.indexOf("xiugaigongziqingdanact.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "forward:/gongziqingdanguanli.action";
- }
- // 定义 shanchugongziqingdan, 处理删除工资清单
- @RequestMapping(VALUE = "shanchugongziqingdan")
- public String shanchugongziqingdan(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,INT id,String backurl){
- logger.debug("GongziqingdanController.shanchugongziqingdan ......");
- gongziqingdandao.deleteByPrimaryKey(id);
- request.setAttribute("message", "删除工资清单成功");
- IF(backurl != NULL && backurl.indexOf("shanchugongziqingdan.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "forward:/gongziqingdanguanli.action";
- }
- // 定义 sousuogongziqingdan 方法, 处理搜索操作
- @RequestMapping(VALUE = "sousuogongziqingdan")
- public String sousuogongziqingdan(HttpServletRequest request, HttpServletResponse response,HttpSession SESSION,String SEARCH,String backurl) {
- logger.debug("GongziqingdanController.sousuogongziqingdan ......");
- GongziqingdanExample example = NEW GongziqingdanExample();
- GongziqingdanExample.Criteria criteria = example.createCriteria();
- IF(SEARCH != NULL){
- criteria.andJibengongziLike("%" + SEARCH + "%");
- }
- List gongziqingdanall = gongziqingdandao.selectByExample(example);
- request.setAttribute("gongziqingdanall", gongziqingdanall);
- IF(backurl != NULL && backurl.indexOf("sousuogongziqingdan.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "sousuogongziqingdan";
- }
- // 定义 GongziqingdanpinglunMapper
- @RequestMapping(VALUE = "gongziqingdanxiangqing")
- public String gongziqingdanxiangqing(HttpServletRequest request,HttpSession SESSION, HttpServletResponse response,INT id,String backurl) {
- logger.debug("GongziqingdanController.gongziqingdanxiangqing ......");
- Gongziqingdan gongziqingdan = gongziqingdandao.selectByPrimaryKey(id);request
- .setAttribute("gongziqingdan", gongziqingdan);
- IF(backurl != NULL && backurl.indexOf("gongziqingdanxiangqing.action") == -1){
- RETURN "forward:/" + backurl;
- }
- RETURN "gongziqingdanxiangqing";
- }
- // 上传文件图片等 public String uploadUtile
- (MultipartFile file, HttpServletRequest request) throws IOException {
- // 根据当前时间生成时间字符串 SimpleDateFormat sdf
- = NEW SimpleDateFormat("yyyyMMddHHmmssSS");String res
- = sdf.format(NEW DATE());
- // uploads 文件夹位置 String rootPath
- = request.getSession().getServletContext().getRealPath("resource/uploads/");
- // 原始名称 String originalFileName
- = file.getOriginalFilename();
- // 新文件名 String newFileName
- = "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf("."));
- // 创建年月文件夹 Calendar
- DATE = Calendar.getInstance();File dateDirs
- = NEW File(DATE.get(Calendar.YEAR) + File.separator + (DATE.get(Calendar.MONTH)+1));
- // 新文件 File newFile
- = NEW File(rootPath + File.separator + dateDirs + File.separator + newFileName);
- // 判断目标文件所在目录是否存在
- IF( !newFile.getParentFile().exists()) {
- // 如果目标文件所在的目录不存在, 则创建父目录 newFile
- .getParentFile().mkdirs();
- }System
- .out.println(newFile);
- // 将内存中的数据写入磁盘 file
- .transferTo(newFile);
- // 完整的 urlString fileUrl
- = DATE.get(Calendar.YEAR) + "/" + (DATE.get(Calendar.MONTH)+1) + "/" + newFileName;
- RETURN fileUrl;
- }
- }
添加工资清单模块:
在 gongziqingdanController 中定义 tianjiagongziqingdanact 接收页面传入的工资清单参数, 定义为 gongziqingdan. 其中 gongziqingdan 包含字段: 基本工资, 业绩提成, 奖励工资, 使用 tianjiagongziqingdanact 将该工资清单对象存入数据库中, 在 gongziqingdanMapper 中定义了 insert 方法, 匹配数据库中的 insert into gongziqingdan 语句实现将工资清单数据存入数据库的操作. 该部分核心代码如下:
通过 gongziqingdandao 的 insert 方法将页面传输的工资清单添加到数据库中 gongziqingdandao.insert(gongziqingdan);
将添加工资清单成功信息, 保存到 request 的 message 中, 在页面中给出用户提示 request.setAttribute("message", "添加工资清单成功");
返回工资清单管理界面
return "forward:/tianjiagongziqingdan.action";
查询工资清单模块:
在后台 gongziqingdanguanli 方法中, 通过 selectByexample 方法获取所有的数据信息. 将其保存到 request 中, 在页面中通过 foreach 方法
进行循环展示到 table 中. 完成工资清单查询操作. 具体代码如下:
生成工资清单样例类, 通过 example 定义查询条件 GongziqingdanExample example = new GongziqingdanExample();
通过 gongziqingdandao 的 selectByExample 方法查询出所有的工资清单信息 List gongziqingdanall = gongziqingdandao.selectByExample(example);
将工资清单信息, 保存到 request 中, 在页面通过 foreach 方法进行展示 request.setAttribute("gongziqingdanall", gongziqingdanall);
返回工资清单管理界面
return "forward:/gongziqingdanguanli.action";
修改工资清单模块:
点击修改按钮, 可以跳转到工资清单修改页面. 在工资清单修改页面中, 将初始化该工资清单的所有信息, 并将信息一一对应填充到对应编辑栏中. 编辑完工资清单信息后, 页面通过 post https://www.qwbishe.com/1976.html 方法将数据封装为一个工资清单实体, 传入到 gongziqingdanController 中. 在 xiugaigongziqingdan 中进行接收, 接收完毕后, 调用 gongziqingdanMapper 中的 updateByPrimaryKeySelective 方法进行修改. 该部分代码如下:
通过 gongziqingdandao 的修改方法根据 id 修改对应的工资清单 gongziqingdandao.updateByPrimaryKeySelective(gongziqingdan);
将修改工资清单成功信息, 保存到 request 的 message 中, 在页面中给出用户提示 request.setAttribute("message", "修改工资清单信息成功");
返回工资清单管理界面
return "forward:/gongziqingdanguanli.action";
删除工资清单模块:
在页面中通过 a 标签, shanchugongziqingdan?id = 将 id 传入到后台中, 通过 shanchugongziqingdan 接收工资清单 id. 使用 deleteByid 的方法
删除该工资清单, 完成删除操作. 定义删除成功提示信息, 删除工资清单成功, 并保存到 request 中, 该部分代码如下:
通过 gongziqingdandao 的删除方法根据 id 删除对应的工资清单 gongziqingdandao.deleteByPrimaryKey(id);
将删除工资清单成功信息, 保存到 request 的 message 中, 在页面中给出用户提示 request.setAttribute("message", "删除工资清单成功");
返回工资清单管理界面
return "forward:/gongziqingdanguanli.action";
来源: http://www.bubuko.com/infodetail-3213055.html