C++版期末数据库员工管理项目
课程设计(大作业)报告
一、任务要求
数据库原理与应用的实验大作业让学生通过对数据库基础内容的学习,掌握数据库的基本操作,巩固所学的核心概念,激发学习兴趣,为后续专业课程奠定基础。课内布置数据库设计应用任务,学生在教师指导下以任务驱动方式熟练掌握数据库应用。具体要求包括小组自选新颖课题设计管理系统数据库,至少含3个关系;设计具备安全管理,能正常运行并可查询,查询复杂度影响得分;创建丰富数据库对象,完成表、视图、索引、存储过程和触发器;文档规范,每人一份报告,参考文献不少于六个。
课程设计(大作业)报告
1.题目要求
1.1 设计项目
构建员工管理数据库系统并实现
1.2 设计任务
1.2.1 系统目标
搭建一个高效、稳定且易维护的员工管理信息系统,实现企业人力资源的数字化管理,提升管理效率,降低管理成本
1.2.2 实现流程
1.2.2.1 需求剖析
# 1.2.2.1.1 业务需求
人力资源管理核心业务
涵盖员工从入职到离职的全流程管理,包括信息维护;部门架构管理,涉及部门设置、职位配置和层级关系;薪酬管理,包含基本薪资设定、记录维护与统计分析;考勤管理,有日常记录、工时统计和加班处理;以及数据统计分析,如员工分布、薪资和流失率等决策支持
业务流程支持
新员工入职流程:录入基本信息、分配部门职位、设定薪资标准;员工信息变更,包括部门调动、职位晋升和薪资调整;离职处理,涉及状态变更、原因记录和数据归档
1.2.2.2 功能需求
员工信息管理
实现员工基本信息的录入、修改、查询和删除;自动生成与管理员工工号;管理员工状态(在职、离职、休假、停薪留职);支持按部门、职位、状态等条件筛选查询
部门管理
对部门信息进行增删改查;规范部门编码;指定部门经理;统计分析部门员工
职位管理
维护职位信息;设定职位级别(1-10级);定义薪资范围;管理职位描述
薪资管理
设定员工基本薪资;管理月度薪资记录;构成薪资(基本工资、加班费、奖金、津贴、扣款等);计算与发放薪资记录;生成薪资统计报表
考勤管理
记录日常考勤;记录上下班打卡时间;计算工作和加班时长;管理考勤状态(正常、迟到、早退、旷工、请假);统计分析考勤情况
统计分析功能
统计员工数量(按部门、职位、年龄段);分析薪资(平均薪资、区间分布);统计流失率;分析入职趋势;生成各类报表
数据查询功能
支持多条件组合查询;排序功能(按薪资、入职时间等);分页显示;数据导出
1.2.2.3 非功能需求:
1. 性能要求
数据库查询响应时间小于2秒;支持并发用户数不少于100;系统可用性不低于99.5%;数据备份恢复时间小于30分钟
2. 安全性要求
用户身份认证与权限控制;敏感数据加密存储(如身份证号);记录操作日志并审计;分级管理数据访问权限
3. 可靠性要求
实施数据完整性约束;通过外键关联保证数据一致性;利用事务处理确保操作原子性;定期进行数据备份
4. 可维护性要求
遵循良好数据库设计规范;有完整注释和文档;模块化存储过程和视图;采用标准化命名规范
5. 可扩展性要求
支持新增业务模块;适应数据量增长;满足新统计分析需求;预留接口扩展能力
6. 用户体验要求
界面友好,操作简便;错误提示明确;数据展示直观;支持批量操作
7. 兼容性要求
支持主流数据库管理系统;兼容多种操作系统;支持不同浏览器访问;数据导入导出格式多样
8. 数据质量要求
校验数据格式(邮箱、电话、身份证等);检测和预防重复数据;检查数据完整性;进行历史数据版本控制
1.2.3 概念结构设计
1.2.3.1 实体定义:
-
系统中的主要实体
erDiagram
DEPARTMENTS
{
int department_id PK "部门ID,主键"
varchar department_name UK "部门名称,唯一"
varchar department_code UK "部门代码,唯一"
varchar manager_name "部门经理"
text description "部门描述"
timestamp created_at "创建时间"
timestamp updated_at "更新时间"
}
POSITIONS
{
int position_id PK "职位ID,主键"
varchar position_name "职位名称"
int position_level "职位级别(1-10)"
decimal min_salary "最低薪资"
decimal max_salary "最高薪资"
text description "职位描述"
timestamp created_at "创建时间"
}
EMPLOYEES
{
int employee_id PK "员工ID,主键"
varchar employee_code UK "员工工号,唯一"
varchar name "姓名"
enum gender "性别(男/女/其他)"
date birth_date "出生日期"
varchar phone "电话号码"
varchar email UK "邮箱地址,唯一"
varchar id_card "身份证号"
text address "家庭地址"
int department_id FK "部门ID,外键"
int position_id FK "职位ID,外键"
date hire_date "入职日期"
date contract_start "合同开始日期"
date contract_end "合同结束日期"
decimal salary "基本薪资"
decimal bonus "奖金"
enum status "员工状态(在职/离职/休假/停薪留职)"
date quit_date "离职日期"
text quit_reason "离职原因"
timestamp created_at "创建时间"
timestamp updated_at "更新时间"
}
SALARY_RECORDS
{
int record_id PK "记录ID,主键"
int employee_id FK "员工ID,外键"
date salary_month UK "薪资月份,与员工ID组成唯一键"
decimal basic_salary "基本工资"
decimal overtime_pay "加班费"
decimal bonus "奖金"
decimal allowance "津贴"
decimal deduction "扣款"
decimal social_insurance "社保扣除"
decimal tax "个人所得税"
decimal net_salary "实发工资"
timestamp created_at "创建时间"
}
ATTENDANCE_RECORDS
{
int record_id PK "记录ID,主键"
int employee_id FK "员工ID,外键"
date attendance_date UK "考勤日期,与员工ID组成唯一键"
time check_in_time "上班打卡时间"
time check_out_time "下班打卡时间"
decimal work_hours "工作小时数"
decimal overtime_hours "加班小时数"
enum status "考勤状态(正常/迟到/早退/旷工/请假)"
text remark "备注"
timestamp created_at "创建时间"
}
实体间关系
DEPARTMENTS ||--o{ EMPLOYEES : "包含"
POSITIONS ||--o{ EMPLOYEES : "担任"
EMPLOYEES ||--o{ SALARY_RECORDS : "拥有"
EMPLOYEES ||--o{ ATTENDANCE_RECORDS : "拥有"
2.2 ER图:
1.2.3.2 职工管理系统总ER图
1.2.4 逻辑结构设计
1.2.4.1 实体定义
1.2.4.1.1 员工实体 (Employee)
员工ID (employee_id) 为主键,唯一标识员工
员工工号 (employee_code) 唯一标识员工
姓名 (name) 员工的姓名
性别 (gender) 员工的性别信息
出生日期 (birth_date) 员工的出生日期
联系电话 (phone) 员工的手机号码
邮箱地址 (email) 员工的电子邮箱
身份证号 (id_card) 员工的身份证号码
家庭地址 (address) 员工的详细地址
入职日期 (hire_date) 员工的入职时间
合同开始日期 (contract_start) 员工合同的起始日期
合同结束日期 (contract_end) 员工合同的截止日期
基本薪资 (salary) 员工的月薪
绩效奖金 (bonus) 员工的奖金数额
在职状态 (status) 员工的在职状态(在职、离职、休假等)
1.2.4.1.2 部门实体 (Department)
部门ID (department_id) 为主键
部门名称 (department_name) 部门的全称
部门代码 (department_code) 部门的编码
部门经理 (manager_name) 部门的负责人姓名
部门描述 (description) 部门的职能说明
创建时间 (created_at) 部门设立的时间
1.2.4.1.3 职位实体 (Position)
实体描述: 公司内的职位岗位信息
属性:
职位ID (position_id) 为主键
职位名称 (position_name) 岗位的名称
职位级别 (position_level) 岗位的层级
薪资下限 (min_salary) 该职位的最低薪资
薪资上限 (max_salary) 该职位的最高薪资
职位描述 (description) 岗位职责的说明
创建时间 (created_at) 职位设立的时间
1.2.4.1.4 薪资记录实体 (Salary_Record)
实体描述: 员工每月薪资发放的详细记录
属性:
记录ID (record_id) 为主键
薪资月份 (salary_month) 工资所属的月份
基本工资 (basic_salary) 员工的基础薪资
加班费 (overtime_pay) 员工的加班补贴
绩效奖金 (bonus) 员工当月的奖金
各项补贴 (allowance) 员工的交通、餐补等
扣除项目 (deduction) 员工的请假扣款等
社会保险 (social_insurance) 员工的社保个人部分
个人所得税 (tax) 员工的税费
实发工资 (net_salary) 员工最终到手的工资
创建时间 (created_at) 记录生成的时间
1.2.4.1.5 考勤记录实体 (Attendance_Record)
实体描述: 员工日常考勤打卡记录
属性:
考勤ID (attendance_id) 为主键
考勤日期 (attendance_date) 员工打卡的日期
上班时间 (check_in_time) 员工上班打卡的时间
下班时间 (check_out_time) 员工下班打卡的时间
工作时长 (work_hours) 员工实际工作的小时数
加班时长 (overtime_hours) 员工加班的小时数
考勤状态 (status) 员工的考勤状态(正常、迟到、早退、缺勤等)
备注说明 (remarks) 员工请假等的备注
创建时间 (created_at) 记录创建的时间
1.2.4.2 关系定义(各表之间的联系):
1.2.4.2.1 员工与部门关系 (Employee Department)
关系类型: 多对一 (N:1)
关系描述: 一个员工属于一个部门,一个部门有多个员工
实现方式: 员工表包含部门ID作为外键
约束条件:
员工必须属于某个部门(非空)
部门删除时需先处理该部门的员工
1.2.4.2.2 员工与职位关系 (Employee Position)
关系类型: 多对一 (N:1)
关系描述: 一个员工担任一个职位,一个职位有多个员工担任
实现方式: 员工表包含职位ID作为外键
约束条件:
员工必须有明确的职位(非空)
员工薪资应在职位薪资范围内
1.2.4.2.3 员工与薪资记录关系 (Employee Salary_Record)
关系类型: 一对多 (1:N)
关系描述: 一个员工有多条薪资记录,每条记录属于一个员工
实现方式: 薪资记录表包含员工ID作为外键
约束条件:
每个员工每月只有一条薪资记录
员工离职后不再产生新的薪资记录
1.2.4.2.4 员工与考勤记录关系 (Employee Attendance_Record)
关系类型: 一对多 (1:N)
关系描述: 一个员工有多条考勤记录,每条记录属于一个员工
实现方式: 考勤记录表包含员工ID作为外键
约束条件:
每个员工每天只有一条考勤记录
考勤记录的日期不超过当前日期
1.2.4.2.5 部门与职位关系 (Department Position)
关系类型: 多对多 (M:N)
关系描述: 一个部门有多个职位,一个职位存在于多个部门
实现方式: 通过员工表间接关联,无需单独关联表
约束条件: 职位薪资范围符合部门薪资政策
1.2.5 物理结构设计
1.2.5.1 表结构设计
1.2.5.1.1 员工表 (employees)
CREATE TABLE employees (
employee_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '员工ID,主键',
employee_code VARCHAR(20) UNIQUE NOT NULL COMMENT '员工工号,唯一',
name VARCHAR(100) NOT NULL COMMENT '员工姓名',
gender ENUM('男', '女', '其他') DEFAULT '男' COMMENT '性别',
birth_date DATE COMMENT '出生日期',
phone VARCHAR(20) COMMENT '联系电话',
email VARCHAR(100) COMMENT '邮箱地址',
id_card VARCHAR(18) UNIQUE COMMENT '身份证号',
address TEXT COMMENT '家庭地址',
department_id INT NOT NULL COMMENT '所属部门ID',
position_id INT NOT NULL COMMENT '职位ID',
hire_date DATE NOT NULL COMMENT '入职日期',
contract_start DATE COMMENT '合同开始日期',
contract_end DATE COMMENT '合同结束日期',
salary DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '基本薪资',
bonus DECIMAL(10,2) DEFAULT 0.00 COMMENT '绩效奖金',
status ENUM('在职', '离职', '休假') DEFAULT '在职' COMMENT '在职状态',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE RESTRICT,
FOREIGN KEY (position_id) REFERENCES positions(position_id) ON DELETE RESTRICT,
INDEX idx_employee_code (employee_code),
INDEX idx_department_id (department_id),
INDEX idx_position_id (position_id),
INDEX idx_hire_date (hire_date),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工信息表';
1.2.5.1.2 部门表 (departments)
CREATE TABLE departments (
department_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '部门ID,主键',
department_name VARCHAR(100) NOT NULL COMMENT '部门名称',
department_code VARCHAR(20) UNIQUE COMMENT '部门代码',
manager_name VARCHAR(100) COMMENT '部门经理姓名',
description TEXT COMMENT '部门描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_department_code (department_code),
INDEX idx_department_name (department_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='部门信息表';
1.2.5.1.3 职位表 (positions)
CREATE TABLE positions (
position_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '职位ID,主键',
position_name VARCHAR(100) NOT NULL COMMENT '职位名称',
position_level INT DEFAULT 1 COMMENT '职位级别',
min_salary DECIMAL(10,2) DEFAULT 0.00 COMMENT '薪资下限',
max_salary DECIMAL(10,2) DEFAULT 0.00 COMMENT '薪资上限',
description TEXT COMMENT '职位描述',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
CHECK (max_salary >= min_salary),
INDEX idx_position_name (position_name),
INDEX idx_position_level (position_level),
INDEX idx_salary_range (min_salary, max_salary)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='职位信息表';
1.2.5.1.4 薪资记录表 (salary_records)
```sql
CREATE TABLE salary_records (
record_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '记录ID,主键',
employee_id INT NOT NULL COMMENT '员工ID',
salary_month DATE NOT NULL COMMENT '薪资月份',
basic_salary DECIMAL(10,2) NOT NULL DEFAULT 0.00 COMMENT '基本工资',
overtime_pay DECIMAL(10,2) DEFAULT 0.00 COMMENT '加班费',
bonus DECIMAL(10,2) DEFAULT 0.00 COMMENT '绩效奖金',
allowance DECIMAL(10,2) DEFAULT 0.00 COMMENT '各项补贴',
deduction DECIMAL(10,2) DEFAULT 0.00 COMMENT '扣除项目',
social_insurance DECIMAL(10,2) DEFAULT 0.00 COMMENT '社会保险',
tax DECIMAL(10,2) DEFAULT 0.00 COMMENT '个人所得税',
net_salary DECIMAL(10,2) NOT NULL COMMENT '实发工资',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
FOREIGN KEY (employee_id) REFERENCES employees(employee_id) ON DELETE CASCADE,
UNIQUE KEY uk_employee_month (employee
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12744.html