软件工程实践第二次作业——个人实战

本文介绍了使用Java进行世界游泳锦标赛跳水数据收集的软件工程实践作业,包括项目结构、数据获取、JSON解析、接口设计、性能优化、单元测试以及异常处理的学习过程和心得。
这个作业属于哪个课程软件工程实践-2023 学年-W 班
这个作业要求在哪里软件工程实践寒假作业
这个作业的目标完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献

一、gitcode项目

项目地址:project-java

二、PSP表格

FPSPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3060
• Estimate• 估计这个任务需要多少时间3060
Development开发13001510
• Analysis• 需求分析 (包括学习新技术)200240
• Design Spec• 生成设计文档3040
• Design Review• 设计复审3020
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)1020
• Design• 具体设计3050
• Coding• 具体编码600720
• Code Review• 代码复审200240
• Test• 测试(自我测试,修改代码,提交修改)200180
Reporting报告90100
• Test Repor• 测试报告5060
• Size Measurement• 计算工作量1010
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划3030
合计14201670

三、解题思路

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文件,熟悉了项目开发流程,认识了新名词单元测试,受益匪浅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值