百度推广效果怎么样_沙雕动画制作软件手机版_无货源免费开网店_不要被这些传媒公司骗了
第4章系统设计 4.1系统架构设计 员工考勤系统的架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。
系统架构如下图所示。
MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。它强制性的把应用程序的输入、输出和处理全部分开,将其分为三个核心部分,这三个部分分别有不同的功能。
图4-1系统架构图
视图层视图是指被用户所看到的并且能够与之进行交互的界面。视图可以向用户展示相关的数据,并接收用户输入的数据,但对用户数据不进行任何实际业务操作处理。
模型层通过控制层来处理视图层传递的数据,同一个模型可以给不同的视图提供数据,也可以被不同的视图重复使用。由于 Model 的主要内容是数据、方法和行为,其也是 MVVM 中逻辑最为复杂,代码量最多的部分,其中包含了许多应用中需要用到的业务逻辑,因此模型层的开发也变得尤为重要,后期一般不会对模型层进行大规模改动,也是 MVVM最稳定的部分。
控制层主要负责视图层和模型层之间的数据传输和处理请求操作。当用户通过视图发送数据和请求时,控制层可以接收请求和数据并决定调用哪些模型、通过模型的哪些操来处理数据和请求,处理完成后,控制层再将数据返回给相应的视图。
4.2系统总体设计 员工考勤系统总体分为前台用户模块和后台管理员模块。
两个模块表现上是分别独立存在,但是访问的数据库是一样的。每一个模块的功能都是根据先前完成的需求分析,并查阅相关资料后整理制作的。
综上所述,系统功能结构图如下图所示。
图4-2 系统功能结构图
4.3系统功能设计 登录模块:登录模块是进入系统的入口,所有用户必须登录后才能访问系统。登录需要输入用户名和密码,如果多次尝试登录需要输入验证码。登录时需要选择用户的角色,是一般用户还是管理员登录等。登录成功后,会通过数据库获取用户的权限,并跳转至用户的主页面。
员工管理模块:员工管理分为员工添加、修改和查询。员工由管理员进行修改、添加、删除操作;员工录入由管理员来执行。
部门信息管理模块:部门信息管理分为部门添加、修改和删除。部门由管理员进行修改、添加、删除操作;部门录入由管理员来执行。
4.4数据库设计 4.4.1数据需求分析 从前面可以分析到数据库中最重要的是考勤信息、请假信息、员工、部门信息。分析可以得到如下数据描述:
平台用户:用于记录用户的各种信息,包括教师工号、姓名、性别、手机、邮箱、照片等数据项。
管理员:记录管理员的登录信息。包括用户名,密码,权限等数据项。
员工管理:储存员部门料的信息数据项。
部门信息管理:存储部门信息等详情数据项。
考勤信息管理:存储考勤考勤等数据项。
4.4.2数据库概念设计 根据前面的数据流程图,结合系统的功能模块设计,设计出符合系统的各信息实体。
系统ER图如下图所示。
图4-3 系统ER图
4.4.3数据库表设计 考勤管理管理与系统所拥有的数据表有以下:员工表,部门信息表,考勤管理表等。
由于数据表较多,只展示系统主要数据表,如下表所示。
表access_token (登陆访问时长)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | | 临时访问牌ID |
2 | token | varchar | 64 | 0 | Y | N | | 临时访问牌 |
3 | info | text | 65535 | 0 | Y | N | | |
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表attendance_clock_in (考勤打卡)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | attendance_clock_in_id | int | 10 | 0 | N | Y | | 考勤打卡ID |
2 | attendance_date | datetime | 19 | 0 | Y | N | | 考勤日期 |
3 | employee_users | int | 10 | 0 | Y | N | 0 | 员工用户 |
4 | job_id | varchar | 64 | 0 | Y | N | | 工号 |
5 | full_name | varchar | 64 | 0 | Y | N | | 姓名 |
6 | department | varchar | 64 | 0 | Y | N | | 所属部门 |
7 | attendance_status | varchar | 64 | 0 | Y | N | | 考勤状态 |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表auth (用户权限管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | | 授权ID: |
2 | user_group | varchar | 64 | 0 | Y | N | | 用户组: |
3 | mod_name | varchar | 64 | 0 | Y | N | | 模块名: |
4 | table_name | varchar | 64 | 0 | Y | N | | 表名: |
5 | page_title | varchar | 255 | 0 | Y | N | | 页面标题: |
6 | path | varchar | 255 | 0 | Y | N | | 路由路径: |
7 | position | varchar | 32 | 0 | Y | N | | 位置: |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | | 添加字段: |
14 | field_set | text | 65535 | 0 | Y | N | | 修改字段: |
15 | field_get | text | 65535 | 0 | Y | N | | 查询字段: |
16 | table_nav_name | varchar | 500 | 0 | Y | N | | 跨表导航名称: |
17 | table_nav | varchar | 500 | 0 | Y | N | | 跨表导航: |
18 | option | text | 65535 | 0 | Y | N | | 配置: |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
表department_management (部门管理)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | department_management_id | int | 10 | 0 | N | Y | | 部门管理ID |
2 | department_name | varchar | 64 | 0 | Y | N | | 部门名称 |
3 | establishment_time | date | 10 | 0 | Y | N | | 创立时间 |
4 | person_in_charge | varchar | 64 | 0 | Y | N | | 负责人 |
5 | contact_number | varchar | 64 | 0 | Y | N | | 联系电话 |
6 | departmental_landline | varchar | 64 | 0 | Y | N | | 部门座机 |
7 | remarks | varchar | 64 | 0 | Y | N | | 备注信息 |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表hits (用户点击)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | | 点赞ID: |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | | 来源表: |
6 | source_field | varchar | 255 | 0 | Y | N | | 来源字段: |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表staff (员工)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | staff_id | int | 10 | 0 | N | Y | | 员工ID |
2 | job_id | varchar | 64 | 0 | N | N | | 工号 |
3 | full_name | varchar | 64 | 0 | Y | N | | 姓名 |
4 | gender | varchar | 64 | 0 | Y | N | | 性别 |
5 | residential_address | varchar | 64 | 0 | Y | N | | 居住地址 |
6 | department | varchar | 64 | 0 | Y | N | | 所属部门 |
7 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
8 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
9 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
10 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
11 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | | 上传ID |
2 | name | varchar | 64 | 0 | Y | N | | 文件名 |
3 | path | varchar | 255 | 0 | Y | N | | 访问路径 |
4 | file | varchar | 255 | 0 | Y | N | | 文件路径 |
5 | display | varchar | 255 | 0 | Y | N | | 显示顺序 |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | | 文件夹 |
8 | type | varchar | 32 | 0 | Y | N | | 文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | | 用户ID:[0,8388607]用户获取其他与用户相关的数据 |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | | 所在用户组:[0,32767]决定用户身份和权限 |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | | 用户名:[0,16]用户登录时所用的账户名称 |
8 | nickname | varchar | 16 | 0 | Y | N | | 昵称:[0,16] |
9 | password | varchar | 64 | 0 | N | N | | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 |
10 | email | varchar | 64 | 0 | Y | N | | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | | 头像地址:[0,255] |
13 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | | 用户组ID:[0,8388607] |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | | 名称:[0,16] |
4 | description | varchar | 255 | 0 | Y | N | | 描述:[0,255]描述该用户组的特点或权限范围 |
5 | source_table | varchar | 255 | 0 | Y | N | | 来源表: |
6 | source_field | varchar | 255 | 0 | Y | N | | 来源字段: |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
主要由两部分组成,登录前的登录界面以及登录后的用户功能界面。登录界面,要求用户输入用户名和密码,当用户名和密码其中一个输入为空时,给出提示“用户名,密码不能为空”。获取用户名和密码后到数据库中查找,如果用户名存在,以及对应的密码正确,则登录成功,否则登录失败。登录失败后给出提示,并把焦点停在文本框中。登录成功后将该次会话的全局变量username设置为用户名。登录成功后进入会员的功能模块,主要有会员基本信息修改,已经发布考试信息管理,发布信息,和退出功能。退出功能是清除全局变量username的值,并跳回到首页。
登录流程图如下图所示。
图5-1登录流程图
用户登录界面如下图所示。
图5-1用户登录界面
用户登录/注册成功之后可以修改自己的基本信息。修改页面的表单中每一个input的name值都要与实体类中的参数相匹配,在用户点击修改页面的时候,如果改后用户名与数据库里面重复了,页面会提示该用户名已经存在了,否则通过Id来查询用户,并将用户的信息修改为表单提交的数据。用户密码界面如下图所示.
图5-1修改密码界面
如果员工的信息需要修改,管理员可以通过查询员工的基本信息来查询员工,查询员工是通过ajax技术来进行查询的,需要传递员工的账号、员工姓名等参数然后在返回到该页面中,可以选中要修改或删除的那条信息,如果选中了超过一条数据,页面会挑一个窗口提醒只能选择一条数,如果没有选中数据会挑一个窗口题型必须选择一条数据。当选择确认修改的时候,后台会根据传过来的id到数据库查询,并将结果返回到修改页面中,可以在修改页面中修改刚刚选中的信息当点击确认的时候from表单会将修改的数据提交到后台并保存到数据库中,就是说如果提交的数据数据库中存在就修改,否则就保存。
员工展示界面如下图所示。
图5-5员工展示界面
考勤功能需要考虑高并发,防止出现考勤信息重复、考勤状态显示出错等情况,特对考勤这一共享数据增加锁机制。在乐观锁、悲观锁以及线程锁中,综合考虑性能效率和错误的可接受性选择了乐观锁机制。乐观锁的实现方式是使用版本标识来确定读到的数据与提交时的数据是否一致,提交后修改版本标识,不一致时可以采取丢弃和再次尝试的策略。在数据库考勤表(对应考勤实体)设计中增加了version字段,每次数据提交时(更改考勤状态)会判断version是否匹配,若不匹配停止本次提交,若匹配则提交成功并增加version的值。
考勤功能整体流程:用户浏览考勤信息时,同时会显示考勤的状态,系统会在其显示详细信息的页面时便会判断考勤的状态,若员工状态为可浏览,则会显示搜索的链接按钮。在用户点击搜索按钮时,会先通过拦截器判断用户是否登录,若未登录,会跳转至登录页面,提示用户先登录,若为登录用户就会跳转至填写信息的页面,填写好信息之后,点击搜索按钮,成功之后显示出考勤。
考勤信息流程图如下图所示。
图5-6考勤信息流程图
考勤信息界面如下图所示。
图5-7考勤信息界面
根据需求,需要对部门进行添加、删除或修改详情信息。删除或修改部门部门时,系统根据部门的状态判定为可删除状态下,才会给出删除和修改链接,点击删除链接按钮时,请求到达后台,还会先查询部门部门状态再次做出判定能否删除。点击修改链接按钮时,会跳转到修改信息的页面,重新填写好数据后,数据提交到后台会对数据库中相应的记录做出修改。
添加部门部门时,会给出数据填写的页面,该页面根据填写好的员工账号、员工姓名、部门等信息同样会事先发送Ajax请求查询编号是否已存在,数据填写好之后提交到后台,会调用相关服务在数据库中插入记录。
部门管理流程图如下图所示。
图5-11部门管理流程图
部门管理页面效果如下图所示。
图5-13部门管理界面
对任何系统而言,测试都是必不可少的环节,测试可以发现系统存在的很多问题,所有的软件上线之前,都应该进行充足的测试之后才能保证上线后不会Bug频发,或者是功能不满足需求等问题的发生。下面分别从单元测试,功能测试和用例测试来对系统进行测试以保证系统的稳定性和可靠性。
下表是员工管理功能的测试用例,检测了员工管理中对员工信息的增加,删除,修改,查询操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-1 员工管理的测试用例
功能描述 | 用于员工管理 |
测试目的 | 检测员工管理时的各种操作的运行情况 |
测试数据以及操作 | 预期结果 | 实际结果 |
点击添加员工,必填项合法输入,点击保存 | 提示添加成功 | 与预期结果一致 |
点击添加员工,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改员工,必填项修改为空,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击修改员工,必填项输入不合法,点击保存 | 提示必填项不能为空 | 与预期结果一致 |
点击删除员工,选择员工删除 | 提示删除成功 | 与预期结果一致 |
点击搜索员工,输入存在的员工名 | 查找出员工 | 与预期结果一致 |
点击搜索员工,输入不存在的员工名 | 不显示员工 | 与预期结果一致 |
下表是考勤管理功能的测试用例,检测了考勤管理中分类列表的操作是否成功运行。观察系统的响应情况,得出该功能也达到了设计目标,系统运行正确。
前置条件;用户登录系统。
表6-3 考勤管理的测试用例
功能描述 | 用于考勤管理 |
测试目的 | 检测考勤管理时各种操作的情况 |
测试数据以及操作 | 预期结果 | 实际结果 |
未选择分类,点击提交 | 提示请选择分类 | 与预期结果一致 |
未选择列表,点击提交 | 提示请选择列表 | 与预期结果一致 |
使用阿里云PTS(Performance Testing Service)性能测试服务对线上系统进行压力测试。线上服务器环境为:1核心CPU,1G内存,1Mbps公网带宽,Centos7.0操作系统。
压测过程中使用了2台并发机器,每台机器20个用户并发,对系统主页,登录,数据查询和数据维护等模块进行并发访问,测试结果是有40个用户并发时,数据管理相关页面的响应时间甚至达到了7s,通过查看服务器出网流量发现已经达到1381kb/s,可以看出服务器的带宽已经达到峰值,如果系统使用5Mbps的带宽,系统的响应时间和TPS将会大大增加。在整个测试的过程中,CPU的使用率占用仅8%,也提现出带宽瓶颈对系统的影响非常严重。
">