数据库--职工考勤管理信息系统
员工考勤数据库设计报告
企业员工考勤管理子系统一.需求分析1.系统背景分析现在不论哪个企业,都要进行考勤,一些企业在考勤管理方面用了大量的人力和财力,不说准确度和可信度如何,其效率很低,而且容易出错,不利于管理。
所以人工考勤已经很难再满足企业规范化管理的要求,随着数据库技术的发展和企业信息化建设的进行,使用计算机管理考勤成为一种主流趋势,它不仅为企业减少了人力财力的付出,而且也大大减轻了考勤工作人员的工作量。
本文系统的阐述了企业考勤管理设计开发的全过程。
包括系统需求调查分析,概念结构设计,逻辑结构设计等部分。
2.数据流程图:3.数据字典:(2)数据结构描述(4)数据存储二.概念结构设计经过调查、信息流程分析、数据收集,并结合需求分析,明确了该子系统的功能:A.给员工编号,登记其基本信息。
B.给各部门编号、命名,确定其职责范围,并任命部门经理。
C.对员工的考勤数据进行登记,并进行月度考勤统计。
D.对员工的月度考勤统计的结果来核算员工工资。
实体和属性的联系系统基本的E-R图对E-R图调整的准则:现实世界中的事物能作为属性对待的尽量作为属性对待;属性和实体的划分:属性中不具有需要描述的信息,即属性是不可分的数据项,不再包含其他信息。
实体属性定义:员工(员工编号、员工姓名、员工性别、出生日期、职务、部门编号);部门(部门编号、部门名称、部门经理职工号);出勤记录 (出勤编号、日期、上班时间、下班时间);请假记录(请假编号、请假起始时间、请假结束时间、请假原因、扣除奖金);加班记录(加班编号、加班时间长度、日期、加班费);出差记录(出差编号、出差起始时间、出差结束时间、出差描述、补助资金);月度考勤统计(月度考勤编号、员工编号、日期、累计正常工作时间、累计请假、累计出差、累计加班、迟到次数、早退次数、旷工次数);工资(工资编号、基本工资、奖金、实际工资);具体调整如下:1.出勤记录,请假记录,加班记录,出差记录本应作为员工的一个属性,但是其中还涉及到相关的奖金待遇及具体描述,则单独作为一个实体;2.工资单独作为一个实体,因为此处强调的是员工的出勤工资,则分开来写。
出勤(考勤)管理系统(SQL数据库)_1401191946010126
出勤(考勤)管理系统(SQL数据库)摘要:由于社会在不断发展,互联网已经被千千万万的行业所接收,出勤管理系统在日常教学工作中占有很重要的位置。
通过对出勤管理系统的现状分析,考虑如何在日常生活中充分利用网络和计算机的优势,使得出勤管理系统既能够在学校教学管理工作中得到充公使用,又能节省时间、提高效率,并且使这一资源得到重复利用,由此设计出勤管理系统。
本系统应用B/S结构,MVC模式采用SSH框架技术编写。
很好的利用网络,即使相隔千里,也可以随时为学校管理提供帮助。
成为学生与老师、老师与领导中稳固的桥梁。
也是网络运用中极为有益的一个方面。
出勤管理系统很好的利用了高速发展的互联网络资源。
为广大师生提供便捷、高效、灵活的信息查询平台。
该系统主要功能包括教室安排、课程安排、学生考勤、在线请假、教室维护、班级维护、密码修改、用户管理等功能。
网络的运用极为广泛,我们应该多多开发像出勤管理系这样方便教学管理的软件,促进网络时代的发展。
关键字:出勤管理;S2SH ;JSP目录摘要IIIAbstract IV目录V第1章前言71.1 国内外现状71.2 需求分析71.3 系统可行性分析81.3.1 技术可行性81.3.2 管理可行性9第2章关键技术介绍102.1 关键性开发技术的介绍102.1.1 Struts2简介102.1.2 MVC模式介绍122.1.3 Model: 系统状态和商业逻辑JavaBeans 132.1.4 View: JSP页面和表示组件132.1.5 Controller: ActionServlet和ActionMapping 14第3章面向对象设计153.1面向对象设计概述153.2系统设计思想和原则163.3系统模块划分16第4章数据库设计184.1 数据库的设计原则184.2 数据字典194.2.1 用户信息表194.2.2 考勤信息表194.2.3 日期信息表194.2.4 教室信息表204.2.5 请假信息表204.2.6 课程信息表204.2.7 班级信息表214.2.8 教室安排信息表21第5章系统实现225.1各功能模块实现225.1.1用户登录模块的实现225.1.2教室安排模块的实现245.1.3课程安排模块的实现265.1.4学生考勤模块的实现285.1.5在线请假模块的实现305.1.6教室维护模块的实现335.1.7班级模块的实现355.1.8密码修改模块的实现375.1.9用户管理模块的实现38第6章系统测试416.1 软件测试的目的和意义416.2 软件测试的步骤416.3 测试方案426.4 测试用例426.5 系统运行436.5.1运行说明43总结44参考文献45致谢47附录48出勤管理系统主要解决学生的请假问题以及能让学生、任课老师、班主任、学院领导及时方便地查询学生的出勤情况。
uml综合案例:员工考勤系统
《UML2面向对象分析与设计》综合案例:员工考勤系统作业评分实施细则一、第四章作业(用例图和用例文档)1. 评分档次用例图和用例文档分别按照满分10分计算,以此作为评分标准,基本的评分准则如下:●一档(10分):图形(文本)条理清楚,无任何明显错误●二档(8-9分):图形/文本清楚,存在个别错误●三档(6-7分):图形/文本一般,存在一定的错误●四档(5分):图形/文本条理不清,存在致命错误或错误数过多一般情况下按错别个数扣分,每个错误按严重程度扣0.5、1、2分,最终成绩向上取整;同类错误不重复扣分。
2. 参考答案作业答案部分仅供参考,学生的作业可能会多种多样,具体按照第三部分的典型错误扣分,用例图:用例文档:员工(含小时工和普通员工)相关用例无前置条件员工已正确登录到该系统后置条件无(将在下次迭代中确定)涉众利益员工:准确地维护自己的考勤信息公司:要求员工的信息准确基本路径1—添加新的考勤1.1、用例起始于用户需要记录新的考勤信息1.2、系统显示当前日期和时间,并提醒用户该时间即为用户的上班时间1.3、用户确认该信息1.4、系统记录当前日期和时间,并将其作为用户考勤信息的上班时间2—提交考勤信息2.1、任何时刻用户都可以提交自己的考勤信息2.2、系统查询用户上班时的考勤记录(E-1)2.3、系统记录当前的日期和时间,作为用户考勤信息的下班时间2.4、系统显示用户今天完整的考勤信息2.5、用户确认提交考勤信息2.6、系统保存考勤信息,并将考勤信息的状态改为“已提交”(D-1)备选路径E-1 如果系统没有找到用户上班时的考勤信息,则用例终止;用户可以通过项目经理为其添加上班的考勤信息数据需求A-1 考勤信息主要包括:用户名、日期、上班时间、下班时间、状态D-1 考勤信息的状态有:“新考勤”(只有上班时间,没有下班时间的考勤信息)、“已提交”(有完整的上下班时间,但还没有进行工资结算的考勤)、“已完成”(已结算工资的考勤)业务规则B-1 作为用户考勤信息的上下班时间由系统自动获取,不允许用户编辑B-2 状态为“已提交”的考勤信息不允许普通用户进行任何操作;非功能需求无设计约束无待解决问题无参与者时间、项目管理数据库(外部系统)相关用例无前置条件无后置条件无(将在下次迭代中确定)涉众利益员工:…(包括临时工、普通员工、销售人员)公司:…基本路径—计算普通员工和销售人员工资1.用例起始于系统时间到达每月末晚上,需要计算普通员工和销售人员工资(E-1);2.系统查询所有的普通员工和销售人员的个人信息(D-1);3.对于每一个员工(普通员工、销售人员):3.1.根据员工的类别获得其考勤信息或订单信息(E-2);3.1.1.如果是普通员工,则获得本月的考勤信息(D-2);3.1.2.如果是销售人员,则获得本月的销售信息(D-3);3.2.系统从项目管理数据库中获得员工的工资级别信息(E-3);3.3.系统根据员工的考勤信息(或销售信息)和工资级别信息计算该员工的工资,保存;4.计算完成后,系统产生一个提醒信息,以便于项目经理确认备选路径E-1—计算临时工工资1. 用例起始于系统时间达到每个周末的晚上,需要计算临时工工资2. 系统查询所有临时工的个人信息3. 对于每一个临时工:3.1. 获得员工的考勤信息3.2 从项目管理数据库中获得员工的工资级别信息;3.3 系统根据员工的考勤信息和工资级别信息计算该员工的工资,保存;4. 计算完成后,系统产生一个提醒信息,以便于项目经理确认E-2 如果找不到该员工的考勤信息或订单信息,则记录相关日志,并转回3计算下一个员工E-3 如果无法获得员工工资级别信息,则记录相关日志,并转回3计算下一个员工数据需求D-1. 员工信息=员工编号+员工姓名D-2 考勤信息参见“登记考勤”用例D-3 订单信息参见“登记订单”用例业务规则暂不明确非功能需求暂不明确设计约束3. 典型错误情况3.1 用例图部分3.1.1 参与者本系统中包含的参与者有:小时工、普通员工、销售人员、项目经理、项目管理数据库、时间,其中由于小时工和普通员工有关考勤的处理细节完全相同,因此为了便于简化和复用,可将他们统一合并为员工(不合并也可以,不算错误),但不能和销售人员合并,因为销售人员没有考勤信息,而是登记订单信息,需要明确区分。
人员考勤管理系统系统架构设计
人员考勤管理系统系统架构设计一、引言人员考勤管理是组织管理中的重要环节,它能够有效地监控和管理员工的出勤情况,提高工作效率和生产力。
为了更好地支持人员考勤管理,本文将提出一个人员考勤管理系统的系统架构设计方案。
二、系统架构概述人员考勤管理系统的目标是实现对员工出勤情况的监控和管理,以便及时掌握员工考勤数据并进行数据分析和报告生成。
基于这一目标,系统的整体架构可以分为以下几个主要组件:1. 用户界面:提供员工和管理人员的交互界。
2. 考勤设备接口:用于与考勤设备进行数据的交换和同步。
3. 数据库:负责存储员工考勤数据和相关信息。
4. 考勤数据处理模块:负责对考勤数据进行处理、分析和生成报告。
5. 权限控制模块:用于管理各级用户的权限和访问控制。
三、系统组件详细设计1. 用户界面用户界面是系统与用户之间的重要接口,应该具备良好的交互性和易用性。
用户界面应该包括以下功能:- 员工登录和个人信息管理;- 查看个人考勤记录和考勤统计信息;- 申请请假或调班;- 管理人员审核请假或调班申请;- 生成考勤报告。
2. 考勤设备接口考勤设备接口是系统与考勤设备之间的关键组件,它负责与考勤设备进行数据的交换和同步。
接口应该支持以下功能:- 读取考勤设备上的出勤数据;- 将出勤数据同步到数据库;- 将员工信息更新到考勤设备。
3. 数据库数据库是存储员工考勤数据和相关信息的重要组件,它应该支持以下功能:- 存储员工信息,包括姓名、部门、职位等;- 存储考勤记录,包括考勤时间、出勤状态等;- 存储请假和调班申请信息。
4. 考勤数据处理模块考勤数据处理模块是对考勤数据进行处理、分析和生成报告的核心组件,它应该包括以下功能:- 对考勤数据进行逻辑校验和异常处理;- 统计员工的出勤情况和工时;- 生成考勤报告和统计分析。
5. 权限控制模块权限控制模块用于管理各级用户的权限和访问控制,包括以下功能:- 配置用户角色和权限;- 控制用户对敏感数据和功能的访问权限;- 记录用户操作日志。
考勤管理系统使用说明
考勤管理系统使用说明考勤管理系统使用说明1、系统介绍1.1 系统概述考勤管理系统是一款用于管理和统计员工考勤数据的软件系统。
它提供了便捷的考勤记录录入、统计分析、报表等功能,帮助企业高效管理员工的出勤情况。
1.2 功能特点1.2.1 考勤记录录入:用户可以通过系统录入员工的考勤记录,包括上班时间、下班时间、迟到早退、请假等情况。
1.2.2 考勤统计分析:系统能够根据员工的考勤记录,自动考勤统计信息和报表,包括缺勤次数、迟到早退次数、加班时长等。
1.2.3 班次管理:系统支持灵活的班次设置和管理,可以根据不同的班次规则进行考勤统计。
2、系统安装与配置2.1 硬件要求2.1.1 服务器:推荐配置为4核CPU、8GB内存、500GB存储空间。
2.1.2 客户端:推荐配置为双核CPU、4GB内存、256GB存储空间。
2.2 软件要求2.2.1 操作系统:服务器端支持Windows Server 2012及以上版本,客户端支持Windows 10及以上版本。
2.2.2 数据库:系统使用MySQL数据库,需要提前安装并配置好数据库环境。
2.3 安装步骤2.3.1 安装包:从官方网站最新版本的考勤管理系统安装包。
2.3.2 解压安装包:将安装包解压到指定目录。
2.3.3 运行安装程序:双击运行安装程序,按照提示完成系统的安装。
2.4 系统配置2.4.1 数据库配置:在安装完成后,打开系统的配置文件,配置数据库连接信息。
2.4.2 员工信息导入:将员工的基本信息导入系统,包括姓名、工号、部门等。
3、系统使用3.1 登录系统3.1.1 启动系统:双击系统图标,打开登录界面。
3.1.2 输入账号密码:输入正确的账号和密码,登录按钮。
3.2 考勤记录录入3.2.1 新建考勤记录:“考勤录入”菜单,选择“新建考勤记录”,进入考勤记录录入界面。
3.2.2 输入考勤信息:根据员工实际出勤情况,填写上班时间、下班时间等信息。
考勤管理系统使用说明
考勤管理系统使用说明考勤管理系统使用说明1.引言本文档旨在详细介绍考勤管理系统的使用方法和功能说明,帮助用户快速上手并使用该系统进行考勤管理操作。
2.系统概述2.1 功能概述考勤管理系统是一个用于记录和管理员工上下班考勤情况的软件系统。
它提供了员工签到、签退、请假管理、统计报表等功能。
2.2 主要特点- 员工签到签退打卡功能,支持多种打卡方式(刷卡、指纹、人脸识别等)。
- 请假管理功能,员工可以申请请假并上报给上级审核。
- 自动统计考勤数据,考勤报表,提供数据分析和考勤情况查询功能。
- 管理人员可以设置考勤规则和班次排班。
3.系统安装与部署3.1 硬件要求- 服务器:推荐配置为4核CPU、8GB内存、100GB磁盘空间。
- 客户端:支持常见的操作系统,如Windows、MacOS、Linux 等。
3.2 软件要求- 操作系统:服务器端推荐使用Linux操作系统,客户端根据各自使用习惯选择操作系统。
- 数据库:系统需要使用MySQL数据库进行数据存储,版本要求为MySQL 5.7及以上。
3.3 系统部署步骤1.准备服务器环境,安装并配置操作系统和必要的软件;2.安装MySQL数据库,并进行相应的配置;3.考勤管理系统安装包,并解压到服务器指定目录;4.创建数据库,并导入系统提供的SQL脚本;5.配置系统相关参数,如数据库连接信息、考勤规则等;6.启动系统并进行测试。
4.用户使用指南4.1 用户登录1.打开考勤管理系统客户端;2.输入用户名和密码;3.登录按钮。
4.2 员工打卡1.进入系统后,打卡按钮;2.根据系统支持的打卡方式进行打卡,如刷卡、指纹、人脸识别等;3.打卡成功后,系统会显示打卡时间和签到/签退状态。
4.3 请假申请1.进入系统后,请假申请按钮;2.填写请假事由、起止日期等相关信息;3.提交申请,等待上级审核。
4.4 考勤统计1.进入系统后,考勤统计按钮;2.选择需要统计的时间范围;3.系统会自动计算考勤数据,并统计报表。
职工考勤管理系统
职工考勤管理系统前言20世纪90年代,随着我国市场经济的快速进展,职工考勤管理系统在企业的日常管理中发挥着越来越重要的作用。
职工考勤管理系统能够进行员工信息管理、出勤管理与密码管理等,方便处理企业内部员工的有关考勤信息。
此外Internet 的迅速普及,使Intranet成为Internet技术在企业管理信息系统中的应用与延伸,形成了集计算机,计算机网络、数据库、分布式计算等于一体的信息技术综合体,它打破了时间与地域的界限,使信息交流变得快捷、准确,为建立现代企业管理信息系统提供了充足的条件。
职工考勤系统是在习惯市场需求的客观前提下,为了满足中小型公司或者事业单位管理自己的员工而开发的。
目录第一章开发背景 (1)第二章需求分析 (2)第三章概念结构设计 (3)一、局部E-R图设计 (3)(一)、确定局部范围 (3)(二)、确定实体与属性 (3)(三)概念模型表示 (4)二、合并成总体E-R图 (5)第四章逻辑结构设计 (6)一、E-R图转换为关系模型 (6)关系模式的规范化 (6)第五章数据库实施与保护 (8)一、定义数据库结构 (8)二、组织数据入库 (10)三、数据库试运行 (10)第六章JAVA (11)一、JAVA代码: (12)(一)、登录代码 (12)(二)、管理员主界面代码 (15)二、JAVA运行 (29)(一)、用户登录界面 (29)(二)、主界面 (29)(三)、基本功能 (30)第七章参考文献 (34)第一章开发背景我们都明白,考勤管理系统是任何一个营业单位不可缺少的部分,它的内容关于单位的管理者与内部员工来说都至关重要,因此考勤管理系统应该能够为用户提供充足的信息与快捷的安全查询,及实时管理手段。
但在过去,人们一直在使用传统的人工的方式来进行考勤管理,这种落后的方式存在着许多缺点,如:效率低,保密性差,另外时间一长,将产生大量的文件与数据,这关于查找,更新与保护都带来了很多的困难。
中控考勤管理系统数据库结构
中控考勤管理系统数据库结构1. 员工表(Employee)- 员工ID(EmployeeID):主键,唯一标识每个员工- 员工姓名(EmployeeName)- 员工职位(Position)- 所属部门(Department)- 入职日期(StartDate)- 离职日期(EndDate)2. 考勤记录表(AttendanceRecord)- 记录ID(RecordID):主键,唯一标识每条考勤记录- 员工ID(EmployeeID):外键,关联到员工表的员工ID字段- 考勤日期(Date)- 上班时间(StartTime)- 下班时间(EndTime)- 工作时长(WorkHours)- 迟到次数(LateCount)- 早退次数(EarlyLeaveCount)- 缺勤次数(AbsentCount)3. 请假记录表(LeaveRecord)- 记录ID(RecordID):主键,唯一标识每条请假记录- 员工ID(EmployeeID):外键,关联到员工表的员工ID字段- 开始日期(StartDate)- 结束日期(EndDate)- 请假类型(LeaveType)- 备注(Remark)- 记录ID(RecordID):主键,唯一标识每条加班记录- 员工ID(EmployeeID):外键,关联到员工表的员工ID字段- 加班日期(Date)- 备注(Remark)5. 考勤统计表(AttendanceStatistics)- 统计ID(StatisticsID):主键- 员工ID(EmployeeID):外键,关联到员工表的员工ID字段- 年份(Year)- 月份(Month)- 出勤天数(AttendanceDays)- 迟到次数(LateCount)- 早退次数(EarlyLeaveCount)- 缺勤次数(AbsentCount)以上是中控考勤管理系统的一个基本数据库结构示例,可以根据具体需求进行调整和扩展。
员工考勤系统说明
员工考勤系统说明一、实验环境:装有sql2000和delphil7两个软件的计算机。
二、实验步骤:1 .连接准备工作:(1)在sql2000的企业管理器里还原数据库employee.(2)employee数据库和delphil7连接步骤:控制面版→管理工具→数据源→添加→SQL server→按下面图示完成连接:点添加进入下图界面选中SQL server后单击完成在名称项输入:“ygkq ”在服务器项输入:“.”点击下一步更改默认的数据库为:employee点击完成点击测试数据源测试成功后点击确定2.打开员工考勤系统文件夹找到kaoqin.dpr文件双击打开系统,如下图所示:3.按F9运行系统,运行界面如下图所示:本系统设有四个用户,分别为:system、renshi、caiwu、guest;其密码分别为:111、222、333、guest。
用户只要选择给出的用户名并输入对应的密码单击确定键即可进入系统。
下面以用户名为system的身份进入系统对本程序作简略的说明:程序登录前程序登录后四、考勤管理系统功能分析本程序由登录界面、员工信息、出勤信息、员工工资、相关查询、密码修改、帮助说明及退出系统五部分组成(如上图所示)。
登录界面:登录界面产生一个用户的下拉列表(系统管理员、财务部门、人事部门及guest),用户可选择相应的用户名称,输入对应的密码进入,选择“取消”终止程序运行。
防止用户以外的人看到密码,密码输入框内的密码用“*”屏蔽。
员工信息:本界面可实现员工相关信息的修改与添加。
出勤信息:本界面可实现员工出勤信息的输入,可参看缺勤情况示意图。
员工工资:本界面可实现员工基本工资与实际工资的输入与修改。
相关查询:可由员工编号来查看详细工资情况(编号、月份、工资、奖金、实际工资),由员工编号查看详细出勤情况(编号、月份、出勤、迟到、早退、请假、旷工、实际出勤),由员工编号查看员工详细情况(编号、姓名、编码、性别、部门、职称、住址、工资)。
考勤管理系统数据库设计
考勤管理系统数据库设计数据库设计是指对于一个给定的应用环境,构造设计优化的数据库逻辑模式和物理结构,并据此建立数据库以及应用环境,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。
数据库的目标是为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。
数据库设计的一个特点是“三分技术,七分管理,十二分基础数据”。
数据库设计的基本步骤如下:(1)需求分析(2)概念结构设计(3)数据库逻辑设计(4)数据库物理设计(5)数据库实施(6)数据库运行和维护一.数据库需求分析设计这个系统的主要目的就是实现学生社团的管理规范化,以及对社团举办活动进行登记。
数据库的需求分析阶段是整个数据库设计过程中的基础,也是耗时就多,最困难的一步.需求分析的任务就是通过详细调查现实世界要处理的对象,充分了解原系统工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。
这个阶段的工作成果主要以下三个方面的内容:(1)数据项:每种具体数据的名称、意义、类型、取值范围以及与其他数据项之间的逻辑关系。
(2)数据集:若干数据项的有逻辑关联的集合,包括名称、意义和组成数据集的数据项。
(3)数据流:应用系统运行时,数据是怎么输入、处理和输出。
二.数据库概念结构设计局部e-r图设计(1)学生信息表的e—r图(2)刷卡表的e-r图刷卡(3)刷卡记录表的e-r图全局e—r图如下:三.数据库逻辑结构设计数据库逻辑设计主要是将概念结构设计转换为某个dbms所支持的数据模型设计出刷卡表结构如下:学生信息表结构如下:刷卡记录表结构如下:四.数据库物理结构设计物理结构设计是为逻辑数据模型选取一个最适合应用环境的物理结构,将逻辑结构设计中的表用sql语句创建出来。
(1)创建表空间(2)创建新用户(3)给新用户授权(4)以新用户的身份登入,创建表首先创建学生表,实现语句如下:Create table stuent(Sno varchar2(8)not null primary key,Sname varchar2(20) not null,Sex varchar2(2) not null,Sage number(2) ,Speciality varchar2(16),Banji varchar2(12))Tablespace zhuzhu;执行结果如下:然后,创建刷卡表实现语句如下:Create table sk(Skid number(4)not null,Kid number(4) not null primary key,Zctime date)Tablespace zhuzhu;执行结果如下:接着,再创建刷卡记录表实现语句如下:Create table skrecord(Skid number(4) not null,Kid number(4)not null,Sno varchar2(8) not null primary key,Sktime timestamp)Tablespace zhuzhu;最后,建立各个表之间的约束实现语句:Alter table skrecordAdd(constraint sk_kid_fk foreign key(kid)references sk(kid)Constraint skrecord_sno foreign key(sno)referencesstuent(sno));(5)创建一个序列实现刷卡编号的自动增长Create sequence seq_inIncrement by 1Start with 1Nomaxvalue;Create sequence seq_in2Increment by 1Start with 1Nomaxvalue;(6)创建触发器只要学生一刷卡,就会在sk表中插入一条记录,此时查找刷卡记录表看是否存在与之同卡编号的记录,如果存在,则输出’有出勤,没有旷课',否则,输出‘该学生没有来上课’的信息。
考勤管理系统源代码
{#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<malloc.h> #include<time.h> /* 所使用的头文件 */ typedef struct/* 时间结构体定义 */{int hour; int minute; }TIME;typedef struct worker /* 职工结构体定义 */ {char id[10]; char name[10];TIME time[20]; struct worker *next; }worker;int menu_select(); void welcome(); void createInfo(); void createRec(); void listRec(); void searchRec(); void saveRec(); void deleteRec(); void modifyRec(); void loadRec(); void resetPassword(); int fun();worker *head=NULL; writeinfo_flag=0;char password[16]="888888"; struct tm *timeinfo; int main()/* 主菜单 *//* 欢迎界面 */ /* 新建职工信息 */ /* 录入考勤信息 *//* 浏览当天考勤信息 */ /*/ 查询考勤信息 *//* 保存所有信息 *//* 删除考勤信息 */ /* 修改考勤信息 *//* 加载文件信息 *//* 重设密码 *//* 判断输入选择是否正确 *//* 链表头指针 head*//* 信息保存标记 *//* 初始密码 *//* 主函数 */char s[16]; welcome();loadRec();/* 欢迎界面 */ /* 加载文件信息 */printf("\n 提示:\n\n 初始密码为:888888\n"); /* 进入系统密码管理*/ printf("\t\t\t\n\n\n\n\n 请输入密码,进去系统( 密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n 密码错误,请重新输入:"); scanf("%s",s);} system("cls");for(;;) /* 菜单循环*/{ switch(menu_select()) {case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writeinfo_flag==1)saveRec();return 0; default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!"); getchar();getchar();system("cls"); break;}}}return 0;}/* 选择菜单*/ int menu_select(){worker *p=head;int c,k;time_t nowtime; time( &nowtime );timeinfo = localtime( &nowtime );printf("\t\t** ************ 选择菜单************* *\t");/* 在菜单中显示当前时间*/if(timeinfo->tm_wday==0){printf(" 时间:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);}elseprintf(" 时间: 星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("\n ------------------------------------------------------------------ ");printf("\t\t\t0. 新建职工信息\n");printf("\t\t1. 录入考勤信息\n");printf("\t\t2. 浏览考勤信息\n");printf("\t\t3. 查询考勤信息\n");printf("\t\t4. 删除考勤信息\n");printf("\t\t5. 修改考勤信息\n");printf("\t\t6. 保存所有信息\n");printf("\t\t7. 重设密码\n");printf("\t\t8. 退出(退出后信息会自动保存在磁盘中)\n\t\t( 任何情况下按Ctrl+C 退出程序)\n ”);printf("\n ------------------------------------------------------------------ ");printf("\n\n 请输入您的选择(0~8):");scanf("%d",&c); if(timeinfo->tm_wday==0&&p!=NULL) /* 每周周日所有考勤信息初始化*/{for(k=0;k<20;k++){p->time[k].hour=88; p->time[k].minute=88;}}return c;}void loadRec() /* 从磁盘导入信息*/{worker *rear,*p,*pre; FILE *fp,*key; int i,pos=0; key=fopen("key.txt","r"); if(key!=NULL){}fscanf(key,"%s",password); fclose(key);p=(worker*)malloc(sizeof(worker)); /* 开辟一个新单元 */ fscanf(fp,"%s%s",p->id,p->name); for(i=0;i<20;i++)fscanf(fp,"%d%d",&p->time[i].hour,&p->time[i].minute); if(head==NULL){head=p; pre=p; rear=p;}else{rear->next=p; pre=rear; rear=p;}}pre->next=NULL; fclose(fp); return;}fp=fopen("workerRec.txt","r"); if(fp!=NULL){fseek(fp, 0, SEEK_END); pos= ftell(fp);}if(fp==NULL||0 == pos)件*/{printf("\n\n\n\n\n\n\t\t 提示:在!\n");printf("\n\t\t getchar();\n\n\t\t 数据库中没有职工信息请按回车键进入主菜单新建职工信息/* 指针移到文件末尾 *//* 打开职工信息文件和密码文,文本为空或文件不存system("cls"); return;}fseek(fp, 0, SEEK_SET); while(!feof(fp)){Un");/*清屏 *//* 指针移到文件开头 */ /*fp 不指向文件末尾 *//* 关闭文件 */void createInfo() /* 新建职工信息*/{worker *p,*rear;int i,k,n;char s[10];if(head!=NULL){printf("\n\n\n\n\n\n\n\t\t\t 职工信息数据库已存在\n\n\t\t\t 新建职工信息将续接在信息库的后面\n\n\n\t\t\t 按回车键继续");getchar();getchar();rear=head; while(rear->next!=NULL) rear=rear->next;system("cls");}printf("\n\n 请输入希望建立职工信息条数:");scanf("%s",s);if(fun(s)==0)return;elsen=atoi(s);printf("\n 请输入职工的工号(至多6 个字符)和姓名( 至多5 个字符):\n"); for(i=0;i<n;i++){p=(worker*)malloc(sizeof(worker));scanf("%s%s",p->id,p->name); if(strlen(p->id)>6||strlen(p->name)>5){printf("\n 职工工号或姓名输入长度不合法!\n\n 请按回车键返回主菜单\n",n);rear->next=NULL;free(p);getchar();getchar();system("cls");return;}for(k=0;k<20;k++) /* 时间初始化为88:88*/{p->time[k].hour=88;p->time[k].minute=88;}if(head==NULL){head=p;rear=p;}else{ rear->next=p; rear=p;}} p->next=NULL;printf("\n%d 条信息建立完毕!\n\n 请按回车键返回主菜单\n",n); getchar();getchar();system("cls");writeinfo_flag=1;return;}void createRec() /* 录入考勤信息*/{time_t nowtime;worker *p;char s[10],k[10],*g=k,ss[10];int c,m,week;time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;} if(timeinfo->tm_wday==6||timeinfo->tm_wday==0){printf("\n\n\n\n\t\t\t 今天不是工作日\n\n\t\t\t 无法录入考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择录入考勤种类:\n\n\t\t\t1. 上午上班(8:00)\n\n\t\t\t2. 上午下班(11:30)\n\n\t\t\t3. 下午上班(14:00)\n\n\t\t\t4. 下午下班(17:30)\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsem=atoi(k);if(m<1||m>4){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;}system("cls");if(m==1&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timeinfo->tm_min>30))) {printf("\n\n\n\t\t\t 现在已经过了上午下班的时间(11:30)\n\n\t\t\t 无法录入上班的时间(8:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}if(m==3&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))){printf("\n\n\n\t\t\t 现在已经过了下午下班的时间(17:30)\n\n\t\t\t 无法录入上班的时间(14:00)信息\n\n\t\t\t 请按回车键返回主菜单");getchar();getchar();system("cls");return;}/* 可通过工号或姓名;录入*/printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",ss); if(fun(ss)==0)return;elsec=atoi(ss);if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88){printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}p->time[4*week+m-5].hour=(timeinfo->tm_hour); /* 存储时间*/p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;} if((m==2||m==4)&&p->time[4*week+m-6].hour==88) {printf("\n\n\n\n\t\t\t 该职工无上班记录,无法记录下班信息, 请先录入上班信息\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour); p->time[4*week+m-5].minute=(timeinfo->tm_min); break;}}system("cls");printf("\n\n\n\n\n\n\t\t\t 考勤成功! 请按回车键返回主菜单\n");getchar();getchar();writeinfo_flag=1;system("cls");return;}void listRec() /* 浏览当天的考勤信息*/{worker *p=head;int m,week;week=timeinfo->tm_wday;if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}if(timeinfo->tm_wday==6||timeinfo->tm_wday==0) {printf("\n\n\n\n\t\t\t 今天不是工作日,无考勤记录\n\n\t\t\t 无法浏览当天的考勤信息\n\n\t\t\t 请按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n 职工今天整体出勤情况如下:\n\n");printf(" 职工号姓名上午上班上午下班下午上班下午下班\n"); while(p!=NULL){m=0;printf("\n%s %s",p->id,p->name);if((p->time[(week-1)*4].hour>8&&p->time[(week-1)*4].hour<25)||(p->time[(week-1)*4].hour==8&&p->time[(week-1)*4].minute>0))printf(" 迟到"); /* 上班时间之后来的都算迟到*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour>11||(timeinfo->tm_hour==11&&timein fo->tm_min>30)))printf(" 旷工"); /* 过了下班时间就是旷工*/else if(p->time[(week-1)*4].hour==88&&(timeinfo->tm_hour<11||(timeinfo->tm_hour==8&&timeinf o->tm_min==30)))printf(" 无记录"); /* 下班之前还没有来显示无记录*/else if(p->time[(week-1)*4].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+1].hour<11&&p->time[(week-1)*4].hour!=0)||(p->time[(week-1)*4+1].hour==11&&p->time[(week-1)*4+1].minute<30))printf(" 早退");else {printf(" ");m++;}if((p->time[(week-1)*4+2].hour>14&&p->time[(week-1)*4+2].hour<25)||(p->time[(week-1)*4+2].hour==14&&p->time[(week-1)*4+2].minute>0))printf(" 迟到");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30)))printf(" 旷工");else if(p->time[(week-1)*4+2].hour==88&&(timeinfo->tm_hour<17||(timeinfo->tm_hour==17&&tim einfo->tm_min==30)))printf(" 无记录");else if(p->time[(week-1)*4+2].hour!=88){printf(" ");m++;}if((p->time[(week-1)*4+3].hour<17&&p->time[(week-1)*4+2].hour!=0)||(p->time[(week-1)*4+3].hour==17&&p->time[(week-1)*4+3].minute<30))printf(" 早退");else {printf(" ");m++;}if(m==4&&(timeinfo->tm_hour>17||(timeinfo->tm_hour==17&&timeinfo->tm_min>30))) printf(" 全勤!");p=p->next;}printf("\n\n 显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void searchRec() /* 根据工号或姓名查找考勤信息*/{worker *p=head;int c,i;char s[10],k[10];if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名(以回车键结束):"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}system("cls");printf(" 职工号姓名\n\n");printf(" %s %s",p->id,p->name);printf(" 周一");for(i=0;i<4;i++) {上午上班上午下班下午上班下午下班if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==4) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);printf("\n 周二"); for(i=4;i<8;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==8) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周三"); for(i=8;i<12;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d if(i==12) printf("\n\n"); ");",p->time[i].hour,p->time[i].minute);}printf("\n 周四"); for(i=12;i<16;i++){if(p->time[i].hour==88)printf(" --:--if(p->time[i].hour!=88) printf(" %2d:%2d ");",p->time[i].hour,p->time[i].minute);if(i==16)printf("\n\n");}printf("\n 周五");for(i=16;i<20;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute); if(i==20)printf("\n\n");}printf("\n\n\n\n\n\n\t\t\t 显示完毕,按回车键返回主菜单!"); getchar();getchar();system("cls");return;}void saveRec() /* 储存所有信息*/{worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag==0){printf("\n\n\n\n\t\t\t 信息无改动,无需保存!\n\n\t\t\t 请按回车键返回主菜单\n");getchar();getchar();system("cls");return;}if(writeinfo_flag==1){ if((fp=fopen("workerRec.txt","w"))==NULL||(key=fopen("key.txt","w"))==NULL) {printf("\n\t\t\t 提示:\n\n\t\t\t 存储信息失败!\n"); printf("\n\t\t\t 请按回车键进入主菜单重新开始\n"); getchar();getchar();system("cls");return;} while(p!=NULL){fprintf(fp,"%s\n%s\n",p->id,p->name); for(i=0;i<20;i++)fprintf(fp,"%d\n%d\n",p->time[i].hour,p->time[i].minute); p=p->next;} fprintf(key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0; /* 消除改动标志*/ printf("\n\n\n\n\n\t\t\t 保存完毕,按回车键继续!");getchar();getchar();system("cls");return;}}void deleteRec() //删除考勤信息*/{worker *p,*pre=head;char s[16],k[10];int c; if(head==NULL){printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);while(strcmp(password,s)!=0){printf("\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;} printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择输入工号还是姓名:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\t\t 您的选择(以回车键结束):");scanf("%s",k); if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){ printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始getchar();getchar();system("cls"); return ;!\n");} system("cls"); switch(c) { case 1:{ printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls"); return;}break;}case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;} break;}} system("cls"); if(p==head) head=p->next;else{ for(;pre->next!=p;pre=pre->next); pre->next=p->next;}free(p);printf("\n\n\n\n\n\n\t\t\t 删除成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1; return;}void modifyRec() /* 修改考勤信息*/{worker *p,*pre=head; char s[16],k[10];int c; if(head==NULL){ printf("\n\n\n\n\t\t\t 数据库中没有职工信息\n\n\t\t\t 无法使用该功能\n\n\t\t\t 请按回车键返回主菜单新建职工信息!");getchar();getchar(); system("cls"); return;}printf("\n\n\n\t\t\t 提示:\n\n\t\t\t 初始密码为:888888\n"); printf("\n\n\n\t\t\t 请输入密码(密码不超过15 个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("n\n\n\t\t\t 密码错误!\n\n"); printf("\t\t\t 按回车键返回主菜单!"); getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t 密码输入成功!\n\n\t\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t\t\t 请选择通过工号修改还是姓名修改:\n\n\t\t\t1. 选择输入工号\n\n\t\t\t2. 选择输入姓名\n\n");printf("\n\n\n\t\t 您的选择(以回车键结束):"); scanf("%s",k);if(fun(k)==0)return;elsec=atoi(k); if(c<1||c>2){printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return ;} system("cls"); switch(c) { case 1:{printf("\n\n\n\n\n\n\t\t\t 请输入工号:"); scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该工号\n");printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;} case 2:{ printf("\n\n\n\n\n\n\t\t\t 请输入姓名:"); scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next==NULL){printf("\n\n\n\n\t\t\t 不存在该姓名\n"); printf("\n\n\n\n\t\t\t 请按回车键返回主菜单重新开始!\n"); getchar();getchar();system("cls");return;}break;}} system("cls");printf("\n\n\n\t\t\t 请选择要修改的内容:\n\n\t\t\t1. 工号\n\n\t\t\t2. 姓名\n\n\t\t\t3. 上午上班时间\n\n\t\t\t4. 上午下班时间\n\n\t\t\t5. 下午上班时间\n\n\t\t\t6. 下午下班时间");printf("\n\n\n\t\t 您的选择(以回车键结束):");scanf("%s",&k);if(fun(k)==0)return;elsec=atoi(k);if(c<1||c>6) {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return ;}system("cls");switch(c){case 1: printf("\n\n\n\t\t 请输入要修改的工号(至多10 个字符):"); scanf("%s",p->id);break; case 2: printf("\n\n\n\t\t 请输入要修改的姓名(至多10 个字符):"); scanf("%s",p->name);break; case 3: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4].hour,&p->time[(c-1)*4].minute);break;case 4: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+1].hour,&p->time[(c-1)*4+1].minute);break;case 5:printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+2].hour,&p->time[(c-1)*4+2].minute);break; case 6: printf("\n\n\n\t\t 请输入要修改星期几的考勤( 请输入1~5):"); scanf("%d",&c);printf("\n\n\n\t 请输入要修改的时间和分钟(如:10 点5 分就输入10:05):");scanf("%d:%d",&p->time[(c-1)*4+3].hour,&p->time[(c-1)*4+3].minute);break;} printf("\n\n\n\t\t\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void resetPassword() /* 重设密码*/{char s[16];printf("\n\n\n\t\t 提示:\n\n\t\t 初始密码为:888888\n"); printf("\n\t\t 请输入密码(密码不超过15个字符):"); scanf("%s",s);if(strcmp(password,s)!=0){printf("\n\n\n\t\t 密码错误!\n\n"); printf("\n\n\n\t\t 按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\t\t 密码输入成功!\n\n\t\t 请按回车键继续"); getchar();getchar();system("cls");printf("\n\n\n\t 请输入要修改的密码(密码不超过15 个字符):"); scanf("%s",s);strcpy(password,s);printf("\n\n\t 修改成功,请按回车键返回主菜单!"); getchar();getchar();system("cls"); writeinfo_flag=1;return;}void welcome() //欢迎界面{ printf("\n\n\n\n\n\n\n\t\t\t 欢迎使用职工考勤管理系统"); printf("\n\n\n\t\t\t 请按任意键进入系统,开始您的操作"); printf("\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t 作者:XXX");getch(); system("cls");return;}int fun(char *g){do{ if(*g<'0'||*g>'9') {printf("\n\n\t\t 输入错误!\n\n\t\t 请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls"); return 0 ;}g++; }while(*g!=0); return 1;}。
职工考勤管理系统论文
职工考勤管理系统摘要:随着科学技术的不断发展,计算机科学日渐进步,其强大的功能耳闻目睹,它已进入人类社会的各个领域并发挥着越来越重要的作用。
此职工考勤管理系统的实现利用了计算机的相关技术,满足了单位日常考勤管理的需求,使单位考勤过程更加快速、安全、高效的信息管理系统。
本系统基于C/S模式,采用Visual Basic语言与Microsoft SQL 2000数据库开发完成,实现了系统管理、职工信息管理、考勤管理与工资设置管理等功能。
其中系统管理包括上下班时间设置和更改用户密码等模块;职工信息管理包括添加,删除,查询职工信息模块;考勤管理包括考勤和考勤查询模块;工资设置包括基本工资设置/修改和工资计算公式/修改报模块;工资管理模块包括出勤统计,查询工资等模块。
本系统能基本满足用户在考勤管理方面的需求,界面友好,符合用户使用习惯,能实际地提高单位考勤管理的效率。
关键词:职工考勤管理;C/S模式;Visual Basic;Microsoft SQL 2000Staff Attendance Management SystemAbstract:With the continuous development of science and technology, computer science is flourishing, its powerful features tour, it has access to all areas of human society and play an increasingly important role. This staff attendance management system using a computer-related technology to meet the needs of the unit of day-to-day management of the demand for attendance, attendance unit process more rapid, safe, efficient information management system. The system is based on C / S model, the use of Visual Basic language and Microsoft SQL 2000 database development completed, the realization of the system management, information management staff, attendance management and setting management features such as wages.One of system management, including working hours and change settings such as user passwords module; staff information management, including add, delete, query modules information workers; attendance, including attendance and attendance management inquiry module; wage set includes basic wages set / modify and wage calculation formula / amend the report module; wage management module include attendance statistics, the query module wages. The system can basically meet the needs of users in attendance management needs, user-friendly, in line with user habits, can actually improve the efficiency of the management unit of attendance.Key words: Attendance Management staff; C / S mode; Visual Basic; Microsoft SQL 2000目录1引言 (1)1.1研究背景及目的 (1)1.2开发工具的选择 ........................................................ 错误!未定义书签。
员工信息管理系统设计与实现(数据库)
员工信息管理系统设计与实现(数据库)一、引言1. 背景随着企业规模的扩大和发展,对员工信息的管理变得越来越重要。
传统的手工管理方式已经无法满足现代企业的信息化需求,因此设计一个高效的员工信息管理系统对于企业的管理至关重要。
2. 目的本文将介绍一种基于数据库技术的员工信息管理系统的设计与实现方法,旨在提高企业对员工信息的管理效率和准确性,减少人力成本,同时提高信息安全性。
二、系统设计1. 数据库设计员工信息管理系统采用关系数据库设计,包括以下几张表:员工信息表、部门信息表、职位信息表。
员工信息表中包含员工ID、姓名、性别、年龄、入职时间等字段;部门信息表包含部门ID、部门名称等字段;职位信息表包含职位ID、职位名称等字段。
通过这三张表的设计,实现员工信息与部门、职位的关联。
2. 功能设计员工信息管理系统的主要功能包括员工信息的录入、修改、查询和删除,部门信息的管理和职位信息的管理。
管理员可以通过系统实现对员工信息的全面管理,包括个人资料的维护、考勤记录的查看等功能。
三、系统实现1. 前端设计员工信息管理系统的前端采用Web页面设计,通过HTML、CSS、JavaScript等技术实现用户友好的交互界面。
页面包含员工信息录入表单、查询界面、部门管理界面和职位管理界面等。
2. 后端设计系统的后端采用Java语言开发,使用Spring框架实现业务逻辑和数据访问层。
通过MyBatis等持久化框架与数据库进行交互,实现数据的增删改查操作。
3. 数据库实现数据库采用MySQL进行存储,通过建立员工信息表、部门信息表、职位信息表等实现对员工信息的持久化存储。
同时建立外键关联等约束确保数据的一致性和完整性。
四、系统优化1. 性能优化通过对数据库的索引优化、SQL语句的优化等手段提高系统的响应速度和性能,确保系统可以快速处理大量的员工信息。
2. 安全优化采用权限控制、加密传输等方式加强系统的安全性,防止未授权用户的访问和数据泄露,确保员工信息的保密性。
单位考勤管理系统数据库设计
单位考勤管理系统数据库设计1. 员工表(Employee table)2. 考勤表(Attendance table)考勤表用于记录员工的每日考勤情况,包括员工ID、日期、上班时间、下班时间、考勤状态等。
该表可以用来存储和管理员工每日的考勤记录,包括正常上班、迟到、早退、缺勤等情况。
3. 请假表(Leave table)请假表用于记录员工的请假信息,包括员工ID、请假开始时间、请假结束时间、请假原因等。
通过这个表,可以方便地管理和统计员工的请假情况,包括事假、病假、年假等。
4. 出差表(Business trip table)出差表用于记录员工的出差信息,包括员工ID、出差开始时间、出差结束时间、出差地点、出差目的等。
通过这个表,可以方便地管理和统计员工的出差情况,包括出差天数、出差地点等。
加班表用于记录员工的加班信息,包括员工ID、加班开始时间、加班结束时间、加班原因等。
通过这个表,可以方便地管理和统计员工的加班情况,包括加班时长、加班原因等。
6. 考勤规则表(Attendance rule table)考勤规则表用于记录单位的考勤规则,包括考勤时间、迟到规定、早退规定、缺勤规定等。
通过这个表,可以方便管理和设置单位的考勤规则,以便于系统能够根据规则自动识别员工的考勤状态。
7. 部门表(Department table)部门表用于记录单位的部门信息,包括部门ID、部门名称、上级部门等。
通过这个表,可以方便地管理和组织单位的部门结构,以便于系统能够按照部门进行员工信息的分类和查询。
8. 管理员表(Admin table)管理员表用于记录系统管理员的信息,包括管理员ID、姓名、密码等。
通过这个表,可以方便地管理和授权系统管理员,以便于系统能够进行安全和权限管理。
除了以上的几个核心表之外,还可以增加其他辅助表或者视图来满足管理需求。
比如,可以设计一个统计表或者视图,用于统计和分析员工的考勤数据,包括出勤率、迟到早退次数、请假次数等。
工厂考勤数据库管理系统设计
工厂考勤数据库管理系统设计引言现代企业中,工厂作为产品制造的核心部门,员工的考勤管理显得至关重要。
然而,传统的手动考勤方式,存在着反复操作、信息不及时等缺点,为企业的管理带来不少困难。
因此,通过设计一套高效便捷的工厂考勤数据库管理系统,可以有效提高企业的内部管理水平。
一、系统概述1.系统背景工厂考勤数据库管理系统,是为工厂生产部门员工考勤设计的一套数据库管理系统。
通过检测员工刷卡记录、调取监控摄像头等方式实现打卡记录,并汇总统计员工出勤、迟到、早退情况,方便企业管理人员及时查看员工考勤情况,并进行后续的具体业务处理。
2.系统功能(1)员工管理该系统可通过部门、岗位等方式实现对员工的信息管理,包括录入员工档案信息、部门岗位变动等。
(2)考勤管理该系统实现员工考勤的自动化管理及留痕备案功能,包括实时刷卡记录、迟到、早退、缺勤情况的查询、处理等。
(3)统计报表该系统可生成详细的员工考勤记录,并导出员工考勤汇总表、迟到、早退等异常情况统计表等,以便进行业务分析。
(4)权限控制该系统根据员工岗位等级进行不同权限设定,保证数据的安全性。
二、系统设计1.系统架构该系统采用B/S(浏览器/服务器)架构。
2.系统流程(1)员工打卡员工上班时,通过内置考勤设备进行刷卡打卡操作。
(2)考勤记录系统对员工刷卡记录进行实时监测,记录员工每次打卡的时间、地点,并将数据传输到服务器端。
(3)统计分析服务器端对考勤记录进行汇总处理,生成详细的员工考勤记录,并导出统计分析报表。
(4)权限控制系统根据员工岗位等级进行权限设定,保证数据的安全性。
三、系统实现1.技术选型(1)前端设计前端采用HTML、JavaScript、CSS等技术实现,可以适应多种分辨率的设备。
(2)后端设计后端采用Java语言开发,使用Spring框架和Hibernate框架实现业务处理和数据库访问。
(3)数据库设计采用MySQL数据库,通过建立员工表、考勤表等实现数据存储和管理。
职工信息管理系统设计
职工信息管理系统设计随着企业规模的扩大和竞争的加剧,职工信息的管理对企业来说越来越重要。
职工信息管理系统可以帮助企业高效地完成职工记录、管理、审核等工作。
本文将介绍一个职工信息管理系统的设计及其功能实现。
1.系统设计1.1 系统架构该系统采用B/S架构,即浏览器/服务器架构。
职工信息管理系统客户端用户通过浏览器与服务器进行交互,服务器进行数据处理和存储,返回结果给客户端用户。
浏览器是前端,服务器是后端。
如上图所示,该系统的架构由客户端、服务器、数据库三层组成。
客户端允许用户进行各种操作,服务器接收客户端请求并作出处理或向数据库发出请求。
1.3 数据库设计(1)用户表用户表记录系统管理员信息,包括管理员账号、密码等。
(2)员工信息表员工信息表记录职工信息,包括职工编号、姓名、性别、出生日期、联系电话、邮箱等。
1.4 功能设计(1)用户登录和权限管理管理员通过用户名和密码登录系统进行操作。
该系统为管理员设置多个权限,如添加员工信息、修改员工信息、删除员工信息、查看员工信息、发放工资等。
管理员可以添加、修改、删除员工信息,并能够查询员工信息,实现员工信息的全面管理。
其中包括员工基本信息、教育经历、工作经历等。
(3)工资管理管理员可以录入职工的基本工资、奖金、社保、公积金等信息,并自动计算实际工资,并可进行工资的查询、修改、导出等操作。
(4)考勤管理管理员可以对职工的考勤进行管理,包括考勤异常查询、请假、加班等操作。
(5)报表统计系统可对员工信息、工资信息、考勤信息进行统计和分析,并生成相应的报表用于管理决策。
2.系统实现2.1 技术选型本系统采用MySQL5.5、PHP5.2和Apache2.2作为数据库、后端和Web服务器。
2.2 整体流程(1)用户通过浏览器访问系统,输入用户名和密码进行登录。
(2)系统根据用户权限,返回相应的页面。
(3)管理员在系统中完成相应的操作,并提交到服务器。
(4)服务器进行数据处理并返回结果给用户,更新数据到数据库。
中控考勤管理系统数据库结构
中控zktime5.0考勤管理系统数据库表结构
Att2008主要表的表结构说明
表1:考勤记录表Checkinout
主键:UserID+Checktime
表2:指纹模板表Template
主键:TemplateID
表3:用户信息表Userinfo 主键:UserID
索引键:BadgeNuber
表4:面部模板表FaceTemp
主键:TemplateID
表5:考勤记录修改日志CheckExact 主键:ExactID
表6:部门表Departments 主键:Deptid
索引:DeptName
表7:节假日表:Holidays 主键:HolidayID
索引:HolidayName
表8:班次表Num_Run
主键:Num_RunID
表9:班次排班时段表Num_Run_Deil
表10:轮班表Shift1
主键:ShiftID
1该表在软件中没有作用
表11:员工排班表User_OF_Run
主键:UserID+Num_OF_Run_ID+StartDate+endDate
表12:员工临时排班表User_Temp_SCH
表13:员工考勤例外(请假/公出)表User_Speday 主键:UserID+StartSpecDay+DateID
表14:假类表LeaveClass
表15:统计项目表LeaveClass1
表16:班次时间表SchClass
主键:SchClassID
表17:系统参数表AttParam
表18:管理员权限设置表SecurityDetails 主键:SecurityDetailID。
数据库课程设计题目16个经典实例
数据库课程设计题目16个经典实例-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN数据库课程设计题目16个经典实例1.机票预定信息系统系统功能的基本要求:航班基本信息的录入,包括航班的编号、飞机名称、机舱等级等。
机票信息,包括票价、折扣、当前预售状态及经手业务员等。
客户基本信息,包括姓名、联系方式、证件及号码、付款情况等。
按照一定条件查询、统计符合条件的航班、机票等;对结果打印输出。
2.长途汽车信息管理系统系统功能的基本要求:线路信息,包括出发地、目的地、出发时间、所需时间等。
汽车信息:包括汽车的种类及相应的票价、最大载客量等。
票价信息:包括售票情况、查询、打印相应的信息。
3.人事信息管理系统系统功能基本要求:员工各种信息:包括员工的基本信息,如编号、姓名、性别、学历、所属部门、毕业院校、健康情况、职称、职务、奖惩等;员工各种信息的修改;对转出、辞退、退休员工信息的删除;按照一定条件,查询、统计符合条件的员工信息;教师教学信息的录入:教师编号、姓名、课程编号、课程名称、课程时数、学分、课程性质等。
科研信息的录入:教师编号、研究方向、课题研究情况、专利、论文及着作发表情况等。
按条件查询、统计,结果打印输出。
4.超市会员管理系统系统功能的基本要求:加入会员的基本信息,包括:成为会员的基本条件、优惠政策、优惠时间等。
会员的基本信息,包括姓名、性别、年龄、工作单位、联系方式等。
会员购物信息:购买物品编号、物品名称、所属种类,数量,价格等。
会员返利信息,包括会员积分的情况,享受优惠的等级等。
对货物流量及消费人群进行统计输出。
5.客房管理系统系统功能的基本要求:客房各种信息,包括客房的类别、当前的状态、负责人等;客房信息的查询和修改,包括按房间号查询住宿情况、按客户信息查询房间状态等。
以及退房、订房、换房等信息的修改。
对查询、统计结果打印输出。
6.药品存销信息管理系统系统功能基本要求药品信息,包括药品编号、药品名称、生产厂家、生产日期、保质期、用途、价格、数量、经手人等;员工信息,包括员工编号、姓名、性别、年龄、学历、职务等;客户信息,包括客户编号、姓名、联系方式、购买时间、购买药品编号、名称、数量等。
职工考勤管理系统的设计与实现
职工考勤管理系统的设计与实现随着企业规模的扩大和人员数量的增多,职工考勤管理越来越需要一种高效、自动化、精确的管理方式。
职工考勤管理系统因此应运而生。
职工考勤管理系统可以提高企业工作效率,节省管理成本,保障员工权益,减少管理时间,提升管理效率。
本文将介绍职工考勤管理系统的设计与实现。
第一步:系统需求分析1.1 需求收集在开始职工考勤管理系统的设计之前,我们需要进行一系列的需求分析,明确系统所要实现的功能以及需要满足的业务需求。
一般来讲,职工考勤管理系统需要实现以下功能:- 签到、签退、签到异常处理;- 考勤统计、考勤数据查询、考勤报表生成;- 假期管理、补卡管理等。
除此之外,还需考虑到系统的安全性、稳定性、易用性、可扩展性等方面。
1.2 功能设计根据需求分析的结果,开始对职工考勤管理系统进行功能划分。
各个模块应该要拥有独立的功能,同时还需要能和其他模块进行有机结合。
具体模块可分为:- 员工信息管理模块- 考勤记录管理模块- 假期管理模块- 补卡管理模块- 报表分析模块- 安全管理模块第二步:系统设计2.1 系统架构设计在系统设计中,我们需要考虑到系统的性能、安全、易用性等方面,同时也需明确系统的整体架构。
整个系统应分为前端和后端,前端负责与用户进行交互,后端负责处理与存储数据。
常用的技术框架包括JSP、ASP、PHP、Node.js等,数据库用MySQL、Oracle、SQL Server等。
2.2 数据库设计数据库设计是整个系统设计的核心。
要考虑到数据存储的稳定性、数据的安全性、数据的存储结构等。
系统设计中重要的一点是要遵循建立正确的表关系,以方便实现查询和数据修改。
2.3 界面设计系统的界面设计非常重要,良好的界面不仅能够提升用户体验,也能够提高系统的易用性。
界面设计需要遵循一定的设计原则,建立简洁、清晰、易用、美观的界面。
同时也考虑到用户交互的友好性。
第三步:系统实现3.1 系统框架搭建在进行系统实现时,首先要建立好系统框架。
中控zktime5.0考勤管理系统数据库表结构
Att2008主要表的表结构说明表1:考勤记录表Checkinout主键:UserID+Checktime页脚内容1表2:指纹模板表Template主键:TemplateID索引键:FingerID+UserID页脚内容2页脚内容3表3:用户信息表Userinfo主键:UserID索引键:BadgeNuber页脚内容4页脚内容5页脚内容6页脚内容7表4:面部模板表FaceTemp主键:TemplateID页脚内容8索引键:FaceID、Valid页脚内容9表5:考勤记录修改日志CheckExact主键:ExactID页脚内容10表6:部门表Departments主键:Deptid索引:DeptName页脚内容11页脚内容12表7:节假日表:Holidays主键:HolidayID索引:HolidayName页脚内容13表8:班次表Num_Run主键:Num_RunID页脚内容14表9:班次排班时段表Num_Run_Deil主键:Num_RunID+StartTime+SDays页脚内容15表10:轮班表Shift1主键:ShiftID1该表在软件中没有作用页脚内容16页脚内容17页脚内容18表11:员工排班表User_OF_Run主键:UserID+Num_OF_Run_ID+StartDate+endDate页脚内容19表12:员工临时排班表User_Temp_SCH主键:UserID+ComeTime+LeaveTime页脚内容20表13:员工考勤例外(请假/公出)表User_Speday主键:UserID+StartSpecDay+DateID页脚内容21表14:假类表LeaveClass主键:LeaveID页脚内容22页脚内容23表15:统计项目表LeaveClass1主键:LeaveID页脚内容24表16:班次时间表SchClass主键:SchClassID页脚内容25页脚内容26表17:系统参数表AttParam主键:ParaName页脚内容27表18:管理员权限设置表SecurityDetails主键:SecurityDetailID页脚内容28页脚内容29。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1 概述 (1)1.1设计背景 (1)1.2研究目的 (1)1.3理论基础的分析 (2)1.4预期结果和意义 (2)2 需求分析 (2)2.1功能需求 (2)2.2数据流图 (3)2.3功能模块图 (4)2.4系统数据流程图 (4)3 概念结构设计 (5)3.1局部E-R图 (5)3.2整体E-R图 (7)4 逻辑结构设计 (8)4.1关系模式 (8)4.2数据关系图 (9)5 物理结构设计 (9)5.1存储记录结构设计 (9)5.2创建索引 (12)6 数据库实施 (12)6.1建立数据库 (12)6.2数据表的创建 (13)6.3建立存储过程 (16)6.4创建触发器 (17)7 数据库运行和维护 (19)8 结论 (19)1 概述1.1设计背景随着企业人事管理的日趋复杂和企业人员的增多,企业的考勤管理变得越来越复杂。
规范的考勤管理是现代企业提高管理效益的重要保证,而传统的人工管理存在着效率低、不易统计、成本高和易出错等弊端,已经无法适应现代企业的需求。
随着计算机技术和通信技术的迅速发展,将传统的人工考勤管理计算机化,建立一个高效率的、无差错的考勤管理系统,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
企业考勤管理经过如下的业务流程:(1)员工基本信息管理,添加,删除,更改(2)员工考勤管理,员工根据自己的班次在上下班时分别进行出勤操作,采用手动方式或者使用划卡机。
由人事部门专门的人员管理出勤和退勤信息。
(3)一般在每个月月初进行考勤汇总,汇总信息包括工作日的出勤情况、请假天数、出差天数、休假天数和不同性质的加班记录等。
1.2研究目的待开发的系统的名称为企业职工在线考勤系统;我们以中小型企业的考勤管理业务为依托,结合科学管理的理论,设计并开发一个企业考勤管理信息系统,提供一个科学合理的考勤管理解决方案,彻底实现无纸化作业。
根据管理权限的不同,将界面分为一般职员、部门经理、系统管理员和最高管理者四个层次,系统目标如下:(1)提供简单、方便的操作。
(2)根据企业原来的考勤管理制度,为企业不同管理层次提供相应的功能。
(3)通过考勤管理无纸化的实现,使企业的考勤管理更加科学规范。
(4)节省考勤管理的成本。
(5)提高企业考勤管理的透明度和效率,防止“虚假出勤“的现象。
(6)对系统提供必要的权限管理。
(7)为企业实现整体信息化的其他相关系统提供必要的数据支持。
1.3理论基础的分析本设计利用server 2005建立数据库,表格化存储,利用表的查询,连接,修改,删除数据等管理员工信息,对数据库设定必要的权限,只有具有权限的人才能进行查看,修改数据。
1.4预期结果和意义考勤系统能实现职工日考勤记录,记录请假信息,记录出差信息等功能,并最终所有信息归入月统计中去。
本考勤系统建立了一个高效率的、无差错的考勤管理系统,能够有效的帮助企业实现“公正考勤,高效薪资”,使企业的管理水平登上一个新的台阶。
2需求分析2.1功能需求(1) 数据管理功能是设置和管理基础数据,包括加班、请假类别的定义和班次的定义,在全县范围内可以进行基础数据的添加、删除和修改。
(2) 考勤管理包括出勤动作、出勤信息的查询;上级对下级员工的出勤信息的确认;生成考勤统计信息并可以根据指定的条件进行查询。
实现从每日出勤到统计全部考勤信息的无纸化操作。
为方便数据传递和查阅,要根据需求提供不同时间短的考勤统计信息表。
(3) 加班管理对员工的加班时间进行统计,记录开始时间和结束时间,对加班信息实现添加,删除等操作。
(4) 请假管理可以提出请假申请,并完善请假信息,如请假开始时间,请假结束时间,请假的次数进行管理。
(5) 出差管理管理者安排员工出差,对出差时间,次数的管理。
2.2数据流图数据流图如图2.1所示2.1 数据流图2.3功能模块图如图2.2所示,图为功能模块图2.2 功能模块图2.4系统数据流程图如图2.3所示,图为数据流程图2.3 数据流程图3 概念结构设计3.1 局部E-R 图(1)员工E-R 图,如图3.1.1所示图3.1 员工E-R 图(2)图2.3.2 为出勤E-R 图图3.2 出勤E-R 图(3)图3.3为出差E-R图图3.3出差E-R图(4)加班E-R图如图3.4所示3.4 加班E-R图(5)请假E-R图如图3.5所示3.5 请假E-R图(6)月统计E-R图3.6 月统计E-R图3.2 整体E-R图如图3.7所示,图为整体E-R图结束时间3.7 整体E-R图4 逻辑结构设计4.1 关系模式职工(职工编号,姓名,性别,年龄)出勤记录(职工编号,出勤编号,上班时间,下班时间,缺勤记录)出差记录(职工编号,出差编号,开始时间,结束时间,统计天数)加班信息(职工编号,加班编号,加班开始时间,加班结束时间,加班时间统计)请假信息(职工编号,请假编号,请假开始时间,请假结束时间,请假时间统计)月统计(职工编号,出勤月统计,出差月统计,加班月统计,请假月统计)4.2数据关系图如图4.2.1所示,在数据库中生成的关系图中,员工编号是员工信息表的主键,是其他表的外键。
图4.1 数据关系图5 物理结构设计5.1存储记录结构设计在物理结构中,数据的基本存取单位是存储记录。
有了逻辑结构以后,就可以设计存储记录结构,一个存储记录可以与多个逻辑记录相对应。
存储记录就包括记录的组成,数据项的类型和长度等。
在本图中5.1职工信息表主要包括职工编号,姓名,性别,年龄表5.1 职工信息表在本表5.2中出勤记录包含职工编号,出勤编号,上班时间,下班时间,缺勤记录表5.2 出勤记录表在本图5.3中出差记录职工编号,出差编号,开始时间,结束时间,统计天数表5.3 出差记录表在本表5.4中加班记录表主要包含职工编号,加班编号,开始时间、结束时间。
时间统计表5.4 加班记录表在本表5.5中,请假记录表主要包括职工编号,请假编号,请假开始时间和请假结束时间组成表5.5 请假记录表在本图5.6中月统计主要包括职工编号,出勤月统计,出差月统计,请假月统计,加班月统计表5.6 月统计记录表5.2创建索引为mounth_note在w_id上创建唯一索引Create index M1 on mounth_note(w_id)GoExec sp_helpIndex mounth_note6 数据库实施6.1建立数据库CREATE DATABASE workerON( NAME=worker_data,FILENAME='f:\worker.mdf',SIZE=3,FILEGROWTH=1)LOG ON( NAME=worker_LOG,FILENAME='C:\worker_log.ldf',SIZE=1,MAXSIZE=50,FILEGROWTH=10%)6.2数据表的创建(1)如图6.1所示员工信息表(worker)CREATE TABLE worker( W_id CHAR(4) CONSTRAINT worker_Prim PRIMARY KEY,w_name CHAR(6) not null,SEX CHAR(2) CONSTRAINT SEX_Chk CHECK(SEX='男'OR SEX='女') not null, AGE INT not null,w_drgee VARCHAR(4) NOT NULL,)图6.1 员工信息表(2)如图6.2所示出勤记录表(work_note)CREATE TABLE work_note( W_id CHAR(4),w_num int ,CONSTRAINT work_note_Prim PRIMARY KEY(W_id,w_num), work_tim datetime,end_tim datetime,work_note datetime,)图6.2 出勤记录(3)如图6.3所示出差记录表(out_note)CREATE TABLE out_note( W_id CHAR(4),out_num int ,CONSTRAINT out_note_Prim PRIMARY KEY(W_id,out_num), out_tim datetime,back_tim datetime,out_days int,)图6.3 出差记录(4)如图 6.4所示加班记录表(over_note)CREATE TABLE over_note( W_id CHAR(4),over_num int ,CONSTRAINT over_note_Prim PRIMARY KEY(W_id,over_num), over_tim datetime,overend_tim datetime,over_days int,)图6.4 加班记录(5)如图6.2.5所示请假记录表(off_note)CREATE TABLE off_note( W_id CHAR(4),off_num int ,CONSTRAINT off_note_Prim PRIMARY KEY(W_id,off_num), off_tim datetime,offend_tim datetime,off_days int,)图 6.5 请假记录(6)如图6.6所示月纪录表(mounth)CREATE TABLE mounth_note( w_id CHAR(6) CONSTRAINT mounth_Prim PRIMARY KEY, work_note int not null,out_note int,over_note int,off_note int,)图6.6 月统计记录表6.3建立存储过程如图6.7所示建立一个向员工出勤表中插入数据的存储过程CREATE PROCEDURE insert_in(@W_id CHAR(4),@w_num int ,@work_tim datetime ,@end_tim datetime ,@work_note datetime)ASinsert into work_notevalues(@W_id, @w_num, @work_tim ,@end_tim ,@work_note )goexecinsert_in@W_id='0001',@w_num=1,@work_tim='2010/11/1' ,@end_tim='2010/11/ 1' ,@work_note=nullgoselect *from work_note图6.7 运行结果6.4创建触发器(1)建立一个触发器,当想考勤记录中添加一条新的考勤记录时,触发统计该员工一个月的考勤记录,并存入月统计的月考勤记录表中。