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

这个作业属于哪个课程 福大20春软工S班
这个作业要求在哪里 软工实践寒假作业(2/2)
这个作业的目标 新型冠状病毒疫情统计
作业正文 221701117余嘉宸作业(2/2)
其他参考文献 《Java程序设计》

1. Github仓库

  个人代码见Github仓库:仓库地址

2. PSP表格

  PSP是卡耐基梅隆大学(CMU)的专家们针对软件工程师所提出的一套模型:Personal Software Process (PSP, 个人开发流程,或称个体软件过程)。

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

3. 解题思路描述

  根据作业要求,是要读取日志文件统计疫情情况。首先根据选项,输入需要程序输出的要求,可以获取相应输出的文档。

  • 程序语言选择Java实现。
  • 在输入的args中,判断字符串,根据不同选项划分不同功能。
  • 创建新类,保存省份疫情信息。
  • 获取日志文件,按行获取日志内容。
  • 分割字符串,通过判断字符串,处理数据增减疫情人数信息。
  • 根据选项,筛选输出内容。
  • 保存到相应文件中。
软工实践寒假作业(2/2)_第1张图片

4. 设计实现过程

  根据思路解决相应的功能。

软工实践寒假作业(2/2)_第2张图片

5. 关键代码与思路

  • 处理命令行参数
private static void dealParameter(Vector vector) {
        // TODO Auto-generated method stub
        int pos=0;
        if(vector.get(0).equals("list")) 
        {
            for(int i = 0;i < vector.size();i ++ )
            {
                if(vector.get(i).charAt(0) == '-') {
                    if(vector.get(i).equals("-log"))
                    {
                        //System.out.print("-log:");
                        //System.out.print("interval.elementAt(pos):"+interval.elementAt(pos));
                        //System.out.print("(pos):"+pos);
                        for(int j = 0;j < interval.elementAt(pos);j ++ )
                        {
                            //System.out.print(vector.get(i+j+1));
                            inputAddress = vector.get(i+j+1);
                        }
                        //System.out.println();
                        i += interval.elementAt(pos);
                        pos ++ ;
                        continue;
                    }
.....

  .equals函数判断字符串,实现相应要求。首先判断“list”,再判断“-”开头的字符串,再计算不定参数的个数。

  • 不定输入参数
private static void initialVector() {
        // TODO Auto-generated method stub      
        for(int i = 0;i < vector.size();i ++ )
        {
            if(vector.get(i).charAt(0) == '-')
            {
                posVec.add(i);
            }
            if(vector.get(i).equals("全国")) //如果有全国,则省份个数减一个
            {
                isOutCountry = true;
                countryPos = i;
            }
        }
        if(isOutCountry) //如果有全国,则省份个数减一个
        {
            posVec.add(vector.size()-1);
        }
        else
        {
            posVec.add(vector.size());
        }
        
        for(int i = 1;i < posVec.size();i ++)
        {
            interval.add(posVec.elementAt(i)-posVec.elementAt(i-1)-1);
            //System.out.println(posVec.elementAt(i)-posVec.elementAt(i-1)-1);
        }
    }

  处理省份的时候,如果出现要求输出全国的疫情信息的时候,有一个方法可新建一个数组再重新排序,把“全国”放在第一位,这时候后面的下标就需都+1;也可唯独判断“全国”,节省空间。

  • 处理日期
    try {
            dBegin = sdf.parse("2019-12-31");
            dEnd = sdf.parse(inputEndDate);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //设置Calendar时间
        Calendar calBegin = Calendar.getInstance();
        calBegin.setTime(dBegin);
        Calendar calEnd = Calendar.getInstance();
        calEnd.setTime(dEnd);
        //在选择的日期内循环。
        while(dEnd.after(calBegin.getTime()))
        {
            calBegin.add(Calendar.DAY_OF_MONTH, 1);
            ......
        }

  根据输入的日期,处理2019-12-31日至输入日期的日志文件,calendar实现日期+1功能。

  • 文本按行分割
public static ArrayList FileReadLine(String name)//txt文件按行分割
    {
        //System.out.println(name);
        ArrayList arrayList = new ArrayList<>();
        try {
            File file = new File(name);
            InputStreamReader inputReader = new InputStreamReader(new FileInputStream(file));
            BufferedReader bf = new BufferedReader(inputReader);
            // 按行读取字符串
            String str;
            while ((str = bf.readLine()) != null) {
                arrayList.add(str);
            }
            bf.close();
            inputReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return arrayList;
    }

  创建ArrayList数据结构,存储行信息。

6. 单元测试截图和描述

软工实践寒假作业(2/2)_第3张图片

你可能感兴趣的:(软工实践寒假作业(2/2))