企业职工工资在线管理信息系统【数据建模与程序设计课程设计报告】

若本文对你有用请点赞、关注我哟!有些人建议我把指导书也写进博客,所以文章略长。

复习累了可以看看我的视频,有惊喜哦!

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

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

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

设计任务及日程安排:(一周)

        xxx年7月6日  - xxx年7月7日 
                小组之间互为客户,整理需求,同时对需求做分析,形成任务陈述和任务目标。
        xxx年7月7日  - xxx年7月8日
                根据用户需求,建立概念模型;选择合适的数据库,设计界面。
        xxx年7月8日  - xxx年7月9日
                根据概念模型,建立逻辑模型,建立物理模型,并在电脑上实现;设计界面。
        xxx年7月9日  - xxx年7月10日
                撰写测试报告,准备答辩。

课设主要内容

  1. 了解并熟悉数据建模的方法与理论。
  2. 在了解的基础上,进行系统的数据建模,得到数据的概念模型、逻辑模型。
  3. 针对SQL Server、Oracle或者MySQL数据库,将逻辑模型转化为物理模型。
  4. 创建并规划数据库。
  5. 编写基本的数据库应用及功能。
  6. 制定数据库的备份及恢复策略。
  7. 熟悉并掌握数据建模工具以及数据库应用程序开发工具。

课设选题,总有一款适合你(什么?我仿佛听到你说“并没有”hhh)除我最后列的题目,其余题目功能要求、其它要求、数据库应用程序设计均自己设计

        设计题目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:商品房销售信息平台的系统

        设计题目41:在线考试系统

        在线考试系统能够完成考生的在线注册、试题管理、考试参数设置、自动呈卷、自动批卷、成绩管理及查询等功能。具体的要求如下:

  1. 功能要求:
    1. 考生基本信息管理。
    2. 试题管理(只考虑主观题)。
    3. 考试参数管理:主要考虑类型题出题的数量设置及考试时间设置。
    4. 考生成绩查询:要求按科目、部门、考生、成绩区间查询。
    5. 成绩统计:要求按科目、部门结合时间段进行统计。
  2. 其它要求:
    1. 要求完成多科目在线考试。
    2. 系统要考虑承载至少200人的同时在线考试。
    3. 要考虑考试过程中的失败恢复问题。
    4. 试题随机出,不用考虑难度问题。
  3. 数据库应用程序设计:
    1. 自动组卷
    2. 自动批卷。

        设计题目42:超市销售系统

        超市销售系统可以将超市的进、销、存进行统一地管理,实现商品销售、商品入库、库存盘点等功能。具体要求如下:

  1. 功能要求:
    1. 商品及相关信息管理。
    2. 商品入库管理。
    3. 商品销售。
    4. 销售报表查询:要求按时间段查询。
    5. 库存查询:要求按商品查询。
  2. 其它要求:
    1. 销售时需要考虑以商品为单位的折扣与折让。
    2. 本系统是基于网络的软件,需要考虑客户端与服务器的数据同步问题。
    3. 需要考虑销售过程中POS机故障恢复后的销售现场保存问题。
  3. 数据库应用程序设计:
    1. POS机故障恢复相关的程序。
    2. 客户端与服务器数据同步相关的程序。

        设计题目43:毕业设计管理系统

        毕业设计管理系统的目的是提供一个在线办公环境,为教师与学生之间提供一个沟通的平台。主要完成教师任务下发、学生阶段性任务提交以及学生毕业设计相关文档的管理等。具体要求如下:

  1. 功能要求:
    1. 任务管理:教师任务下发、学生查看任务、学生任务提交等。
    2. 毕业设计相关文档管理:题目申请表、教师评语、译文、论文、毕业设计指导书等。
    3. 评阅人审查论文功能:允许指导教师邀请其它教师作为评阅人对论文进行评阅。
    4. 毕业设计分数管理。
  2. 其它要求:
    1. 只需针对计算机学科的毕业设计要求。
    2. 考虑多评阅人进行论文评审。
    3. 要考虑200人同时在线的应用环境。
    4. 考虑将学生毕业设计分数按照该生在毕业设计期间不同阶段的表现综合评分。
  3. 数据库应用程序设计:
    1. 查看是否有超期未完成任务。
    2. 毕业设计分数统计。

        设计题目44:在线图书销售系统

        在线图书销售系统主要完成读者对图书的浏览、评价,图书的订单管理、付款方式管理等功能。具体要求如下:

  1. 功能要求:
    1. 图书及相关信息管理。
    2. 读者(买家)信息管理。
    3. 订单管理。
    4. 库存管理。
    5. 销售报表查询及统计。
  2. 其它要求:
    1. 支持VIP会员的折扣或图书的促销。
    2. 能按多种支持方式付费。
    3. 考虑购物车的实现方式。
    4. 考虑多用户并发在线的要求。
  3. 数据库应用程序设计:
    1. 图书入库与出库时库存的变化相关程序。
    2. 销售报表相关程序。

