122
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 202302软件工程 |
|---|---|
| 这个作业要求在哪里 | 软件工程第二次作业--文件读取 |
| 这个作业的目标 | <完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序> |
| 其他参考文献 | 《构建之法》、《码出高效_阿里巴巴Java开发手册》、《单元测试和回归测试》、《源代码管理》 |
项目地址:https://gitcode.net/bai1731906180/project-java
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 10 |
| • Estimate | • 估计这个任务需要多少时间 | 10 | 10 |
| Development | 开发 | 650 | 700 |
| • Analysis | • 需求分析 (包括学习新技术) | 120 | 130 |
| • Design Spec | • 生成设计文档 | 30 | 40 |
| • Design Review | • 设计复审 | 20 | 20 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 30 |
| • Design | • 具体设计 | 90 | 100 |
| • Coding | • 具体编码 | 180 | 250 |
| • Code Review | • 代码复审 | 60 | 75 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 120 | 150 |
| Reporting | 报告 | 90 | 100 |
| • Test Repor | • 测试报告 | 60 | 60 |
| • Size Measurement | • 计算工作量 | 20 | 30 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 50 | 60 |
| 合计 | 1540 | 1765 |
首先我们要获取api,如下图所示:


通过api:
https://api.worldaquatics.com/fina/competitions/3337/athletes?gender=&countryId=
就可以得到选手对应的json,如下图:


由于json文件包含的信息过多,我们可以保留我们需要的信息将其转为csv文件,便于我们使用代码读取这些数据,以比赛项目为例:

sendRequestToGetJson函数用于通过api获取json:

readJsonData函数用于读取出json文件中我们所需要的信息:

writeResultToCsv函数用于生成我们所需要的csv文件:

最终形如women 1m springboard这个项目的csv文件就如下图所示:

我们可以看出,这样的csv文件看起来就比json文件更加一目了然,也更加便于我们的操作。
我们的目标是打印选手和比赛的相关信息,因此我设计了不同的helper类,用他们的静态方法读取并打印出我们所需要的信息。
打印所有选手的printPlayers:

读取项目信息的getResultData:

打印项目的信息的printFinalsResult:

读取项目detail信息的getDetailGameResult:

打印项目detail信息的printDetailGameResult:


对输入信息的读取:


显然,在读写上我们还有很大的优化空间,例如我们可以在读取比赛信息时候可以利用BufferedReader的缓存机制提高我们的读取效率。用这样的高级流代替低级流,从而改进我们代码的性能。
修改前:

修改后:

测试代码:


测试结果:

自动测试:
我们首先如图要下载插件

然后选中要测试的类,右键点击转到测试后再生成我们需要的新测试

对参数错误进行异常处理:

对读写进行异常处理:

在一开始看到任务要求时我一度觉得无从下手,不知道该怎么办,毕竟之前从来没有做过类似的项目。在咨询身边有经验的同学以及上网学习后才慢慢走上正轨。项目真正入手后就会发现没有自己想象中那么难,主要是对数据的提取处理和输出。在本次项目中,我初步地学习了如何爬取网页信息以及对这些信息进行处理。这锻炼了我的学习能力,增强了我的编码水平,是我学习过程中一次宝贵的经验。