企业职工工资在线管理信息系统【生产实习课设报告】

若本文对你有帮助的话,记得点赞、关注我哟!

       大四上学期的课设之一“生产实习”,一共上三周,我随便乱写的,害怕不及格的人可以做个参考。最后班里大多数人都和我一样得了90分。然而这是我这学期课设成绩最高的一门,其它的都是70分、80分,我也写在CSDN里了,有兴趣的可以找一下。我发现大学三年半,我起码写过三次工资管理系统的实验报告......

       复习累了可以点开视频,有惊喜哦!

       https://www.bilibili.com/video/BV117411c7DQ

       https://www.bilibili.com/video/BV1Vb411U7BC/

       https://www.bilibili.com/video/BV1Nb411M7J9/

任务:
1、分析并调研需求,选择合适的开发模型。
2、了解软件研发流程,选择合适的开发模型。
3、选择与此次生产实习相关的工具,分配团队成员之间相应的角色,确定所选择项目中的复杂工程问题。
4、评审需求分析,形成软件需求规格
5、对需求分析进行概要设计、详细设计及编码。
6、收集并设计实验数据,进行软件测试设计、软件测试结果分析,得出结论,按照规范要求,编写好相关文档。
7、评审需求分析,形成软件需求规格。
8、撰写生产实习报告。

实习的目的

       专业生产实习是本科教学计划中非常重要的实践性教学环节,是专业培养目标和教学计划、课程设置的有机组成部分,是理论教学的完善和补充。通过生产实习,使学生直接接触和了解计算机技术在生产实际中的应用,增强学生理论联系实际的观点,巩固所学相关理论,获取本专业的实际技能,培养初步的软件系统的实际工作能力和专业技能。通过生产实习使学生进一步接触社会、深入群众、培养劳动观念,提高学生的民族自尊心和自信心,激发学生发展民族工业、勇攀科学高峰的使命感和紧迫感、增强爱国主义情操。

       通过现场实习,还可以检查学校教学中存在的问题,对推进教学改革,增强高校培养人材与企业发展的适应性,进一步提高教师的思想水平,拓宽教师的业务能力具有积极意义。

实习项目

       设计题目1:社区物业在线管理信息系统的设计与实现

       设计题目2:药品在线招投标系统的设计与实现

       设计题目3:机电设备在线招投标系统的设计与实现

       设计题目4:在线图书借阅管理信息系统的设计与实现

       设计题目5:在线学生课程学习管理信息系统的设计与实现

       设计题目6:学院毕业生就业指导信息平台系统的设计与实现

       设计题目7:基于B/S模式的学生成绩管理信息系统的设计与实现

       设计题目8:基于B/S模式的学生学籍管理信息系统的设计与实现

       设计题目9:房产中介信息发布系统的设计与实现

       设计题目10:房屋租赁网站的设计与实现

       设计题目11:体育场馆在线售票管理信息系统的设计与实现

       设计题目12:在线图书销售管理信息系统的设计与实现

       设计题目13:车站在线售票管理信息系统的设计与实现

       设计题目14:在线小说连载网站的设计与实现

       设计题目15:基于B/S模式的通用题库管理系统的设计与实现

       设计题目16:网上辅导答疑管理系统的设计与实现

       设计题目17:电子导师平台的建立与实现

       设计题目18:教学质量网络评测系统的设计与实现

       设计题目19:基于会员制的购物网站的设计与实现

       设计题目20:网上招聘系统的设计与实现

       设计题目21:音乐网网站的设计与实现

       设计题目22:在线手机城网站的设计与实现

       设计题目23:商务学院招生网站的设计与实现

       设计题目24:基于WEB的新闻发布系统的设计与实现

       设计题目25:“多多羊”星座网站的设计与实现

       设计题目26:一个BBS主题论坛的设计与实现

       设计题目27:网络课程在线测试系统的设计与实现

       设计题目28:企业职工人事在线管理信息系统的设计与实现

       设计题目29:企业职工工资在线管理信息系统的设计与实现

       设计题目30:在线经济适用房摇号系统的设计与实现

       设计题目31:实验室设备在线管理信息系统的设计与实现

       设计题目32:社区住户在线投诉管理信息系统的设计与实现

       设计题目33:花卉网上销售系统的设计与实现

       设计题目34:医药销售系统信息系统的设计与实现

       设计题目35:高校教师人事管理系统的设计与实现

       设计题目36:论文管理系统的设计与实现

       设计题目37:科研成果申报管理系统的设计与实现

       设计题目38:高校图书管理系统——期刊信息管理

       设计题目39:高校图书管理系统——读者信息系统

       设计题目40:商品房销售信息平台的系统的设计与实现

