部门员工管理系统(上)

一. 系统需求分析

1.1 系统需求分析

1.1.1问题描述

       在企业管理中,部门和员工管理是一个复杂且重要的任务。企业需要一个高效的系统来管理部门和员工的信息,分配任务,跟踪任务完成情况,并对员工的绩效进行评估。传统的手工管理方式效率低下,容易出错,因此需要一个自动化的部门员工管理系统来提高管理效率和准确性。

课设要求:

(1)完成对管理员、员工的登陆;

(2)管理员完成对部门的增删改查;

(3)管理员完成对员工的增删改查,员工需要归属到具体的部门中;

(4)完成部门主管对员工派发任务功能。

(5)员工完成任务,要求上传任务完成情况附件。

(6)经理审核任务结果

(7)自动生成员工的绩效,经理支持导出员工绩效情况信息。

设计环境:Windows+VSCode+IDEA+JDK+Tomcat+MySQL

1.2  功能要求

1.2.1 程序的功能

 管理员功能:

        A.管理员、员工登录功能。

        B.管理员管理部门的增删改查功能。

        C.管理员管理员工的增删改查功能,员工需要归属到具体的部门中。

        D.部门主管派发任务给员工。

        E.管理员审核任务结果。

        F.自动生成员工的绩效,并支持经理导出员工绩效情况信息。

员工功能:

          A.员工登录功能。

          B.员工接受任务并上传任务完成情况附件。

1.2.2输入输出的要求

输入:

        A.管理员、员工的登录信息。

        B.部门信息(名称、描述等)。

        C.员工信息(姓名、工号、部门等)。

        D.任务信息(任务描述、截止日期、分配的员工等)。

        E.员工提交的任务完成情况及附件。

        F.经理的审核结果。

输出:

        A.登录成功或失败的提示信息。

        B.部门列表、员工列表、任务列表等信息。

        C.任务分配和完成情况。

        D.绩效信息导出文件(CSV格式)

二.概要设计

2.1 模块设计

2.1.1 登录模块

        功能:管理员、员工登录。

        调用关系:调用用户验证模块,验证用户身份。

        输入:用户名、密码。

        输出:登录成功或失败的信息。

  2.1.2 部门管理模块

    功能:增删改查部门信息。

    调用关系:与数据库交互模块交互,执行相应的数据库操作。

    输入:部门名称、描述等信息。

    输出:部门列表及操作结果。

2.1.3 员工管理模块

功能:增删改查员工信息。

调用关系:与数据库交互模块交互,执行相应的数据库操作。

输入:员工姓名、工号、部门等信息。

输出:员工列表及操作结果。

2.1.4 任务管理模块

功能:部门主管派发任务,员工提交任务,经理审核任务。

调用关系:与数据库交互模块交互,执行相应的数据库操作。

输入:任务描述、截止日期、分配的员工、完成情况附件等。

输出:任务列表及操作结果。

2.1.5 绩效管理模块

功能:生成员工绩效,导出绩效信息。

调用关系:与数据库交互模块交互,生成绩效数据并导出。

输入:无。

输出:绩效信息表及导出文件。

2.1.6 数据库交互模块

功能:与数据库进行数据操作。

调用关系:被其他各模块调用,执行具体的数据库操作。

输入:无。

输出:CSV格式的数据文件。

2.2 系统数据项和数据结构

登录表 (login): 用于存储用户的登录信息,包括用户名、密码和角色(管理员/员工)。

部门表 (department): 用于存储部门信息,包括部门ID、名称和描述。

员工表 (employee): 用于存储员工信息,包括员工ID、姓名、所属部门、职位和关联的用户ID。

任务表 (tasks): 用于存储任务信息,包括任务ID、标题、描述、关联部门、负责员工、任务状态和附件(Base64编码)。

绩效表 (task_assignment): 用于存储任务分配和绩效信息,包括任务ID、员工ID、文件名、Base64编码的文件、上传时间和审核状态。

2.3 数据库表设计

(1) 登录用户表

字段名

数据类型

长度

是否主键

描述

userId

int

20

用户编号

userName

varchar

20

用户名

userPwd

varchar

20

密码

role

Varchar

20

身份

(2)员工用户表

字段名

数据类型

长度

是否主键

描述

id

Int

20

员工编号

