数据库课程设计之某单位考勤管理系统.docx
1. 课程设计目的(1) 培养员工运用所学课程数据库系统原理的理论知识和技能,深入理解数据库系统原理课程相关的 理论知识,学会分析实际问题的能力。(2) 培养员工掌握用数据库系统原理的知识设计计算机应用课题的思想和方法。(3) 培养员工调查研究、查阅技术文献、资料、手册以及编写技术文献的能力。(4) 通过课程设计的训练,要求员工在教师的指导下,独立完成大作业。2. 课程设计任务与要求:任务:(1) 通过调查研究和运用Internet,收集和调查有关资料、最新技术信息。(2) 基本掌握撰写小论文的基本步骤和写作方法。(3) 根据课题的要求基本理解和掌握数据流图(DFD)和数据字典(DD)的设计方法。(4) 根据课题的要求基本理解和掌握E-R图的设计方法和关系模式的转换。(5) 根据ER图生成数据库表。(6) 数据库完整性、安全性保证措施(7) 数据库实施维护计划基本要求:(1) 每个员工从给定题目中任选一个作为课程设计题目,调查分析一个具体的或模拟的实例。同一个班中的同 学不允许选择相同的题目。选好题目后发给班长或学习汇总,产生选题冲突时,由班艮委员协调解决;(2) 描述该实例的业务信息和管理工作的要求;(3) 建立数据字典;(4) 列出实体、联系;(5) 指出实体和联系的属性;(6) 画出E-R图;(7) 将E-R图转换成关系模式,并注明主码和外码;(8) 创建数据库;(9) 根据题目的要求写查询、存储过程、触发器等。问题描述:实现部门、员工信息管理; 实现系统信息管理,用于设置上午、下午的上下班时间; 实现考勤登记; 创建触发器,如果打卡时间超出上班时间,并且小于5分钟,登记为迟到,否则登记为旷工; 创建存储过程统计各员工指定月份的缺席、旷工次数; 创建视图分组查询各部门的职工信息及职工人数,使用Compute子句; 创建check约束,限制员工的性别必须为男或女; 表间关系3. 课程设计说明书 3需求分析3.1.1功能需求(1) 管理层管理功能包括: 新员工基本信息录入工作 在线查询公司各部门员工的考勤信息 修改员工基本信息(2) 员工功能包括 签到、签出上班打卡 查询个人账号信息 在线修改个人信息3.1.2数据需求关于考勤系统,以下是设计数据信息表:(1) 部门信息表:部门名称nchar(10)、部门编号int;(2) 级别信息表:级别int、级别名称nchar(10);(3) 技能信息表:技能编号nchar(10)、技能名称nchar(10);(4) 员工信息表:级别int、员工编号int、密码int、部门编号int、姓名nchar(10)、性别nchar(10)、年龄int、 邮箱nchar(10)、住址nchar(10)、电话nchar(10)、进入公司日期nchar(10)、学历nchar(10)、政治面貌 nchar(10);(5) 员工技能表:员工编号int、技能编号int;(6) 考勤记录表:员工编号int、状态编号int、上班时间nchar(20)、下班时间nchar(20)、日期nchar(20);(7) 状态信息表:状态编号int、状态名称nchar(10);呆单位考勃系毓图4系统功能结构图3.1.3安全性完整性需求(1)安全性需求分析 需要输入用户名与密码才能登陆本系统; 输入的登陆密码需要以“*”显示; 禁止非法数据写入; 对于各种错误可以做到提醒或纠正;(2)完整性需求 数据库设计时要使关系的属性不可再分,满足原子性; 约束表格中部分属性的内容; 为数据的新增、修改或删除设定对应的触发器; 给表格外键设置级联删除,当对应外键被删除时,将其关联信息全部删除; 防止数据库查询发生SQL注入的攻击;3.1.4数据流图(1)顶层数据流图,如图1示:员工信息,员工信息'若勤信息员管理人员普通员工返回查询图1顶层数据流图(2)零层数据流图,如图2示:F1SI员王信息EW管理员翼侑息,员工者勤图2零层数据流图(3)一层数据流图,如图3示:3状态蓿 息表DLar信 度.表皿考勤信/PN员工 f 店息管 k珪皿ar信 息表记录考勒-/考勤管理系统此号琢 /A登记考勤- /-员工权限一员工潟括政治面貌成别辐号执行茄理号图6员工信息表E-R图(2)全局ER图,如图7示:胡I员I言坦员图7全局E-R图3.1.6数据字典(1)数据结构列名说明字段类型约束控制部门名称不同员工有不同部门nchar(10)非空部门编号所属部门编号16级int可以为空部门信息表(表一)列名说明字段类型约束控制级别信息表(表二)级别对应的级别为15级int非空级别名称员工的具体职位nchar(10)可以为空技能信息表(表三)列名说明字段类型约束控制技能编号对应的技能为15种nchar(10)非空技能名称不同职位负责不同工 作nchar(10)可以为空考勤信息表(表四)列名说明字段类型约束控制员工编号对应的级别为15int非空状态编号员工工作的三种状态 13(上班、缺勤、早 退)int可以为空上班时间8:00-11:00nchar(20)可以为空下班时间13:00-18:00nchar(20)可以为空日期匹配具体时间Date可以为空员工技能表(表五)列名说明字段类型约束控制员工编号对应的级别为15int可以为空技能编号对应的技能为15种int可以为空员工信息表(表六)列名说明字段类型约束控制级别对应的级别为15级int非空员工编号不同职位的员工编号int非空密码独立存在用于登陆int非空部门编号部门编号15int可以为空姓名员工的姓名nchar(10)可以为空性别性别(男,女)nchar(10)可以为空年龄员工的年龄int可以为空邮箱联系方式nchar(10)可以为空住址员工的家庭住址nchar(10)可以为空电话联系方式nchar(10)可以为空进入公司日期入职时间nchar(10)可以为空学历员工的学历(.)nchar(10)可以为空政治面貌团员、党员、群众nchar(10)可以为空状态信息表(表七)列名说明字段类型约束控制状态编号对应的上班状态int非空状态名称上班、矿工、早退nchar(10)可以为空数据流数据流简述:查询员工基础信息数据流来源:员工信息存储数据流去向:员工信息模块数据流组成:级别+员工编号+密码+部门编 号+姓名+性别+年龄+邮箱+住址+电话+进 入公司时间+学历+政治面貌数据流简述:添加/删除/修改员工基础信 息数据流来源:登录用户请求处理数据流去向:员工信息模块数据流组成:级别+员工编号+密码+部门 编号+姓名+性别+年龄+邮箱+住址+电话 +进入公司时间+学历+政治面貌数据流简述:查询/搜索部门信息数据流来源:员工信息存储数据流去向:员工信息管理模块数据流组成:部门信息+级别+技能+考勤+状态数据流简述:添加/删除/修改部门信息数据流来源:登录用户请求处理数据流去向:员工信息管理模块数据流组成:部门信息+级别+技能+考勤+状态数据流简述:查询考勤信息数据流来源:考勤信息存储数据流去向:员工信息管理模块数据流组成:部门编号+级别+状态数据流简述:添加/删除考勤信息 数据流来源:登录用户请求处理 数据流去向:员工信息管理模块 数据流组成:部门编号+级别+状态数据流简述:登录信息数据流来源:用户登录请求处理数据流去向:登录模块数据流组成:用户名+密码数据流简述:查询员工考勤人数信息数据流来源:登录用户请求处理数据流去向:员工信息管理模块 数据流组成:男生人数+女生人数(4)数据存储数据存储名:用户信息简述:存放登录系统时需要的用户的信息数据存储组成:用户名+密码关键字:用户名数据存储名:部门信息简述:存放公司所有部门的信息数据存储组成:部门编号+级别号+级别技能+员工编号关键字:员工编号数据存储名:考勤信息简述:存放公司考勤的信息数据存储组成:部门编号+级别编号+员工编号+状态编号关键字:员工编号+状态编号数据存储名:员工信息简述:存放公司员工的信息数据存储组成:级别+员工编号+密码+部 门编号+姓名+性别+年龄+邮箱+住址+电 话+进入公司时间+学历+政治面貌关键字:员工编号(5)处理过程处理过程名:搜索员工输入数据:员工编号输出数据:级别+员工编号+密码+部门编号 +姓名+性别+年龄+邮箱+住址+电话+进入 公司时间+学历+政治面貌处理逻辑:按照员工编号查找员工信息和与 其对应的部门信息,之后输出数据处理过程名:添加/修改员工输入数据:添加/修改员工信息输出数据:添加/修改是否成功的信息处理逻辑:用户输入要添加/修改的员工信 息,数据库在确认员工信息是否合法之后 给出添加/修改成功或失败的提示处理过程名:查询员工输入数据:申请查询信息输出数据:查询员工信息处理逻辑:按照员工编号的递增顺序输出存储的员工信息处理过程名:查询部门输入数据:申请查询信息输出数据:查询部门信息处理逻辑:按照部门编号的递增顺序输出存储的部门信息处理过程名:用户登录输入数据:用户名+密码输出数据:登录是否成功的信息处理过程名:查询部门考勤人数输入数据:部门编号输出数据:打卡人数处理逻辑:先检测用户名是否存在,若不存处理逻辑:用户输入要查询员工打卡人数在则提示"用户名不存在”,若用户名存在 则核对其对应密码是否正确,正确则显示登 录成功,跳转系统主页,否则提示登录失败的部门编号,若输入的部门编号存在则调 用存储过程,返回打卡的人数,之后以提 示方式给出,否则提示输入有误并需要重 新输入3.2概要设计3.2.1关系模式以下为本系统数据库的数据关系模型,下划直线标明的是关系模式的主码。部门信息表(部门编号,部门信息)级别信息表(级别编号,级别名称)技能信息表(技能编号,技能名称)考勤记录表(员工编号,状态编号,上班时间,下班时间,日期)员工技能表(员工编号,技能编号)状态信息表(状态编号,状态名称)员工信息表(级别编号,员工编号,部门编号,密码,性别,姓名,年龄,电话,邮箱,住址,进入公司时间, 学历,政治面貌)其中部门信息表对应部门基本关系,员工信息表对应员工基本关系,级别信息表对应级别基本关系,状态信息、 表对应员工考勤基本情况,技能信息表对应员工基本技能,员工技能信息表对应技能与员工之间的关系,考勤信息 表对应员工与员工打卡状态之间的关系。3.2.2功能图(1)系统功能结构图,如图8示:图8系统功能结构图3.3详细设计3.3.1数据库SQL Server 2014数据库文件分为3种类型:主数据文件、次数据文件和日志文件。数据库名(DBO): timebookDB文件位置(File): D:Program FilesMicrosoft SQL ServerMSSQL12.MSSQLSERVERMSSQLDATA 连接数据库:String conStr="jdbc:sqlserver:/127.0.0.1:1433;databaseName=timebookDB"CREATE DATABASE timebookDBCONTAINNMNT = NONEON PRIMARY(NAME = 'timebookDB',FILENAME = 'D:Program FilesMicrosoft SQLServerMSSQL12.MSSQLSERVERMSSQLDATAtimebookDB.mdfSIZE = 5120KB,MAXSIZE = UNLIMITED,FILEGROWTH = 1024KB)LOG ON(NAME = 'timebookDB_log',FILENAME = 'D:Program FilesMicrosoft SQLServerMSSQL12.MSSQLSERVERMSSQLDATAtimebookDB_log.ldfSIZE = 2560KB,MAXSIZE = UNLIMITED,FILEGROWTH = 2048KB,FILEGROWTH = 10%) GO3.3.2 表(1)用sql语句创建部门信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo, 部 门信息表(部门名称nchar(10) NOT NULL,部门编号int NOT NULL,CONSTRAINT PK_Table_1 PRIMARY KEY CLUSTERED(部门编号ASC)WITH (PAD_INDEX = OFF, ST7TISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGO部门信息表(表一)列名字段类型是否可为空部门名称nchar(10)非空部门编号int非空(2)用sql语句创建级别信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo.级别信息表(级别int NOT NULL,级别名称nchar(10) NULL,CONSTRAINT PK_级别信息表PRIMARY KEY CLUSTERED(级别ASC)WITH (PAD_INDEX = OFF, STHSTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGO级别信息表(表二)列名约束字段类型是否可为空级别编号主键int非空级别名称nchar(10)可以为空(3)sql 语句创建技能信息表一:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo.技能信息表(技能编号nchar(10) NOT NULL,技能名称nchar(10) NULL,CONSTRAINT PK技能信息表PRIMARY KEY CLUSTERED(技能编号ASC)WITH (PAD_INDEX = OFF, STTISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY )ON PRIMARYGO技能信息表(表二)列名约束字段类型是否可为空技能编号主键nchar(10)非空技能名称nchar(10)可以为空(4) 用sql语句创建考勤信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo.|考勤记录表(员工编号int NOT NULL,状态编号int NOT NULL,上班时间nchar(20) NULL,下班时间nchar(20) NULL,日期nchar(20) NULL,CONSTRAINT PK_Table_1_1 PRIMARY KEY CLUSTERED(员工编号ASC,状态编号ASC)WITH (PAD_INDEX = OFF, STHSTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGOALTER TABLE dbo.考勤记录表 WITH CHECK ADD CONSTRAINT FK考勤记录表_状态信息表FOREIGNKEY (状态编号)REFERENCES dbo.状态信息表(状态编号)GOALTER TABLE dbo.考勤记录表CHECK CONSTRAINT FK§勤记录表_状态信息表 GO考勤信息表(表四)列名约束字段类型是否可为空员工编号主键int非空状态编号主键int非空上班时间nchar(20)可以为空下班时间nchar(20)可以为空日期Date可以为空(5) 用sql语句创员工技能信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo.员工 技能表(员工编号int NOT NULL,技能编号int NOT NULL,CONSTRAINT PK_Table_1_2 PRIMARY KEY CLUSTERED(员工编号ASC,技能编号ASC)WITH (PAD_INDEX = OFF, STTISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGO员工技能表(表五)列名约束字段类型是否可为空员工编号主键int非空技能编号主键int非空(6) 用sql语句创建员工信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo.员工 信息表(级别int NOT NULL,员工编号int NOT NULL,密码int NULL,部门编号int NOT NULL,姓名nchar(10) NULL,性别nchar(10) NULL CONSTRAINT df_性 别DEFAULT (男'),年龄int NULL,邮箱nchar(10) NULL,住址nchar(10) NULL,电话nchar(10) NULL,进入公司日期nchar(10) NULL,学历nchar(10) NULL,政治面貌nchar(10) NULL,CONSTRAINT PK_Table_1_3 PRIMARY KEY CLUSTERED(级别ASC,员工编号ASC,部门编号ASC)WITH (PAD_INDEX = OFF, STRISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGOALTER TABLE dbo.员工 信息表 WITH CHECK ADD CONSTRAINT FK_员工信息表_部门信息表FOREIGNKEY(部门编号)REFERENCES dbo,部门信息表(部门编号)GOALTER TABLE dbo,员工信息表CHECK CONSTRAINT FK_员工信息表_部门信息表GOALTER TABLE dbo,员工 信息表 WITH CHECK ADD CONSTRAINT FK_员工信息表_ 级别信息表FOREIGN KEY(级别)REFERENCES dbo,级别信息表(级别)GOALTER TABLE dbo,员工信息表CHECK CONSTRAINT FK_员工信息表_级别信息表GO员工信息表(表六)列名约束字段类型是否可为空级别主键int非空员工编号主键int非空密码int非空部门编号主键int非空姓名nchar(10)可以为空性别nchar(10)可以为空年龄int可以为空邮箱nchar(10)可以为空住址nchar(10)可以为空电话nchar(10)可以为空进入公司日期nchar(10)可以为空学历nchar(10)可以为空政治面貌nchar(10)可以为空(7) 用sql语句创建员工状态信息表:USE timebookDBGOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE dbo, 状 态信息表(状态编号int NOT NULL,状态名称nchar(10) NULL,CONSTRAINT PKj状态信息表PRIMARY KEY CLUSTERED(状态编号ASC)WITH (PAD_INDEX = OFF, STTISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY)ON PRIMARYGO状态信息表(表七)列名约束字段类型是否可为空状态编号主键int非空状态名称nchar(10)可以为空(8)视图、触发器、存储过程、约束 创建视图分组查询各部门的职工信息及职工人数,使用Compute子句;use timebookDBgocreate view wfmasselect distinct部门信息表.部门名称,部门信息表.部门编号,姓名,年龄,性别,学历from部门信息表,员工信息表where部门信息表.部门编号=员工信息表.部门编号select distinct部门信息表.部门名称,部门信息表.部门编号,姓名,年龄,性别,学历from部门信息表,员工信息表where部门信息表.部门编号=员工信息表.部门编号order by部门信息表.部门名称compute count(部门信息表.部门编号)by部门信息表.部门名称 go 创建触发器,如果打卡时间超出上班时间,并且小于5分钟,登记为迟到,否则登记为旷工; create Trigger trion考勤记录表AFTER insertASdeclare begin int,time int,cq char(10)select cq=员工编号 from insertedselect begin=i班时间 from insertedselect time=下班时间from考勤记录表if(begin-time)<5 and (begin-time)>0叩date考勤记录表set状态编号='3' where员工编号=cq and上班时间=beginif(begin-time)<0叩date考勤记录表set状态编号='1' where员工编号=cq and上班时间=beginif(begin-time)>5叩date考勤记录表set状态编号='2' where员工编号=cq and上班时间=begin 创建存储过程统计各员工指定月份的缺席、旷工次数;use timebookDBgocreate procedure pro_10( 日期 date)as beginselect员工信息表.员工编号,员工信息表.姓名,count(员工信息表.员工编号)-count(考勤记录表.员工编号)缺席from员工信息表,考勤记录表where员工信息表.员工编号=考勤记录表.员工编号group by员工信息表.员工编号,员工信息表.姓名endgo 创建check约束,限制员工的性别必须为男或女;alter table 员工信息表 with checkadd constraint df_性别 default '男'for 性别(9) 执行完上述操作,得到如下界面,如图12示: timebookDB0二数据库海图 曰口表国.素统表田 口 FileTahles田dbcn部门信息表 0 _ db,级别信息表 田n北口-,技能信息表 田3 弟口,考也记录表 国n员工技能表0封dbo,昂工信皂表 (3 房db,状态信息表图12数据库详情(10) 表与表之间关系模式图,如图13示:3.3.3主流程图图13关系模式图(1)主系统流程图,如图9示:do图9主系统流程图主界面:函HIT筮祭珞S- 二 X'理系统考勤卷'理系统考勤智I轻理登陆员工器所退出图10主界面(2)员工信息管理界面功能,员工查询功能如图11示:图11员工查询功能流程图界面如图12示:.区J Blifi /再:超2222员工员工个人信息如下图13修改员工信息界面如图14所示:性别;女确定图12查询员工信息(3)员工信息管理界面功能,修改员工信息功能如图13示:员工信皂修改成如!:图14修改员工信息(4)员工信息管理界面功能,员工考勤功能如图15示:r直看个人信息僮政维护个人信息员工漏号姓名性别年睑部门名称级别名称邮箱小花16市场部普通员工122r*-图15员工考勤功能界面如图16所示:S景工信息管理欢迎2222员工HIT员工考勤系筑隔息查询图16员工考勤界面(5)管理员界面管理功能,查询员工考勤流程图如图17示:员工编号姓名状态名称上班时间下班时间日期小花正常上班13:5722:2120200709璃"查看个人信皂r修改维护个人信息宣是吝退出图17管理员查询流程图界面如图18所示:员工信息管理岳员工注册g信皂查间司图18管理员查询界面(6)管理员界面管理功能,录入员工流程图如图19示:20200101结束曰期=20200909考勤蕖型=正常上班员工编号:_部门:级别:起咱曰期=员工编号姓名状态名称部门名称上班时间下瓯时间曰期122王凤鸣正常上职行政部02:1421:5320200708i33如花正常上班人事部20:2920:3020200620121嗡嗡嗡正常上班财务部00:4900:0020200708)04-小王同学正常上班计划部02:0000:00202007081111彳'茶正常上班疵务部1S;1018:102020Q709>222爪花正常上班市场部18:5722:2120200709)99王美丽正常上班销售部01:4&00:0020200708查间范圉:全公司用卢存在曳否面出ismw u I颈皿艰图19管理员录入员工信息流程图界面如图20所示:-L-njr*-«图20员工录入界面(7)管理员界面管理功能,修改员工考勤流程图如图21示:员工注Rft成功! R !性别:囹二学历:|专科以下 'ffB改内吝4.系统实现图21修改员工信息流程图界面如图22所示:图22修改员工信息界面N'宙信息管理'员工注册r考信息查注 顽E部门级别员工编号姓名性别年龄部门名称级别名称由晡小花女16市场部普通员工19员工编号:4.1编码4.1.1系统环境 操作系统:Windows 10 选用模式:C/S客户端 DBMS: sql server 2014 开发语言:Java开发平台:Myeclipse10 数据库管理工具:sql server 20144.1.2客户端界面关键代码:(1) 连接数据库 public DbConnect()(try Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); catch (ClassNotFoundException ex) ex.printStackTrace(); public Connection getConn()Connection conn = null;String conStr="jdbc:sqlserver:/127.0.0.1:1433;databaseName=timebookDB”;try conn = DriverManager.getConnection(conStr, "sa", "sa"); catch (SQLException ex) ex.printStackTrace();(2) 修改密码private void initialize()this.setSize(401, 350);this.setContentPane(getJContentPane();this .setTitle("更改密码”); public void chStuPass() if(ID.getText().length()+oldPasswordtText().length()+newPassword.getText().length()+newAgain.getText().length()=0)JOptionPane. showMessageDiaLog(this,"输入信息不完整。");ret