第一章 系统分析

1.1 需求分析

1.1.1 功能性需求分析

       本系统为员工工资管理系统。系统能够提供对员工工资的管理,包括员工工资汇总、工资发放明细和对部门信息、岗位信息、员工信息以及员工考勤的管理,报表生成与打印,本系统还实现了员工工资结构的设置操作,实现财务部门对本单位工资发放系统的集中管理。

 

职工的主要功能模块包含:

(1)职工登录

       职工可以修改默认密码,根据自己的职工编号和密码登录,系统会判断输入是否合法,若输入正确则登录成功,否则提示登录失败,可以点击“忘记密码”通过手机号找回密码。

(2)浏览工资信息

       职工可以在主界面按年月递增或递减的次序浏览自己的所有工资信息。

(3)查询工资信息

       职工进入主界面后,输入有效年月,点击查询,会显示自己对应年月的工资信息。

(4)职工可以选择打印工资报表,在线下载pdf格式的报表。

 

人事部管理员的主要功能模块包含:

(1)人事部管理员登录

       人事部管理员输入管理员账号和密码,若输入正确则登录成功,否则提示登录失败。

(2)添加职工信息

       若有新职工入职,人事部管理员可在登录后进入添加职工信息的界面,可以添加职工信息(职工编号、职工姓名、职工性别、职务、任职状态、职工年龄、密码等),对操作进行确认后,添加成功。

(3)修改职工信息

       若需要修改在职职工信息,人事部管理员可在登录后进入修改职工信息界面,输入已添加成功的职工编号,从而对其它信息进行修改,对操作进行确认后,在主界面点击查询的时候会发现该职工的有些信息会有所改变。

(4)查询职工信息

       人事部管理员可在登录后进入修改职工信息界面,输入已成功添加的职工编号,点击查询,会显示之前所添加的信息。

(5)删除职工信息

       若有职工离职,人事部管理员可在登录后进入删除职工信息的界面,输入已添加成功的职工编号,点击删除。对操作进行确认后,会删除该职工的个人信息和所有工资信息,在进行查询的时候会发现查无此人。

 

财务部管理员的主要功能模块包含:

(1)财务部管理员登录

       财务部管理员输入管理员账号和密码,若输入正确则登录成功,否则提示登录失败。

(2)调整工资信息

       若有需要对某一员工的工资进行调整,财务部管理员可在登录后进入加调整工资信息界面,输入员工编号、工资种类、数额。对操作进行确认后,若数据库中不存在该员工本月工资信息,会自动添加信息,否则会在原有基础上修改,在进行查询的时候会发现该员工当前月度的工资状况有所改变。

(3)查询工资信息

       财务部管理员可在登录后进入查询工资信息界面,输入所待查职工编号、年月,点击查询后时候会显示该职工当月的工资情况。若不输入职工编号,则会按职工号顺序显示所有职工当月的工资情况;若不输入年月,则会按年月由新到旧顺序显示该职工每月的工资情况。

(4)增加工资信息

       若职工薪资有调高或提成等新增内容,财务部管理员可在系统中增加工资项,以达到职工们的应得数额。

(5)删除工资信息

       若职工薪资有减少的内容,财务部管理员可在系统中删除该工资项,以达到职工们的应得数额。

 

其它需求:

(1)系统要考虑承载至少200人的同时在线操作;

(2)要考虑行政部管理员增加、修改信息过程中的失败恢复问题;

(3) 要考虑行政部管理员增加、修改信息后最近三次修改的历史记录保留问题,以便数据回溯;

(4)职工工资信息及员工信息应在职工“任职状态”为“离职两年以上”后才可被删除,以避免不必要的劳务纠纷。

1.1.2 性能需求分析

       系统建成后,系统性能不低于以下性能要求:平均响应时间:50用户小于3秒;200用户小于30秒;CPU平均使用率小于80%。

       本系统要求软件运行环境为Windows XP以上的操作系统,建议使用1024*768px的IE浏览器。硬件环境要求CPU i3以上,内存2G以上,硬盘500G以上,I/O设备包括鼠标、键盘和显示器。

