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

222000129黄钰婷 学生 2023-03-03 22:25:13

一、作业概览

这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业——个人实战
这个作业的目标Json数据读取、Git代码管理、代码测试
其他参考文献gson官方文档

二、项目地址

GitCode地址

三、PSP表格

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

四、解题思路

分为4个步骤:命令行参数的处理、读取input文件,获取相关指令、读取json文件的数据、写入output文件。
  其中,json文件按内容分为两种,players.json和0116.json ~ 0122.json。players.json文件结构较简单,需要的三个信息full_name、gender、nationality均可较直接地获取。
  而输出正式赛每日结果需要的三个信息time、winner、score则较为复杂。流程如下:schdule->courts->sessions->activities(注:activities里的actual_start_time即为需要的tiam)->teams(注:teams里的score即为所需的score)。winner的获取需要用teams里的team_id,根据team_id在schdule同级的teams中寻找对应的team,再根据找到的team里的players在schdule同级的players中寻找对应的player,player的short_name即为需要的winner。


五、设计与实现过程

1、命令行参数的处理
if (args.length != 2) {
            System.out.println("请输入正确的指令格式");
        }
        else {
            if(args[0].endsWith(".txt")&&args[1].endsWith(".txt")){
                ArrayList<String> file = lib.readFile(args[0]);
                System.out.print(file);
            }
            else {
                System.out.println("请输入正确的指令格式");
            }
        }

2、json文件的读取
public JsonObject readJson(String fileName) {
        try {
            String filePath;
            //创建json解析器
            JsonParser parser = new JsonParser();
            String root = System.getProperty("user.dir");
            String FileName = fileName;
            if (fileName.equals("players.json")) {
                filePath = root + File.separator + "222000129" +
                        File.separator + "src" + File.separator + "data" +
                        File.separator + FileName;
            } else {
                filePath = root + File.separator + "222000129" +
                        File.separator + "src" + File.separator + "data" +
                        File.separator + "schedule" + File.separator + FileName;
            }

            //创建json对象
            JsonObject obj = (JsonObject) parser.parse(new FileReader(filePath));
            return obj;

        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
    }


3、input文件的读取

实现readFile函数,传入文件名,逐行读取文件,将文件的内容存入ArrayList并返回。

public static ArrayList<String> readFile(String file){

        String root = System.getProperty("user.dir");
        String filePath = root + File.separator + "222000129" +File.separator + file;

        ArrayList<String> arrayList = new ArrayList<>();
        try{
            // 构造一个BufferedReader类来读取文件
            BufferedReader br = new BufferedReader(new FileReader(filePath));
            String s = null;
            // 使用readLine方法,一次读一行
            while((s = br.readLine())!=null){
                arrayList.add(s);
            }
            br.close();
        }catch(Exception e){
            e.printStackTrace();
        }
        return arrayList;
    }


4、output文件的写入
//写入文件中
            FileWriter fileWriter = null;
            String root = System.getProperty("user.dir");
            String filePath = root + File.separator + "222000129" +File.separator + "output.txt";
            try {
                fileWriter = new FileWriter(filePath);//创建文本文件
                fileWriter.write("full_name:" + full_name+"\r\n");
                fileWriter.write("gender:" + gender+"\r\n");
                fileWriter.write("nationality:" + nationality+"\r\n");
                fileWriter.write("-----" + nationality+"\r\n");
            } catch (IOException e) {
                e.printStackTrace();
            }

4、根据team_id找到对应的team
public JsonObject fromIdToTeam(String teamId, JsonArray teamArray) {
        for (int i = 0; i < teamArray.size(); i++) {
            JsonObject teamObject = teamArray.get(i).getAsJsonObject();
            if (teamObject.get("uuid").getAsString().equals(teamId)) {
                return teamObject;
            }
        }
        return null;
    }


六、心得体会

学会了json数据读取,git代码管理能力得到了练习,但开发效率太低,以至于没有时间对程序进行性能改进。今后的作业一定要合理规划时间,提高开发效率。

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

帖子前面需要给出目录信息,作业缺失部分比较多,性能改进,单元测试展示,异常处理等缺失。

688

社区成员

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

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