name

varchar

20

用户名

department_id

int

20

部门编号

position

Varchar

20

部门名称

user_id

varchar

20

用户编号

(3)部门表

字段名

数据类型

长度

是否主键

描述

id

int

20

部门编号

name

varchar

20

部门主管

description

varchar

20

部门名称

(4) 任务表

字段名

数据类型

长度

是否主键

描述

id

int

20

编号

title

varchar

20

标题

description

varchar

20

具体描述

department_id

int

20

部门编号

employee_id

int

20

用户编号

status

varchar

20

状态

attachment

varcher

20

附件

(5)绩效表

字段名

数据类型

长度

是否主键

描述

id

int

50

绩效编号

task_id

int

10

任务编号

employee_id

int

10

员工编号

file_name

varchar

10

文件名

file_base64

longtext

10

文件

uploaded_at

timestamp

6

当前时间

status

varchar

10

状态

三.详细设计

3.1写出各模块的类算法。

3.1.1 JDBC 类算法分析

JDBC 类通过静态方法 getConn 提供了一个简单易用的接口来获取数据库连接。其实现包括以下步骤:

加载数据库驱动程序:使用 Class.forName(Dname) 动态加载数据库驱动程序类。捕获并处理 ClassNotFoundException 异常。

获取数据库连接:使用 DriverManager.getConnection(URL, Name, password) 获取数据库连接。

捕获并处理 SQLException 异常。返回数据库连接:将获取的数据库连接对象 conn 返回给调用者。

3.1.2 LoginServlet 类算法分析

LoginServlet 类的主要功能是处理用户登录请求,验证用户身份,并根据用户角色跳转到不同的页面。它通过以下步骤实现:

获取请求中的用户名和密码。连接数据库并执行查询,验证用户名和密码是否匹配。根据查询结果决定登录成功或失败,并执行相应的操作。确保在任何情况下都正确关闭数据库资源。

3.1.3 DepartmentServlet 类算法分析

doGet 方法:处理增删改查操作,调用相应的私有方法执行数据库操作。根据请求参数判断执行何种操作。

doPost 方法:将 POST 请求转发到 doGet 方法处理,确保处理逻辑一致。

数据库操作方法:

deleteDepartment: 删除部门。

updateDepartment: 更新部门信息。

addDepartment: 添加新部门。

listDepartments: 列出所有部门。

searchDepartments: 搜索部门。

通过这些方法,DepartmentServlet 类实现了对部门的增删改查操作,确保了管理员能够方便地管理部门信息。

3.1.4 EmployeeServle 类算法分析

处理 GET 和 POST 请求:

doGet 方法:处理所有 GET 请求,包括删除、编辑、添加、列出和搜索员工的操作。

doPost 方法:将 POST 请求转发到 doGet 方法处理,确保处理逻辑一致。

根据请求参数执行不同操作:

删除员工:调用 deleteEmployee 方法,通过员工 ID 删除员工信息。

编辑员工:调用 updateEmployee 方法,通过员工 ID 更新员工信息。

添加员工:调用 addEmployee 方法,添加新员工信息。

搜索员工:调用 searchEmployees 方法,根据员工 ID 或姓名进行搜索。

列出员工:调用 listEmployees 方法,列出所有员工信息。

数据库操作方法:

deleteEmployee:通过员工 ID 删除员工信息。

updateEmployee:通过员工 ID 更新员工信息。

addEmployee:添加新员工信息。

listEmployees:列出所有员工信息。

searchEmployees:根据员工 ID 或姓名进行搜索,返回匹配的员工信息。

通过这些方法,EmployeeServlet 类实现了对员工信息的增删改查操作,确保管理员能够方便地管理员工信息。

3.1.5 TaskServlet 类算法分析

处理 GET 和 POST 请求:

doGet 方法:处理所有 GET 请求,包括删除、编辑、添加、列出任务的操作。doPost 方法:将 POST 请求转发到 doGet 方法处理,确保处理逻辑一致。

根据请求参数执行不同操作:

删除任务:调用 deleteTask 方法,通过任务 ID 删除任务信息。

编辑任务:若请求中包含任务标题等参数,调用 updateTask 方法,通过任务 ID 更新任务信息。若请求中不包含任务标题等参数,查询指定 ID 的任务信息,并将其转发到任务编辑页面。

