软工实践寒假作业(2/2)

这个作业属于哪个课程 2020春S班
这个作业要求在哪里 软工实践寒假作业(2/2)
这个作业的目标 github初使用,代码规范制定,编写疫情统计程序
作业正文 https://www.cnblogs.com/ginphy/p/12318693.html
其他参考文献 .gitignore配置语法完全版-CSDN


一、GitHub仓库地址

https://github.com/Ginphy/InfectStatistic-main


二、PSP表格

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


三、解题思路

一开始看见这个题目,第一反应将其分为统计部分与信息输入/输出两部份来实现;我在编码时是先实现的统计部分再实现IO交互部分,在思考要如何实现统计部分的时候我是从数据结构着手,先想要用什么数据结构来在程序中存储多个地区多个群体类型的数据,因为是人数、地区、群体类型三个不同值之间的对应关系,就觉得使用MAP来实现比较方便(多维数组要人命啊啊啊啊)。设置4个MAP变量来表示4类不同的群体(sp,ip,cure,dead),在每个MAP变量中以String类型为key保存各省名称,value值则是该省该类型群体的人数,这样在编码时也比较直接可以使用MAP的.at("省份")来直接对数据进行操作。

然后在数据统计的时候就根据不同的情况对于各个MAP内对应省份的值进行加减就好了,比如在统计到A省死亡num个人时就在名为provincesDie的MAP变量中使用provincesDie.at("全国") += num;provincesDef.at(A省) -= num;对MAP内的数据进行处理就好啦,最后统计的时候就把这四个MAP变量都遍历一遍全部输出也很方便,如果参数指定了省份与类型也只需要根据读入的类型与省份快速定位到对应MAP变量使用.at()函数读取就好了。

计算统计部分设计完然后就是考虑IO交互部分,其实这题主要就是输入部分涉及到多个参数复杂,输出只要正常使用文件IO流fstream类就好了。输入部分的话可以看出这次给出的语句都是符合一定结构的,开头第一个词就是省份,而且每行的的词数都是可知的,所以我就采用了按词读取的方法,设置省份和类型的String变量,将第一个读入的词写入省份变量方便后面使用MAP的.at()函数进行统计,接下来读取第二个词语是类型,使用多个if...else结构对读入的每个词进行处理,比如读取到了死亡时可以预料到下一个词是“xx人”下一个词就读取到一个int变量中,然后剩下一个没读取的必然是一个“人”字,读掉这个词接下来再读取的就是下一行的新省份名了,如此反复。这个时候我们就有了省份名和死亡的两个String变量以及int类型的人数变量。我们就可以再if...else结构中找到对应的代码块根据信息对MAP结构进行操作了!
软工实践寒假作业(2/2)_第1张图片

四、设计实现

数据统计与数据读写的实现大致就是结题思路中的那样,如图这是在读取到了一行的数据并在if...else结构中进行判断找到相应代码块进行数据处理整个过程的流程图:
软工实践寒假作业(2/2)_第2张图片

软工实践寒假作业(2/2)_第3张图片

你可能感兴趣的:(软工实践寒假作业(2/2))