软件工程实践第二次作业————个人实战

221900204-陈鸿越 学生 2023-03-03 23:09:19
这个作业属于哪个课程2023福州大学-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业——个人实战
这个作业的目标1.爬取澳大利亚网球公开赛的信息 2.实现一个控制台程序能够处理不同的指令完成对信息的统计处理
其他参考文献1.JSON的两种解析方式 2.如何用python爬数据?

目录

  • Gitcode项目地址
  • PSP表格
  • 解题思路描述
  • 1.爬取澳大利亚网球公开赛官网相关数据并进行JSON的解析
  • step1
  • step2
  • 2.优化JSON对象
  • 接口设计和实现过程
  • 1.通过GSON实现JSON对象的解析
  • 2.代码设计
  • 程序性能改进
  • 单元测试
  • 心路历程与收获
  • 学习心得
  • 学习收获

Gitcode项目地址

gitcode仓库地址

PSP表格

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

解题思路描述

1.爬取澳大利亚网球公开赛官网相关数据并进行JSON的解析

step1

进入官网

img

step2

按键盘F12进入控制台模式,如图所示选择Network,Fetch/XHR,这里我们能够看到下面的菜单中有一个result的选项(如果没有,刷新几下网页就会出现)。我们点击就可以获取到相应的json信息(此时代码很乱),如下图。

img

img

2.优化JSON对象

对爬取到的数据进行在线解析,这里我用JSON.cn进行在线解析。如图解析后代码就变的整齐规律多了。然后我们将整理后的代码复制粘贴到我们创建的空json文件中(如下图),数据就算爬取成功了。

img

img

接口设计和实现过程

1.通过GSON实现JSON对象的解析

如图所示我们引入jar包通过里面的函数实现对JSON数组的解析

img

2.代码设计

将项目划分成2个类,AOSearch只包含main函数,剩下的所有函数均在Lib类中实现,下图是主要代码分布

img

1.Lib函数设计

public void players() {
    try {
        
        JsonParser parser =new JsonParser();
        JsonObject object = (JsonObject) parser.parse(new FileReader("players.json"));
        JsonArray array = object.get("players").getAsJsonArray();
        
        for(int i = 0; i<array.size(); i++) {
            
            JsonObject suboObject = array.get(i).getAsJsonObject();
            System.out.println("full_name:"+suboObject.get("full_name").getAsString());
            System.out.println("gender:"+suboObject.get("gender").getAsString());
            JsonObject nation = suboObject.get("nationality").getAsJsonObject();
            System.out.println("nationality:"+nation.get("name").getAsString());
            System.out.println("-----");
        }
    } catch (JsonIOException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    } catch (JsonSyntaxException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }
}

2.main函数设计

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;

public class AOSearch {

public static void main(String[] args)  throws IOException {

    PrintStream otp = new PrintStream("output.txt");
    Lib tool =new Lib();
    String fileName ="input.txt";
    FileReader fileReader = new FileReader(fileName);

    BufferedReader bufferedReader = new BufferedReader(fileReader);

    String rline;

    while ((rline = bufferedReader.readLine())!=null){
        System.out.println(rline);

        if(rline.equals("players")) tool.players();

        if(rline.substring(0,6).equals("result")) tool.result((String) rline.subSequence(7, 11));
        else {
            System.out.println("Error");
        }
    }
    bufferedReader.close();
    fileReader.close();
  }
}

程序性能改进

使用StringBuilder类来处理字符串数据的串接,能较大的提高效率!

例如修改前:

        res = res + this.get(i) + "\n" + "-----";

修改后:

        res.append(this.get(i)).append("\n").append("-----");

单元测试

当读入符合规范的字符串,例如players时,文件输出如下图,如果字符串不符合要求的话,则会显示error。

img

心路历程与收获

学习心得

一开始刚开始看到作业要求我一头雾水,甚至怀疑老师是不是弄错了作业。后来不断地求助同学,以及通过百度等一系列可以获取资料的渠道后逐渐有了思路,虽然过程比较艰苦,但也好在最终马马虎虎能算是完成任务,每次完成作业的过程中都能感受到自己一点一点的进步,这种感受是很不错的。

学习收获

1.这次作业让我对git的理解更加深入,了解了很多上次作业中遗漏的地方。
2.我的代码产出过程更加有条理,先设计好之后才开始写代码,而不是埋头苦写,直接一个main函数包揽全过程
3.我的java大二成绩并不理想,只有70+。这次作业让我对当初遗漏的知识有了更大的了解。
4.因为大部分知识都不会,我上百度看了很多教程,通过对不同方法的对比我的学习效率找资料的熟练程度有了较大提升,不至于因为一些简单的小问题就麻烦同学。

...全文
222 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
助教-张思锐 助教 2023-03-08
  • 打赏
  • 举报
回复

缺乏异常处理说明,是否是遗漏呢?

688

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • 张书旖
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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