• 软工实践寒假作业(2/2)


    软工实践寒假作业(2/2)-疫情统计程序

    这个作业属于哪个课程 2020春|S班
    这个作业要求在哪里 软工实践寒假作业(2/2)
    这个作业的目标 学习单元测试的基础理论和相应技术、对程序进行测试的覆盖率分析和性能分析并优化、学习Personal Software Process (PSP, 个人开发流程,或称个体软件过程)
    作业正文 ....
    其他参考文献 Commint|.gitignore|gitDesktop

    Part-1 GitHub仓库地址

    Github仓库


    Part-2 PSP表格

    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 30 50
    Estimate 估计这个任务需要多少时间 1850 1805
    Development 开发 800 850
    Analysis 需求分析 (包括学习新技术) 300 270
    Design Spec 生成设计文档 60 60
    Design Review 设计复审 30 10
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 60 40
    Design 具体设计 90 150
    Coding 具体编码 360 480
    Code Review 代码复审 30 30
    Test 测试(自我测试,修改代码,提交修改) 60 90
    Reporting 报告 150 150
    Test Repor 测试报告 30 30
    Size Measurement 计算工作量 20 20
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 60 50
    合计 2050 1805

    Part-3 设计思路

    1.将命令行的每个参数都设一个变量,参数有值存入,无值为空。
    2.建立一个HashMap<String,List>,String代表每个省,List有四个数据分别代表感染患者、疑似患者、自愈、死亡
    3.读取log文件,获取文件名,文件名按 “.”分割开,判断文件日期与-date参数日期
    4.读取log文件内容,按空格分隔开,判断内容属于哪种情况。并执行相应操作
    5.输出文件内容,统计Map中需要的省份


    Part-4 实现过程


    Part-5 代码说明

    建立一个HashMap,每个省份都是key,Value值为感染患者、疑似患者、自愈、死亡的人数的一个list表

    public static String[] province =new String[]{
                                     "安徽","北京","重庆","福建","甘肃",
                                     "广东","广西","贵州","海南","河北",
                                     "河南","黑龙江","湖北","湖南","吉林",
                                     "江苏","江西","辽宁","内蒙古","宁夏",
                                     "青海","山东","山西","陕西","上海",
                                "四川","天津","西藏","新疆","云南","浙江"};
                                                                                                                                                              public static Map<String, List<Integer>> province_map=new HashMap<>();
                                                                                                                                                        List<Integer> put_list=new ArrayList<>();
                                                                                                                   for(int i=0;i<4;i++)
            put_list.add(0);//4数字个顺序表示感染患者、疑似患者、治愈、死亡
        for(int i=0;i<province.length;i++ )
            province_map.put(province[i],put_list);
    

    日期比较方法

    public static boolean CompareDate(String data1, String date2)
    {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    
        try
        {
            Date dt1 = df.parse(data1);
            Date dt2 = df.parse(date2);
            if (dt1.getTime() > dt2.getTime())
                return true;
             else if (dt1.getTime() < dt2.getTime())
                return false;
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return true;
    

    统计人数方法

     private static void CalcPeople(String line)
    {
        String[] arr = line.trim().split("\s+");//字符串按空格分割开
        String[] str = arr[arr.length - 1].trim().split("人");
        int people_num = Integer.parseInt(str[0].trim());//获得人数
        if (arr[1].equals("新增")) {
            if (arr[2].equals("感染患者")) {
                List<Integer> list = new ArrayList<>();
                list.addAll(province_map.get(arr[0]));
                int value = list.get(0).intValue();
                list.set(0, value + people_num);
                province_map.put(arr[0], list);
            } else if (arr[2].equals("疑似患者")) {
                List<Integer> list = new ArrayList<>();
                list.addAll(province_map.get(arr[0]));
                int value = list.get(1).intValue();
                list.set(1, value + people_num);
                province_map.put(arr[0], list);
            }
        }
        else if (arr[2].equals("流入")) {
            if (arr[1].equals("感染患者")) {
                List<Integer> list = new ArrayList<>();
                list.addAll(province_map.get(arr[0]));
                int value = list.get(0).intValue();
                list.set(0, value - people_num);
                province_map.put(arr[0], list);
                List<Integer> list1 = new ArrayList<>();
                list1.addAll(province_map.get(arr[3]));
                int value1 = list1.get(0).intValue();
                list1.set(0, value1 + people_num);
                province_map.put(arr[3], list1);
            }
            else if (arr[1].equals("疑似患者")) {
                List<Integer> list = new ArrayList<>();
                list.addAll(province_map.get(arr[0]));
                int value = list.get(1).intValue();
                list.set(1, value - people_num);
                province_map.put(arr[0], list);
                List<Integer> list1 = new ArrayList<>();
                list1.addAll(province_map.get(arr[3]));
                int value1 = list1.get(1).intValue();
                list1.set(1, value1 + people_num);
                province_map.put(arr[3], list1);
            }
        }
        else if (arr[1].equals("死亡")) {
            List<Integer> list = new ArrayList<>();
            list.addAll(province_map.get(arr[0]));
            int value = list.get(3).intValue();
            int value1 = list.get(0).intValue();
            list.set(3, value + people_num);
            list.set(0, value1 - people_num);
            province_map.put(arr[0], list);
        }
        else if (arr[1].equals("治愈")) {
            List<Integer> list = new ArrayList<>();
            list.addAll(province_map.get(arr[0]));
            int value = list.get(2).intValue();
            int value1 = list.get(0).intValue();
            list.set(2, value + people_num);
            list.set(0, value1 - people_num);
            province_map.put(arr[0], list);
        }
        else if (arr[1].equals("排除")) {
            List<Integer> list = new ArrayList<>();
            list.addAll(province_map.get(arr[0]));
            int value = list.get(1).intValue();
            list.set(1, value - people_num);
            province_map.put(arr[0], list);
        }
        else if (arr[1].equals("疑似患者")&&arr[2].equals("确诊感染")) {
            List<Integer> list = new ArrayList<>();
            list.addAll(province_map.get(arr[0]));
            int value = list.get(1).intValue();//疑似
            int value1 = list.get(0).intValue();//确诊
            list.set(1, value - people_num);
            list.set(0, value1 + people_num);
            province_map.put(arr[0], list);
        }
    }
    

    输出文件方法

     private static void WriteFile(String file_path)
    {
        int infected_num=0,suspected_num=0,cure_num=0,death_num=0;
        try {
            File writeName = new File(file_path); // 相对路径,如果没有则要建立一个新的output.txt文件
            writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
            try (FileWriter writer = new FileWriter(writeName);
                 BufferedWriter out = new BufferedWriter(writer)
            ) {
                for(int i=0;i<province.length;i++)
                {
                    List<Integer> list = province_map.get(province[i]);
                    infected_num = infected_num + list.get(0);
                    suspected_num = suspected_num + list.get(1);
                    cure_num = cure_num + list.get(2);
                    death_num = death_num + list.get(3);
                }
                if(cmd_province.contains("全国")||cmd_province.size()==0)
                {
                    String name="全国";
                    if(type.size()==0)
                        out.write("全国"+" "+"感染患者"+infected_num+"人 "+"疑似患者"+suspected_num+"人 "+"治愈"+cure_num+"人 "
                                +"死亡"+death_num+"人 "+"
    ");
                    else
                    {
                        for (int n = 0; n < type.size(); n++) {
                            if (type.get(n).equals("ip"))
                                name = name + " 感染患者" + infected_num + "人";
                            if (type.get(n).equals("sp"))
                                name = name + " 疑似患者" + suspected_num + "人";
                            if (type.get(n).equals("cure"))
                                name = name + " 治愈" + cure_num + "人";
                            if (type.get(n).equals("dead"))
                                name = name + " 死亡" + death_num + "人";
                        }
                        out.write(name+"
    ");
                    }
                }
                for(int i=0;i<province.length;i++)
                {
                    List<Integer> list=province_map.get(province[i]);
                    infected_num=list.get(0);
                    suspected_num=list.get(1);
                    cure_num=list.get(2);
                    death_num=list.get(3);
                    if(cmd_province.size()==0&&((list.get(0)!=0)||(list.get(1)!=0)||(list.get(2)!=0)||(list.get(3)!=0)))
                    {
                        if(type.size()==0)
                            out.write(province[i]+" "+"感染患者"+infected_num+"人 "+"疑似患者"+suspected_num+"人 "+"治愈"+cure_num+"人 "
                                    +"死亡"+death_num+"人 "+"
    ");
                        else
                        {
                            String name=province[i];
                            for(int n=0;n<type.size();n++)
                            {
                                if(type.get(n).equals("ip"))
                                    name=name+" 感染患者"+infected_num+"人";
                                if(type.get(n).equals("sp"))
                                    name=name+" 疑似患者"+suspected_num+"人";
                                if(type.get(n).equals("cure"))
                                    name=name+" 治愈"+cure_num+"人";
                                if(type.get(n).equals("dead"))
                                    name=name+" 死亡"+death_num+"人";
                            }
                            out.write(name+"
    ");
                        }
                    }
                    else if(cmd_province.contains(province[i]))
                    {
                        if(type.size()==0)
                            out.write(province[i]+" "+"感染患者"+infected_num+"人 "+"疑似患者"+suspected_num+"人 "+"治愈"+cure_num+"人 "
                                    +"死亡"+death_num+"人 "+"
    ");
                        else
                        {
                            String name=province[i];
                            for(int n=0;n<type.size();n++)
                            {
                                if(type.get(n).equals("ip"))
                                    name=name+" 感染患者"+infected_num+"人";
                                if(type.get(n).equals("sp"))
                                    name=name+" 疑似患者"+suspected_num+"人";
                                if(type.get(n).equals("cure"))
                                    name=name+" 治愈"+cure_num+"人";
                                if(type.get(n).equals("dead"))
                                    name=name+" 死亡"+death_num+"人";
                            }
                            out.write(name+"
    ");
                        }
                    }
                }
                out.write("// 该文档并非真实数据,仅供测试使用");
                out.flush(); // 把缓存区内容压入文件
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    Part-6 单元测试

    测试 -date参数

    测试 -type -province -date

    测试 -date -province


    Part-7代码规范

    代码规范

    Part-8心路历程

    学习了很多,提升了自己解决分析题目的能力,第一次看到的感觉就是害怕,有太多自己不会的东西PSP、单元测试优化和性能测试。自己通过百度寻找资源慢慢了解获得了许多的成就感吧,希望自己在以后面对困难的时候不要感到恐惧,要慢慢的,自己一步一步的去克服,战胜它


    Part-9FFmpeg学习的相关仓库

    android端基于FFmpeg实现
    简介:android端基于FFmpeg实现音频剪切、拼接、转码、混音、编解码;视频剪切、水印、截图、转码、编解码、转Gif动图、画面拼接、视频倒播;音视频合成与分离;音视频解码、同步与播放;FFmpeg本地推流、H264与RTMP实时推流直播;OpenGL+GPUImage实时滤镜;
    PHP-FFmpeg
    简介:基于PHP实现FFmpeg项目
    FFmpegMediaPlayer
    简介:FFmpeg实现的播放器
    音视频学习实践,从移植ffmpeg库到android平台,混合编译x264库以及fdk-aac库
    简介:音视频学习实践,从移植ffmpeg库到android平台,混合编译x264库以及fdk-aac库,到相机音频采集编码推流到RTMP服务器的学习记录
    视频直播和播放转码器框架
    简介:本demo中的FFmpeg已经编译过了,可以随意拖入到项目中,添加需要的库文件和框架就可以build success。

  • 相关阅读:
    每天一个linux命令:top命令
    docker入门实战笔记
    Linux top里面%CPU和us%的解释
    mac开发环境配置
    TCP/IP及内核参数优化调优
    在C#中使用代理的方式触发事件(转,这篇应该是最好的)
    如何在Vista IIS 7 中用 vs2005 调试 Web 项目? (转)
    C#接口慨述
    asp跟asp.net的区别
    解耦的故事(一)tmfc的开关(转)
  • 原文地址:https://www.cnblogs.com/yexianduan/p/12342533.html
Copyright © 2020-2023  润新知