软工实践寒假作业(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。

原文地址:https://www.cnblogs.com/yexianduan/p/12342533.html