热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

职工工程数据库课程设计

职工-工程数据库课程设计以下GUI界面均为Navicat1)E-R总体图&&关系模式打?为主码部门department(部门号did?,部门名dname)职位job(职位号jid?

职工-工程数据库课程设计

以下GUI界面均为Navicat


1) E-R总体图&&关系模式

技术分享图片

打?为主码
部门 department(部门号did?,部门名dname)
职位 job(职位号jid?,职位名jname,小时工资率srate)
职工 staff(职工号sid?,职工名 sname,部门号did,职位 jid)
工程 project(工程号pid?,工程名pname,工程所在地pl,开始日期pst,结束日期pet)
打卡 clockio(打卡类型punchTheClock(0上班1下班),时间timestamp?,职工号sid?,工程号pid?)
职员变更(记录号logid?,日期ltime,职工号sid,变更类型ctype,原先部门pd,现在部门cd,经手人handlerid)


2)DDL语句 建表/约束、存储过程或函数


建表、约束:


  • CREATE TABLE `clockio` (
    `punchTheClock` tinyint(4) NOT NULL COMMENT ‘打卡类型(0上班1下班)‘,
    `time_stamp` timestamp NOT NULL COMMENT ‘时间‘,
    `sid` int(11) NOT NULL COMMENT ‘职工号‘,
    `pid` int(11) NOT NULL COMMENT ‘工程号‘,
    PRIMARY KEY (`time_stamp`,`sid`,`pid`) USING BTREE,
    KEY `sid` (`sid`),
    KEY `pid` (`pid`),
    CONSTRAINT `pid` FOREIGN KEY (`pid`) REFERENCES `project` (`pid`),
    CONSTRAINT `sid` FOREIGN KEY (`sid`) REFERENCES `staff` (`sid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


  • CREATE TABLE `department` (
    `did` int(255) NOT NULL COMMENT ‘部门号‘,
    `dname` varchar(255) DEFAULT NULL COMMENT ‘部门名‘,
    KEY `did` (`did`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


  • CREATE TABLE `job` (
    `jid` int(11) NOT NULL COMMENT ‘职位号‘,
    `jname` varchar(255) DEFAULT NULL COMMENT ‘职位名‘,
    `srate` float(255,0) DEFAULT NULL COMMENT ‘小时工资率‘,
    PRIMARY KEY (`jid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


  • CREATE TABLE `jobchanged` (
    `logid` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘记录号‘,
    `ltime` timestamp NOT NULL COMMENT ‘记录发生时间‘,
    `sid` int(11) NOT NULL COMMENT ‘职工号‘,
    `ctype` varchar(255) NOT NULL COMMENT ‘变更类型‘,
    `pd` int(11) DEFAULT NULL COMMENT ‘原先部门号‘,
    `cd` int(11) DEFAULT NULL COMMENT ‘现在部门号‘,
    `handlerid` int(11) DEFAULT NULL COMMENT ‘经手人编号‘,
    PRIMARY KEY (`logid`),
    KEY `sid1` (`sid`),
    KEY `pd` (`pd`),
    KEY `cd` (`cd`),
    KEY `handlerid` (`handlerid`),
    CONSTRAINT `cd` FOREIGN KEY (`cd`) REFERENCES `department` (`did`),
    CONSTRAINT `handlerid` FOREIGN KEY (`handlerid`) REFERENCES `staff` (`sid`),
    CONSTRAINT `pd` FOREIGN KEY (`pd`) REFERENCES `department` (`did`),
    CONSTRAINT `sid1` FOREIGN KEY (`sid`) REFERENCES `staff` (`sid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


  • CREATE TABLE `project` (
    `pid` int(11) NOT NULL COMMENT ‘工程号‘,
    `pname` varchar(255) DEFAULT NULL COMMENT ‘工程名‘,
    `pl` varchar(255) DEFAULT NULL COMMENT ‘工程所在地‘,
    `pst` date DEFAULT NULL COMMENT ‘工程开始时间‘,
    `pet` date DEFAULT NULL COMMENT ‘工程结束时间‘,
    PRIMARY KEY (`pid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;


  • CREATE TABLE `staff` (
    `sid` int(11) NOT NULL COMMENT ‘职工号\r\n‘,
    `sname` varchar(255) DEFAULT NULL COMMENT ‘职工名‘,
    `did` int(11) DEFAULT NULL COMMENT ‘部门号‘,
    `jid` int(11) DEFAULT NULL COMMENT ‘职位号‘,
    PRIMARY KEY (`sid`),
    KEY `did` (`did`),
    KEY `jid` (`jid`),
    CONSTRAINT `did` FOREIGN KEY (`did`) REFERENCES `department` (`did`),
    CONSTRAINT `jid` FOREIGN KEY (`jid`) REFERENCES `job` (`jid`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;



存储过程/函数:

计算工程需要支付的工资:

CREATE DEFINER=`root`@`%` PROCEDURE `calculate_salary`(IN num INT,OUT result INT)
BEGIN
DECLARE exist INT;
DECLARE start_time TIMESTAMP;
DECLARE end_time TIMESTAMP;
SELECT count(*) INTO exist FROM project WHERE pid = num;
IF exist = 0 THEN
SET result = -1;
ELSE
SELECT DATE_FORMAT(pst,‘%Y-%m-%d‘) INTO start_time FROM project WHERE pid = num;
SELECT DATE_FORMAT(pet,‘%Y-%m-%d‘) INTO end_time FROM project WHERE pid = num;
SELECT SUM(TIMESTAMPDIFF(HOUR,stime,etime)*srate) INTO result
FROM
(SELECT a.sid,a.day1,stime,etime FROM
((SELECT sid,DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) AS day1,min(DATE_FORMAT(time_stamp,‘%Y-%m-%d %H:%i:%s‘)) stime
FROM clockio
WHERE punchTheClock = 0 AND pid = num AND
DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) between start_time and end_time group by sid,day1) a,
(SELECT sid,DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) AS day1,max(DATE_FORMAT(time_stamp,‘%Y-%m-%d %H:%i:%s‘)) etime
FROM clockio
WHERE punchTheClock = 1 AND pid = num AND
DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) between start_time and end_time group by sid,day1) b)
WHERE a.sid = b.sid AND a.day1 = b.day1) AS job_time,staff,job
WHERE staff.sid = job_time.sid AND staff.jid = job.jid;
END IF;
END

职工职位变更:

CREATE DEFINER=`root`@`%` PROCEDURE `change_job`(IN `staff_id` int,IN `staff_name` varchar(255),IN `staff_job` int,IN `change_type` varchar(255),IN `new_department` int,IN `dealer` int,OUT `result` int)
BEGIN
declare old_department int;
IF change_type = ‘enter‘ THEN
INSERT staff VALUES(staff_id,staff_name,new_department,staff_job);
INSERT jobchanged(ltime,sid,ctype,pd,cd,handlerid) values(NOW(),staff_id,change_type,null,new_department, dealer);
SET result=1;
ELSEIF change_type = ‘leave‘ THEN
SELECT did INTO old_department FROM staff WHERE sid=staff_id;
INSERT jobchanged(ltime,sid,ctype,pd,cd,handlerid) values(NOW(),staff_id,change_type,old_department,null, dealer);
DELETE from staff WHERE sid = staff_id;
SET result=1;
ELSE
SELECT did INTO old_department FROM staff WHERE sid=staff_id;
IF old_department = new_department THEN
SET result=0;
ELSE
UPDATE staff SET did = new_department WHERE sid=staff_id;
INSERT jobchanged(ltime,sid,ctype,pd,cd,handlerid) values(NOW(),staff_id,change_type,old_department, new_department,dealer);
SET result=1;
END IF;
END IF;
END

打卡:

CREATE DEFINER=`root`@`%` PROCEDURE `punch_in`(IN ptype tinyint,IN snum int,IN pnum int,OUT result INT)
BEGIN
DECLARE now_time TIMESTAMP;
DECLARE cnt INT;
DECLARE judge INT;
SELECT current_timestamp INTO now_time;
SELECT count(*) INTO cnt FROM clockio
WHERE sid = snum AND punchTheClock = 0
AND DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) = DATE_FORMAT(now_time,‘%Y-%m-%d‘);
SELECT count(*) INTO judge FROM clockio
WHERE sid = snum AND punchTheClock = ptype
AND DATE_FORMAT(time_stamp,‘%Y-%m-%d‘) = DATE_FORMAT(now_time,‘%Y-%m-%d‘);
IF DATE_FORMAT(CURRENT_TIMESTAMP,‘%H‘) NOT BETWEEN 0 AND 24 THEN
SET result = 0;
ELSEIF judge >= 1 THEN
SET result = 0;
ELSEIF cnt = 0 and ptype = 1 THEN
SET result = 0;
ELSE
INSERT INTO clockio VALUES(ptype,now_time,snum,pnum);
SET result = 1;
END IF;
END

3)数据初始化

