目标功能:
- 统计文件的字符数
- 统计文件的单词总数
- 统计文件的总行数
- 统计文件中各单词的出现次数
- 对给定文件夹及其递归子文件夹下的所有文件进行统计
- 统计两个单词(词组)在一起的频率,输出频率最高的前10个。
需求分解:
- 能从命令行中获取参数。
- 对给定文件夹及其递归文件夹里的文件进行读取,并有一定的容错能力。疑问:递归是强制功能还是可选功能?)
- 能够判断单词的定义。
- 能够快速存取单词出现次数与词组次数。
- 对字符流中的字符按照不同规则进行统计。疑问:不同规则的统计是否要拆解成不同功能?)
- 对字符流中的单词进行统计。
- 对统计的出现次数进行排序,筛选出最高的10个。
- 对结果进行输出。
模块分解:
- 文件的读取模块。具体需求:遍历给定文件夹,依次读取每个文件。
- 简单的字符和行数的统计功能,作为一个模块。具体需求:统计字符流的字符与行数。
- 将单词的判断条件封装为一个独立的类。具体需求:对于给定的字符,可以判断是否为单词、为哪个单词。
- 单词的统计功能。具体需求:统计字符流中的单词数、词组数。
- 表单功能。具体需求:提供查表功能,尽量快速地查找与修改每个单词的统计数目。另外提供查找最大值的功能。思路:使用stl,哈希表或字典树。查找最大值可以通过维护一个最大值表(较慢)、直接搜索(较慢)或者采用特定的数据结构(是否与前述矛盾?)疑问:3.4.5.模块是否划分过于细致?
- 输出模块。具体需求:从给定数据给出输出。
- 主模块。具体需求:从命令行读取数据,调用各模块完成工作。
疑问:
各个字符、单词的统计是一次性、一起统计,还是多次访问文件、分别统计?若是前者,恐怕耦合严重。若是后者,读文件可能效率不高。假如用buff暂时存储字符串从而多次统计过于浪费资源,而且可能出现溢出,还会将字符流划分成多段,可能带来问题。为了方便编码,先使用后者多次读文件完成,后期进行效率优化。
进度规划:
由于其他任务,今天才开始进行这个作业。因此之后必须加紧时间。
上述模块分解只是一个初步分解,仍然有很多不妥之处。个人打算先分别完成各个模块的初步功能,再根据问题进行调整。因此,进度规划只能大概规划,无法太细致。
进度计划:
模块1. 和7. 的命令行读取:较为简单,首先尽快解决,尽量增强健壮性。
模块6. :今天之内完成。完成这些之后,大体框架就能够运行了。
模块2. :今天之内完成。
模块3. :尽量今天之内完成。至少周一之内完成。
模块4. 5. :周一完成初步
模块5. :周一、周二更改方案,选择最合适的方案。
性能测试:周三进行。
语言:c++
平台:visual studio
单元测试:
vs有自带的单元测试模块,但是过于庞大,所以我打算自己写简单的单元测试类。