zoukankan      html  css  js  c++  java
  • 软件工程实践寒假作业(2/2)

    这个作业属于哪个课程 2020春S班
    这个作业要求在哪里                                软工实践寒假作业(2/2)
    这个作业的目标 GitHub 初使用、代码规范制定、需求分析、单元测试、覆盖率分析、性能分析
    作业正文 就是本文
    其他参考文献 JUnit5、JProfiler

     

    1.PSP表格

     
    PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
    Planning 计划    
    Estimate 估计这个任务需要多少时间

    600

    600
    Development 开发    
    Analysis 需求分析 (包括学习新技术) 60 90
    Design Spec 生成设计文档 30 20
    Design Review 设计复审 30 20
    Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 20
    Design 具体设计 60 60
    Coding 具体编码 480 450
    Code Review 代码复审 90 60
    Test 测试(自我测试,修改代码,提交修改) 90 60
    Reporting 报告    
    Test Repor 测试报告 30 30
    Size Measurement 计算工作量 30 30
    Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 45
    total 合计 1560 1485

     

    2.解题思路描述

     

    3.设计实现过程

    4.代码说明

    判断是否符合-type的参数值
    public boolean checkType(String a) {return Pattern.matches("ip|sp|cure|dead",a);}
      判断参数是否正确
    public boolean checkParamter(String a){...}
      判断日期是否符合形式
    public boolean checkDate(String a){}{...}
      判断输入省份是否符合要求
    public boolean checkProvinces(String a){...}
      判断是否为所需要的日志形式
    public boolean checkLogFile(String a){...}

     Province {

        全国, 安徽, 北京, 重庆, 福建, 甘肃, 广东, 广西, 贵州, 海南, 河北, 河南, 黑龙江, 湖北, 湖南, 吉林, 江苏, 江西, 辽宁,

        内蒙古, 宁夏, 青海, 山东, 山西, 陕西, 上海, 四川, 天津, 西藏, 新疆, 云南, 浙江;

    }

    //处理日志文件 public void dealFile(File file)

     { try { if(!file.exists()&&file.isDirectory())

     { throw new FileNotFoundException(); }

     InputStreamReader inputReader=new InputStreamReader(new FileInputStream(file),"UTF-8");

     BufferedReader br=new BufferedReader(inputReader);

    String temp; while((temp=br.readLine())!=null)

    { //跳过// if(temp.indexOf("//")!=0)

    { String temps[]=temp.split(" ");

    String number=temps[temps.length-1]

    .substring(0, temps[temps.length-1].length()-1);

    int changeNumber=Integer.parseInt(number);

     int firstProvinceIndex=getProvinceIndex(temps[0]);

     if(temps.length==4) { if(temps[1].equals("新增"))

    { if(temps[2].equals(typeName[0]))

    { StatisticsNumber[firstProvinceIndex][0]+=changeNumber; }

     else {

     StatisticsNumber[firstProvinceIndex][1]+=changeNumber;

     }

    }

     else

    { StatisticsNumber[firstProvinceIndex][1]-=changeNumber;

     if(temps[1].equals("疑似患者"))

     { StatisticsNumber[firstProvinceIndex][0]+=changeNumber; }

     } }

     else if(temps.length==3) { if(temps[1].equals("死亡"))

    { StatisticsNumber[firstProvinceIndex][3]+=changeNumber; }

     Else

     { StatisticsNumber[firstProvinceIndex][2]+=changeNumber; }

    StatisticsNumber[firstProvinceIndex][0]-=changeNumber; }

     else {

    int secondProvinceIndex=getProvinceIndex(temps[3]);

     if(temps[1].equals(typeName[0]))

    { StatisticsNumber[firstProvinceIndex][0]-=changeNumber; StatisticsNumber[secondProvinceIndex][0]+=changeNumber; }

     else

    { StatisticsNumber[firstProvinceIndex][1]-=changeNumber; StatisticsNumber[secondProvinceIndex][1]+=changeNumber; }

    }

     ChangeProvince[getProvinceIndex(temps[0])]=1; }

    }

    br.close();

     }

    catch (IOException e)

    { // TODO Auto-generated catch block e.printStackTrace(); } }

    //输出文件内容public void writeOutTxt()

    FileWriter fwriter = null;

    int i, j; provinceExist[0] = 1;

    try { fwriter = new FileWriter(outPath);

    if(isProvinceExist == 0){ //若-province未指定

    for(i = 0; i < 35; i++){

    if(provinceExist[i] == 1)

    { fwriter.write(provinceStr[i] + " ");

    if(isTypeExist == 0){ //若-type未指定

    for( j = 0; j < 4; j++)

    fwriter.write(typeStr[j] + peopleNumber[i][j] + "人 ");}

    else{ //若-type指定

    for( j = 0; j < 4; j++)

    if(type[j] != 0)

    fwriter.write(typeStr[type[j]-1] + peopleNumber[i][type[j]-1] + "人 ");

    }

    fwriter.write(" ");

    }

    }

    }

     

    5.单元测试和描述

    6.代码规范

    代码风格

    缩进

    1. 如果开发工具可以设置,则统一设置缩进为四个空格。
    2. 当一行代码划分为两行或多行时,要缩进对齐。

    变量命名

    采取驼峰命名法命名。

    每行最多字符数

    1. 单行字符限制不超过120个,超出需要换行

    函数

    函数最大的行数应该尽量维持在100行内(不包括注释行),超出过多则审视函数是否内部有可重构部分,有则提出重构为新的函数,使主函数代码更加清晰。

    一个函数仅完成一件功能。

    函数和类的命名

    函数的命名遵循驼峰命名规则命名。

    常量

    常量命名全部使用大写,单词之间使用‘ _ ’分隔

     

    空行规则

    函数与函数之间保留一个空行

    注释规则

    单行注释用//,短的注释直接跟在语句后面,长的注释另起一行

    多行注释使用/**/

    操作符前后空格

    值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ =”、“ +=”、“ >=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ ||”、“ <<” 、“ ^” 等二元操作符的前后应当加空格 。

    7.5个仓库

    Vue2全家桶仿微信App项目,支持多人在线聊天和机器人聊天

    专为现代Web构建的基于Node .js的论坛软件

    前端入门和进阶学习笔记,超详细的Web前端学习图文教程。

    扩展表,用于与一些使用最广泛的CSS框架集成。

    小型渐进式客户端HTTP请求库,以及具有相同API的Node.js模块,支持许多高级HTTP客户端功能

     

  • 相关阅读:
    streamsets docker 安装试用
    使用graphql-code-generator 生成graphql 代码
    ORA-12537:TNS:connectionclosed错误处理过程
    解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
    ORACLE定期清理INACTIVE会话
    Oracle session active 和 inactive 状态 说明
    如何查看数据库软件共创建了多少个库(实例)
    某表空间增长很快,但找不到是哪一个表造成的
    Oracle用户被锁定解决方法
    Oracle的sqlnet.ora文件配置
  • 原文地址:https://www.cnblogs.com/n310/p/12323648.html
Copyright © 2011-2022 走看看