1.1.3 系统采用的数据库及框架技术分析

       本系统主要采用SSH(Spring + Struts + Hibernate)框架,是一个基于Web的工资管理系统,支持员工相关信息Web查询和发布等。开发工具采用MyEclipse 8.6,Tomcat6.0服务器,Mysql5.5数据库,编程语言使用Java、JSP。在开发过程中使用到的技术主要有:Struts2.1.6、jQuery1.4.4、Javascript,CSS等。

 

                                           图1.1 平台技术支持

1.2 系统数据流图

                                           图1.2 系统数据流图

第二章 系统总体结构设计

2.1 体系结构

                                           图2.1 系统体系结构图

2.2 系统的功能结构

                                           图2.2 系统功能结构图

2.3 概念结构设计

                                           图2.3 系统概念结构E-R图

2.4数据库设计

2.4.1数据库逻辑结构设计

                                           图2.4 数据库逻辑结构设计图

2.4.2数据库的完整性约束

                                           图2.5 Admin表

                                           图2.6 Staff表

                                           图2.7 Department表

                                           图2.8 Wage表

2.4.3数据库的安全性

        两个MySQL数据库通过日志同步方式实现双主节点热备份,通过haproxy实现数据库集群负载均衡。当某一个MySQL节点宕机时,保证服务正常运行,从而实现数据库的高可用和大流量并发。

第三章 详细设计

3.1 设计概述

        随着计算机技术的发展,企业管理越来越趋于自动化,而工资管理是企业管理的重要组成部分,它与企业的财务管理、人事管理有着密切的联系。由于企业员工工资结构存在一定的规律性,工资发放在时间上和操作上存在一定的重复性,这使得企事业单位工资管理计算机化成为可能。本系统在此基础上实现了工资信息查询、人员信息管理、报表生成等功能。用户只要使用IE浏览器访问相关站点,输入正确的用户名和密码成功登陆后,普通用户便可查询自己的工资情况和其他相关信息。对管理员来说使用起来也非常的方便快捷,可以进行科学、合理的对员工工资和人员进行管理。

3.2系统规范要求

        需求验证很重要,如果在构造设计开始之前,通过验证基于需求的测试计划和原型测试来 验证需求的正确性及其质量,就能大大减少项目后期的返工现象。

        在需求验证过程中,要对需求文档中定义的需求执行多种类型的检查。 

        有效性检查——对于每项需求都必须证明它是正确有效的,确实能解决用户面对的问题。 

        一致性检查——在需求文档中,需求不应该冲突,即对同一个系统功能不应出现不同的描述或相互矛盾的约束。 

        完备性检查——需求文档应该包括所有系统用户想要的功能和约束。 

        现实性检查——检查需求以保证能利用现有技术实现。 

        可检验性检查——描述的需求能够实际测试。 

        可跟踪性检查——需求的出处被清晰地记录,每一系统功能都能被跟踪到要求它的需求集合,每一项需求都能追溯到特定用户的要求。 

        可调节性检查——需求变更能够不对其他系统带来大规模的影响。 可读性检查,需求说明能否被系统购买者和最终用户读懂。

3.3 系统功能设计

        本系统的主要功能包括:系统数据初始化;员工基本信息数据的查询、添加、修改、删除;企业工资结构的基本设定;企业工资参数的设定与管理;员工考勤的管理;员工个人工资表的查询;员工工资的浏览、修改、添加、删除;系统的维护包括用户的操作权限、密码修改。

        员工信息、部门信息、岗位信息、考勤记录等只能被管理员修改,添加,删除;员工可以查看个人信息、考勤记录、工资信息等。

第四章 系统实现

4.1 界面设计原则

(1)简易性

        界面的简洁是要让用户便于使用、便于了解、并能减少用户发生错误选择的可能性。

(2)用户语言

        界面中要使用能反应用户本身的语言,而不是游戏设计者的语言。

(3)记忆负担最小化

        人脑不是电脑,在设计界面时必须要考虑人类大脑处理信息的限度。人类的短期记忆极不稳定、有限,24小时内存在25%的遗忘率。所以对用户来说,浏览信息要比记忆更容易。

(4)一致性

        一致性是每一个优秀界面都具备的特点。界面的结构必须清晰且一致,风格必须与游戏内容相一致。

(5)清楚

        在视觉效果上便于理解和使用。

(6)用户的熟悉程度

        用户可通过已掌握的知识来使用界面,但不应超出一般常识。

