数据库课程设计中小型企业工资管理设计与实现.doc

上传人:小飞机 文档编号:4264372 上传时间:2023-04-12 格式:DOC 页数:22 大小:679.50KB
返回 下载 相关 举报
数据库课程设计中小型企业工资管理设计与实现.doc_第1页
第1页 / 共22页
数据库课程设计中小型企业工资管理设计与实现.doc_第2页
第2页 / 共22页
数据库课程设计中小型企业工资管理设计与实现.doc_第3页
第3页 / 共22页
数据库课程设计中小型企业工资管理设计与实现.doc_第4页
第4页 / 共22页
数据库课程设计中小型企业工资管理设计与实现.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《数据库课程设计中小型企业工资管理设计与实现.doc》由会员分享,可在线阅读,更多相关《数据库课程设计中小型企业工资管理设计与实现.doc(22页珍藏版)》请在三一办公上搜索。

1、课程设计说明书课程设计名称 数据库原理课程设计 专 业 计算机科学与技术 班 级 140402 学生姓名 唐作鹏 20141163 指导教师 姚庆安 2017 年 1 月 9 日课 程 设 计 任 务 书课程设计题目:中小型企业工资管理的设计与实现起止日期:2017.1.92017.1. 13设计地点:计算机学院实验室主要业务描述:要求设计一套中小型企业工资管理方案,其中应具有一定的人事档案管理功能。在考虑具体中小型企业工资管理的业务处理过程中,还需要重点考虑如下业务处理过程:(1)工资管理系统是企业进行管理的不可缺少的一部分,它是建立在人事档案系统之上的,其职能部门是财务处和会计室。(2)通

2、过对职工建立人事档案,根据其考勤情况以及相应的工资级别,算出其相应的工资。为了减少输入帐目时的错误,可以根据职工的考勤、职务、部门和各种税费自动求出工资。(3)为了便于企业领导掌握本企业的工资信息,在系统中应加入各种查询功能,包括个人信息、职工工资、本企业内某一个月或某一部门的工资情况查询,系统应能输出各类统计报表。设计要求:1、 根据该业务过程示意图绘制数据流图、画出E-R图(属性按自己的理解设定,但一定要有员工基本信息、工资编号、发放月份、应发工资、实发工资等信息);2、 再将其转换成关系模式(要求达到3NF);写出创建各表的SQL语句(要含主键、外部键及其它的完整性定义),并指出各表应建

3、哪些索引信息。注:此任务书由指导教师在课程设计前填写,发给学生作为本课程设计的依据。课程设计成绩考核表学院计算机科学与工程专业计算机科学与技术 班级 140402 学生姓名 唐作鹏课程名称:数据库原理课程设计课程设计题目:中小型企业工资管理的设计与实现考 核 项 目满分值得分1.独立完成设计任务202.设计方案、说明书、图纸、程序、计算等完成质量303.创新与发挥104.答辩(口试)40合计得分成绩指导教师签字几点说明1. 此表由指导教师进行课程设计成绩评定时填写。2. 课程设计成绩根据学生各项考核最后得分,按“优”、“良”、“中”、“及格”、“不及格”五级评定。其中,90分以上为“优”。80

4、89分为“良”。7079分为“中”;6069分为“及格”;60分以下为“不及格”。3. 课程设计结束后,此表由指导教师放入课程设计资料袋,送承担课程的教研室存档。2017 年 1 月 13 日题目:中小型企业工资管理的设计与实现一、问题描述:设计一套中小型企业工资管理方案,其中应具有一定的人事档案管理功能。在考虑具体中小型企业工资管理的业务处理过程中,还需要重点考虑如下业务处理过程:(1)工资管理系统是建立在人事档案系统之上的,职能部门是财务处和会计室。(2)通过对职工建立人事档案,根据其考勤情况以及相应的工资级别,算出其相应的工资。可以根据职工的考勤、职务、部门和各种税费自动求出工资(3)为

