博主介绍:✌在职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 {
@Autowired
private IUserService iUserService;
/**
* 用户登录
* @param username
* @param password
* @param session
* @return
*/
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public 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天
@Autowired
private 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;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。