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

222000422吴杭杭 学生 2023-03-03 17:46:02
这个作业属于哪个课程 2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业——个人实战
这个作业的目标Gitcode上传文件、制定代码风格规范、编写代码实现一个命令行程序、撰写博客
其他参考文献工程师的能力评估和发展源代码管理

目录

  • Gitcode项目地址
  • PSP表格
  • 解题思路描述
  • 设计和实现过程
  • 关键代码展示
  • 异常处理
  • 心得体会

Gitcode项目地址

Project-Java

PSP表格

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

解题思路描述

使用阿里巴巴开源的fastjson对json文件进行解析。引用fastjson的jar包使用fastjson提供的方法对json数据进行处理。

设计和实现过程

代码分为两个类:AOSearch类和Lib类;其中AOSearch类只含有主函数,通过调用Lib类的方法实现要求。

Lib类:

 /*
    *功能:读取input.txt中的命令
    */
    public String[] GainCommands(String path){}
/*
     *方法:读取文件内容
     */
    public String GetFile(String path) {}
/*
    * 功能:判断日期的是否合法
    */
    public boolean isValidDate(String str){}
/*
    * 功能:输出指定日期的比赛信息
    */
    public String GetSchedule(String path){}
/*
    *功能: 输出全体运动员字符串
    */
    public String GainAllPlayers(){}
/*
    *功能:通过id查找队伍
     */
    public JSONArray GainTeamPlayersById(JSONArray arr,String id){}
/*
     *功能:根据队伍处理比分
     */

    public String GainScores(JSONArray arr1,JSONArray arr2){}
/*
    *功能:通过id和队伍查找名字
    */
    public String GetWinnerNames(JSONArray playerArr,JSONArray winnerId){}
/*
    *功能:根据command数组来执行各种命令
    */
    public void Command(){}       

关键代码展示

输出全体运动员字符串

public String GainAllPlayers(){

            String jsonStr = GetFile("src/data/players.json");
            JSONObject obj = JSON.parseObject(jsonStr);
            JSONArray arr = obj.getJSONArray("players");
            String result = "";
            for(int i = 0;i < arr.size();i++){
                result += "full_name:"+arr.getJSONObject(i).getString("full_name");
                result += "\ngender:";
                if((arr.getJSONObject(i).getString("gender").equals("M"))){
                    result += "male";
                }else{
                    result += "female";
                }
                result += "\nnationality"+arr.getJSONObject(i).getJSONObject("nationality").getString("name")
                        +"\n------\n";
            }
            return  result;
        }

输出指定日期的比赛信息

public String GetSchedule(String path){
        String jsonStr = GetFile(path);
        JSONObject obj = JSONObject.parseObject(jsonStr);
        JSONArray arr = obj.getJSONArray("matches");
        String result = "";
        for (int i = 0;i < arr.size(); i++){
            if(arr.getJSONObject(i).getJSONObject("match_status").getString("abbr").equals("W/O")){
                result += "W/O------\n";
                System.out.println("W/O");
            }
            result+="time:"+arr.getJSONObject(i).getString("actual_start_time");
            JSONArray teams = arr.getJSONObject(i).getJSONArray("teams");
            JSONObject teamA = teams.getJSONObject(0);
            JSONObject teamB = teams.getJSONObject(1);
            String winner = teamB.getString("status");
            if(winner == null)
                winner = teamB.getString("team_id");
            else
                winner = teamA.getString("team_id");
            result += "\nwinner:";
            JSONArray winner_arr = GainTeamPlayersById(obj.getJSONArray("teams"),winner);
            result += GetWinnerNames(obj.getJSONArray("players"),winner_arr);
            result += "\nscore:";
            result += GainScores(teamA.getJSONArray("score"),teamB.getJSONArray("score"));
            result += "\n------\n";
        }
        return result;
    }

异常处理

假如输入无法处理的指令,例如:
无法识别的指令,则输出Error
result后的日期不符合以下要求,则输出N/A

else if(!(lone_cmd.length == 2 && isValidDate(lone_cmd[1]))){
                    try {
                        fos.write(NA_STRING.getBytes(StandardCharsets.UTF_8));
                    }catch (IOException e){
                        System.out.println("写入文件失败!");
                    }
                } else{
                    try {
                        fos.write(ERROR_STRING.getBytes(StandardCharsets.UTF_8));
                    }catch (IOException e){
                        System.out.println("写入文件失败!");
                    }
                }

        catch(FileNotFoundException e){
            System.out.println("未找到文件!");
        }

心得体会

本次作业让我对git的使用有了更多的了解,让我对java编写代码进行了一次回顾,发现有许多内容由于不经常使用忘记了,例如:对文件的读写操作;本次作业以后我会抽时间重新学习java,增加代码编写的熟练度。第一次浏览作业需求时,脑子里是一团乱麻,不知从何下手,在搜集网上资料和同学的帮助下完成了这次作业,从中也体现了我项目经验的不足,遇到难题就乱了章法,希望以后能越来越好吧。

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

作业未完成部分较多,希望之后能够认真阅读相关博客,按要求完成作业

688

社区成员

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

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