department表:

技术分享图片

job表:

技术分享图片

project表:

技术分享图片

staff表:

技术分享图片

clockio表:

技术分享图片

jobchanged:

技术分享图片


4)测试存储过程/函数


测试工程2所需支付的所有工人酬金:


  1. 技术分享图片



  2. 技术分享图片



  3. 技术分享图片



同理查询工程1:

技术分享图片

根据目前已有的打卡记录可以验证存储过程函数运算正确:

技术分享图片


测试员工职位变更:


  1. 技术分享图片



  2. 技术分享图片



  3. 技术分享图片



  4. 技术分享图片

    进行入职操作:

    技术分享图片

    技术分享图片

    技术分享图片

    员工离职操作:

    技术分享图片

    技术分享图片

    技术分享图片

    技术分享图片




测试员工打卡:

技术分享图片

当前时间为凌晨 不在允许打卡的范围内 所以返回零

技术分享图片

对其中判断部分进行修改后重新运行 就成功了 多了一条新的数据

技术分享图片

技术分享图片

技术分享图片

在本日没有上班打卡的前提下进行下班打卡操作 也返回零 规避了打卡记录错乱的风险

技术分享图片

技术分享图片


推荐阅读
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文探讨了程序员这一职业的本质,认为他们是专注于问题解决的专业人士。文章深入分析了他们的日常工作状态、个人品质以及面对挑战时的态度,强调了编程不仅是一项技术活动,更是个人成长和精神修炼的过程。 ... [详细]
  • 本文详细介绍了如何在Oracle VM VirtualBox中实现主机与虚拟机之间的数据交换,包括安装Guest Additions增强功能,以及如何利用这些功能进行文件传输、屏幕调整等操作。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ... [详细]
  • 本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
author-avatar
hustjs
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有