软工实践第2次作业

这个作业属于哪个课程2022年福大-软件工程;软件工程实践-W班
这个作业要求在哪里软工实践第二次作业
这个作业的目标冬奥会事数据查询:学习JSON数据爬取和读取;熟悉文件读取;了解软件开发基本步骤,学习单元测试和性能分析;
其他参考文献JProfileridea中如何生成jar文件java读写文件操作

目录

1.Gitcode项目地址。

2.PSP表格:

 3.解题思路描述

  3.1明确题目要求:

  Q1:对缺失的比赛数据爬取

  Q2:解析JSON数据

  Q3:如何读取指令文件中命令和将数据写入目标文件

4.设计实现过程

  4.1类的分布

  4.2函数分布

  4.3关键函数流程图

5.展示出项目关键代码,并解释思路与注释说明。

 5.1判断指令合法性

6.单元测试

 6.1 测试结果:

 6.2覆盖率

7.记录在改进程序性能上所花费的时间,描述你改进的思路

8.异常处理 

9.心得体会


本博客所提到的数据爬取仅作为教学研究使用,无其他目的

1.Gitcode项目地址。

Gitode项目地址

2.PSP表格:

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

 3.解题思路描述

  3.1明确题目要求:

  • 读取Json数据并输出奖牌总榜
  • 读取Json数据并输出每日赛程
  •  读取input.txt中的指令以及将最终的数据写入output.txt

  Q1:对缺失的比赛数据爬取

        在央视冬奥专栏官网,打开 开发者工具 页面,查看并寻找到所需日期的比赛数据,将所需数据通过工具网站转换成我们所需的Json格式数据。

  Q2:解析JSON数据

        通过导入google 的 Gson第三方库来实现JSON数据的解析

  Q3:如何读取指令文件中命令和将数据写入目标文件

       使用InputStreamReader和OutputStreamWriter函数进行文件的读写操作,再根据具体的要求选择是“追加写”还是"重写"。

4.设计实现过程

  4.1类的分布

  4.2函数分布

                      

  4.3关键函数流程图

5.展示出项目关键代码,并解释思路与注释说明。

 5.1判断指令合法性

//利用数组【i】逐个输出第i行的文件指令
        ArrayList<String> arrayList=fileTest.readFileByLine(input);
        for (int i = 0; i < arrayList.size(); i++) {
            //逐行实现命令
            //空行跳过
            if (arrayList.get(i).trim().equals("")||arrayList.get(i).length()==0) {
                System.out.println("空行命令");
            }
            //total指令
            else if (arrayList.get(i).trim().equals("total")) {
                System.out.println(arrayList.get(i).trim());
                new ReadJson().ReadMedals(output);
            }
            else if (arrayList.get(i).length()>=12) {
                String str1=arrayList.get(i).replaceAll(" ","").substring(0,8);
                String str2=arrayList.get(i).replaceAll(" ","").substring(8,12);

                if (str1.equals("schedule")){
                    //判断日期是否合法
                    if (str2.substring(0,2).equals("02")) {
                        int date=Integer.parseInt(str2.substring(2,4));
                        System.out.println(date);
                        if (date<=20&&date>=2) {
                            new ReadJson().ReadMatch(output,str2);
                        }
                        else {
                            new FileHandle().appendTFile(output,"N/A");

                        }
                    }
                    else{
                        new FileHandle().appendTFile(output,"N/A");

                    }

                }

            }
            else{
                new FileHandle().appendTFile(output,"Error");
            }

        }

5.2Json数据解析

JsonParser parse = new JsonParser();
try {

     JsonObject json = (JsonObject)parse.parse(new FileReader("data\\"+date+".json"));
     JsonObject result = json.get("data").getAsJsonObject();
     JsonArray futureArray = result.get("matchList").getAsJsonArray();
     for (int i = 0; i < futureArray.size(); ++i) {
                JsonObject subObj = futureArray.get(i).getAsJsonObject();
                String homename=subObj.get("homename").getAsString();
                String awayname=subObj.get("awayname").getAsString();

                //将从JSON文件读出来的数据分别存4个字符串中
                //比赛时间:
                String str1="time:" + subObj.get("startdatecn").getAsString().substring(11,16);
                //...........
}
catch(){
//.....
}

6.单元测试

 6.1 测试结果:

        

 6.2覆盖率

        

7.性能分析及改进的思路

改进前:运行10w条指令(8成正确指令)的命令文件,耗时678000ms

8.异常处理 

   try {
            File file = new File(name);
            InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bf = new BufferedReader(inputReader);
            // 按行读取字符串
            String str;
            while ((str = bf.readLine()) != null) {
                arrayList.add(str);
            }
            bf.close();
            inputReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

9.心得体会

  • 要学会分析需求以及逐步分解问题,一步步寻找解决方法;
  • 学习到了新的知识,更加意识到知识的匮乏;
  • 程序的编写很重要,但是程序发布前程序猿的单元测试和性能分析同样要加以重视;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值