热门标签 | 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. 技术分享图片

    进行入职操作:

    技术分享图片

    技术分享图片

    技术分享图片

    员工离职操作:

    技术分享图片

    技术分享图片

    技术分享图片

    技术分享图片




测试员工打卡:

技术分享图片

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

技术分享图片

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

技术分享图片

技术分享图片

技术分享图片

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

技术分享图片

技术分享图片


推荐阅读
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
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社区 版权所有