| 这个作业属于哪个课程 | 软件工程实践-2023 学年-W 班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践寒假作业 |
| 这个作业的目标 | 完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序 |
| 其他参考文献 | 无 |
文章目录
一、gitcode项目
项目地址:project-java
二、PSP表格
| FPS | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 60 |
| • Estimate | • 估计这个任务需要多少时间 | 30 | 60 |
| Development | 开发 | 1300 | 1510 |
| • Analysis | • 需求分析 (包括学习新技术) | 200 | 240 |
| • Design Spec | • 生成设计文档 | 30 | 40 |
| • Design Review | • 设计复审 | 30 | 20 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
| • Design | • 具体设计 | 30 | 50 |
| • Coding | • 具体编码 | 600 | 720 |
| • Code Review | • 代码复审 | 200 | 240 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 200 | 180 |
| Reporting | 报告 | 90 | 100 |
| • Test Repor | • 测试报告 | 50 | 60 |
| • Size Measurement | • 计算工作量 | 10 | 10 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
| 合计 | 1420 | 1670 |
三、解题思路
3.1编程语言的选择
了解了Java与C++解析JSON数据的不同,本着便捷快速的原则,最终还是选择了Java作为这次作业的编程语言。
3.2JSON数据的获取
在世界游泳锦标赛官网的跳水项目选手与比赛信息对应的网页中通过F12找到了本次作业所需的JSON文件并拷贝下来。
3.3学习新技术JSON解析
在Alibaba Fastjson查询大量资料,学习如何进行JSON文件的解析。
3.4进行对JSON文件的解析处理
根据需求分析知,此程序只是简单的静态JSON文件的检索与输出,所以直接进行JSON文件的解析即可,最后再转成命令行输入输出。
四、接口设计与实现

AthleteMessage:输出运动员信息转成对象到指定路径的文件中(O处理)。
CommandLineHandler:用来处理命令行输入的参数(I处理)。
DWASearch:是主程序入口。
GameResult:把比赛的决赛信息转成对象输出到指定路径的文件中(O处理)。
InputController:将文件输入解析成字符串形式(I处理)。
Athlete:运动员实体类。
Result:比赛结果实体类。
ResultDetail:比赛详细结果实体类。
五、关键代码
AthleteMessage中JSONArray的处理
/**
* 输出运动员信息到指定路径的文件中。
* @param outputPath
*/
public static void writeToFile(String outputPath)
/**
* 获取所有运动员信息,返回运动员列表。
* @param JSONArray
* @return List<Athlete>
*/
public static List<Athlete> listAthletes(JSONArray athletes)
CommandLineHandler中命令行参数的处理方法。
public static void handle(String[] args)
GameResult中JSONArray的处理
/**
* 把一项比赛的决赛信息输出到指定路径的文件中。
* @param String jFileName
* @param String outputPath
*/
public static void writeToFile(String jFileName,String outputPath)
/**
* 把一项比赛的详细信息输出到指定路径的文件中。
* @param String jFileName
* @param String outputPath
*/
public static void writeToFileDetail(String jFileName,String outputPath)
/**
* 将一项比赛信息解析成比赛结果类的列表并返回(单人比赛)。
* @param JSONArray results
* @return List<Result>
*/
public static List<Result> listResult(JSONArray results)
/**
* 将一项比赛的详细信息解析成比赛结果类的列表并返回(单人比赛)。
* @param JSONArray results
* @return List<ResultDetail>
*/
public static List<ResultDetail> listResultDetail(JSONArray results)
/**
* 将一项比赛的详细信息解析成比赛结果类的列表并返回(双人比赛)。
* @param JSONArray results
* @return List<ResultDetail>
*/
public static List<ResultDetail> listResultDetailSynchronised(JSONArray results)
六、性能改进
在刚开始写运动员数据的输出的时候,我使用了StringBuilder来构造字符串,之后再通过构造的字符串生成Athlete的List队列,相比于现在的直接构造Athlete的List队列会比较慢(这里进行了很多很多次修改,把AthleteMessage类里的对应的方法也修改了,才能实现Athlete的List队列的直接构造)。
七、单元测试
对CommandLineHandler类的单元测试,各项输入输出均无异常。

八、异常处理
input的异常处理在CommandLineHandler.handle中。
九、心得体会
通过这次实践,学习并掌握了解析简单的JSON文件,熟悉了项目开发流程,认识了新名词单元测试,受益匪浅。
本文介绍了使用Java进行世界游泳锦标赛跳水数据收集的软件工程实践作业,包括项目结构、数据获取、JSON解析、接口设计、性能优化、单元测试以及异常处理的学习过程和心得。
817

被折叠的 条评论
为什么被折叠?



