软件工程第二次作业--文件读取

222100311李公校 2024-03-01 17:20:47
这个作业属于哪个课程202302软件工程
这个作业要求在哪里软件工程第二次作业--文件读取
这个作业的目标<完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序>
其他参考文献《构建之法》、《码出高效_阿里巴巴Java开发手册》《单元测试和回归测试》《源代码管理》

目录

  • Gitcode项目地址
  • PSP表格
  • 解题思路描述
  • json数据获取
  • 将json转化为csv文件
  • 接口设计和实现过程
  • 关键代码展示
  • 性能改进
  • 单元测试
  • 异常处理
  • 心得体会

Gitcode项目地址

项目地址:https://gitcode.net/bai1731906180/project-java

PSP表格

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

解题思路描述

json数据获取

首先我们要获取api,如下图所示:

在这里插入图片描述


在这里插入图片描述

通过api:

https://api.worldaquatics.com/fina/competitions/3337/athletes?gender=&countryId=

就可以得到选手对应的json,如下图:

在这里插入图片描述


其他关于比赛项目的json也可以通过这种方式得到,例如
women 1m springboard 项目对应的api为:https://api.worldaquatics.com/fina/events/108c795d-5e4f-4dc6-acea-0bc70bfd1928
截图如下:

在这里插入图片描述

将json转化为csv文件

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

在这里插入图片描述


使用函数dealwithApi将这些比赛项目的api进行处理,将读取到的的json转化为我们所需要的csv文件。
使用到的其他函数具体实现如下:

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

我们可以看出,这样的csv文件看起来就比json文件更加一目了然,也更加便于我们的操作。

接口设计和实现过程

我们的目标是打印选手和比赛的相关信息,因此我设计了不同的helper类,用他们的静态方法读取并打印出我们所需要的信息。

  1. 第一步,我们创建了一个PlayerHelper类用来处理输入为players的情况,其中有静态方法 printPlayers用来打印所有选手
  2. 第二步,我们创建了一个ResultHelper类用来处理输入为result而没有detail的情况,其中有getResultData和printFinalsResult这两个静态方法分别用于读取项目的信息和打印项目的信息。
  3. 第三步,我们创建了一个DetailHelper类用来处理输入为result并且有detail的情况,其中有getDetailGameResult和printDetailGameResult这两个静态方法分别用于读取项目的detail信息和打印项目的detail信息。
  4. 最后一步,我们在主函数DWASearch读取输入的信息并对其判断,调用对应的静态函数进行输出,如果输入不符合规范则输出N/A和Error。如果参数个数错误,则会输出参数个数错误的提示。

关键代码展示

打印所有选手的printPlayers:

请添加图片描述

读取项目信息的getResultData:

请添加图片描述

打印项目的信息的printFinalsResult:

请添加图片描述

读取项目detail信息的getDetailGameResult:

请添加图片描述

打印项目detail信息的printDetailGameResult:

请添加图片描述

请添加图片描述

对输入信息的读取:

请添加图片描述

请添加图片描述

性能改进

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

修改前:

请添加图片描述

修改后:

请添加图片描述

单元测试

测试代码:

请添加图片描述

请添加图片描述

测试结果:

请添加图片描述

自动测试:

我们首先如图要下载插件

请添加图片描述

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

请添加图片描述

异常处理

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

请添加图片描述

对读写进行异常处理:

请添加图片描述

心得体会

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

...全文
71 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