5、了便于企业领导掌握本企业的工资信息,在系统中应加入各种查询功能,包括个人信息、职工工资、本企业内某一个月或某一部门的工资情况查询,系统应能输出各类统计报表。二、需求分析:数据流图:数据字典:三、概念结构设计:局部E-R图:职工属性:部门属性:考勤属性:工资属性:每日情况属性:全局E-R图:用到的工具:E-R图四、逻辑结构设计:初始的关系模式:职工:E(Eid, Ename, age, sex, job, manage_id, department_id) 工资:S(Sid, Sshould, Sreally, give_month, bonus_pct, Eid) 部门:D(Did, Dnam

6、e, manage_id) 考勤:C(Cid, late_times, leave_times, vacate_times, Eid, checking_date) 每日情况:Daily(daily_id, daily_date, should_time, really_time, Cid)关系模式的规范化处理: 因为没有传递函数依赖和完全函数依赖,所以是第三范式逻辑结构: 职工表: 工资表:部门表:考勤表:每日情况表:五、 物理结构设计:Employees表:CREATE TABLE employees (employee_id VARCHAR(10) NOT NULL COMMENT pr

7、imary key,manage_id VARCHAR(10) NOT NULL COMMENT foreign key,department_id VARCHAR(10) NULL DEFAULT NULL COMMENT foreign key,employee_name VARCHAR(10) NOT NULL COMMENT NOT NULL,sex TINYINT(2) NOT NULL DEFAULT 1 COMMENT 1表示男,2表示女,age INT(10) NULL DEFAULT NULL COMMENT 大于0,job VARCHAR(10) NOT NULL COMM

8、ENT 职务,PRIMARY KEY (employee_id),INDEX FK_employees_departments (department_id),INDEX FK_employees_employees (manage_id),CONSTRAINT FK_employees_departments FOREIGN KEY (department_id) REFERENCES departments (department_id),CONSTRAINT FK_employees_employees FOREIGN KEY (manage_id) REFERENCES employe

9、es (employee_id)COMMENT=职工表COLLATE=utf8_general_ciENGINE=InnoDB;Departments表:CREATE TABLE departments (department_id VARCHAR(10) NOT NULL COMMENT primary key,manage_id VARCHAR(10) NULL DEFAULT NULL COMMENT foreign key,department_name VARCHAR(10) NULL DEFAULT NULL,PRIMARY KEY (department_id),INDEX FK

10、_departments_employees (manage_id),CONSTRAINT FK_departments_employees FOREIGN KEY (manage_id) REFERENCES employees (employee_id)COMMENT=部门COLLATE=utf8_general_ciENGINE=InnoDB;Checking表:CREATE TABLE checking (checking_id VARCHAR(10) NOT NULL COMMENT primary key,employee_id VARCHAR(10) NOT NULL COMME

11、NT foreign key,vacate_times INT(2) NULL DEFAULT NULL,late_times INT(2) NULL DEFAULT NULL,leave_times INT(2) NULL DEFAULT NULL,checking_date DATE NULL DEFAULT NULL,PRIMARY KEY (checking_id),INDEX FK_checking_employees (employee_id),CONSTRAINT FK_checking_employees FOREIGN KEY (employee_id) REFERENCES

12、 employees (employee_id)COMMENT=考勤COLLATE=utf8_general_ciENGINE=InnoDB;Daily_satiation表:CREATE TABLE daily_situation (daily_id VARCHAR(10) NOT NULL COMMENT primary key,checking_id VARCHAR(10) NULL DEFAULT NULL COMMENT foreign key,daily_date DATE NULL DEFAULT NULL,should_time DATETIME NULL DEFAULT NU

13、LL,really_time DATETIME NULL DEFAULT NULL,PRIMARY KEY (daily_id),INDEX FK_daily_situation_checking (checking_id),CONSTRAINT FK_daily_situation_checking FOREIGN KEY (checking_id) REFERENCES checking (checking_id)COMMENT=每日情况COLLATE=utf8_general_ciENGINE=InnoDB;Salary表:CREATE TABLE salary (salary_id V

14、ARCHAR(10) NOT NULL COMMENT primary key,employee_id VARCHAR(10) NOT NULL COMMENT foreign key,bonus_pct DOUBLE NOT NULL DEFAULT 0.1 COMMENT 奖金率,give_date DATE NULL DEFAULT NULL,should_salary INT(11) NULL DEFAULT NULL COMMENT 大于0,really_salary INT(11) NULL DEFAULT NULL COMMENT 大于0,PRIMARY KEY (salary_

15、id),INDEX FK_salary_employees (employee_id),CONSTRAINT FK_salary_employees FOREIGN KEY (employee_id) REFERENCES employees (employee_id)COMMENT=工资COLLATE=utf8_general_ciENGINE=InnoDB;触发器设计: (1)每日情况触发器:当应到时间实到时间时,迟到次数自动加1CREATE DEFINER=rootlocalhost TRIGGER daily_situation_after_update AFTER UPDATE ON

16、 daily_situation FOR EACH ROW BEGINUPDATE checking c,daily_situation dSET c.late_times = c.late_times + 1WHERE d.should_time d.really_time and d.checking_id = c.checking_id and date_format(d.should_time,%Y-%m-%d)=date_format(d.really_time,%Y-%m-%d);END功能演示:第一个人1101的11月份考勤情况中,起初没有迟到现把他的第一天情况改成迟到触发器响应

17、,自动修改checking表,使得第一个人的迟到次数加1(2) 考勤_工资触发器:实发工资=应发工资+应发工资*奖金率-迟到次数*50-早退次数*20-请假次数*10CREATE DEFINER=rootlocalhost TRIGGER checking_salary AFTER UPDATE ON checking FOR EACH ROW BEGINupdate salary s,checking cset really_salary = 0.9*(should_salary+should_salary*bonus_pct-(select late_times from checking

18、 c where s.employee_id = c.employee_id)*50- (select leave_times from checking c where s.employee_id = c.employee_id)*20 - (select vacate_times from checking c where s.employee_id = c.employee_id)*10)where s.give_date = c.checking_date;END功能演示:第一个人在11月份的考核中,迟到了一次工资=0.9*(10000+10000*0.11-50)=9945现更改20

19、141101李四的考勤表,迟到改为5次,早退改为3次李四的工资变为:工资=(10000+10000*0.11-50*5-20*3)=9711六、程序:个人信息查询:在职工表中右键简历视图:SELECT e1.employee_id 员工编号,e1.employee_name 姓名,e1.sex 性别,e1.age 年龄,e1.job 工作,department_name 部门,e2.employee_name 经理FROM employees e1,employees e2,departments dWHERE e1.manage_id = e2.employee_id and e1.depa

20、rtment_id = d.department_id 职工工资查询:在工资表中右键新建视图,输入查询语句 (1)查询11月份的工资SELECT e.employee_id 员工编号,employee_name 姓名,job,department_name 部门,should_salary 应发工资,really_salary 实发工资,give_date 发放时间FROM employees e,departments d,salary sWHERE e.department_id = d.department_id and e.employee_id = s.employee_id and

21、 date_format(s.give_date,%Y-%m-%d) = 2016-11-30 (2) 查询行政部的工资在我录入数据的时候,设定了以下规则:部门ID 部门编号 部门经理 奖金率 应发工资 101 行政部 行政经理 11% 10000 102 财务部 财务总监 14% 25000 103 策划部 策划总监 12% 18000 104 研发部 研发总监 15% 30000 105 公关部 公关经理 11% 15000 106 市场部 产品经理 13% 20000SELECT e.employee_id 员工编号,employee_name 姓名,job,department_nam

22、e 部门,should_salary 应发工资,really_salary 实发工资,give_date 发放时间FROM employees e,departments d,salary sWHERE e.department_id = d.department_id and e.employee_id = s.employee_id and date_format(s.give_date,%Y-%m-%d) = 2016-11-15 and d.department_id = 101 考勤表考勤表右键新建视图,输入查询信息SELECT e.employee_id 员工编号,employee

23、_name 姓名,department_name 部门,late_times 迟到次数,leave_times 早退次数,vacate_times 请假次数,checking_date 日期FROM employees e,departments d,checking cWHERE e.department_id = d.department_id and e.employee_id = c.employee_id 七、设计小结:(1)课程设计的总过程:1看懂问题描述,分析要实现哪些功能2根据问题描述,画出数据流图,写出详细的数据字典找出每个实体,分析每个实体的属性,以及实体之间的联系并画出E

24、-R图3从E-R图中找到实体属性之后,建立最初的关系模式,并将其进行规范化处理,处理成3NF的形式4创建各表一、 根据E-R图,创建各表(包括职工表,部门表,工资表,考勤表,每日情况表),在每个表里添加它们的属性二、 再将表和表之间的联系添加到表中例如:(1)部门和职工是一对多的关系,所以将部门的ID加到职工表中 (2)职工和考勤表是一对一的关系,所以把职工的ID加到考勤表中,或者将考勤表的ID加到职工表中。(为了体现规范化,将这个联系的ID放在原表中的ID之后)三、 为每一个表中的属性设置主码(一般为其各自的ID号)以及外码 5在编写SQL语句的时候,注意完整性约束Ex:姓名不能为空。用NO

25、T NULL来约束职工的性别只能取男和女这两个属性check(sex IN(男,女);6 为每一个表填写数据7 建立一个触发器,来计算员工工资员工工资=应发工资(底薪)+应发工资*奖金率-迟到次数*50-早退次数*20-请假次数*108设计并撰写实验报告(2)心得每一次的课程设计,都能学到很多知识,首先是要详读课程设计指导书和要求,按照整个步骤下去,真的能起到事半功倍的效果。只有把问题分析透彻了,才能找出有哪些实体和以及这些实体所对应的属性,再结合实际生活中的情况,分析出实体和实体之间有什么联系。实体其实就是我们要创建的表,属性是表内部的属性,填数据的环节是比较耗时的(一个人的每日情况有一条数

26、据,每人每月的考勤就是30条数据,23个员工,就是23*30=690条数据),然后才是实现功能的环节,创建触发器,通过嵌套写查询工资的语句,遇到困难的时候,研读教科书,上网找资料,课下和在实验室的同学一起交流,努力找到解决问题的办法,受益良多 (3) 遇到的问题以及我的思考 如果表中的主码的数据不唯一,就设置不了主键;就拿每日情况表来说每日编号不唯一,所以设置不了主码。原因:一天中对23个员工进行考勤,所以每日编号相同,考勤号不同 工资算法设定的原因:考虑到迟到和早退的性质不同,所以惩罚制度也不同。早退可能是提前完成了工作,也可能是把工作带回家里来做,有很多的因素,所以惩罚程度较轻。另外,每日情况表的迟到时间仅供参考,可以作为一个迟到的依据来考勤一个员工的工作,如果迟到时间过长,次数过多,可考虑扣除当月奖金关于税率,原本我想根据工资的多少来设定不统一的税率,但是实现过程比较困难,所以就设置了统一的税率,按实发工资的90%计算实发工资A4纸打印(包括封皮)(前两页正反面打印)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号