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

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

1.Gitcode项目地址

Gitcode项目地址

2.PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 60
• Estimate • 估计这个任务需要多少时间 60 60
Development 开发 1610 2025
• Analysis • 需求分析 (包括学习新技术) 180 360
• Design Spec • 生成设计文档 20 20
• Design Review • 设计复审 10 10
• Coding Standard • 代码规范 (为目前的开发制定合适的规范) 20 15
• Design • 具体设计 30 50
• Coding • 具体编码 1200 1300
• Code Review • 代码复审 30 30
• Test • 测试(自我测试,修改代码,提交修改) 120 240
Reporting 报告 100 120
• Test Repor • 测试报告 60 50
• Size Measurement • 计算工作量 20 20
• Postmortem & Process Improvement Plan • 事后总结, 并提出过程改进计划 20 20
合计 1770 2205

3.解题思路描述

3.1 选择解析类库

经过对比目前常用的解析类库使用方式和学习成本,最后我选择了学习成本较低但目前功能最全且无依赖的Google的Gson,并利用JsonParser类的实例进行后续的解析。

3.2 解析json文件

3.2.1 解析运动员信息数据(AthletesData)

首先对于运动员个人信息的解析,通过json文件我们可以注意到json文件的顶层结构是一个数组(包含多个国家的对象),因此将JsonElement对象转换为JsonArray对象。然后依次创建运动员列表、获取国家名称和参与信息、遍历参与信息数组、提取并存储运动员信息。

3.2.2 解析比赛信息数据(ResultData)

比赛信息的json文件相对于运行员信息文件涵盖信息较多,于是为了便于观察每个对象在哪个数组下,我将json文件做了简化(即将主要信息提取出来观察其相对于各个数组的位置)。然后, 从一个指定的JSON文件中解析数据,并将解析出的特定信息打印到给定的BufferedWriter输出流中,即进行了设置文件路径、读取和解析JSON文件、提取JSON对象、获取比赛数据、处理每个比赛(对于每个比赛,提取其JsonObject表示)、检查比赛名称、获取比赛结果、处理每个结果、提取和存储结果信息。

3.3 从命令行参数中获取的输入和输出文件路径(DWASearch)

DWASearch程序根据从命令行参数中获取的输入和输出文件路径,对输入文件进行读取和处理,并将结果写入输出文件。即进行了参数检查、文件读取和写入、逐行处理、字符串拆分和条件判断、错误处理、结束处理。

4.接口设计和实现过程

组织结构图

AthletesData类: 定义了一个名为athletesPrint的方法,该方法接受两个参数:output(输出路径)和out(一个BufferedWriter对象,用于写入输出)。
ResultData类: 定义了一个名为resultDataPrint的方法,该方法接受三个参数:outPut(输出路径的一部分),path(JSON文件的名称或路径的一部分)以及out(一个BufferedWriter对象,用于写入输出)。
DWASearch类: 循环读取input.txt每行的数据,判断指令的正确性。若指令正确则调用AthletesData类的athletesPrint方法或ResultData类的resultDataPrint方法,来进行选手信息的输出或比赛结果的输出;若指令不正确,则输出N/A或Error。
**独到之处:**实现了对不同数据源的解析和处理,并将结果输出到指定文件中,具有一定的通用性和可扩展性。

5.关键代码展示

1.对players信息进行JSON解析

try {
   
    JsonParser parser = new JsonParser();
    JsonElement element = parser.parse(new FileReader("D:\\软件工程实践\\project-java\\222100302\\src\\datas\\athletes.json"));
    //将JsonElement对象转换为 JsonArray,表示国家列表。
    JsonArray countries = element.getAsJsonArray();
    //创建一个新的 ArrayList,用于存储 Athlete 对象。
    List<Athlete> athletes = new ArrayList<>();

    for (JsonElement countryElement : countries) {
   
        JsonObject countryObject = countryElement.getAsJsonObject();
        String countryName = countryObject.get("CountryName").getAsString();
        JsonArray participations = countryObject.getAsJsonArray("Participations");

        for (JsonElement participationElement : participations) {
   
            //将 participationElement 转换为 JsonObject,代表一个运动员的参与信息。
            JsonObject participationObject = participationElement.getAsJsonObject();
            String firstName = participationObject.get("PreferredFirstName").getAsString();
            String lastName = participationObject.get("PreferredLastName").getAsString();
            int gender = participationObject.get("Gender").getAsInt();
            athletes.add(new Athlete(countryName, firstName, lastName, gender));
        }
    }

2.对决赛信息进行JSON解析

OutPutPath = outPut;
    String filePath = "D:/软件工程实践/project-java/222100302/src/datas/results/" + path + ".json";

    try {
   
        JsonParser parser = new JsonParser();//创建一个 JsonParser 实例,用于解析 JSON 数据。
        JsonElement element = parser.parse(new FileReader(filePath))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值