技术博客 2: 系统设计和开发
在上一篇博客中,我们介绍了项目的需求分析和项目规划阶段。在这篇博客中,我们将讨论项目的系统设计过程。我们详细描述了系统的架构和组件,并介绍了使用的技术栈。
系统架构
我们为项目设计了一个三层架构,分为表现层、业务逻辑层和数据访问层。表现层负责与用户交互,展示系统的界面和功能。业务逻辑层负责处理用户的请求,执行系统的核心逻辑和算法。数据访问层负责与数据库交互,存储和读取数据。三层架构可以实现系统的高内聚、低耦合、易扩展和易维护。
下图是我们的系统架构图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvBPcqQk-1688289193374)(C:\Users\Lenovo\AppData\Roaming\Typora\typora-user-images\image-20230702170609852.png)]
技术栈
我们为项目选择了以下的技术栈:
- 前端:使用HTML、CSS、JavaScript等网页技术,以及Vue框架和ArcoDesign组件库,实现系统的界面设计和交互效果。
- 后端:使用Java语言,以及Spring Boot框架,实现系统的业务逻辑和数据访问层。
- 数据库:使用MySQL数据库,以及MyBatis框架,实现系统的数据存储和管理。
- 开发工具:使用IntelliJ IDEA,以及Git、Maven等工具,实现系统的开发、测试、部署等工作。
数据库设计
我们对项目的数据库进行了设计。我们定义了实体关系模型,并创建了相应的数据库表。我们还介绍了数据的结构和关系。
实体关系模型 我们根据需求分析阶段得到的功能需求,确定了以下的实体:
- 系统管理员(Admin):包含id、用户名、密码、角色等属性。
- 主办方(Organizer):包含id、用户名、密码、姓名、联系方式等属性。
- 参赛者(Participant):包含id、用户名、密码、姓名、学号、联系方式等属性。
- 赞助商(Sponsor):包含id、用户名、密码、名称、联系方式等属性。
- 赛事活动(Event):包含id、名称、时间、地点、规则、奖品等属性。
- 广告(Ad):包含id、名称、内容、图片等属性。
- 奖品(Prize):包含id、名称、描述、图片等属性。
我们根据实体之间的关系,确定了以下的关联:
- 系统管理员与赛事活动是一对多的关系,一个系统管理员可以审核多个赛事活动,一个赛事活动只能被一个系统管理员审核。
- 系统管理员与广告是一对多的关系,一个系统管理员可以审核多个广告,一个广告只能被一个系统管理员审核。
- 系统管理员与奖品是一对多的关系,一个系统管理员可以审核多个奖品,一个奖品只能被一个系统管理员审核。
- 主办方与赛事活动是一对多的关系,一个主办方可以发布多个赛事活动,一个赛事活动只能由一个主办方发布。
- 参赛者与赛事活动是多对多的关系,一个参赛者可以报名参加多个赛事活动,一个赛事活动可以有多个参赛者报名参加。
- 赞助商与广告是一对多的关系,一个赞助商可以上传多个广告,一个广告只能由一个赞助商上传。
- 赞助商与奖品是一对多的关系,一个赞助商可以提供多个奖品,一个奖品只能由一个赞助商提供。
- 赛事活动与广告是多对多的关系,一个赛事活动可以有多个广告投放,一个广告可以投放到多个赛事活动上。
- 赛事活动与奖品是多对多的关系,一个赛事活动可以有多个奖品设置,一个奖品可以设置到多个赛事活动上。
数据库表 我们根据实体关系模型,创建了以下的数据库表:
表1 用户表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 用户编号 | ||
2 | Username | varchar | 8 | 否 | 是 | 用户名称 | |
3 | Account | varchar | 11 | 否 | 是 | 用户账号 | |
4 | Password | varchar | 8 | 否 | 是 | 12345678 | 用户密码 |
5 | Permission | varchar | 4 | 否 | 是 | 用户权限 | |
6 | Role | varchar | 5 | 否 | 是 | 用户角色 | |
7 | Phonenumber | varchar | 11 | 否 | 是 | 联系电话 | |
8 | Status | varchar | 1 | 否 | 是 | 2 | 账号状态 |
9 | Create_time | date | 否 | 是 | 创建时间 | ||
10 | Token | varchar | 150 | 否 | 是 | Token值 |
表2 赛事资讯表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 资讯编号 | ||
2 | Title | varchar | 20 | 否 | 是 | 资讯标题 | |
3 | Content | varchar | 150 | 否 | 是 | 资讯内容 | |
4 | Time | timestamp | 否 | 是 | 发布时间 | ||
5 | Host_name | varchar | 15 | 否 | 是 | 主办方名称 | |
6 | Type | varchar | 6 | 否 | 是 | 赛事类型 |
表3 主办方表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 主办方编号 | ||
2 | News_ID | varchar | 12 | 否 | 是 | 资讯编号 | |
3 | Account | varchar | 11 | 否 | 是 | 主办方账号 | |
4 | Password | varchar | 8 | 否 | 是 | 主办方密码 | |
5 | Phonenumber | varchar | 11 | 否 | 是 | 联系电话 | |
6 | Host _name | varchar | 15 | 否 | 是 | 主办方名称 |
表4 赛事活动表
序号 列名 数据类型 长度 主键 是否允许为空 默认值 说明
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 活动编号 | ||
2 | Status | varchar | 1 | 否 | 是 | 活动状态 | |
3 | Event_name | varchar | 15 | 否 | 是 | 活动名称 | |
4 | Type | varchar | 5 | 否 | 是 | 赛事类型 | |
5 | Content | varchar | 50 | 否 | 是 | 赛事内容 | |
6 | Host _name | varchar | 15 | 否 | 是 | 主办方名称 | |
7 | Start_time | timestamp | 否 | 是 | 开始时间 | ||
8 | End_time | timestamp | 否 | 是 | 结束时间 | ||
9 | Site | varchar | 5 | 否 | 是 | 场地名称 | |
10 | Site_location | varchar | 10 | 是 | 场地位置 | ||
11 | Equipment | varchar | 20 | 否 | 是 | 设备申请 | |
12 | Number | varchar | 20 | 否 | 是 | 设备申请数量 | |
13 | Application_time | timestamp | 否 | 是 | 申请时间 | ||
14 | varchar | 18 | 否 | 是 | 申请人qq邮箱 | ||
15 | Check_status | varchar | 1 | 否 | 是 | 0 | 审核状态 |
表5 消息表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 消息编号 | ||
2 | Content | varchar | 50 | 否 | 是 | 消息内容 | |
3 | Create_time | timestamp | 否 | 是 | 创建时间 | ||
4 | Title | varchar | 20 | 否 | 是 | 消息标题 | |
5 | Type | varchar | 4 | 否 | 是 | 消息类型 | |
6 | Status | varchar | 1 | 否 | 是 | 0 | 消息状态 |
7 | Name | varchar | 15 | 否 | 是 | 创建者 |
表6 参赛选手信息表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 选手编号 | ||
2 | Name | varchar | 8 | 否 | 是 | 选手姓名 | |
3 | Sex | varchar | 2 | 否 | 是 | 选手性别 | |
4 | Age | varchar | 3 | 否 | 是 | 选手年龄 | |
5 | College | varchar | 10 | 否 | 是 | 所属学院 | |
6 | Major | varchar | 10 | 否 | 是 | 专业名称 | |
7 | Phonenumber | varchar | 11 | 否 | 是 | 联系电话 | |
8 | Project | varchar | 10 | 否 | 是 | 参赛项目 |
表7 赞助商表
序号 列名 数据类型 长度 主键 是否允许为空 默认值 说明
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 赞助商编号 | ||
2 | Sponsor_name | varchar | 15 | 否 | 是 | 赞助商名称 | |
3 | Phonenumber | varchar | 11 | 否 | 是 | 联系电话 | |
4 | Account | varchar | 11 | 否 | 是 | 账号 | |
5 | Password | varchar | 8 | 否 | 是 | 密码 |
表8 广告表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 广告编号 | ||
2 | sponsorId | varchar | 否 | 是 | 赞助商id | ||
3 | Sponsor_name | varchar | 15 | 否 | 是 | 赞助商名称 | |
4 | Content | varchar | 150 | 否 | 是 | 广告内容 | |
5 | Title | varchar | 11 | 否 | 是 | 广告标题 | |
6 | Picture | varchar | 20 | 否 | 是 | 图片地址 |
表9 奖品表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 奖品编号 | ||
2 | Name | varchar | 15 | 否 | 是 | 奖品名称 | |
3 | Number | varchar | 15 | 否 | 是 | 奖品数量 | |
4 | Price | varchar | 10 | 否 | 是 | 奖品价格 | |
5 | Picture | varchar | 20 | 否 | 是 | 图片地址 | |
6 | Sponsor_name | varchar | 15 | 否 | 是 | 赞助商名称 | |
7 | sponsorId | varchar | 否 | 是 | 赞助商id |
表10 场地名称表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 场地编号 | ||
2 | Name | varchar | 15 | 否 | 是 | 场地名称 | |
3 | Location | varchar | 10 | 否 | 是 | 场地位置 |
表11 场地使用情况表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 场地使用编号 | ||
2 | Name_id | int | 否 | 是 | 场地ID | ||
3 | Event_id | int | 否 | 是 | 活动ID | ||
4 | Status | varchar | 4 | 否 | 是 | 使用状态 | |
5 | day | date | 否 | 是 | 开始日期 | ||
6 | Start_time | timestamp | 否 | 是 | 开始时间 | ||
7 | End_time | timestamp | 否 | 是 | 结束时间 |
表12 场地预约时间表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 预约时间编号 | ||
2 | Site_id | int | 否 | 是 | 场地ID | ||
3 | Event_id | int | 否 | 是 | 活动ID | ||
5 | day | date | 否 | 是 | 开始日期 | ||
6 | Start_time | timestamp | 否 | 是 | 开始时间 | ||
7 | End_time | timestamp | 否 | 是 | 结束时间 |
表13 设备名称表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 设备编号 | ||
2 | Name | varchar | 5 | 否 | 是 | 设备名称 | |
3 | Number | varchar | 3 | 否 | 是 | 存储数量 | |
4 | Location | varchar | 10 | 否 | 是 | 存储位置 |
表14 设备使用情况表
序号 | 列名 | 数据类型 | 长度 | 主键 | 是否允许为空 | 默认值 | 说明 |
---|---|---|---|---|---|---|---|
1 | ID | int | 是 | 是 | 设备使用编号 | ||
2 | Name_id | int | 否 | 是 | 设备ID | ||
3 | Event_id | int | 否 | 是 | 活动ID | ||
4 | Number | varchar | 3 | 否 | 是 | 数量 | |
5 | Status | varchar | 1 | 否 | 是 | 使用状态 | |
6 | day | date | 否 | 是 | 开始日期 | ||
7 | Start_time | timestamp | 否 | 是 | 开始时间 | ||
8 | End_time | timestamp | 否 | 是 | 结束时间 |
数据结构和关系
我们使用MySQL数据库来存储和管理数据。我们使用MyBatis框架来实现数据访问层的功能。我们定义了实体类和映射文件来表示数据的结构和关系。我们使用注解和XML配置文件来配置数据库连接和SQL语句。我们使用DAO接口和Service类来封装数据访问层的方法和逻辑。
开发过程
我们采用敏捷开发方法,在多个迭代周期内进行开发。我们使用版本控制工具来管理代码,并定期进行代码审核和测试。
敏捷开发方法
我们使用Scrum框架来实现敏捷开发方法。我们将项目分为多个迭代周期,每个周期为两周。在每个周期开始时,我们进行需求分析和任务划分,确定本周期的目标和范围。在每个周期结束时,我们进行产品展示和回顾,评估本周期的成果和问题。在每个工作日,我们进行日常站立会议,汇报工作进度和遇到的困难,协调资源和任务。
版本控制工具
我们使用Git作为版本控制工具,来管理代码的版本和变更。我们使用GitHub作为代码托管平台,来存储代码的远程仓库。我们使用GitFlow作为分支管理策略,来规范代码的提交和合并。我们使用Pull Request作为代码审核机制,来保证代码的质量和一致性。
单元测试
我们使用JUnit框架来进行单元测试,编写测试用例来覆盖系统的主要功能和边界情况。我们使用Maven工具来自动化测试过程,并生成测试报告。我们使用SonarQube工具来进行静态代码分析,检测代码的潜在缺陷和漏洞,并提高代码的可维护性和可读性。
结论
通过这篇博客,我们分享了项目的系统设计和开发过程。这包括系统架构、数据库设计、敏捷开发方法、版本控制工具、代码审核和测试等方面。这些步骤为项目的顺利实施奠定了基础。在下一篇博客中,我们将介绍项目的部署阶段,敬请期待。
测试
我们使用JUnit框架来进行单元测试,编写测试用例来覆盖系统的主要功能和边界情况。我们使用Maven工具来自动化测试过程,并生成测试报告。我们使用SonarQube工具来进行静态代码分析,检测代码的潜在缺陷和漏洞,并提高代码的可维护性和可读性。
结论
通过这篇博客,我们分享了项目的系统设计和开发过程。这包括系统架构、数据库设计、敏捷开发方法、版本控制工具、代码审核和测试等方面。这些步骤为项目的顺利实施奠定了基础。在下一篇博客中,我们将介绍项目的部署阶段,敬请期待。