这个作业属于哪个课程 | 2020春S班 |
---|---|
这个作业要求在哪里 | 软工实践寒假作业(2/2) |
这个作业的目标 | GitHub 初使用、代码规范制定、需求分析、单元测试、覆盖率分析、性能分析 |
作业正文 | 就是本文 |
其他参考文献 | JUnit5、JProfiler |
这个作业属于哪个课程 | 2020春S班 |
---|---|
这个作业要求在哪里 | 软工实践寒假作业(2/2) |
这个作业的目标 | GitHub 初使用、代码规范制定、需求分析、单元测试、覆盖率分析、性能分析 |
作业正文 | 就是本文 |
其他参考文献 | JUnit5、JProfiler |
600
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.代码规范
代码风格
缩进
变量命名
采取驼峰命名法命名。
每行最多字符数
函数
函数最大的行数应该尽量维持在100行内(不包括注释行),超出过多则审视函数是否内部有可重构部分,有则提出重构为新的函数,使主函数代码更加清晰。
一个函数仅完成一件功能。
函数和类的命名
函数的命名遵循驼峰命名规则命名。
常量
常量命名全部使用大写,单词之间使用‘ _ ’分隔
空行规则
函数与函数之间保留一个空行
注释规则
单行注释用//,短的注释直接跟在语句后面,长的注释另起一行
多行注释使用/**/
操作符前后空格
值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ =”、“ +=”、“ >=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ ||”、“ <<” 、“ ^” 等二元操作符的前后应当加空格 。
7.5个仓库
Vue2全家桶仿微信App项目,支持多人在线聊天和机器人聊天
专为现代Web构建的基于Node .js的论坛软件
前端入门和进阶学习笔记,超详细的Web前端学习图文教程。
扩展表,用于与一些使用最广泛的CSS框架集成。
小型渐进式客户端HTTP请求库,以及具有相同API的Node.js模块,支持许多高级HTTP客户端功能