这个作业属于哪个课程 | 软件工程实践2022年春-F班 |
---|---|
这个作业要求在哪里 | 软件工程实践——结对作业二 |
结对学号 | 221900121 && 221900128 |
这个作业的目标 | 完成上次结对作业模型的具体设计 |
其他参考文献 | 优快云 |
文章目录
1、Git仓库与代码规范链接
2、项目部署链接
3、PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 1360 | 2150 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 20 | 10 |
• Design Spec | • 生成设计文档 | 60 | 100 |
• Design Review | • 设计复审 | 20 | 30 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 20 | 30 |
• Design | • 具体设计 | 30 | 50 |
• Coding | • 具体编码 | 900 | 1060 |
• Code Review | • 代码复审 | 60 | 100 |
• Test | • 测试(自我测试,修改代码,提交修改) | 130 | 550 |
Reporting | 报告 | ||
• Test Report | • 测试报告 | 30 | 60 |
• Size Measurement | • 计算工作量 | 10 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 60 | 100 |
合计 | 1360 | 2150 |
4、成品展示
- 奖牌地图:当鼠标悬停至某个参赛国时,显示其奖牌信息,同时可利用鼠标控制地图的缩放和移动。
- 奖牌总榜:显示当前北京时间和奖牌榜列表,将中国对应一行高亮显示。
- 项目赛程:显示15个项目名称格子,点击任意一个项目,将会跳转至对应的项目赛程列表。
- 赛程列表:页面显示项目的赛程列表,每一行包含:时间、大项、比赛、场馆、比赛状态和数据。而数据一列,对应不同比赛的成绩公报,点击后跳转至对应的详细赛程页面。
- 下拉列表进行分别对时间、项目、馆场进行查询。
- 个人赛 以列表的形式展示数据,每一行包含:排名、国家/地区、姓名/代表队、总成绩。
- 参赛选手不止一位时,将其并列显示。
- 混合团体赛 同样以列表的形式展示数据,每一行包含:国家/姓名、得分、得分、国家/姓名。
- 国家赛 分成三个水平排列的块,左边为一国的出场名单,中间包含两小块:两国得分与两队详细比分,右边为另一国的出场名单
- 了解更多:看起来很拉,主要介绍申奥的小故事以及冬奥会的吉祥物冰墩墩的来历。
5、结对讨论过程
项目分工
- 对于素材来源,由于在原型的设计过程中是由 WJD寻找的,所以由WJD整理素材之后发给RHL。
- 一开始地图的原型采用的是amcharts的组件,但是由于领土完整性原因,我们放弃了,改用echarts的地图。
小插曲
6、设计实现过程
6.1 功能结构图
6.2 项目设计与实现
设计过程主要分为两个部分,鸿林同学负责前端,建东同学负责后端和一部分前端。
前端的页面设计,主要按照原型进行设计,HTML设计结构,CSS设计样式、JavaScript用来进行地图的显示和数据的获取,配合Thymeleaf模板引擎 与后端 Spring Boot 进行数据交互。
地图部分使用echarts的地图组件进行渲染,奖牌信息通过发get请求到后端获得,同时在echarts参数option的tooltips的formatter设置function,将后台传来的奖牌信息渲染至页面。
后端使用 Controller 进行视图渲染和跳转。分别是 MedalsController
、MapController
、MatchesController
、MoreController
、DetailsController
。
对于需要提供数据的 Controller 都配置一个 Service ,通过前端传来的参数 给 Controller 提供对应的方法,分别是 MedalsService
、MatchesService
、DetailService
。
针对每一个页面设计不同的实体类 pojo,用来接收json数据的信息。分别是 Medal
、Match
、ResultInfo
、PersonResult
、TeamResult
、NationResult
。
对于数据,通过冬奥官网的API接口进行获取,设计 JsonUtil
类为 Service 提供方法,其中包含获取各类数据的方法,解析Json后装配进实体类中,返回给 Service 。
6.3 关键代码
- 本次作业的核心主要是数据获取以及对JSON数据进行解析处理。
奖牌数据获取与解析
public static List<Medal> getMedalList(String url) {
RestTemplate template = new RestTemplate();
List<Medal> list = new ArrayList<>();
ResponseEntity<String> response = template.getForEntity(url, String.class);
JSONArray matchList;
try {
String body = response.getBody();
Assert.notNull(body, "响应数据为空!");
// 去掉除json数据外其他的字符
String replace = body.substring(body.indexOf("(") + 1, body.indexOf(")"));
// 读取json数据
matchList = JSON.parseObject(replace).getJSONObject("data").getJSONArray("medalsList");
// 转换成实体类list
list = matchList.toJavaList(Medal.class);
} catch (Excepti