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

222000312彭季菖 学生 2023-03-03 22:01:54
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践寒假作业
这个作业的目标完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献源代码管理 单元测试和回归测试《码出高效_阿里巴巴Java开发手册》

目录

  • 1.Gitcode项目地址:
  • 2.PSP表格
  • 3.解题思路描述
  • 基本思路
  • 接口设计和实现过程
  • 4.关键代码展示
  • 5. 性能改进
  • 6.单元测试
  • 7.心得体会

1.Gitcode项目地址:

2.PSP表格

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

3.解题思路描述

基本思路

1.使用BufferedReader读取单行代码
2.在去除首尾及中间的空格后,使用equals函数判断是否等于players
3.使用startsWith函数判断result指令
4.利用replaceFirst函数删除result指令得到时间
5.进行时间判断

接口设计和实现过程

共有两个类:AOSearch,Lib
其中Lib定义了功能函数outputPlayers和outputDaily以及一个用来获取json文件中json数据的类:getJsonStr
在main函数内完成输入和判断后调用功能函数内提取数据并输出

4.关键代码展示


static void outputPlayers(BufferedWriter info) throws IOException {
        //数据文件路径
        String jsonPath ="src/data/players.json";
        String jsonStr = getJsonStr(jsonPath);
        
        JSONObject jscs = JSONObject.parseObject(jsonStr);
        JSONArray players= jscs.getJSONArray("players");
        for(int i=0;i<players.size();i++) {
            //输出全名
              String fullName ="full_name:" + (String) players.getJSONObject(i).get("full_name") + "\n";
              info.write(fullName);
               
              //输出性别
              String gender =(String) players.getJSONObject(i).get("gender") + "\n";
               if (gender.equals("M")) {
                   info.write("gender:male\n");
               }
               else {
                   info.write("gender:female\n");
               }
               
               //输出国家
               String nationality ="nationality:" 
                           + (String)players.getJSONObject(i).getJSONObject("nationality").get("name")+"\n";
               info.write(nationality);
               info.write("-----\n");
        }
        
    }



static void outputDaily(String time, BufferedWriter info) throws IOException  {
        //数据文件路径

        String jsonPath ="src/data/schedule/"+time+".json";
        String jsonStr = "";
        jsonStr =  getJsonStr(jsonPath);
      
        
        JSONObject jscs = JSONObject.parseObject(jsonStr);
        JSONArray matches= jscs.getJSONArray("matches");
        for(int i=0;i<matches.size();i++) {
            //输出开始时间
            String start ="time:" + (String) matches.getJSONObject(i).get("actual_start_time") + "\n";
            info.write(start);
            
            
            JSONArray teams = matches.getJSONObject(i).getJSONArray("teams");
            
            //当天未赛
            if (time.equals("0124")&&i == 14) {
                continue;
            }
            
            boolean judege = (boolean) teams.getJSONObject(0).getJSONArray("score").getJSONObject(0).get("winner");
            
            String teamId1 = "";        
            int number = 0;
            if (judege==true) {
                teamId1 = (String)teams.getJSONObject(0).get("team_id");

            }else {
                teamId1 = (String)teams.getJSONObject(1).get("team_id");
                
            }
            
            JSONArray teamMember = jscs.getJSONArray("teams");
            for(;number<teamMember.size();) {
                String teamId2 = (String)teamMember.getJSONObject(number).get("uuid");
                if (teamId1.equals(teamId2)) 
                    break;    
                number++;
            }
            
            
            //输出胜利者winner 格式如'menber1 & menber2
            info.write("winner:");
            JSONArray playerIds = teamMember.getJSONObject(number).getJSONArray("players");
            for (int k=0;k<playerIds.size();k++) {
                String playerId1 = (String)playerIds.get(k);
                JSONArray players = jscs.getJSONArray("players"); 
                
                if (k>0)
                    info.write(" &");
                for (int l=0;l<players.size();l++) {
                    String playerId2 = (String)players.getJSONObject(l).get("uuid");
                    if (playerId1.equals(playerId2)) {
                        String shortName = (String)players.getJSONObject(l).get("short_name");
                        info.write(shortName);
                    }
                }
    
            }
            info.write("\n");
            
            
            //输出score比赛中每一轮双方的比分,每一轮的格式如'score1 | score2'
            info.write("score:");
            JSONArray score = teams.getJSONObject(0).getJSONArray("score");
            for (int m=0;m<score.size();m++) {
                if (m>0)
                    info.write("|");
                info.write((String)teams.getJSONObject(0).getJSONArray("score").getJSONObject(m).get("game"));
                info.write(":");
                info.write((String)teams.getJSONObject(1).getJSONArray("score").getJSONObject(m).get("game"));
            }
            
            info.write("\n");
             info.write("-----\n");
             
        }
    }

5. 性能改进

通过保存uuid和对应player或者teams或者match相关的信息来加速查找

6.单元测试

img

7.心得体会

通过这次作业让我了解和掌握了许多以往不懂的知识,比如从网页获取Json数据、fastjson解析Json数据、进行程序测试的方法。但也暴露了许多问题,例如基础不扎实导致前期学习和编程浪费了大量时间,以至于后面测试和性能优化草草结束。

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

博客的编写虽然枯燥繁琐,但是博客分在评分中占据了一半,还希望更加重视

688

社区成员

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

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