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

本文详细描述了如何在软件工程课程中完成一个涉及JSON文件读取、数据解析、项目结构管理、接口设计、性能优化、单元测试和异常处理的作业。作者通过Git和Gson库实现数据处理,并分享了GitCode项目管理和PSP表格在任务估算中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个作业属于哪个课程 2302软件工程
这个作业的要求在哪里 软件工程第二次作业–文件读取
这个作业的目标 完成对世界游泳锦标赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献 《构建之法》《源代码管理》 《阿里巴巴代码规范》

1. gitcode项目地址

仓库地址

2. PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 35
* Estimate 估计这个任务需要多少时间 20 25
Development 开发 500 540
* Analysis 需求分析 (包括学习新技术) 120 150
* Design Spec 生成设计文档 60 50
* Design Review 设计复审 30 30
* Coding Standard 代码规范 (为目前的开发制定合适的规范) 50 45
* Design 具体设计 90 100
* Coding 具体编码 300 320
* Code Review 代码复审 60 50
* Test 测试(自我测试,修改代码,提交修改) 100 110
* Reporting 报告 150 150
* Test Report 测试报告 60 50
* Size Measurement 计算工作量 60 50
* Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 60
合计 1690 1760

3. 解题思路描述

3.1 json文件的获取与解析

本次作业中我直接使用了助教提供的json文件,没有手动进行网络爬取。这里我将项目所需的所有json数据文件放到项目下,并进行了重命名以便后续的读取和解析操作。
数据文件

  • 对于功能一来说,我们需要获取所有运动员的信息,可以定位到athletes.json这个文件下。需要读取这个文件并解析这个文件,文件的结构如下图所示:

结构图
从json文件可以观察到,最外层是一个json数组,数组中的每个对象是每个国家的信息,其中键为CountryName对应的值是运动员的国家名称,再下一层可以看到键是Participations对应的值就是这个国家所有的参赛运动员组成的数组。对象中的PreferredFirstName键与PreferredFirstName键的值共同组成我们需要的Full Name信息。键是Gender的值对应运动员的性别,0为男,1为女,需要简单处理处理一下再输出。理清楚了文件结构和我们需要的信息后,就可以开始编码解析json数据了。

  • 对于功能二来说,我们需要解析是的指令对应的json文件,如result women 1m springboard 指令,则会去加载解析项目目录src下的women_1m_springboard.json文件,该文件的结构如下:

数据文件
文件结构1
可以观察到所有比赛 (包括初赛、半决赛、决赛) 的结果位于键为Heats的数组中,数组中是所有比赛的数据,其中键Name的值为Final的是总决赛的数据。定位到总决赛数据的对象后,可以观察到有键为Results的数组,这个数组就是总决赛的比赛结果数组。其中Rank对应的是选手的排名,FullName对应的是选手的全名,Dives对应的是得分情况的数组,数组中对象的DivePoint是单次得分情况。这些是我们需要获取并输出到文件中的数据。

在这两个功能的实现中,我使用谷歌的Gson库解析json文件,将json文件解析成json对象,然后将json对象转换成java的Bean对象,最后将java对象封装成List返回给调用者。

3.2 读取类路径下的文件

读取类路径下的文件
使用ClassLoader类加载器的getResourceAsStream来加载类路径下的文件,并把所有的命令以字符串集合的形式返回。

3.3 数据的封装

我在entity包下创建了Player和Result这两个实体类,分别用来封装运动员,决赛结果的信息。两个类都重写了对应的toString方法,可以输出题目要求格式的运动员和决赛结果的信息。

  • 运动员类
//运动员
public class Player {
   
    //选手全名
    private String fullName;
    //选手性别
    private String gender;
    //选手国籍
    private String country;

    public Player() {
   
    }
  ....setter 和 getter省略
    /**
     * 以要求的格式重写toString方法
     * @return 返回要求格式的字符串
     */
    @Override
    public String toString() {
   
        return "Full Name:" + fullName + '\n' 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值