这个作业属于哪个课程 | |
---|---|
这个作业要求在哪里 | |
这个作业的目标 | 疫情统计 |
作业正文 | |
其他参考文献 | ... |
1.Github仓库地址。
https://github.com/RETORETO/InfectStatistic-main
2.PSP表格。
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 30 |
Estimate | 估计这个任务需要多少时间 | 30 | 30 |
Development | 开发 | 900 | 1170 |
Analysis | 需求分析 (包括学习新技术) | 60 | 130 |
Design Spec | 生成设计文档 | 30 | 50 |
Design Review | 设计复审 | 60 | 70 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 60 | 80 |
Design | 具体设计 | 600 | 710 |
Coding | 具体编码 | 60 | 120 |
Code Review | 代码复审 | 20 | 120 |
Test | 测试(自我测试,修改代码,提交修改) | 200 | 225 |
Reporting | 报告 | 60 | 95 |
Test Report | 测试报告 | 60 | 50 |
Size Measurement | 计算工作量 | 20 | 30 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 60 | 50 |
合计 | 1130 | 1425 |
3.解题思路描述
一开始拿到题目的的时候想到的是命令行参数会传递到JAVA的main函数中的String[] args,后面的工作应该以解析命令行参数为基础。
接下来是读取日志中的log文件,最后以txt的形式输出文件,读写的过程要根据命令行参数改变。由此得到一个初步的设计思路
4.设计实现过程
5.代码说明
读取Log文件后保存省份信息变动
判断输入内容以后更新省份信息
String strLine;
FileInputStream fstream;
BufferedReader br;
try {
fstream = new FileInputStream(new File(log));
InputStreamReader isr = new InputStreamReader(fstream,"UTF-8");
br = new BufferedReader(isr);
while((strLine = br.readLine()) != null){
String str[] = strLine.split(" ");//用空格分隔每一行中的记录
if(!str[0].substring(0,2).equals("//")){//忽略以"//"开头的记录行
int num = 0;//记录变动人数
int i = 1;//记录变动省份
int length = str.length;
str[length - 1] = str[length - 1].trim();
if(str[length - 1] != null && !"".equals(str[length - 1])){
for(int k = 0;k < str[length - 1].length();k++){
if(str[length - 1].charAt(k) >= 48 && str[length - 1].charAt(k) <= 57){
num = 10*num+str[length - 1].charAt(k) - 48;
}
}
}
while(!str[0].equals(province[i].name) && i < PROVINCE_NUM){
i++;
}
if(length == 3){
if(str[1].equals(TYPE[2])){//xx省份患者治愈
province[i].ip -= num;
province[i].cure += num;
}
else if(str[1].equals(TYPE[3])){//xx省份患者死亡
province[i].ip -= num;
province[i].dead += num;
}
}
else if(length == 4){
if(str[1].equals("新增")){
if(str[2].equals(TYPE[0])){//xx省份新增感染患者
province[i].ip += num;
}
else if(str[2].equals(TYPE[1])){//xx省份新增疑似患者
province[i].sp += num;
}
}
else if(str[1].equals(TYPE[1])){////xx省份疑似患者确诊
province[i].sp -= num;
province[i].ip += num;
}
else if(str[1].equals("排除")){//xx省份疑似患者排除
province[i].sp -= num;
}
}
else if(length == 5){
int j = 1;
while(!str[3].equals(province[j].name) && j < PROVINCE_NUM){
j++;
}
if(str[1].equals(TYPE[1])){//a省疑似患者流入b省
province[i].sp -= num;
province[j].sp += num;
}
else if(str[1].equals(TYPE[0])){//a省感染患者流入b省
province[i].ip -= num;
province[j].ip += num;
}
}
}
}
}
catch (FileNotFoundException e){
e.printStackTrace();
}
catch (UnsupportedEncodingException e){
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
解析命令行代码
逐个读取"-"开头的命令行后做比对
if(args.length > 0 && args[0].equals("list")){
for(int i = 1;i+1 < args.length;i++){
if(args[i].substring(0,1).equals("-")){
switch(args[i]){
case "-log" :log = args[i+1];break;
case "-out" :out = args[i+1];break;
case "-date" :date = args[i+1];break;
case "-type" :praseType(args,i,type);break;
case "-province" :
prov = true;//确认province参数输入
praseProvince(args,i,province);
break;
default :
System.out.println("输入了错误的参数"+args[i]+",请重新输入");
System.exit(0);
}
}
}
6.单元测试截图和描述。
对能想到的合法命令进行了测试
7.单元测试覆盖率优化和性能测试,性能优化截图和描述。
单元测试中因为测试格式不正确的参数的时候会中断程序,例如输入了不正确的文件地址时会中断。暂时没有找的好的测试方法
优化上读取文件信息的时候会储存没有必要输出的省份信息,这部分信息可以在读取的时候舍弃
8.代码规范的链接
https://github.com/RETORETO/InfectStatistic-main/blob/master/041701602/example/codestyle.md
9.结合在构建之法中学习到的相关内容,撰写解决项目的心路历程与收获。
花费的时间其实比想象中的多不少,第一次尝试这么系统的去完成一个项目,通过《构建之法》能了解到自己以前很多做法上的错误
学到了单元测试的使用,很大程度上简化了代码测试
10.第一次作业中技术路线图相关的5个仓库
前端开发者手册,它概述并讨论了前端工程的实践,该如何学习以及实践时该使用什么工具
https://github.com/helloqingfeng/Awsome-Front-End-learning-resource/tree/master/02-fedHandlebook-master
前端开发规范手册,在开发中积累下来的经验和参考其它规范,起指导作用
https://github.com/helloqingfeng/Awsome-Front-End-learning-resource/tree/master/27-front-end-style-guide
腾讯alloteam前端代码规范
https://alloyteam.github.io/CodeGuide/
百度ecomfe前端代码规范
https://github.com/ecomfe/spec
iView管理是一个前端管理后台集成解决方案。它基于Vue.js并使用UI工具包iView。
https://github.com/iview/iview-admin