Github地址https://github.com/baichenxi:
PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 20 |
· Estimate | · 估计这个任务需要多少时间 | 80 | 70 |
Development | 开发 | 1000 | 1000 |
· Analysis | · 需求分析 (包括学习新技术) | 180 | 180 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 | 30 | 40 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 45 |
· Design | · 具体设计 | 20 | 100 |
· Coding | · 具体编码 | 300 | 350 |
· Code Review | · 代码复审 | 200 | 200 |
· Test | · 测试(自我测试,修改代码,提交修改) | 500 | 200 |
Reporting | 报告 | 50 | 120 |
· Test Repor | · 测试报告 | 20 | 30 |
· Size Measurement | · 计算工作量 | 100 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 40 |
| | 合计 | 2560|2635
需求分析
对程序的功能进行需求分析如下:
实现Wrdcount.exe的命令行程序
//C语言类
WordCount.exe input.txt
//Java语言
java WordCount input.txt
基本功能
-
统计文件的字符总量:
只需要统计Ascii码,汉字不需考虑(我的理解就是,中文不能计入) 空格,水平制表符,换行符,均算字符
-
统计文件有效行数:
任何包含非空白字符的行,都需要统计。
-
统计文件单词总数。
单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写 分割符:空格,非字母数字符号 例:file123是一个单词,123file不是一个单词。file,File和FILE是同一个单词
-
统计单词出现频率,并且输出前10个出现频率最高的单词。
-
输出格式
-
characters: number words: number lines: number <word1>: number <word2>: number
环境
操作系统:Windows 10
IDE:Visual Studio 2017 Community
编程语言:C++
思路
我开始的思路很明确,建立结构体,存放单词以及单词出现的频率,其中存放单词的是一个数组,存放频率的为整型。难点在于取文件中的字符和单词的判断。于是借鉴了博客的一些大牛。解决对txt文件的调用,基本就没什么难点了。虽然我的基础很差,但是我就是这么想的。后面需要两个函数,一个函数需要判断单词,在判断单词的同时实现存储单词,判断单词时候出现过,由于在判断单词的时候,需要判断字符,所以同时会完成字符总量的统计和有效行数的统计。在这个函数体中,需要传入的参数是调用文件的指针,指向的字符,还有建立的结构体。另一个函数,需要对结构体中出现单词频率最高的是个单词进行排序,采用冒泡排序法。
设计测试文档
按照题目要求设计了如下的!
基本符合测试的要求。这是初步设计的测试文件,后续会在测试结果中呈现
具体设计
函数实现之统计函数
- [ wordsta]
void wordsta(FILE *fp,sq t_word,sq *word)
这是发现一个单词的整个过程,在发现单词的同时,统计了字符,有效行数,以及单词数量。之后对比前面是否以后相同的单词,进行计数 - [ sq] sq*namemath(sq *word)
这是一个简单的冒泡排序,这里不再给出代码。
运行结果及性能分析
我选择了一本英文名著《傲慢与偏见》进行新能测试
由于名著中三个字母的单词很常出现,所以单词和字符的比例很正常,算是成功吧。
第一次接触性能分析,着实着迷那条条框框。
不难看出其中对比单词是否在以前出现过消耗的时间是最多的,在我的意料之中,因为涉及到数组的查找,但是不知道该怎么去优化。
总的来说不算庞大,但是用时也不是很长。
关于封装
这是我最头痛的问题,问了很多学长,但得到的基本都是不知道,我不会。所以只能去找一些资料自学,然后着了一些简单的函数封装,最后花了一个晚上(真真确确的一个晚上没睡觉)琢磨了一番,最后终于算是成功了。结构体的封装与类相似,函数的封装最为简单
总结
怎么说呢,其实很仓粗,因为到了周一才忙完一些事情,才开始着手去做这个作业。我的基础真的是差的没边,甚至我觉得我根本完成不了这次作业,在最开始的时候,我连函数的构建都还十分模糊,而且根本不知道如何去做封装,甚至在最后上交作业还有很多项目没有完成,一个是能力不足,再加上时间限制所以完成的不是很好,虽然想学但是,力不从心。但是这一个作业做出来之后,的确能学到很多东西。至少我是第一次写博客,第一次去封装。轻虐吧。