添加任务:调用 addTask 方法,添加新任务信息。

数据库操作方法:

deleteTask:通过任务 ID 删除任务信息。

updateTask:通过任务 ID 更新任务信息。

addTask:添加新任务信息。

listTasks:列出所有任务信息。

任务列表显示:从数据库中查询所有任务,并将任务信息生成 HTML 表格,设置为请求属性,转发到任务管理页面进行显示。

通过这些方法,TaskServlet 类实现了对任务信息的增删改查操作,确保管理员能够方便地管理任务信息。

3.1.6 ViewTasksServlet 类算法分析

处理 GET 和 POST 请求:

doGet 方法:处理所有 GET 请求,通过查询数据库中的任务分配信息,并将其转发到视图页面。doPost 方法:将 POST 请求转发到 doGet 方法处理,确保处理逻辑一致。

数据库操作:

获取数据库连接:通过 JDBC.getConn() 方法获取数据库连接。

查询任务分配信息:执行 SQL 查询,从 task_assignment 表中获取所有任务分配记录。

生成任务信息表格:通过查询结果集(ResultSet),动态生成 HTML 表格,展示任务分配信息,包括任务 ID、员工 ID、文件名、上传时间、审核链接和状态。

设置请求属性和转发:将生成的 HTML 表格设置为请求属性 tasks。将请求转发到 view_tasks.jsp 页面进行显示。

通过这些方法,ViewTasksServlet 类实现了对任务分配信息的查询和展示,方便管理员查看所有任务的分配情况和审核状态。

3.1.7 ReviewTaskServlet类算法分析

处理 GET 请求:获取任务信息:通过请求参数 id 获取任务分配记录的 ID,从数据库中查询相应的任务分配信息。

设置请求属性:将查询到的任务分配信息(如任务 ID、员工 ID、文件名、上传时间等)设置为请求属性。

转发请求:将请求转发到 review_task.jsp 页面,以便在页面上展示任务信息进行审核。

处理 POST 请求:获取请求参数:从请求中获取任务分配记录的 ID 和审核状态。

更新任务状态:根据任务 ID 更新数据库中相应任务分配记录的审核状态。

重定向:更新完成后,重定向到 ViewTasksServlet,以刷新任务列表页面。

数据库操作:

连接数据库:通过 JDBC.getConn() 方法获取数据库连接。

执行查询和更新:使用 PreparedStatement 预编译 SQL 语句,执行查询操作获取任务信息。通过预编译 SQL 语句,执行更新操作修改任务状态。

通过这些方法,ReviewTaskServlet 类实现了任务审核功能,管理员可以查看任务详情并更新任务的审核状态。

3.1.8 UploadServlet类算法分析

Servlet配置和注解:使用@WebServlet("/UploadServlet")注解指定Servlet的URL路径为/UploadServlet。使用@MultipartConfig注解支持文件上传功能,允许Servlet获取multipart/form-data类型的请求参数。

doPost方法:处理POST请求,接收来自客户端的文件上传请求。解析请求中的任务ID (taskId) 和员工ID (employeeId)。通过request.getPart("file")获取上传的文件部分 (Part)。使用getFileName方法从文件部分获取文件名。将文件内容读取为字节数组,并使用Base64编码转换成字符串 (fileBase64)。

数据库操作:使用JDBC建立数据库连接 (JDBC.getConn())。准备SQL语句,将任务ID、员工ID、文件名、Base64编码后的文件内容及上传时间插入到数据库表 task_assignment 中。执行SQL更新操作 (pstmt.executeUpdate())。

响应处理:如果操作成功,返回带有JavaScript警报和重定向的成功消息到客户端,提示提交成功,并跳转到 EmployeeTaskServlet。如果操作失败,返回带有错误警报的消息到客户端,并返回到上一个页面 (window.history.back()).

异常处理:捕获并打印所有异常,以确保在出现错误时能够及时通知用户提交失败。

3.1.9 EmployeeTaskServlet 类算法分析

Servlet配置和注解:使用@WebServlet("/EmployeeTaskServlet")注解指定Servlet的URL路径为/EmployeeTaskServlet,处理GET请求。

