大老板员工考勤系统
一、问题定义
1.1 目的和意义
随着市场的不断发展,公司的规模也在相应扩大,而公司的人事管理也越发凸显其重要地位。本系统主要针对大型公司员工签到考勤设计,为解决大型公司员工多,统计难,核对繁琐等问题。
1.2 项目背景
- 软件的系统名称:XX 公司员工签到考勤系统
- 本项目的提出者:XX 公司
- 本项目的任务开发者:员工签到考勤系统研发小组
- 本项目的用户:XX 公司员工签到考勤管理人员
1.3 编写目的
- 描述软件所能达到的功能。
- 指导软件的代码编写,使开发具有明确的方向性。
- 描述系统的逻辑设计,程序设计,后台处理等重要信息。
1.4 术语定义
- MIS:管理信息系统
- SRS: Software Requirement Specification (软件需求说明)
- DFD: Data Flow Diagram (数据流图)
二、可行性分析
2.1 系统的特点
系统管理员必须具备一定的网络及数据库的操作和管理知识,并具有高度的责任感和强烈的安全意识。
一般用户需要具有一定的计算机常识,而且不得越权操作,不得随意泄露口令,以共同维护整个系统的安全和正常运行。
2.2 系统软、硬件需求说明
2.2.1 软件需求
操作系统 | CentOS7.2 |
---|---|
服务器 | Nginx1.10 |
数据库 | MariaDB5.5 |
开发平台 | Pycharm5,Django1.11,python3.5 及以上版本 |
浏览器 | IE 8.0 及以上版本 |
2.2.2 硬件需求
客户端硬件要求
- 中央处理器:Intel core 2 GHz 以上处理器
- 内存:512 M 以上内存
- 硬盘:10G 以上可用硬盘空间
- 其他:鼠标、键盘
应用服务器端硬件需求
- 中央处理器:Intel core 2 GHz 以上处理器
- 内存:1G 以上内存
- 硬盘:20G 以上可用硬盘空间
- 数据库服务器:同应用服务器
三、需求分析
3.1 需求规定
3.1.1 限制与约束
按相应的开发阶段文档;用户提供相应的标准,软件开发与典型实例考核相结合。
用户必须提供相关运行软件有效的数据库接口标准,并在改动的过程中及时通知本软件开发商,以保证从中正确读取预决算参数,进行成本预算。
用户必须按照操作规程运行本软件,不得进行恶意破坏性操作。
功能编号采用 AXX(XXXX) 的方法,第二、三位的数字表示系统一级功能等级的编号,四、五位数字表示上一级功能下的二级功能等级编号,依次类推。
功能需求表编号采用 A-XX(XXXX)的方法,具体数字位置的含义同上。=
3.1.2 对功能的规定
根据系统的角色划分,将主要用户按照不同管理模块内容分为:管理员,员工,部门主管(其中部门主管较为特殊,在请假与查询模块之外,部门主管与一般员工并无区别,故为表述方便,在这两模块之外,将部门主管归入员工中)。不同的角色之间的功能差异较大,为了使用户更好的理解本系统的功能,在此将给用户展示不同用户的功能模块,随后将详细说明每个功能模块的具体内容。
3.2 系统功能需求定义
通过对需求的搜集、分析和总结,将系统需求按功能进行分类如下:
- 登录与注册
- 签到与签退
- 请假与批准
- 日志的生成与查询
- 附加模块
3.3 大老板员工考勤系统角色分配
员工用例图
部门主管用例图
管理员用例图
3.4 大老板员工考勤系统各功能需求定义
3.4.1 登录与注册模块
3.4.2 签到与签退模块
3.4.3 请假与回复模块
3.4.4 日志生成与查询模块
3.4.5 附加模块
3.5 系统功能表
序号 | 作业 | 功能描述 |
---|---|---|
1 | 登录与注册 | 使使用者进入系统 |
2 | 签到与签退 | 员工可以执行签到签退操作,管理员进行核对 |
3 | 请假与批复 | 员工向所属部门的主管提出请假申请,并由部门主管批复 |
4 | 日志生成与查询 | 系统自动生成签到日志,管理员可以按不同要求查询 |
5 | 附加模块 | 提供给系统使用者的交流平台 |
四、概要设计
4.1 概述
4.1.1 功能描述
本项目主要用于大型公司的员工签到考勤系统,旨在针对大型公司员工数目多,部门多,管理难的现状,为公司提供系统科学的员工签到考勤管理办法。使公司可以直观,清晰的发现各部门员工实际出勤状况,进行针对性处理,并在保证数据安全的前提下可将考勤记录上传至服务器,以备后日查询。本项目将应用于大型公司人事部门。
系统的总体结构图如下:
4.1.2 运行环境
4.1.2.1 软件环境
分类 | 名称 | 版本 | 语种 |
---|---|---|---|
操作系统 | CentOS | 7.2 | 英文 |
操作系统的附加功能 | |||
数据库平台 | MariaDB | 5.5 | 英文 |
数据库平台补丁 | |||
开发平台 | Pycharm | 5 及以上 | |
开发平台补丁 | Django | 1.11 及以上 | |
开发平台补丁 | python | 3.5 及以上 | |
服务器 | Nginx | 1.10 | |
客户端软件 | Internet Explorer | 8.0 及以上 | 简体中文 |
4.1.2.2 硬件环境
类型 | 硬件 | 推荐配置 |
---|---|---|
客户端硬件需要 | 中央处理器 | Intel core 2 GHz 以上处理器 |
内存 | 1G 以上内存 | |
硬盘 | 10G 以上可用硬盘空间 | |
其他 | 鼠标、键盘 | |
应用服务器端要求 | 中央处理器 | Intel core 2 GHz 以上处理器 |
内存 | 1G 以上内存 | |
硬盘 | 20G 以上可用硬盘空间 | |
数据库服务器 | 同应用服务器 | 同应用服务器 |
4.1.3 开发环境
4.1.3 服务器软件环境
分类 | 名称 | 版本 | 语种 |
---|---|---|---|
操作系统 | Windows | 10 | 中文 |
操作系统的附加功能 | |||
数据库平台 | MariaDB | 5.5 | 英文 |
数据库平台补丁 | |||
应用平台 | |||
应用平台补丁 | |||
版本控制系统 | Git | ||
目录服务系统 | |||
邮件系统 | |||
客户端软件 |
4.1.3 服务器硬件环境
服务器 | 最低配置 | 推荐配置 |
---|---|---|
应用服务器、数据库服务器、邮件服务器、目录服务器 | 2GHz CPU | 2GHz CPU |
40G 硬盘 | 80G 硬盘 | |
1G 内存 | 4G 内存 |
4.1.3 开发机器软件环境
分类 | 名称 | 版本 | 语种 |
---|---|---|---|
操作系统 | Windows | 10 | 简体中文 |
操作系统的附加功能 | |||
数据库平台 | |||
应用平台 | |||
开发平台 | python | 3.5 及以上 | 英文 |
客户端软件 |
4.1.3 开发机器硬件环境
分类 | 最低配置 | 推荐配置 |
---|---|---|
开发机器 | 2GHz CPU | 2GHz CPU |
40G 硬盘 | 80G 硬盘 | |
1G 内存 | 2G 内存 |
4.2 设计思想
4.2.1 系统构思
该部分主要表示系统的功能层次。系统主要有注册与登录,签到与签退,请假与批准,日志生成与查询,附加模块共五大模块。
4.2.1 注册与登录
登录与注册模块主要功能为让未注册员工注册账号,已注册员工登录系统
4.2.1 签到与签退模块
签到与签退模块主要功能为让员工在工作开始前签到,工作结束后签退,同时允许管理员核对签到与签退情况
4.2.1 请假与批准模块
请假与批准模块主要功能为允许员工向部门主管提交请假申请并允许部门主管对此申请就行批复【批复结果为同一或拒绝】
4.2.1 日志生成与查询模块
日志生成与查询模块主要功能为按日期生成日志并允许管理员查询日志
4.2.1 附加模块
附加模块的主要功能为不限角色允许发布和回复消息,允许管理员进行相关操作
4.2.2 关键技术与算法
Python 与 AJAX
4.2.3 关键数据结构
4.2.3 MySQL 数据库
本系统的关键数据结构为数据库,与数据库相关的 E-R 图等将在第四部分列出。
4.3 系统功能设计
4.3.1 登录与注册功能
登录与注册主要包括员工注册账号与员工登录账号两个功能,实现员工接入系统。
4.3.1 登录与注册子功能
此功能实现管理员对员工账号的增删改查等功能。(较常用功能为删除,主要为删除离职员工曾用账号)
4.3.2 签到与签退功能
签到与签退包括实现员工在工作开始前签到与在工作结束后签退的功能。
4.3.2 签到与签退子功能
允许管理员核对签到与签退情况。
4.3.3 请假与批准功能
允许员工向所属部门主管提交请假申请并允许部门主管批复。
4.3.3 请假与批准子功能
允许管理员查看请假记录与批复情况
4.3.4 日志生成与查询功能
系统按日期生成签到签退记录表,仅允许管理员查询
4.3.5 附加模块功能
允许所有使用者发布和回复消息。
4.3.5 附加模块子功能
允许管理员对某使用者禁言与解除禁言。
4.4 系统数据库说明
4.4.1 说明
在面向对象的设计方法中,数据也可以作为一个对象来处理,如果数据附属于某一对象,可以将其纳入该对象的属性管理之中。所以在面向对象的设计过程中,对数据的设计是在对对象的设计过程中完成的。
4.4.2 数据结构
数据结构
Name | Code |
---|---|
系统设置表 | SystemSetting |
时间设置表 | TimeSetting |
用户类型表 | UserType |
部门表 | Dept |
员工表 | Staff |
考勤类型表 | CheckType |
考勤信息表 | CheckInfo |
主题表 | Theme |
假条表 | Leave |
回复表 | Reply |
日志表 | Daily |
公告表 | Notice |
图片表 1 | Reply_Img |
图片表 2 | Theme_Img |
图片表 3 | Notice_Img |
4.4.3 数据结构与具体系统元素的关系
实体关系图:
大老板员工考勤系统 CDM 图
大老板员工考勤系统 PDM 图
4.5 运行设计
4.5.1 系统初始化
说明本系统的初始化过程。以流程的方式描述系统依次的动作,包括内存使用情况、数据初始化、对象的初始化等。
{系统在初始化阶段对内置的管理员账号进行初始化,包括对管理员登录 ID 初始化,登录密码初始化,个人信息初始化。}
4.5.2 运行控制
- 说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,说明每种运行所历经的内部模块和支持软件。
- 说明每一种外界运行控制的方式方法和操作步骤。
- 说明每种运行模块组合将占用各种资源的情况。
- 说明系统运行时的安全控制。
[运行控制将严格按照各模块间函数调用关系来实现。在各事务中心模块中,需对运行控制进行正确的判断,选择正确的运行控制路径。 在网络传方面,客户机在发送数据后,将等待服务器的确认收到信号,收到后,再次等待服务器发送回答数据,然后对数据进行确认。服务器在接到数据后发送确认信号,在对数据处理、访问数据库后,将返回信息送回客户机,并等待确认。]
4.5.3 系统结束
说明本系统的结束过程。以流程的方式描述系统退出时依次的动作,包括内存释放情况、对象的释放等。
[用户退出学生信息管理系统后,服务器会自动关闭与远程用户主机的连接。]
一般情况下系统出错设计和系统维护设计不应简化,但对特定情况下(如用户需求中未明确规定或项目周期较短、经费较少、项目复杂程度较少等)这两部分的设计可以简化。
4.6 系统出错处理设计
4.6.1 出错信息
使用装饰器来捕获异常信息。
[程序在运行时主要会出现两种错误:1、由于输入信息,或无法满足要求时产生的错误,称为软错误。2、由于其他问题,如网络传输超时等,产生的问题,称为硬错误。
对于软错误,须在定票/领票操作成功判断及输入数据验证模块由数据进行数据分析,判断错误类型,再生成相应的错误提示语句,送到输出模块中。
对与硬错误,可在出错的相应模块中输出简单的出错语句,并将程序重置。返回输入阶段。 出错信息必须给出相应的出错原因。]
或者
4.6.2 补救措施
说明故障出现后可能采取的变通措施,包括:
- 后备技术 当原始系统数据万一丢失时启用的副本的建立和启动的技术。
- 降效技术 使用另一个效率稍低的方法来求得所需结果的某些部分,如手工操作和数据的人工记录。
- 恢复和再启动技术 使系统从故障点恢复执行或使系统从头开始重新运行的方法。
[所有的客户机及服务器都必须安装不间断电源以防止停电或电压不稳造成的数据丢失的损失。若真断电时,客户机上将不会有太大的影响,主要是服务器上:在断电后恢复过程可采用 SQL SERVER 的日志文件,对其进行 ROLLBACK 处理,对数据进行恢复。 在网络传输方面,可考虑建立一条成本较低的后备网络,以保证当主网络断路时数据的通信。 在硬件方面要选择较可靠、稳定的服务器机种,保证系统运行时的可靠性。]
五、详细设计
5.1 需求概述
大老板员工考勤系统针对大型公司员工考勤设计,员工包括各部门低级职员与部门主管,使用者包括员工与系统管理员。要求:
未注册员工可以注册新账号,已注册员工可以直接使用现有账号登录系统,管理员登录系统后可以对各种信息实施操作。
系统结构:
5.2 程序描述
5.2.1 注册与登录模块
- 功能
未注册员工可以注册新账号,已注册用户可以直接使用现有账号登录系统。 - 输入项目
用户鼠标单击输入 - 存储分配
内部数据:
系统设置
用户类型表 UserType
```python
class UserType(models.Model): display = models.CharField(max_length=50, null=False, verbose_name='用户类型')
class Meta:
verbose_name = '用户类型'
verbose_name_plural = '用户类型'
def __unicode__(self):
return self.display
def __str__(self):
return self.display
```
员工表 Staff
``` class Staff(models.Model):
username = models.CharField(max_length=25, null=False, primary_key=True, verbose_name='用户名')
password = models.CharField(max_length=50, null=False, verbose_name='密码')
sex_choices = {
('0', '男'),
('1', '女'),
}
staff_no = models.CharField(max_length=20, null=True, verbose_name='员工号')
sex = models.CharField(max_length=4, choices=sex_choices, null=False, verbose_name='性别')
staff_dept =models.ForeignKey('Dept', verbose_name='所属部门')
true_name = models.CharField(max_length=25, null=False, verbose_name='真实姓名')
tel = models.CharField(max_length=25, null=False, verbose_name='联系电话')
address = models.CharField(max_length=25, null=True, verbose_name='家庭住址')
user_type = models.ForeignKey('UserType', verbose_name='用户类型')
class Meta:
verbose_name = '员工'
verbose_name_plural = '员工'
def unicode(self):
return self.username
def str(self):
return self.username ```
- 测试要点
数据库连接情况:正常情况,数据库文件缺少,外部系统异常
系统设置获取:正常情况,外部系统异常
对用户的输入响应:系统应正确判明登录用户的权限并分配相应操作,当用户合法输入后允许用户调用相应其他模块
5.2.2 签到与签退模块
- 功能
允许员工执行签到签退操作 - 输入项目
单击“签到”或“签退”选项 - 输出项目
“签到成功”或“签退成功”
内部数据
考勤类型表 CheckType
``` class CheckType(models.Model): type_name = models.CharField(max_length=10, primary_key=True, verbose_name='类型')
class Meta:
verbose_name = '考勤类型'
verbose_name_plural = '考勤类型'
def __unicode__(self):
return self.type_name
def __str__(self):
return self.type_name
```
考勤信息表 CheckInfo
``` class CheckInfo(models.Model): staff_id = models.ForeignKey('Staff', verbose_name='员工ID')
dept_id = models.ForeignKey('Dept', verbose_name='部门ID')
check_time = models.DateTimeField(auto_now_add=True, verbose_name='考勤时间')
check_type = models.ForeignKey('CheckType', verbose_name='考勤类型')
remarks = models.CharField(max_length=25, null=True, verbose_name='备注信息')
class Meta:
verbose_name = '考勤信息'
verbose_name_plural = '考勤信息'
def __unicode__(self):
return self.staff_id
def __str__(self):
return self.staff_id
```
- 测试要点
数据库连接情况:正常情况,数据库文件缺少,外部系统异常
系统设置获取:正常情况,外部系统异常
对用户的输入响应:系统正确判断用户所选的签到方式并记录
5.2.3 请假与批复模块
- 功能
允许部门员工向所属部门主管提交请假申请,并由所属部门主管进行批复 - 输入项目
假条各项详细,提交请假申请 - 输出项目
提交成功,清等待批复
内部数据
假条表 Leave
``` class Leave(models.Model): staff_id = models.ForeignKey('Staff', verbose_name='员工ID')
staff_dept = models.ForeignKey('Dept', verbose_name='员工部门')
reason = models.CharField(max_length=50, null=False, verbose_name='原因')
start_date = models.DateTimeField(null=False, verbose_name='开始时间')
end_date = models.DateTimeField(null=False, verbose_name='结束时间')
class Meta:
verbose_name = '假条'
verbose_name_plural = '假条'
def __unicode__(self):
return self.content
def __str__(self):
return self.content
```
- 测试要点
数据库连接情况:正常情况,数据库文件缺少,外部系统异常
系统设置获取:正常情况,外部系统异常
对用户的输入响应:系统正确记录用户输入信息并提交
5.2.4 日志生成与查询模块
- 功能
系统按日期生成签到签退记录表,供管理员查询 - 输入项目
无 - 输出项目
签到签退记录表
内部数据
日志表 Daily
``` class Daily(models.Model):
staff_count = models.IntegerField(null=False, verbose_name='员工数')
check_staff = models.IntegerField(null=False, verbose_name='考勤员工数')
uncheck_staff = models.IntegerField(null=False, verbose_name='未考勤员工数')
late_staff = models.IntegerField(null=False, verbose_name='迟到员工数')
leave_staff = models.IntegerField(null=False, verbose_name='早退员工数')
daily_text = models.TextField(verbose_name='日志文本')
create_time = models.DateTimeField(auto_now_add=Theme, verbose_name='日志创建时间')
class Meta:
verbose_name = '日志'
verbose_name_plural = '日志'
def unicode(self):
return self.content
def str(self):
return self.content
```
- 测试要点
数据库连接情况:正常情况,数据库文件缺少,外部系统异常
系统设置获取:正常情况,外部系统异常
5.2.5 附加模块
- 功能
允许用户(包括员工,部门主管和管理员)发布与回复消息 - 输入项目
消息详细 - 输出项目
提示发布(回复)成功
内部数据
公告表 Notice
``` class Notice(models.Model):
pub_user = models.ForeignKey("Staff", verbose_name='发布人')
notice_text = models.TextField(verbose_name='公告内容')
create_time = models.DateTimeField(auto_now_add=Theme, verbose_name='公告时间')
class Meta:
verbose_name = '公告'
verbose_name_plural = '公告'
def unicode(self):
return self.pub_user
def str(self):
return self.pub_user
```
回复表 Reply
``` class Reply(models.Model):
content = models.TextField(verbose_name='回复内容')
user = models.ForeignKey("Staff", verbose_name='回复用户')
theme = models.ForeignKey("Theme", verbose_name='回复主题')
create_date = models.DateTimeField(auto_now_add=True, verbose_name='回复时间')
class Meta:
verbose_name = '回复'
verbose_name_plural = '回复'
def unicode(self):
return self.content
def str(self):
return self.content
```
主题表 Theme
``` class Theme(models.Model):
title = models.CharField(max_length=50,db_index=True, verbose_name='标题')
content = models.CharField(max_length=720, null=False, verbose_name='内容') #内容
url = models.URLField()
reply_count = models.IntegerField(default=0, verbose_name='回复数') #回复数
user = models.ForeignKey("Staff", verbose_name='发布用户')
create_date = models.DateTimeField(auto_now_add=True, verbose_name='发布时间')
update_date = models.DateTimeField(auto_now=True,verbose_name='最后回复时间')
class Meta:
verbose_name = '主题'
verbose_name_plural = '主题'
def unicode(self):
return self.title
def str(self):
return self.title
```
- 测试要点
数据库连接情况:正常情况,数据库文件缺少,外部系统异常
系统设置获取:正常情况,外部系统异常
对用户的输入响应:正确判断用户输入类型,并调用对应表,执行相应操作。
六、软件实现
每日统计饼图代码:
考勤时间设置代码:
请假批复代码:
每日统计饼图代码:
七、总结
通过此次项目,让我们深刻认识到了现实软件开发中的具体难题,包括文档设计先于具体开发,通过文档内容指导开发过程,同时依据开发中遇到的现实问题对文档内容进行适当微调。特别感谢刘元勇老师给与我们这次开发机会以及在开发过程中的各种指导意见。
参考文献
- 钢铁企业考勤信息系统的研究与实现(华北理工大学·董金颖)
- 基于J2EE的工作流考勤系统的设计与实现(吉林大学·王奇峰)
- 企业外勤人员考勤系统的研究与实现(西安科技大学·李宇翔)
- 大理烟草公司职工信息管理与服务系统的设计与实现(山东大学·马爱伦)
- 大理烟草公司职工信息管理与服务系统的设计与实现(山东大学·马爱伦)
- 大理烟草公司职工信息管理与服务系统的设计与实现(山东大学·马爱伦)
- 基于SSH框架高校教工业绩绩效测评管理系统设计与实现(吉林大学·滕婵娟)
- 基于SSH框架高校教工业绩绩效测评管理系统设计与实现(吉林大学·滕婵娟)
- 基于WEB的高校学生考勤管理信息系统设计与实现(电子科技大学·廉照勇)
- 沂山镇政府职工考勤系统的设计与实现(电子科技大学·高攀)
- 辽宁电信人力资源绩效管理系统的设计与实现(大连理工大学·王睿)
- 基于B/S架构的企业考勤管理系统的设计与实现(吉林大学·孙伟平)
- 基于SSH框架高校教工业绩绩效测评管理系统设计与实现(吉林大学·滕婵娟)
- 基于Web和移动终端的中软考勤管理系统设计与实现(山东大学·徐梦倩)
- 黑旋风绩效考核系统的设计实现与测试(华中科技大学·陈小丽)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码工厂 ,原文地址:https://m.bishedaima.com/yuanma/35920.html