1 课程设计的主要步骤与方法

        本次课程设计的步骤主要分为:需求调研及整理、数据库概念模型设计、数据库逻辑模型设计、数据库物理模型设计、创建并规划数据库、简单的数据库应用程序设计、数据库备份与恢复策略的制定、撰写综合设计报告等步骤。

1.1 需求调研及整理

        需求调研可采用询问、发调查表、开会、实习、查资料等方法,对题目的要求进行分析。参考《数据库设计凡人入门》一书中关于需求有关内容。

1.2 数据库概念模型设计

        数据建模工作的第一步就是收集流程或活动所需的数据元素。不管流程是全手工的、半自动化的还是全自动化的,都要深入进去寻找其中所蕴含的活动,以获得一个清晰、客观的数据元素及其规则的视图。

1.2.1 概念建模的方法

        概念建模的方法主要有:自顶向下和自底向上两种。

1、自顶向下方法

        用这种方法先寻找业务流程并对业务流程进行初步描述,这些描述提供了分析时要用到的概念。自顶向下的方法用流程来描述数据的处理过程,是一种功能性的或者流程驱动的分析方法。重点分析事物是怎样工作的,这需要从顶部开始,然后通过迭代的方式逐步求精。

2、自底向上方法

        自底向上方法的焦点在于流程中所包含的事物。在这个意义上,就意味着要尽可能多地深入理解所有能够了解到的流程。使用这种方法,寻找并初步列出可能的数据元素,而不管这些数据元素是如何使用的。这种列表通常既包含非常底层、详细的注释,又包含高层的概念,二者混合列在表中。该方法的技巧是要将它们整合到同样的细节层次。这是一种数据驱动的分析。如果对“事物是什么”这个问题比对流程本身更感兴趣则需要从底层开始,然后用一种迭代的方式逐步对信息进行综合,并提高综合的层次。

1.2.2 ​​​​​​​建立概念模型的步骤

  1. 将自顶向下与自底向上得到的概念进行合并。
  2. 优化概念定义。
  3. 加入关系,要确认任意两个概念之间是否存在着某种关系。
  4. 检查业务规则,检查关系是否冗余,去掉产生环状的关系网。
  5. 发布模型。

1.2.3 ​​​​​​​阶段性制品

        本阶段有两个主要的制品,一是用以描述概念的文档,给出概念及其明确的解释说明;二是概念模型,用以描述实体之间的关系。

1.3 数据库逻辑模型设计

        逻辑模型是数据库建模的核心,也是很繁杂的一项工作。通过逻辑模型,即可以检验概念模型的正确性,也能做为物理模型的基础。同时,它还是数据库重构的依据。

1.3.1 ​​​​​​​逻辑建模的步骤

        1、确定主题领域的范围。

                一个主题领域通常是一个数据集,用来反映一个特定的业务领域,如财政或销售。

        2、对关注的每个主题领域进行定义,包括:

  1. 实体(类别实体/影子实体)
  2. 属性
  3. 候选键以及最终的主键
  4. 逻辑数据类型和域
  5. 联系、基数、可否为空

        3、将每个主题领域的逻辑数据模型合并到一起。

        4、质量保证检查,包括:

  1. 规范化
  2. 过多或过少的属性
  3. 多余的关系
  4. 正确的角色名称
  5. 实例表
  6. 与相关专业领域专家讨论
  7. 对等模型

1.3.2 阶段性制品

        本阶段有两个主要的制品,一是逻辑模型;二是对逻辑模型的完整描述。