doGet方法:处理GET请求,接收来自客户端的员工ID (employee_id) 参数。解析员工ID并通过JDBC建立数据库连接 (JDBC.getConn())。准备SQL查询语句,根据员工ID从数据库中获取相关的任务信息。执行查询 (pstmt.executeQuery()) 并遍历结果集 (ResultSet),将任务信息构建为HTML表格 (tasks)。将任务信息存储在请求属性中 (request.setAttribute("tasks", tasks.toString())),并将请求转发到 employeetask_management.jsp 页面进行展示。

HTML生成和操作链接:使用StringBuilder构建HTML表格,显示每个任务的ID、标题、描述、部门ID、状态。为每个任务提供操作链接,例如标记任务完成 (<a href='complete.jsp?task_id=...&employee_id=...'>完成</a>)。

异常处理和资源释放:使用try-catch-finally块确保在操作数据库和处理请求过程中捕获并处理任何异常。在finally块中关闭ResultSet (rs)、PreparedStatement (pstmt) 和数据库连接 (conn),以释放资源并确保数据库连接的正确关闭。

3.1.10 ExportPerformanceCSVServlet 类算法分析

Servlet配置和注解:使用@WebServlet("/ExportPerformanceCSVServlet")注解指定Servlet的URL路径为/ExportPerformanceCSVServlet,处理GET请求。

doGet方法:处理GET请求,设置响应内容类型为CSV (text/csv; charset=UTF-8),并设置响应头指示文件下载 (Content-Disposition为attachment)。通过JDBC.getConn()获取数据库连接 (conn)。创建Statement (stmt) 对象执行SQL查询,从数据库中选择所有的 task_assignment 表数据。使用PrintWriter (writer) 将查询结果输出为CSV格式文件。

CSV文件生成:首先打印CSV文件的头部行,包括字段标签 ("ID,Task ID,Employee ID,File Name,File Path,Uploaded At,Status")。遍历ResultSet (rs),对每一行数据格式化输出到CSV文件中。对于每条记录,格式化输出ID、任务ID、员工ID、文件名、文件路径、上传时间、状态信息。

异常处理:使用try-with-resources语句确保资源(如数据库连接、Statement、ResultSet)在使用完毕后正确关闭。如果发生异常,打印堆栈跟踪并向响应输出错误提示,同时通过JavaScript在前端显示导出失败的警报,并将用户重定向回到 index.jsp 页面。该Servlet实现了从数据库中获取任务分配数据,并将其以CSV文件的格式提供给用户下载。它包括了基本的异常处理,确保在出现问题时向用户提供适当的反馈和导航。

3.2  前后端的调用关系图

                                                 用户操作(前端)

                                                               

JSP 页面 (deparyment_management.jsp,employee_management.jsp, task_management.jsp, view_tasks.jsp, review_task.jsp)

                                                                

Servlet 接收请求(后端)

|

|    |-- DepartmentServlet (doGet, doPost)

    |    |-- addDepartment() -> INSERT INTO Department

    |    |-- updateDepartment() -> UPDATE Department SET

    |    |-- deleteDepartment() -> DELETE FROM Department

    |    |-- searchDepartment() -> SELECT * FROM  Department

    |  

|    |-- EmployeeServlet (doGet, doPost)

    |    |-- addEmployee() -> INSERT INTO employee

    |    |-- updateEmployee() -> UPDATE employee SET

    |    |-- deleteEmployee() -> DELETE FROM employee

    |    |-- searchEmployees() -> SELECT * FROM employee

    |

|   |-- TaskServlet (doGet, doPost)

    |    |-- addTask() -> INSERT INTO tasks

    |    |-- updateTask() -> UPDATE tasks SET

    |    |-- deleteTask() -> DELETE FROM tasks

    |

|   |-- ViewTasksServlet (doGet, doPost)

    |    |-- listTaskAssignments() -> SELECT * FROM task_assignment

    |

|    |-- ReviewTaskServlet (doGet, doPost)

   |     |-- viewTaskAssignment() -> SELECT * FROM task_assignment

   |     |-- updateTaskStatus() -> UPDATE task_assignment SET

   |

                                                                  

                                                           数据库操作

                                                                   

页面跳转(前后端交互)

    |

    |-- response.sendRedirect() 或 request.getRequestDispatcher().forward()

                                                                    

                                                      JSP 页面显示结果

  • 26
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值