寒假作业(2/2)— 疫情统计

这个作业属于哪个课程 2020春S班
这个作业要求在哪里 作业要求
这个作业的目标 构建之法,PSP表格,github,疫情程序
作业正文 当前页面
其他参考文献 百度,CSDN,B站

1.GitHub仓库

我的仓库

2.PSP表格

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

3.解题思路描述

1.先看作业要求里面,完成该次作业所要求的知识

2.分析下这个作业的具体要求

4.设计实现过程

因为没带电脑,只能去亲戚那敲代码,不是很方便,所以这次做的比较潦草

5.代码说明

1.数据处理

public static void InforPro(String Path,List<Province> list1,Province Apro) //日志信息处理
{
    int people;
    String pattern = ".*//.*";
    String pattern0 = "(\d+)";
    String pattern1 = ".*新增.*";
    String pattern2 = ".*流入.*";
    String pattern3 = ".*死亡.*";
    String pattern4 = ".*治愈.*";
    String pattern5 = ".*确诊感染.*";
    String pattern6 = ".*排除.*";
    String pattern7 = ".*感染患者.*";
    String pattern8 = ".*疑似患者.*";
    Pattern number = Pattern.compile(pattern0); // 创建 Pattern 对象
    try
    {
        File file = new File(Path);
        if(!file .exists())
        {
            System.out.println("错误的路径");
            System.exit(0);
        }
        BufferedReader br = new BufferedReader(new FileReader(file));
        String str = null;
        while ((str = br.readLine()) != null)
        {
            Matcher num = number.matcher(str);
            String arrays[] = str.split(" ");
            if(Pattern.matches(pattern,str)) continue;
            Add(arrays[0],list1);
            for (Province pro1 : list1) {
                if (arrays[0].equals(pro1.getprovince())&&num.find())
                {
                    people = Integer.valueOf(num.group(0));
                    if(Pattern.matches(pattern1,str))
                    {
                        if(Pattern.matches(pattern7,str))
                        {
                            pro1.setip(pro1.getip() + people);
                            Apro.setip(Apro.getip() + people);
                        }
                        else if(Pattern.matches(pattern8,str))
                        {
                            pro1.setsp(pro1.getsp() + people);
                            Apro.setsp(Apro.getsp() + people);
                        }
                    }
                    else if(Pattern.matches(pattern2,str))
                    {
                        Add(arrays[3],list1);
                        for (Province province2 : list1) {
                            if (arrays[3].equals(province2.getprovince()))
                            {
                                if(Pattern.matches(pattern7,str))
                                {
                                    pro1.setip(pro1.getip() - people);
                                    province2.setip(province2.getip() + people);
                                }
                                else if(Pattern.matches(pattern8,str))
                                {
                                    pro1.setsp(pro1.getsp() - people);
                                    province2.setsp(province2.getsp() + people);
                                }
                            }
                        }
                    }
                    else if(Pattern.matches(pattern3,str))
                    {
                        pro1.setdead(pro1.getdead() + people);
                        pro1.setip(pro1.getip() - people);
                        Apro.setdead(Apro.getdead() + people);
                        Apro.setip(Apro.getip() - people);
                    }
                    else if(Pattern.matches(pattern4,str))
                    {
                        pro1.setcure(pro1.getcure() + people);
                        pro1.setip(pro1.getip() - people);
                        Apro.setcure(Apro.getcure() + people);
                        Apro.setip(Apro.getip() - people);
                    }
                    else if(Pattern.matches(pattern5,str))
                    {
                        pro1.setip(pro1.getip() + people);
                        pro1.setsp(pro1.getsp() - people);
                        Apro.setip(Apro.getip() + people);
                        Apro.setsp(Apro.getsp() - people);
                    }
                    else if(Pattern.matches(pattern6,str))
                    {
                        pro1.setsp(pro1.getsp() - people);
                        Apro.setsp(Apro.getsp() - people);
                    }
                }
            }
        }
    } catch (IOException  e) {
        e.printStackTrace();
    }
}

2.获取命令参数

for(int j = 0;j < args.length;j++) {
        if(args[j].equals("list")) judge1++;
        else if(args[j].equals("-log"))
        {
            log = args[j + 1 ];
            judge1++;
        }
        else if(args[j].equals("-out"))
        {
            out = args[j + 1];
            judge1++;
        }
        else if(args[j].equals("-date")) date = args[j + 1];
        else if(args[j].equals("-type"))
        {
            judge3 = 1;
            AddType(args,j,outinforo);
        }
        else if(args[j].equals("-provence"))
        {
            judge2 = 1;
            Addpro(args,j,ProInfor,list1);
        }
    }
    if(judge1!=3||(judge2==0&&!ProInfor.isEmpty())||(judge2==1&&ProInfor.isEmpty())
            ||(judge3==0&&!outinforo.isEmpty())||(judge3==1&&outinforo.isEmpty()))
    {
        System.out.println("非法命令");
        System.exit(0);
    }

3.数据的输出

public static void InforOut(String out,List<Province> list1,List<String> outinforo)
{
    out = out.trim();
    String Path = out.substring(0,out.lastIndexOf("\"));
    try {
        File file = new File(Path);
        if (!file.exists())
        {
            System.out.println("错误的路径");
            System.exit(0);
        }
        BufferedWriter wr = new BufferedWriter(new FileWriter(out));
        for (Province province : list1)
        {
            if (outinforo.isEmpty())
            {
                wr.write(province.getprovince() + "共有感染患者" + province.getip() + "人 疑似患者" +province.getsp()
                        + "人 治愈" + province.getcure() + "人 死亡" + province.getdead() + "人
");
            }
            else
            {
                wr.write(province.getprovince() + "共有");
                for (String str2 : outinforo)
                {
                    if(str2.equals("ip"))  wr.write("感染患者" + province.getip() + "人 ");
                    if(str2.equals("sp")) wr.write("疑似患者" + province.getsp() + "人 ");
                    if(str2.equals("cure")) wr.write("治愈" + province.getcure() + "人 ");
                    if(str2.equals("dead")) wr.write("死亡" + province.getdead() + "人 ");
                }
                wr.write("
");
            }
        }
        wr.write("// 该文档并非真实数据,仅供测试使用");
        wr.flush();
        wr.close();
    }catch (IOException  e) {
        e.printStackTrace();
    }
}

5.代码测试及性能分析

6.代码规范链接

[代码规范](https://github.com/supercode11/fzu2020/blob/master/221701318/codestyle.md)

7.心路历程与收获

编程能力有点差,没有规划概念,导致这次作业完成的很艰难。好消息就是发现自己很多不足的地方。在接下来的日子里我的加倍努力,从基础编程开始,给自己信心,由简到难。不断进步。
以课本为辅,实践为主。学再多的理论知识,不实践就是掌握不了。

8.第一次作业中技术路线图相关的5个仓库

1.C++可视化编程视频教程在下面可以找到:http://www.ddvip.com/vip/view/685.html

2.C/C++教程 http://www.qqread.com/cpp/index.html

3.asp教程 http://www.qqread.com/z/aspnet/

4.jsp教程 http://www.qqread.com/z/jsp/tech/2.html

5.php教程 http://www.qqread.com/php/

6.CSDN https://www.csdn.net/

原文地址:https://www.cnblogs.com/fzutw/p/12354942.html