• 软件工程实践寒假作业(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客户端功能

     

  • 相关阅读:
    使用mysqltools配置读写分离环境
    mysql group replication 主节点宕机恢复
    django ---- models继承
    django -- 对模式进行调式(pay with the api)
    django -- 多对多关系的实现
    django -- verbose_name的对数据库层面的影响
    django -- model中只有Field类型的数据才能成为数据库中的列
    django -- 为model 指定数据库名
    django -- 联合索引
    flask基础之jijia2模板使用基础(二)
  • 原文地址:https://www.cnblogs.com/n310/p/12323648.html
Copyright © 2020-2023  润新知