博主介绍:✌退职Java研发工程师、专一于程序设计、源码分享、技术交换、专一于Java技术畛域和毕业设计✌
项目名称
[含lw+源码等]javaweb银行柜员业务绩效考核零碎
演示视频
[含论文+源码等]javaweb银行柜员业务绩效考核零碎_哔哩哔哩_bilibili
零碎介绍
目 录
1、引言............................................................ 4
1.1 钻研现状.................................................... 4
1.2 次要钻研的目标及内容........................................ 5
1.3 钻研办法及设计思路.......................................... 5
1.3.1 钻研办法.............................................. 5
1.3.2 设计思路.............................................. 6
2、利用需要剖析与可行性剖析........................................ 6
2.1 利用需要剖析................................................ 7
2.2 运行需要剖析................................................ 8
2.3 其余需要剖析................................................ 8
2.4 可行性剖析.................................................. 8
2.4.1经济可行性............................................. 8
2.4.2技术可行性............................................. 9
2.4.3 运行可行性............................................ 9
2.4.4 工夫可行性............................................ 9
2.4.5 法律可行性:.......................................... 9
2.5 零碎开发步骤............................................... 10
3、相干技术简介................................................... 10
3.1 JSP技术简介............................................... 10
3.2 Mysql数据库............................................... 11
3.3 JDBC....................................................... 13
3.4 B/S模式分析............................................... 14
4、系统分析....................................................... 16
4.1 零碎实现目标............................................... 16
4.2 零碎体系结构............................................... 17
4.3 主控流程图................................................. 17
4.4 零碎ER图.................................................. 19
5、零碎设计....................................................... 20
5.1 概要设计................................................... 20
5.2 系统结构设计............................................... 20
5.3 具体设计................................................... 20
5.3.1 管理员登录界面....................................... 20
5.3.2 管理员设置........................................... 21
5.3.3 绩效考核信息管理模块................................. 23
5.3.4 业务信息管理模块..................................... 24
5.3.5 薪酬信息管理模块..................................... 24
6、零碎调试与测试................................................. 25
6.1 程序调试................................................... 25
6.2 程序的测试................................................. 25
6.2.1 测试的重要性及目标................................... 25
6.2.2 测试的步骤........................................... 26
6.2.3 测试的次要内容....................................... 27
结束语............................................................ 30
致谢.............................................................. 32
参考文献.......................................................... 33
1、引言
1.1 钻研现状
随着科技倒退和社会提高,尤其是计算机大范畴的遍及,计算机利用逐步由大规模科学计算的海量数据处理转向大规模的事务处理和对工作流的治理,这就产生了以台式计算机为外围,以数据库管理系统为开发环境的管理信息系统在大规模的事务处理和对工作流的治理等方面的利用,特地是在绩效考核信息管理之中的利用日益收到人们的关注。
近年来我国信息事业倒退迅速,手工治理形式在绩效考核信息管理等须要大量事务处理的利用中已显得不相适应,采纳IT技术进步服务质量和管理水平势在必行。目前,对外开放必然趋势使信息行业直面外国同行单位的间接挑战,因而,信息行业必须进步其工作效率,改善其工作环境。这样,绩效考核信息管理的信息化势在必行。
在传统的绩效考核信息管理中,其过程往往是很简单的,繁琐的,绩效考核信息管理以绩效考核信息管理为外围,在此过程中又须要通过若干道手续,因为整个过程都须要手工操作,效率非常低下,且因为他们之间关联简单,统计和查问的形式各不相同;且会呈现信息的反复传递问题,因而该过程必须实现信息化。
咱们的零碎开发的整体工作是实现绩效考核信息管理的系统化、规范化、自动化和智能化,从而达到进步单位管理效率的目标。
1.2 次要钻研的目标及内容
本课题的目标是使绩效考核信息管理清晰化,透明化,便于操作,易于治理。通过功能模块的优化组合实现不同的治理细节,使治理过程实现最大水平的自动化与信息化,并能主动对人工操作环节进行复查,使绩效考核管理系统出错率降至最低。在传统的绩效考核信息管理中,各种管理工作往往是很简单繁缛的。绩效考核信息管理的特点是信息处理量比拟大,所治理的品种比拟繁多,而且因为生产、缴费等单据发生量特地大,关联信息多,查问和统计的形式不尽相同。在治理过程中常常会呈现信息的反复传递,因而绩效考核信息管理必须实现计算机化解决。咱们零碎开发的总体工作是实现绩效考核信息管理的系统化、规范化、自动化、信息化与智能化,从而达到进步绩效考核信息管理效率的目标。
1.3 钻研办法及设计思路
1.3.1 钻研办法
绩效考核信息管理是信息行业业务流程过程中非常重要且必备的环节之一,在信息行业业务流程当中起着承前启后的作用,其重要性显而易见。然而,目前许多信息行业在具体的业务流程处理过程中依然应用手工操作的形式来施行,不仅费时、费劲,效率低下,而且无奈达到现实的成果。针对上述问题,采纳软件工程的开发原理,根据软件流程过程标准,依照需要剖析、概要设计、具体设计、程序编码、测试、软件应用、软件维护等过程开发了一个绩效考核管理系统。采纳JSP作为开发工具,联合微软公司的Mysql数据库,数据库设计遵循3范式,次要设计了缴费根本信息表、绩效考核根本信息表、生产根本信息表、管理系统的用户口令表等数据表。解决了绩效考核管理系统中存在的数据安全性、数据一致性以及零碎运行速度等问题。
1.3.2 设计思路
(1)零碎应合乎绩效考核信息管理的规定,满足信息行业相干人员日常应用的须要,并达到操作过程中的直观,不便,实用,平安等要求;
(2)零碎采纳模块化程序设计办法,既便于零碎性能的各种组合和批改,又便于未参加开发的技术保护人员补充,保护;
(3)零碎应具备数据库保护性能,及时依据用户需要进行数据的增加、删除、批改、备份等操作;
(4)尽量采纳现有软件环境及先进的管理系统开计划,从而达到充分利用现有资源,进步零碎开发程度和利用成果的目标。
2、利用需要剖析与可行性剖析
随同着信息行业的蓬勃发展和人们办公自动化意识的加强,绩效考核治理部门的的工作也越来越沉重,原来的绩效考核管理系统曾经不能齐全满足相干人员应用的须要。为了帮助信息行业发展绩效考核管理工作,进步工作效率,充分利用信息行业的现有资源,开发更好的绩效考核管理系统势在必行。
绩效考核管理系统是将IT技术用于绩效考核信息的治理, 它可能收集与存储患者信息,提供更新与检索的接口;帮助信息行业发展绩效考核管理工作进步工作效率。
绩效考核管理系统采纳B/S构造、联合网络数据库开发技术来设计本零碎。开发语言采纳JSP,数据库应用Mysql数据库。实现以下基本功能:
本零碎是一个独立的零碎,用来解决绩效考核信息的治理问题。采纳JSP技术构建了一个无效而且实用的绩效考核信息管理平台,目标是为高效地实现对绩效考核信息的治理。
零碎功能模块:
1.权限解决模块:管理员与一般柜员,管理员进入的是管理员页面,一般柜员进入一般柜员的界面。
2.输出模块
2.1 一般柜员用户注册:一般柜员通过输出用户名(工号即用户名),名字,明码进行注册,取得进入本零碎权限。
2.2 柜员抉择柜员身份登入:柜员进入后能够查看自己工作状况的信息。
2.3 管理员界面:登入后,记录柜员工作状况:输出柜员工号,柜员名字,记录业务笔数,最初一栏并记录柜员员工加减分状况(笔数处于10的整数局部为加减分状况,以10分为下限)。除此之外,管理员还能对一般柜员的权限进行批改,删除不必要的用户。
2.4 对管理员输出数据进行解决:比方工号只能为7位,结尾必须是882;加分减分的值不能大于10等等。
3.解决模块
3.1 查问:输出柜员工号,能够查问到该柜员的工作状况以及加分减分状况及薪酬状况;按日期查问,能够查问到该日期本单干银行每位柜员的工作状况及加减分状况。
3.2 薪酬查问:柜员薪酬计算应计算考核薪酬除以10分为规范分值,考核理论得分乘以分值为可兑现年薪(总行班子成员18000元/季、中层正职12000元/季、中层副职9000元/季、员工6000元/季、短期合同工(三年以下)1500元/季。) 月总分/月天数/10*薪酬规范
4.统计输出模块:比方能够统计本单干银行业务笔数由多到少排名,加减分状况排名。
5.保护模块:对系统进行保护,定期对数据进行备份,对历史数据库进行备份,对明码口令进行保护。
绩效考核管理系统具备规范绩效考核管理系统所具备的事实中残缺的绩效考核治理步骤,齐全的虚拟现实实现。真正实现节约资源、提高效率、业务解决的同时真正实现绩效考核管理系统的性能作用。
环境须要
1.运行环境:最好是java jdk 1.8,咱们在这个平台上运行的。其余版本实践上也能够。
2.IDE环境:IDEA,Eclipse,Myeclipse都能够。举荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;
5.数据库:MySql 5.7版本;
6.是否Maven我的项目:否;
技术栈
- 后端:Spring+SpringMVC+Mybatis
- 前端:JSP+CSS+JavaScript+jQuery
应用阐明
- 应用Navicat或者其它工具,在mysql中创立对应名称的数据库,并导入我的项目的sql文件;
- 应用IDEA/Eclipse/MyEclipse导入我的项目,Eclipse/MyEclipse导入时,若为maven我的项目请抉择maven;
若为maven我的项目,导入胜利后请执行maven clean;maven install命令,而后运行; - 将我的项目中springmvc-servlet.xml配置文件中的数据库配置改为本人的配置;
- 运行我的项目,在浏览器中输出http://localhost:8080/ 登录
运行截图
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
编辑
用户管理控制层:
package com.houserss.controller;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
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.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;
/**
- Created by admin
*/
@Controller
@RequestMapping("/user/")
public class UserController {
@Autowiredprivate IUserService iUserService;/** * 用户登录 * @param username * @param password * @param session * @return */@RequestMapping(value = "login.do",method = RequestMethod.POST)@ResponseBodypublic ServerResponse<User> login(User user,String uvcode, HttpSession session){ String code = (String)session.getAttribute("validationCode"); if(StringUtils.isNotBlank(code)) { if(!code.equalsIgnoreCase(uvcode)) { return ServerResponse.createByErrorMessage("验证码不正确"); } } ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword()); if(response.isSuccess()){ session.setAttribute(Const.CURRENT_USER,response.getData()); } return response;}
}
管理员管理控制层:
package com.sxl.controller.admin;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("adminController")
@RequestMapping(value = "/admin")
public class AdminController extends MyController {
@RequestMapping(value = "/index")public String frame(Model model, HttpServletRequest request)throws Exception { return "/admin/index";}@RequestMapping(value = "/main")public String main(Model model, HttpServletRequest request)throws Exception { return "/admin/main";}@RequestMapping(value = "/tj1")public String tj1(Model model, HttpServletRequest request)throws Exception { String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d') desc"; List<Map> list = db.queryForList(sql); model.addAttribute("list", list); System.out.println(list); return "/admin/tj/tj1";}@RequestMapping(value = "/password")public String password(Model model, HttpServletRequest request)throws Exception { return "/admin/password";}@RequestMapping(value = "/changePassword")public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception { Map admin = getAdmin(request); if(oldPassword.equals(admin.get("password").toString())){ String sql="update t_admin set password=? where id=?"; db.update(sql, new Object[]{newPassword,admin.get("id")}); return renderData(true,"1",null); }else{ return renderData(false,"1",null); }}
}
批改明码业务逻辑:
package com.sxl.controller.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("userController")
@RequestMapping(value = "/user")
public class UserController extends MyController {
@RequestMapping(value = "/index")public String frame(Model model, HttpServletRequest request)throws Exception { return "/user/index";}@RequestMapping(value = "/main")public String main(Model model, HttpServletRequest request)throws Exception { return "/user/main";}@RequestMapping(value = "/password")public String password(Model model, HttpServletRequest request)throws Exception { return "/user/password";}@RequestMapping(value = "/changePassword")public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception { Map user = getUser(request); if(oldPassword.equals(user.get("password").toString())){ String sql="update t_user set password=? where id=?"; db.update(sql, new Object[]{newPassword,user.get("id")}); return renderData(true,"1",null); }else{ return renderData(false,"1",null); }}@RequestMapping(value = "/mine")public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap("select * from t_user where id=?",new Object[]{user.get("id")});model.addAttribute("map", map); return "/user/mine";
}@RequestMapping(value = "/mineSave")public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id ,String username,String password,String name,String gh,String mobile) throws Exception{ int result = 0; String sql="update t_user set name=?,gh=?,mobile=? where id=?"; result = db.update(sql, new Object[]{name,gh,mobile,id}); if(result==1){ return renderData(true,"操作胜利",null); }else{ return renderData(false,"操作失败",null); }}}
通用治理模块:
package com.sxl.controller;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;
public class BaseController {
public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1天@Autowiredprivate SystemProperties systemProperties;/** * 取得配置文件内容 */public String getConfig(String key) { return systemProperties.getProperties(key);}/** * 返回服务器地址 like http://192.168.1.1:8441/UUBean/ */public String getHostUrl(HttpServletRequest request) { String hostName = request.getServerName(); Integer hostPort = request.getServerPort(); String path = request.getContextPath(); if (hostPort == 80) { return "http://" + hostName + path + "/"; } else { return "http://" + hostName + ":" + hostPort + path + "/"; }}/*** * 获取以后的website门路 String */public static String getWebSite(HttpServletRequest request) { String returnUrl = request.getScheme() + "://" + request.getServerName(); if (request.getServerPort() != 80) { returnUrl += ":" + request.getServerPort(); } returnUrl += request.getContextPath(); return returnUrl;}/** * 初始化HTTP头. * * @return HttpHeaders */public HttpHeaders initHttpHeaders() { HttpHeaders headers = new HttpHeaders(); MediaType mediaType = new MediaType("text", "html", Charset.forName("utf-8")); headers.setContentType(mediaType); return headers;}/** * 返回 信息数据 * * @param status * @param msg * @return */public ResponseEntity<String> renderMsg(Boolean status, String msg) { if (StringUtils.isEmpty(msg)) { msg = ""; } String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}"; ResponseEntity<String> responseEntity = new ResponseEntity<String>(str, initHttpHeaders(), HttpStatus.OK); return responseEntity;}/** * 返回obj数据 * * @param status * @param msg * @param obj * @return */public ResponseEntity<String> renderData(Boolean status, String msg, Object obj) { if (StringUtils.isEmpty(msg)) { msg = ""; } StringBuffer sb = new StringBuffer(); sb.append("{"); sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\","); sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + ""); sb.append("}"); ResponseEntity<String> responseEntity = new ResponseEntity<String>( sb.toString(), initHttpHeaders(), HttpStatus.OK); return responseEntity;}/*** * 获取IP(如果是多级代理,则失去的是一串IP值) */public static String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } if (ip != null && ip.length() > 0) { String[] ips = ip.split(","); for (int i = 0; i < ips.length; i++) { if (!"unknown".equalsIgnoreCase(ips[i])) { ip = ips[i]; break; } } } return ip;}/** * 国际化取得语言内容 * * @param key * 语言key * @param args * @param argsSplit * @param defaultMessage * @param locale * @return */public static String getLanguage(String key, String args, String argsSplit, String defaultMessage, String locale) { String language = "zh"; String contry = "cn"; String returnValue = defaultMessage; if (!StringUtil.isEmpty(locale)) { try { String[] localeArray = locale.split("_"); language = localeArray[0]; contry = localeArray[1]; } catch (Exception e) { } } try { ResourceBundle resource = ResourceBundle.getBundle("lang.resource", new Locale(language, contry)); returnValue = resource.getString(key); if (!StringUtil.isEmpty(args)) { String[] argsArray = args.split(argsSplit); for (int i = 0; i < argsArray.length; i++) { returnValue = returnValue.replace("{" + i + "}", argsArray[i]); } } } catch (Exception e) { } return returnValue;}
}