1.4 ​​​​​​​​​​​​​​数据库物理模型设计

        逻辑到物理的转换是设计过程中的一个阶段性任务。只有在这个阶段,设计的焦点才是怎样构造数据库。针对不同类型的数据库,得到的物理模型是不同的。为了得到好的物理模型,创建并规划数据库的时候必须要有数据库管理(DBA)的参与。这个阶段也是DBA和程序员开始调整和优化应用程序的阶段。一旦DBA构造好物理设计,那么针对它的一个细小修改,甚至是一个列名的拼写,代价都会变得极其昂贵。

1.4.1 ​​​​​​​物理建模的步骤

        1、选择数据库类型。

                可以选择Oracle、MySQL、SQL Server、PostgreSQL等数据库。

        2、完成逻辑模型到物理模型的转换。

  1. 命名规范(参照数据库各自的约定)。
  2. 如何从类别中创建表(只留父表、只留子表、可扩展类别等方法)。
  3. 确定主键。
  4. 外键的命名和定义。
  5. 确定数据类型、长度等。
  6. 定义视图、完整性约束等。
  7. 制定反规范化的策略,考虑性能与数据完整性的平衡。

1.4.2 本阶段的制品

        本阶段有两个主要的制品,一是物理模型及其完整描述;二是针对特定数据库的数据定义语言(DDL)脚本。

1.5 ​​​​​​​简单的数据库应用程序设计

        根据系统及功能的要求,有时需要把功能点放在数据库后台来执行。这时需要使用数据库支持的编程语言(PL/SQL、T-SQL、PL/pgSQL、SQLJ等)编写代码实现功能。

        可用的数据库后台程序类对象有:

  1. 存储过程(Stored Process)。
  2. 函数(Function)。
  3. 触发器(Trigger)。
  4. 包(Package)。

1.6 数据库备份与恢复策略的制定

        根据系统的要求,制定完备的备份与恢复策略,努力做到减少数据的损失,提高数据库的高可用性。

2 排版要求:如果课程设计,排版不符合要求,成绩直接为中以下,严重者不及格)

        设计报告要求文字通顺,语言流畅,无错别字。

        页边距:上2.5cm,下2.5cm,左3cm、右2.5cm;

        字    体:正文:宋体、小四,章节、标题:宋体、四号(标题要加粗);

        行    距:固定值20;页码:居中、底部。

        图序及图名置于图的下方;表序及表名置于表的上方(表名、图名用五号字)。图序:样例(图3-1、图3-2)、表序样例(表 3-1 、表3-2)

一、系统简介

1.1需求简介

        传统人工的方式管理文件工资,这种管理方式存在着许多缺点,如:效率低、保密差,另外时间一长,将产生大量的文件和数据,给查找、维护和更新都带来了不少的麻烦,并且容易丢失。因此,开发一个新型的计算机管理的职工工资管理系统对本公司来说非常重要。

1.2功能需求分析

        设计一个企业职工工资管理信息系统,该系统的用户分别:职工和行政部管理员。不同的用户拥有不同的权限,各自完成各自的管理功能,不同的用户看到不同的系统功能。用MySQL创建后台数据库,然后利用JSP技术编写程序实现对数据库的操作,按照要求完成所有功能和模块。

 

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

(1)职工登录

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

(2)浏览工资信息

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

(3)查询工资信息

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

 

行政部管理员的主要功能模块包含:

(1)行政部管理员登录

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

(2)添加职工信息

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

(3)修改职工信息

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

(4)查询职工信息

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

(5)删除职工信息

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

(6)调整工资信息

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

(7)查询工资信息

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

 

其它需求:

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

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

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

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

1.3人员分工

二、数据库规划

2.1创建数据库系统的任务陈述 

        企业职工工资管理信息系统的目的是方便职工查询工资,方便企业管理职工工资

2.2创建数据库系统的任务目标

        维护(录入、更新和删除)公司职工个人信息的的数据

        维护(录入、更新和删除)公司职工本月工资情况的数据

        实现对公司职工个人信息的查询

        实现对公司职工某月工资情况的查询

三、系统定义 

3.1确定数据库应用的范围和边界 

 3.2主要的用户视图

