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

222000421莫梓民 学生 2023-03-03 19:36:55
这个作业属于哪个课程 2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业————个人实战
这个作业的目标完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献CSDN、博客园

目录

  • 一、GitCode项目地址
  • 二、PSP表格
  • 三、解题思路描述
  • 四、设计与实现过程
  • 五、性能改进
  • 六、单元测试
  • 七、异常处理
  • 八、心得体会

一、GitCode项目地址

222000421

二、PSP表格

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

三、解题思路描述

  • 1、从网页中获取json代码

    用火狐浏览器进入澳网官网后,按下F12进入开发者模式,在网络里可以找到json文件

    alt 火狐提取json文件

  • 2、将json字符串转化为json对象

    json文件不能直接读取,因此采用引入fastjson进行json字符串解析,使用JSONArrary和JSONObject还有String方法将json数据拆分成类、数组和字符串,方便对其进行解析。

  • 3、输出player和result

    当input.txt中输入players时,对players.json进行遍历,找出需要的属性。当input.txt中输入result ···时,先遍历对应文件中的每场比赛,找出status为Winner的选手,通过team_id得到队员的uuid,再查找player数组得到选手的姓名缩写。score可以直接从match中获取。

四、设计与实现过程

  • 1、代码组成

    代码由两个类实现,AOSearch调用Lib类,负责程序运行,Lib类实现主要功能。

  • 2、isRightData函数通过将拆分出来的字符串日期转换成int型整数,实现日期合理的判断
    public boolean isRightDate(String date)
    {
      if (date == null) return false;
      int a=Integer.parseInt(START_DAY);
      int b=Integer.parseInt(END_DAY);
      int c=Integer.parseInt(date);
      return a <= c && c <= b;
    }
    
  • 3、通过对fastjson里JSONOBject方法的调用
    public String get_json_Players()
    {
      String json_players = readFile("src/data/players.json");
      JSONObject jo = JSON.parseObject(json_players);
      JSONArray ja = jo.getJSONArray("players");
      StringBuilder result = new StringBuilder();
      for (int i=0 ; i<ja.size() ; i++)
      {        
          result.append("full_name:").append(ja.getJSONObject(i).getString("full_name")).append("\ngender:")
          .append((ja.getJSONObject(i).getString("gender")).equals("F") ? "female" : "male").append("\nnationality:")
          .append(ja.getJSONObject(i).getJSONObject("nationality").getString("name")).append("\n-----\n");
      }
      return result.toString();
    }
    

五、性能改进

可以使用hashMap对已经访问过的数据进行缓存,可以提高程序的运行效率。

六、单元测试

测试使用的是JUnit5,对于AOSearch类的测试,只需要测试参数的检测即可

    @org.junit.jupiter.api.Test
    void main() {
        AOSearch.main(new String[]{"INPUT.txt","output.txt"});
        AOSearch.main(new String[]{"IN.txt"});
    }

七、异常处理

使用try和catch,抛出异常。

try
{
    FileInputStream is = new FileInputStream(path);
    int len = is.available();
    bytes = new byte[len];
    is.read(bytes);
    is.close();
}
    catch (FileNotFoundException e)
    {

        System.out.println(path+"文件未找到");
    }
    catch (IOException e)
    {
        System.out.println("读取文件异常");
    }
if (args.length != 2)
{
    System.out.println("参数数量错误");
    return;
}

八、心得体会

  • 这次作业让我对git的使用有了更多的了解,而且体会到了使用git仓库管理代码的便利。
  • 对于性能优化方面,掌握算法不足,需要进一步学习。
  • 学会了json的获取与解析方法,进一步了解数据的爬取。
...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

可以使用hashMap对已经访问过的数据进行缓存,可以提高程序的运行效率。

是否有实验数据支持?

688

社区成员

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

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