(7)从用户的观点考虑

        想用户所想,做用户所做。用户总是按照他们自己的方法理解和使用。

        通过比较两个不同世界(真实与虚拟)的事物,完成更好的设计。如:书籍对比竹简。

(8)排列

        一个有序的界面能让用户轻松的使用。

(9) 安全性

        用户能自由的作出选择,且所有选择都是可逆的。在用户作出危险的选择时有信息介入系统的提示。

(10)灵活性

        简单来说就是要让用户方便的使用,但不同于上述。即互动多重性,不局限于单一的工具(包括鼠标、键盘或手柄)。

(11)人性化

        高效率和用户满意度是人性化的体现。应具备专家级和初级玩家系统,即用户可依据自己的习惯定制界面,并能保存设置。

4.2 功能设计实现

4.2.1程序部分源代码

①管理员主要代码

package com.salary.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.salary.model.Admin;

/**
 * @author 管理员数据库操作封装
 */
public class AdminDao extends BaseDao {

	public Admin login(String adminNo, String adminPassword) {
		String sql = "select * from admin where adminNo = '" + adminNo + "' and adminPassword = '" + adminPassword + "'";
		ResultSet resultSet = query(sql);
		try {
			if (resultSet.next()) {
				Admin admin = new Admin();
				admin.setId(resultSet.getInt("adminNo"));
				admin.setName(resultSet.getString("adminName"));
				admin.setPassword(resultSet.getString("adminPassword"));
				admin.setStatus(resultSet.getInt("adminStatus"));
				return admin;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public boolean editPassword(Admin admin, String newAdminPassword) {
		// TODO Auto-generated method stub
		String sql = "update admin set adminPassword = '" + newAdminPassword + "' where adminNo = " + admin.getAdminNo();
		return update(sql);
	}
}

②部门管理主要代码

package com.salary.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.salary.model.Clazz;
import com.salary.model.Page;
import com.salary.util.StringUtil;

/**
 * 
 * @author 部门信息数据库操作
 */
public class DepartmentDao extends BaseDao {

	public List<Department> getDepartmentList(Department department, Page page) {
		List<Department> ret = new ArrayList<Department>();
		String sql = "select * from department ";
		if (!StringUtil.isEmpty(department.getDepartmentName())) {
			sql += "where departmentName like '%" + department.getDepartmentName() + "%'";
		}
		sql += " limit " + page.getStart() + "," + page.getPageSize();
		ResultSet resultSet = query(sql);
		try {
			while (resultSet.next()) {
				Department dp = new Department();
				dp.setId(resultSet.getInt("departmentNo"));
				dp.setName(resultSet.getString("departmentName"));
				dp.setTel(resultSet.getString("departmentTel"));
				ret.add(dp);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ret;
	}

	public int getDepartmentListTotal(Department department) {
		int total = 0;
		String sql = "select count(*)as total from department ";
		if (!StringUtil.isEmpty(department.getDepartmentName())) {
			sql += "where departmentName like '%" + department.getDepartmentName() + "%'";
		}
		ResultSet resultSet = query(sql);
		try {
			while (resultSet.next()) {
				total = resultSet.getInt("total");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return total;
	}

	public boolean addDepartment(Department department) {
		String sql = "insert into department values(null,'" + department.getDepartmentName() + "','" + department.getDepartmentTel()
				+ "') ";
		return update(sql);
	}

	public boolean deleteDepartment(int departmentNo) {
		String sql = "delete from department where departmentNo = " + departmentNo;
		return update(sql);
	}

	public boolean editDepartment(Department department) {
		// TODO Auto-generated method stub
		String sql = "update department set departmentName = '" + department.getDepartmentName() + "',departmentTel = '"
				+ department.getDepartmentTel() + "' where departmentNo = " + department.getDepartmentNo();
		return update(sql);
	}
}

③职工管理主要代码

package com.salary.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.salary.model.Admin;
import com.salary.model.Clazz;
import com.salary.model.Page;
import com.salary.model.Student;
import com.salary.util.StringUtil;

public class WorkerDao extends BaseDao {

	public boolean addWorker(Worker worker) {
		String sql = "insert into worker values(null,'" + worker.getWorkerNo() + worker.getWorkerName() + "','"
				+ worker.getWorkerSex() + "'";
		sql += ",'" + worker.getWorkerIdCardNo() + "','" + worker.getWorkerBankCardNo() + "'";
		sql += ",'" + worker.getWorkerTel() + "','" + worker.getWorkerAddress() + "'";
		sql += ",'" + worker.getWorkerJob() + "','" + worker.getWorkerJobState() + "'";
		sql += "," + worker.getDepartmentNo() + ",'" + worker.getWorkerPassword() + "',null)";
		return update(sql);
	}

	public boolean editWorker(Worker worker) {
		// TODO Auto-generated method stub
		String sql = "update worker set workerName = '" + worker.getWorkerName() + "'";
		sql += ",workerSex = '" + worker.getWorkerSex() + "'";
		sql += ",workerIdCardNo = '" + worker.getWorkerIdCardNo() + "'";
		sql += ",workerBankCardNo = '" + worker.getWorkerBankCardNo() + "'";
		sql += ",workerTel = '" + worker.getWorkerTel() + "'";
		sql += ",workerAddress = '" + worker.getWorkerAddress() + "'";
		sql += ",workerJob = '" + worker.getWorkerJob() + "'";
		sql += ",workerJobStatus = '" + worker.getWorkerJobState() + "'";
		sql += ",departmentNo = '" + worker.getDepartmentNo() + "'";
		sql += " where workerNo = " + worker.getWorkerNo();
		return update(sql);
	}

	public boolean setWorkerPhoto(Worker worker) {
		// TODO Auto-generated method stub
		String sql = "update worker set workerPhoto = ? where workerNo = ?";
		Connection connection = getConnection();
		try {
			PreparedStatement prepareStatement = connection.prepareStatement(sql);
			prepareStatement.setBinaryStream(1, worker.getWorkerPhoto());
			prepareStatement.setInt(2, worker.getWorkerNo());
			return prepareStatement.executeUpdate() > 0;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return update(sql);
	}

	public boolean deleteWorker(String workerNos) {
		// TODO Auto-generated method stub
		String sql = "delete from worker where workerNo in(" + workerNos + ")";
		return update(sql);
	}

	public Worker getWorker(int no) {
		String sql = "select * from worker where workerNo = " + workerNo;
		Worker worker = null;
		ResultSet resultSet = query(sql);
		try {
			if (resultSet.next()) {
				worker = new Worker();
				worker.setWorkerNo(resultSet.getInt("workerNo"));
				worker.setWorkerName(resultSet.getString("workerName"));
				worker.setWorkerSex(resultSet.getString("workerSex"));
				worker.setWorkerIdCardNo(resultSet.getString("workerIdCardNo"));
				worker.setWorkerBankCardNo(resultSet.getString("workerBankCardNo"));
				worker.setWorkerTel(resultSet.getString("workerTel"));
				worker.setWorkerAddress(resultSet.getString("workerAddress"));
				worker.setWorkerJob(resultSet.getString("workerJob"));
				worker.setWorkerJobState(resultSet.getString("workerJobState"));
				worker.setWorkerDepartmentNo(resultSet.getString("workerDepartmentNo"));
				worker.setWorkerPassword(resultSet.getString("workerPassword"));
				worker.setWorkerPhoto(resultSet.getBinaryStream("workerPhoto"));
				return worker;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return worker;
	}

	public List<Worker> getStudentList(Worker worker, Page page) {
		List<Worker> ret = new ArrayList<Worker>();
		String sql = "select * from worker ";
		if (!StringUtil.isEmpty(worker.getWorkerName())) {
			sql += "and workerName like '%" + worker.getWorkerName() + "%'";
		}
		if (worker.getDepartmentNo() != 0) {
			sql += " and departmentNo = " + worker.getDepartmentNo();
		}
		if (worker.getWorkerNo() != 0) {
			sql += " and workerNo = " + worker.getWorkerNo();
		}
		sql += " limit " + page.getStart() + "," + page.getPageSize();
		ResultSet resultSet = query(sql.replaceFirst("and", "where"));
		try {
			while (resultSet.next()) {
				Worker s = new Worker();
				s.setWorkerNo(resultSet.getInt("workerNo"));
				s.setWorkerName(resultSet.getString("workerName"));
				s.setWorkerSex(resultSet.getString("workerSex"));
				s.setWorkerIdCardNo(resultSet.getString("workerIdCardNo"));
				s.setWorkerBankCardNo(resultSet.getString("workerBankCardNo"));
				s.setWorkerTel(resultSet.getString("workerTel"));
				s.setWorkerAddress(resultSet.getString("workerAddress"));
				s.setWorkerJob(resultSet.getString("workerJob"));
				s.setWorkerJobState(resultSet.getString("workerJobState"));
				s.setWorkerDepartmentNo(resultSet.getString("workerDepartmentNo"));
				s.setWorkerPassword(resultSet.getString("workerPassword"));
				s.setWorkerPhoto(resultSet.getBinaryStream("workerPhoto"));
				ret.add(s);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ret;
	}

	public int getWorkerListTotal(Worker worker) {
		int total = 0;
		String sql = "select count(*)as total from worker ";
		if (!StringUtil.isEmpty(worker.getWorkerName())) {
			sql += "and workerName like '%" + worker.getWorkerName() + "%'";
		}
		if (worker.getDepartmentNo() != 0) {
			sql += " and departmentNo = " + worker.getDepartmentNo();
		}
		if (worker.getWorkerNo() != 0) {
			sql += " and workerNo = " + worker.getWorkerNo();
		}
		ResultSet resultSet = query(sql.replaceFirst("and", "where"));
		try {
			while (resultSet.next()) {
				total = resultSet.getInt("total");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return total;
	}

	public Worker login(String workerNo, String workerPassword) {
		String sql = "select * from worker where workerNo = '" + workerNo + "' and workerPassword = '" + workerPassword + "'";
		ResultSet resultSet = query(sql);
		try {
			if (resultSet.next()) {
				Worker worker = new Worker();
				worker.setWorkerNo(resultSet.getInt("workerNo"));
				worker.setWorkerName(resultSet.getString("workerName"));
				worker.setWorkerSex(resultSet.getString("workerSex"));
				worker.setWorkerIdCardNo(resultSet.getString("workerIdCardNo"));
				worker.setWorkerBankCardNo(resultSet.getString("workerBankCardNo"));
				worker.setWorkerTel(resultSet.getString("workerTel"));
				worker.setWorkerAddress(resultSet.getString("workerAddress"));
				worker.setWorkerJob(resultSet.getString("workerJob"));
				worker.setWorkerJobState(resultSet.getString("workerJobState"));
				worker.setWorkerDepartmentNo(resultSet.getString("workerDepartmentNo"));
				worker.setWorkerPassword(resultSet.getString("workerPassword"));
				worker.setWorkerPhoto(resultSet.getBinaryStream("workerPhoto"));
				return worker;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public boolean editWorkerPassword(Worker worker, String newWorkerPassword) {
		// TODO Auto-generated method stub
		String sql = "update worker set workerPassword = '" + newWorkerPassword + "' where workerNo = " + worker.getWorkerNo();
		return update(sql);
	}
}

④工资管理主要代码

package com.salary.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.salary.model.Page;
import com.salary.model.Student;
import com.salary.model.Teacher;
import com.salary.util.StringUtil;

/**
 * 
 * @author 工资表数据库操作
 */
public class SalaryDao extends BaseDao {
	public boolean addSalary(Salary salary) {
		String sql = "insert into salary values(" + salary.getWorkerNo() + "," + salary.getYearAndMonth();
		sql += "," + salary.getBasicSalary() + "," + salary.getBonus();
		sql += "," + salary.getSubsidy() + "," + salary.getForfeit();
		sql += "," + salary.getRealSalary() + ",'" + salary.getDistributionMethod() + "'";
		sql += ",'" + salary.getDistributionStatus() + "'";
		return update(sql);
	}

	public boolean editSalary(Salary salary) {
		// TODO Auto-generated method stub
		String sql = "update salary set basicSalary = " + salary.getBasicSalary();
		sql += ",bonus = " + salary.getBonus();
		sql += ",subsidy = " + salary.getSubsidy();
		sql += ",forfeit = " + salary.getForfeit();
		sql += ",realSalary = " + salary.getRealSalary();
		sql += ",distributionMethod = '" + salary.getDistributionMethod() +"'";
		sql += ",distributionStatus = '" + salary.getDistributionStatus() +"'";
		sql += " where workerNo = " + salary.getWorkerNo() + "and yearAndMonth = " + salary.getYearAndMonth();
		return update(sql);
	}

	public boolean deleteSalary(String workerNos, Date yearAndMonths) {
		// TODO Auto-generated method stub
		String sql = "delete from salary where workerNo in(" + workerNos + ") and" + yearAndMonth + "in("+ yearAndMonths +")";
		return update(sql);
	}

	public Salary getSalary(int workerNo) {
		String sql = "select * from salary where workerNo = " + workerNo;
		Teacher salary = null;
		ResultSet resultSet = query(sql);
		try {
			if (resultSet.next()) {
				salary = new Salary();
				salary.setBasicSalary(resultSet.getInt("basicSalary"));
				salary.setBonus(resultSet.getInt("bonus"));
				salary.setSubsidy(resultSet.getInt("subsidy"));
				salary.setForfeit(resultSet.getInt("forfeit"));
				salary.setRealSalary(resultSet.getInt("realSalary"));
				salary.setDistributionMethod(resultSet.getString("distributionMethod"));
				salary.setDistributionStatus(resultSet.getString("distributionStatus"));
				return salary;
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return salary;
	}

	public List<Salary> getSalaryList(Salary salary, Page page) {
		List<Salary> ret = new ArrayList<Salary>();
		String sql = "select * from salary ";
		if (!StringUtil.isEmpty(salary.getWorkerNo())) {
			sql += "and workerNo =" + salary.getWorkerNo();
		}
		if (salary.getYearAndMonth() != 0) {
			sql += " and yearAndMonth = " + salary.getYearAndMonth();
		}
		sql += " limit " + page.getStart() + "," + page.getPageSize();
		ResultSet resultSet = query(sql.replaceFirst("and", "where"));
		try {
			while (resultSet.next()) {
				Salary t = new Salary();
				t.setBasicSalary(resultSet.getInt("basicSalary"));
				t.setBonus(resultSet.getInt("bonus"));
				t.setSubsidy(resultSet.getInt("subsidy"));
				t.setForfeit(resultSet.getInt("forfeit"));
				t.setRealSalary(resultSet.getInt("realSalary"));
				t.setDistributionMethod(resultSet.getString("distributionMethod"));
				t.setDistributionStatus(resultSet.getString("distributionStatus"));
				ret.add(t);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return ret;
	}

	public int getSalaryListTotal(Salary salary) {
		int total = 0;
		String sql = "select count(*)as total from salary ";
		if (!StringUtil.isEmpty(salary.getWorkerNo())) {
			sql += "and workerNo =" + salary.getWorkerNo();
		}
		if (salary.getYearAndMonth() != 0) {
			sql += " and yearAndMonth = " + salary.getYearAndMonth();
		}
		ResultSet resultSet = query(sql.replaceFirst("and", "where"));
		try {
			while (resultSet.next()) {
				total = resultSet.getInt("total");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return total;
	}
}

4.2.2运行截图

                                           图4.1 登录界面图

                                           图4.2 管理员主界面图

                                           图4.3 部门信息“添加”功能图

                                           图4.4 部门信息“删除”功能图

                                           图4.5 部门信息“修改”功能图

第五章 系统软件测试

5.1 测试目的

        软件测试的目的是尽可能早的找出软件产品中潜藏的缺陷,并确保其得以修复,也就是让用户对产品有更好的体验,保证软件的高质量。软件测试的另外一个目的就是降低软件的开发成本,除了降低开发成本,还可以降低因软件缺陷带来的商业风险。如果软件的缺陷过多,也会降低合作企业的信任度,从而造成商业上的一些损失和风险,进行测试则会降低商业风险。测试是在用户使用软件之前提早介入,进行软件质量的保障。只有经过了软件测试这一环节,才能把软件交付到用户手中。公司的人员才对软件的信心更高,不至于把软件交付出去之后,时常担心用户的投诉或产品有致命的风险。

5.2 测试方法

(1)黑盒测试(Black Box)

        测试内容:黑盒测试是把测试对象看做一个黑盒子,利用黑盒测试法进行动态测试时,需要测试软件产品已经实现的功能是否符合功能设计要求,不需测试软件产品的内部结构和处理过程。

        黑盒测试注重于测试软件的功能性需求,也即黑盒测试使软件工程师派生出执行程序所有功能需求的输入条件。黑盒测试并不是白盒测试的替代品,而是用于辅助白盒测试发现其他类型的错误。

(2)白盒测试(White Box)

        测试内容:设计者可以看到软件系统的内部结构,并且使用软件的内部知识来指导测试数据及方法的选择。

        白盒测试通常被认为是单元测试与集成测试,期中有六种测试方法:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。

5.3 测试用例

1、测试用户并发登录

2、测试人事部新建岗位

3、财务部配置员工薪资结构

猜你喜欢

转载自blog.csdn.net/qq_41587612/article/details/113388495