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

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,增加代码编写的熟练度。第一次浏览作业需求时,脑子里是一团乱麻,不知从何下手,在搜集网上资料和同学的帮助下完成了这次作业,从中也体现了我项目经验的不足,遇到难题就乱了章法,希望以后能越来越好吧。

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

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

数据集可视化效果可参见下方展示。 【数据集概况】 · 检测类别(中文):[保龄球(bowling)] · 训练集:594 张 · 验证集:75 张 · 测试集:74 张 · 总计:743 张 该数据集聚焦于室内保龄球馆场景,系统性采集了多角度、多姿态下保龄球在不同运动阶段的视觉特征,为保龄球运动过程中的球体识别与轨迹分析提供了高质量标注样本,具有明确的体育训练与智能辅助系统开发价值。... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 100 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9938** mAP50-95 | 0.6966 Precision | 0.9740 Recall | 0.9974 train/box_loss | 0.9113 train/cls_loss | 0.2862 val/box_loss | 1.1516 val/cls_loss | 0.3116 【训练过程分析】 100 轮训练后 mAP50 达到 0.9938,模型收敛良好。Loss 曲线前段快速下降,后段趋于平稳,val_loss 无反弹,没有明显过拟合。但 mAP50-95 为 0.6966,和 mAP50 差距 0.30,定位精度仍有优化空间。 【模型性能评估】 Precision 0.9740、Recall 0.9974,精召双高,模型对保龄球的检测能力强。 【预测效果展示】 验证集预测效果较好,检测框基本准确覆盖保龄球,置信度整体偏高。 【改进建议】 1. 丰富场景多样性:补充不同光照、背景和遮挡条件下的样本。 2. 提升输入分辨率:640 ...
PaddleOCR 与YOLO目标检测 HTTP 服务。 项目通过 PaddleOCROnnx 原生库集成 OnnxRuntime加速能力,围绕 ONNX 模型部署, 以统一接口提供图像文字识别、YOLO 目标检测和 Tensor 数据输出。 功能概览 文字识别:支持图片 Base64、multipart/form-data 上传,以及文本和 JSON 结果。 目标检测:支持 YOLO 图片检测,返回检测框 JSON 或原始 Tensor。 浏览器演示:访问服务根地址,上传图片并切换 OCR、YOLO 模式。 健康检查:通过 /health 查看服务及 OCR、YOLO 引擎初始化状态。 并发处理:通过 OCR 引擎实例池处理并发请求,可调整实例数量。 体验与调用 启动后访问: 入口 地址 浏览器演示 http://localhost:5000/ 健康检查 http://localhost:5000/health 原生依赖 Windows:优先从 runtimes/win-x64/native/ 加载原生 DLL;该目录没有 PaddleOCROnnx.dll 时,尝试从可执行文件所在目录加载。主 DLL 与对应后端依赖应放在同一原生目录中,不要将同一组依赖分散到多个目录。 Linux:原生运行时位于 runtimes/linux-x64/native/,程序使用相对于可执行文件的运行时搜索路径查找随包部署的依赖。 后端选择:CoreOCROnnx 支持 ONNX Runtime、OpenVINO、TensorRT 后端。请使用与平台、进程架构、硬件和后端匹配的一整套运行时,不要混用不同后端或版本的依赖。

688

社区成员

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

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