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

222000205邓桂斌 2023-03-16 17:15:57
这个作业属于哪个课程<软件工程-23年春季学期>
这个作业要求在哪里<软件工程实践第二次作业---文件读取>
这个作业的目标<完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序>
其他参考文献《构建之法》

目录

  • 一、Gitcode项目地址
  • 二、PSP表格
  • 三、解题思路描述
  • 3.1解析json数据
  • 3.2输出信息处理
  • 3.3文件读写
  • 四、接口设计和实现过程
  • 五、关键代码展示
  • 六、性能改进
  • 七、单元测试
  • 八、异常处理
  • 九、心得体会

一、Gitcode项目地址

仓库地址

二、PSP表格

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

三、解题思路描述

3.1解析json数据

使用阿里巴巴开发的JSON库FastJson进行解析

fastjson

3.2输出信息处理

以输出选手信息为例:调用JSONObject.parseObject方法将解析的json数据字符串转换成json对象,调用jsonObject.getJSONArray方法读取players数组。遍历数组,用临时变量将元素转为json对象,StringBuilder接收查找对象中的full_name、gender和nationality中的name,最后结果调用StringBuilder.toString方法返回String类型变量

3.3文件读写

  • 读文件:使用FileReader接受文件路径,BufferedReader接收FileReader,调用read方法进行按行读取到StringBuilder保存,最后StringBuilder调用toString方法返回
  • 写文件:使用fileWriter接收文件路径,BufferedWriter接收fileWriter,调用BufferedWriter的write方法写文件

四、接口设计和实现过程

AOsearch类:

  • public static void main(String[] args):获得指令判断是否合法,调用Lib类的方法读写文件

Lib类主要方法:

  • String readFile(String jsonPath):解析json文件,返回json数据字符串
  • String writeFile(String json, String output):将处理好的数据写入文件
  • String getPlayers(JSONObject jsonObject):从json字符串中获取所需的运动员信息,返回其String类型
  • String getMatch(JSONObject jsonObject):从json字符串中获取所需的比赛信息,返回其String类型

五、关键代码展示

1.参数:data文件夹下对应文件路径
2.返回:json文件解析后的json数据字符串

关键代码1

1.参数:json字符串、output文件
2.返回:void

关键代码2

1.参数:JSONObject对象
2.返回:字符串形式的运动员信息

关键代码3

1.参数:JSONObject对象
2.返回:字符串形式的比赛信息

在这里插入图片描述

六、性能改进

  • 因为文件中可能会有大量的重复指令,如果每一次都对指令相应文件进行读操作,将会耗费大量时间
  • 所以引入缓存机制,将所有第一次读过的指令以键值对的形式存入HashMap中,如果遇到重复指令可以直接从HashMap中得到相应json数据的String形式,即可以直接输出,避免了反复打开文件进行读操作的时间
  • 优化前:

    在这里插入图片描述

  • 优化后:

    在这里插入图片描述

七、单元测试

  • 对AOsearch进行单元测试

    单元测试

  • 覆盖率:

    覆盖率

八、异常处理

异常主要存在于指令和文件方面:
1.指令输入不合法,如:不输入指令、指令数目超过2
2.文件方面的异常:文件不正确或不存在
需要尽可能的将各种异常的处理方法写入代码,防止代码运行过程中崩溃

九、心得体会

这次作业在刚布置的时候刚好遇到要做手术,所以匆匆看了几眼也没有深入思考,只感觉很复杂。但在返校之后真正开始编写代码时,发现只要将问题划分成一个个小问题,然后就可以逐个击破。在代码性能优化方面没有什么思路,还需要继续努力。

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

581

社区成员

发帖
与我相关
我的任务
社区描述
软件工程-2022-23学年(第二学期)
软件工程 高校
社区管理员
  • LinQF39
  • chennuo.
  • 助教-钟宇煌
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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