行政部管理员:

        维护(录入、更新和删除)公司职工个人信息的的数据;

        维护(录入、更新和删除)公司职工本月工资情况的数据;

        查询公司职工个人信息;

        查询公司职工某月工资情况。

职工:

        修改密码;

        查询自己某月工资情况。

3.3数据需求

        职工信息(职工编号、职工姓名、性别、身份证、银行卡号、职工电话、住址、职务、任职状态、部门编号、密码)

        职工工资信息(职工编号、年月、基础工资、奖金、补贴、扣款、实际工资、发放状态、发放方式)

        部门信息(部门编号、部门名称、部门电话)

3.4事务需求(要求10个以上事务需求)

        修改指定职工登录密码;

        添加指定职工个人信息的数据;

        修改指定职工个人信息的数据;

        删除指定职工个人信息的数据;

        更新指定职工本月工资信息的数据;

        列出指定职工个人信息的数据;

        列出指定职工指定年月工资情况的数据;

        按照年月由旧到新顺序列出指定职工每月工资情况的数据;

        按照年月由新到就顺序列出指定职工每月工资情况的数据;

        按照职工号顺序列出所有职工指定年月的工资情况。

四、概念结构设计

4.1单个实体属性图

 4.2两个实体之间的关系

4.3整体E-R图

五、逻辑结构设计

                                                   图5-1 逻辑结构设计图

六、物理结构设计

七 、功能实现

7.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;
	}
}

7.2成果展示

八、设计总结

        我们小组的成品特色主要在于:在程序设计前,先用Axure做了模型,使得组员们能更好理解并高效完成任务。

        通过这次课程设计我们发现这其中需要的很多知识我们还没有接触过,上网查找资料的时候发现我们以前所学到的仅仅是皮毛,还有很多需要我们掌握的东西我们根本不知道。同时也发现有很多已经学过的东西我们没能理解到位,不能灵活运用于实际,也不能很好的用来解决问题,这就需要自己不断的大量的实践,通过不断的自学,不断地发现问题,思考问题,进而解决问题。在这个过程中我们将深刻理解所学知识,同时也可以学到不少很实用的东西。很多东西书上写的很清楚,貌似看着也很简单,思路非常清晰,但真正需要自己想办法去设计一个系统的时候才发现其中的难度,经常做到后面才突然就发现自己一开始的设计有问题,然后又回去翻工,在各种反复中不断完善自己的想法。我想有这样的问题不止我一个,事后想想是一开始着手做的时候下手过于轻快,或者说是根本不了解自己要做的这个系统是给谁用的。因为没有事先做过仔细的用户调查,不知道整个业务的流程,也不知道用户需要什么功能就忙着开发,这是作为设计开发人员需要特别警惕避免的,不然会给后来的工作带来很大的麻烦,甚至可能会需要全盘推倒重来。

        在需求分析过程中,我们通过上网查资料,去图书馆查阅相关资料,结合我们的生活经验,根据可行性研究的结果和用户的需要,分析现有情况及问题。在一周的时间里,不断地对程序及各模块进行修改、编译、调试、运行,其间遇到很多问题,经过组内讨论。最终把它解决了。通过这次课程设计,我们对数据库的设计更加熟练了。

        在本次课程设计中,我们对SQL语言、数据库的创建、修改、删除方法有更娴熟的掌握,通过导入表和删除表、更改表,学会了数据库的基本操作。很多事情不是想象中的那么简单的,它涉及到的各种实体、属性、数据流程、数据处理等等。很多时候感觉后面的设计根本无法继续,这使我们很烦躁。通过本次课程设计,我觉得不管做什么,始终都要相信自己。不要畏惧,不要怕遇到困难,什么都要去尝试,有些你开始认为很难的事在你尝试之后你可能会发现原来它并没有你你想象的那么难。如果没有自信,没有目标,没有信心就很难把事情做好,当其他人都在迷茫的时候,自己一定要坚信目标。从学习这个专业,到以后从事这方面的工作都需要不断地去学习去实践,这次实践可以给我们敲一个警钟,我们面临毕业,面临择业,需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我的最大感想!   

        但是,由于时间仓促以及水平有限,本系统还有很多不完善之处,也难免存在错漏,恳请老师谅解。

不给点赞的人,可恶可恶ちくしょ

猜你喜欢

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