软件架构主要用于指导系统开发设计,是构建软件系统的基础,软件架构实现了对系统的结构分层,将系统模块化开发,便于系统开发和管理,降低系统开发成本,便于后期维护。
下图是运动会管理系统的项目包结构,系统的后台代码主要放置在src文件夹中,各个文件夹的相关说明请看表5-1项目结构说明表。
图5-1项目包结构
包名(结构层次) | 说明 |
business.basic | 数据连接、访问,管理数据库连接类和访问基类 |
business.dao | 业务逻辑设计层,管理业务逻辑设计接口 |
business.impl | 业务逻辑实现层,管理业务逻辑设计的实现类 |
business.factory | 业务逻辑的工厂层,管理业务逻辑的组装工厂类 |
controller.service | 业务逻辑控制层,管理用于与页面进行交互的控制类 |
model | 实体层,管理表实体类和视图实体类 |
servlet.filter | 网站过滤器包,管理网站过滤器类 |
util | 工具类包,管理系统中的工具类 |
servlet.common | 公共类包,管理公共类 |
系统业务接口是对系统业务逻辑进行方法定义的接口,接口根据实际业务逻辑需要来进行方法的定义,实现类则是对接口的方法进行重写和具体实现[[1]]。
表5-2接口设计与说明
接口名称 | 接口说明 | 需要实现的方法 | 方法说明 |
AdminRoleDAO | 管理员用户角色业务接口 | getaAdminRoleList() | 分页获取用户角色列表 |
delAdminRole() | 删除用户角色 | ||
addAdminRole() | 添加用户角色 | ||
edlAdminRole() | 编辑用户角色 | ||
AdminUserDAO | 管理员用户业务接口 | add() | 添加管理员用户 |
udpate() | 编辑管理员用户 | ||
delete() | 删除管理员用户 | ||
adminlogin() | 管理员用户的登录 | ||
selbypage() | 分页获取管理员信息 | ||
selbyid() | 根据账号获取管理员用户 | ||
NewsDAO | 公告业务处理接口 | addnews() | 添加公告 |
getAllNewsNoContent() | 获取所有公告 | ||
deleteNewsById() | 根据主键删除公告 | ||
RoleSysModelDAO | 角色权限业务接口 | addRoleModel() | 添加角色权限 |
updataRoleModel() | 更新角色权限 | ||
SignUpDAO | 比赛报名业务接口 | insert() | 添加单个比赛报名 |
insertList() | 批量添加比赛报名 | ||
update() | 编辑比赛报名 | ||
delete() | 删除比赛报名 | ||
SportInfoDAO | 运动会信息配置业务接口 | insert() | 添加运动会 |
update() | 编辑运动会 | ||
delete() | 删除运动会 | ||
getSportList() | 分页获取运动会信息 | ||
getSportCount() | 根据查询条件获取运动会数量 | ||
UserDAO | 普通用户业务接口 | insert() | 添加用户 |
update() | 编辑用户 | ||
delete() | 删除用户 |
- 管理员用户角色业务接口类:基于管理员用户角色操作的接口类,包含用户角色增、删、查、改等,以及将用户角色和系统菜单添加到角色权限表的操作。
- 管理员用户业务接口类:基于管理员用户操作的接口类,包含了对管理员用户的添加、编辑、删除等,同时为管理员用户分配用户角色。
- 公告业务接口类:基于公告操作的业务接口类,包括对公告的添加、修改、发布等。
- 角色权限业务接口类:基于角色权限分配的业务接口,实现管理员为角色动态分配权限。
- 比赛报名业务接口类:基于实现比赛报名的业务接口,实现运动会比赛报名,以及后台管理员对比赛报名的管理等方法。
- 运动会基本信息配置业务接口类:基于运动会基本信息配置的业务接口。包含运动会时间的配置,添加、编辑、删除运动会等。
- 普通用户业务接口类:基于普通用户操作的业务接口。实现对普通用户的管理和信息查询。
系统业务接口实现类如下表所示,表中各接口实现的方法只举例部分。
表5-3业务接口实现类
接口实现类名称 | 接口实现类说明 | 实现的方法 | 方法说明 |
AdminRoleDAOImpl | 管理员用户角色业务接口实现类 | delAdminRole() | 删除用户角色 |
addAdminRole() | 添加用户角色 | ||
edlAdminRole() | 编辑用户角色 | ||
AdminUserDAOImpl | 管理员用户业务接口实现类 | add() | 添加管理员用户 |
udpate() | 编辑管理员用户 | ||
delete() | 删除管理员用户 | ||
adminlogin() | 管理员用户的登录 | ||
selbypage() | 分页获取管理员信息 | ||
selbyid() | 根据账号获取管理员用户 | ||
NewsDAOImpl | 公告业务接口实现类 | addnews() | 添加公告 |
getAllNewsNoContent() | 获取所有公告 | ||
deleteNewsById() | 根据主键删除公告 |
系统开发使用了SpringMVC框架,通过定义控制类请求接口,前台使用Ajax请求接口并传递参数,后台控制类接收并处理。
下面列举UserController(用户处理控制类)控制类
表5-4网页控制请求接口设计
类名 | 说明 | 需要传入的参数 | URL请求 |
getUserList | 按查询条件分页获取用户 | Operation,page,limit | user/getuser |
addUser | 添加用户信息 | usrid,username,pwd,claid,usertype | user/adduser |
delUser | 删除用户信息 | userid | user/deluser |
表5-5请求接口数据格式设计
方法及说明 | 参数 | 返回值 | 案例 |
Adminlogin (管理员用户登录) | userid 账号 pwd 密码 | 成功: 返回 {code:0,msg:登录成功} 失败:返回 {code:1,msg:登录失败} 失败原因:账号或密码不正确 | http://localhost:8080/GMS/admin/adminlogin |
addadminuser (添加管理员用户) | usesrid 账号 realname 真实姓名 pwd 密码 mobile 联系方式 roleid 角色编号 | 成功: 返回 {code:0,msg:添加成功} 失败:返回 {code:1,msg:添加失败}
| http://localhost:8080/GMS/admin/addadminuser |
logoutsystem (管理员用户退出系统) |
| 成功: 返回 {code:0,msg:退出成功} 失败:返回 {code:1,msg:退出失败} | http://localhost:8080/GMS/admin/logoutsystem |
deladminuser (删除管理员用户) | userid 账号 | 成功: 返回 {code:0,msg:删除成功} 失败:返回 {code:1,msg:删除失败} | http://localhost:8080/GMS/admin/deladminuser |
图5-2系统数据库结构设计图
- T_User 公众网站用户表
Userid为用户账号,并作为主键约束。
表5-6前端网站用户表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | userid | VARCHAR(50) | 是 | 是 | 账号 |
2 | username | VARCHAR(50) | 否 | 是 | 用户名 |
3 | pwd | VARCHAR(50) | 否 | 否 | 密码 |
4 | alreadynum | Int | 否 | 否 | 已报名项目数 |
5 | sex | VARCHAR(2) | 否 | 否 | 性别 |
6 | roleid | int | 否 | 否 | 角色id |
7 | userregion | int | 否 | 否 | 班级id/学院id |
- T_Role 角色表
roleid为主键约束
表5-7角色表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | roleid | int | 是 | 是 | 角色编号 |
2 | rolename | VARCHAR(100) | 否 | 是 | 角色名称 |
- T_Project 比赛项目表
Pid为主键约束
表5-8比赛项目表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | pid | int | 是 | 是 | 项目编号 |
2 | pname | VARCHAR(100) | 否 | 是 | 项目名称 |
3 | ptypeid | int | 否 | 是 | 项目类型编号 |
- T_SportInfo 运动会配置表
sportid为主键约束
表5-10运动会信息表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | pinfoid | int | 是 | 是 | 项目信息编号 |
2 | sprotid | int | 否 | 是 | 运动会编号 |
3 | pwd | VARCHAR(50) | 否 | 否 | 密码 |
4 | alreadynum | Int | 否 | 否 | 已报名项目数 |
5 | userregion | int | 否 | 否 | 班级id/学院id |
- T_ProjectInfo运动会项目表
pinfoid为主键约束
表5- 9比赛项目信息表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | pinfoid | int | 是 | 是 | 项目信息编号 |
2 | sprotid | int | 否 | 是 | 运动会编号 |
3 | pwd | VARCHAR(50) | 否 | 否 | 密码 |
4 | alreadynum | Int | 否 | 否 | 已报名项目数 |
5 | userregion | int | 否 | 否 | 班级id/学院id |
- T_SignUp 比赛报名表
sid为主键约束
表5-10比赛报名表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | sid | int | 是 | 是 | 比赛报名编号 |
2 | userid | VARCHAR(50) | 否 | 是 | 账号 |
3 | proinfoid | int | 否 | 是 | 项目信息编号 |
- T_AdminUser管理端用户表
userid为主键约束
表5-11管理端用户表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | userid | VARCHAR(50) | 是 | 是 | 账号 |
2 | realname | VARCHAR(50) | 否 | 是 | 用户名 |
3 | pwd | VARCHAR(50) | 否 | 否 | 密码 |
4 | roleid | Int | 否 | 是 | 角色编号 |
5 | userstatus | int | 否 | 否 | 用户状态 |
6 | mobile | Char | 否 | 是 | 联系电话 |
7 | Createtime | Datetime | 否 | 是 | 创建时间 |
8 | Lastlogindate | Datetime | 否 | 否 | 最后登录时间 |
- T_AdminRole 管理端角色表
roleid为主键约束
表5-12管理端角色表
序号 | 字段名 | 数据类型 | 主键 | 非空 | 描述 |
1 | id | int | 是 | 是 | 管理员角色编号 |
2 | name | NVARCHAR(30) | 否 | 是 | 角色名称 |
3 | description | NVARCHAR(255) | 否 | 是 | 角色描述 |
4 | Deepth | Int | 否 | 否 | 跟节点 |
5 | Parentid | Int | 否 | 否 | 父节点编号 |
- V_User 用户信息视图
查询用户信息
表5-13用户信息视图
序号 | 字段名 | 描述 |
1 | userid | 账号 |
2 | pwd | 密码 |
3 | username | 用户名 |
4 | roleid | 角色编号 |
5 | rolename | 角色名称 |
6 | claid | 班级编号 |
7 | claname | 班级名称 |
8 | gradename | 年级名称 |
9 | majid | 专业编号 |
10 | majname | 专业名称 |
11 | colid | 学院编号 |
12 | colname | 学院名称 |
- V_AdminUser 管理员用户视图
查询管理员用户信息
表5-14管理员用户视图
序号 | 字段名 | 描述 |
1 | userid | 账号 |
2 | mobile | 联系电话 |
3 | pwd | 密码 |
4 | userstatus | 用户状态 |
5 | realname | 真实姓名 |
6 | createtime | 创建时间 |
7 | loginstatus | 登录状态 |
8 | lastlogindate | 登录时间 |
9 | roleid | 角色编号 |
10 | rolename | 角色名称 |
11 | description | 角色描述 |
- V_SignUp 比赛报名视图
查询用户比赛报名信息
表5-15比赛报名视图
序号 | 字段名 | 描述 |
1 | sid | 比赛报名编号 |
2 | userid | 账号 |
3 | proinfoid | 项目信息编号 |
4 | username | 用户名 |
5 | roleid | 角色编号 |
6 | rolename | 角色名称 |
7 | claid | 班级编号 |
8 | claname | 班级名称 |
9 | gradename | 年级名称 |
10 | majid | 专业编号 |
11 | majname | 专业名称 |
12 | colid | 学院编号 |
13 | colname | 学院名称 |
14 | sportid | 运动会编号 |
15 | pid | 项目编号 |
16 | nownum | 当前报名人数 |
17 | maxnum | 项目人数限制 |
18 | pname | 项目名称 |
19 | ptypeid | 项目类型编号 |
20 | ptypename | 项目类型名称 |
21 | Sportname | 运动会名称 |
22 | sportstart | 运动会开始时间 |
23 | sportend | 运动会结束时间 |
24 | enrollstart | 比赛报名开始时间 |
25 | enrollend | 比赛报名结束时间 |
- up_addAdminRole 添加管理员角色存储过程
- 依赖表:角色权限表,菜单表
- 作用:添加管理员用户角色,若角色添加成功,则在角色权限表中添加用户角色和菜单编号作为权限管理
- 返回:返回1代表成功,0代表失败
- up_deleteCollege 删除学院的存储过程
- 依赖表:专业表、班级表
- 作用:删除学院,如果学院编号有外键引用,则删除外键对应的班级信息和专业信息
- 返回:返回1代表成功,0代表失败
[1] 陈学海. 基于语义网关的离散制造执行系统可重构体系与关键技术研究[D]. 重庆大学, 2014