2020软件工程实践寒假第二次作业

声明

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/2020SpringW
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2020SpringW/homework/10281
这个作业的目标
作业正文 https://www.cnblogs.com/linjieblog/p/12325644.html
其他参考文献 ...

Github仓库地址

主仓库地址:https://github.com/numb-men/InfectStatistic-main
我的仓库地址:https://github.com/linjieok/InfectStatistic-main

PSP表格

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

解题思路

需求

假设有一家统计网站每天都会提供一个对应的日志文本,记录国内各省前一天的感染情况,如它2020-01-23发布的日志文本可能长这样:

福建 新增 感染患者 23人
福建 新增 疑似患者 2人
浙江 感染患者 流入 福建 12人
湖北 疑似患者 流入 福建 2人
安徽 死亡 2人
新疆 治愈 3人
福建 疑似患者 确诊感染 2人
新疆 排除 疑似患者 5人
// 该文档并非真实数据,仅供测试使用
该日志中出现以下几种情况:
1、 新增 感染患者 n人
2、 新增 疑似患者 n人
3、 感染患者 流入 n人
4、 疑似患者 流入 n人
5、 死亡 n人
6、 治愈 n人
7、 疑似患者 确诊感染 n人
8、 排除 疑似患者 n人
PS:

日志中各种情况的出现顺序不定,省出现的顺序不定,出现哪些省不定,省出现几次不定。
该日志文件的命名遵守对应的规范: 年-月-日.log.txt ,如2020-01-22.log.txt。
文件日期并不一定连续,若某天的日志缺失,默认为该天的情况没有变化。认为日志提供的最早一天的前一天不存在任何感染情况。如只提供2020-01-23,2020-01-25则可认为2020-01-24增长变化都为0。-date不会提供在日志最晚一天后的日期,若提供应给与日期超出范围错误提示。

命令行(win+r cmd)cd到项目src下,之后输入命令:

$ java InfectStatistic list -date 2020-01-22 -log D:/log/ -out D:/output.txt
会读取D:/log/下的所有日志,然后处理日志和命令,在D盘下生成ouput.txt文件列出2020-01-22全国和所有省的情况(全国总是排第一个,别的省按拼音先后排序)

全国 感染患者22人 疑似患者25人 治愈10人 死亡2人
福建 感染患者2人 疑似患者5人 治愈0人 死亡0人
浙江 感染患者3人 疑似患者5人 治愈2人 死亡1人
// 该文档并非真实数据,仅供测试使用
list命令 支持以下命令行参数:

-log 指定日志目录的位置,该项必会附带,请直接使用传入的路径,而不是自己设置路径
-out 指定输出文件路径和文件名,该项必会附带,请直接使用传入的路径,而不是自己设置路径
-date 指定日期,不设置则默认为所提供日志最新的一天。你需要确保你处理了指定日期之前的所有log文件
-type 可选择[ip: infection patients 感染患者,sp: suspected patients 疑似患者,cure:治愈 ,dead:死亡患者],使用缩写选择,如 -type ip 表示只列出感染患者的情况,-type sp cure则会按顺序【sp, cure】列出疑似患者和治愈患者的情况,不指定该项默认会列出所有情况。
-province 指定列出的省,如-province 福建,则只列出福建,-province 全国 浙江则只会列出全国、浙江
注:java InfectStatistic表示执行主类InfectStatistic,list为命令,-date代表该命令附带的参数,-date后边跟着具体的参数值,如2020-01-22。-type 的多个参数值会用空格分离,每个命令参数都在上方给出了描述,每个命令都会携带一到多个命令参数

思路

2020软件工程实践寒假第二次作业_第1张图片

首先从命令行获取命令,读取命令行输入的参数,进行参数的分析处理,根据不同的参数进行不同的函数处理,最后在指定的位置输出成要求的规范内容。

2020软件工程实践寒假第二次作业_第2张图片

设计命令类,从命令行读入参数。首先判断参数是否正确,是否list,不是则报错。如果是,进行参数的识别和保存。遍历参数表,找到相关命令并保存。

根据参数,从指定路径读取日志,按照date处理日志。通过正则表达式处理日志数据,保存成规范模式。

保存的数据根据参数输出到指定位置。

关键代码

保存命令中的province和type类型,方便识别

获取命令中的各个参数

2020软件工程实践寒假第二次作业_第3张图片

读取-log 后路径下的所有文件名,并进行处理

2020软件工程实践寒假第二次作业_第4张图片

对日志内容进行正则匹配,通过bool类型确定属于哪一种类型,分类处理

2020软件工程实践寒假第二次作业_第5张图片

未完待续

心路历程和收获

本次作业相对较复杂,用到了许多之前没有学过的东西。首先是Github的使用和Git命令,学习基础Git命令、Github Desktop使用。接着是使用java编程

由于之前的学习不够,对java的掌握较差,算法和语言都不太熟悉,做作业时遇到了很多困难和问题。最后是整个作业的规划,因为没有好好规划时间导致

没有按时完成,以及遗留很多错误。

本次收获:

1.在需要时要学会求助周围的同学和助教,通过自己很难完成所有的任务

2.要提高自学能力,使用网络和资源进行学习,很多未知的知识需要靠自己学习和掌握,并在错误和尝试中不断学习。

3.要做好规划和计划,才能及时完成作业。

代码规范

https://github.com/linjieok/InfectStatistic-main/blob/master/221701132/codestyle.md

相关的五个仓库

1.模拟登录知乎, 爬虫,操作excel,微信公众号,远程开机:https://github.com/injetlee/Python

2.Python教程:https://github.com/TwoWater/Python

3.Python入门网络爬虫之精华版:https://github.com/lining0806/PythonSpiderNotes

4:小白的Python入门教程实战篇:https://github.com/michaelliao/awesome-python3-webapp

5:Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等https://github.com/jobbole/awesome-python-cn

你可能感兴趣的:(2020软件工程实践寒假第二次作业)