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文件的调用,基本就没什么难点了。虽然我的基础很差,但是我就是这么想的。后面需要两个函数,一个函数需要判断单词,在判断单词的同时实现存储单词,判断单词时候出现过,由于在判断单词的时候,需要判断字符,所以同时会完成字符总量的统计和有效行数的统计。在这个函数体中,需要传入的参数是调用文件的指针,指向的字符,还有建立的结构体。另一个函数,需要对结构体中出现单词频率最高的是个单词进行排序,采用冒泡排序法。

设计测试文档


按照题目要求设计了如下的!
image
基本符合测试的要求。这是初步设计的测试文件,后续会在测试结果中呈现

具体设计

函数实现之统计函数

  • [ wordsta]
    void wordsta(FILE *fp,sq t_word,sq *word)
    image
    这是发现一个单词的整个过程,在发现单词的同时,统计了字符,有效行数,以及单词数量。之后对比前面是否以后相同的单词,进行计数
  • [ sq] sq*namemath(sq *word)
    这是一个简单的冒泡排序,这里不再给出代码。

运行结果及性能分析

我选择了一本英文名著《傲慢与偏见》进行新能测试
image
由于名著中三个字母的单词很常出现,所以单词和字符的比例很正常,算是成功吧。
image
第一次接触性能分析,着实着迷那条条框框。
image
不难看出其中对比单词是否在以前出现过消耗的时间是最多的,在我的意料之中,因为涉及到数组的查找,但是不知道该怎么去优化。
总的来说不算庞大,但是用时也不是很长。

关于封装

这是我最头痛的问题,问了很多学长,但得到的基本都是不知道,我不会。所以只能去找一些资料自学,然后着了一些简单的函数封装,最后花了一个晚上(真真确确的一个晚上没睡觉)琢磨了一番,最后终于算是成功了。结构体的封装与类相似,函数的封装最为简单
image

总结

怎么说呢,其实很仓粗,因为到了周一才忙完一些事情,才开始着手去做这个作业。我的基础真的是差的没边,甚至我觉得我根本完成不了这次作业,在最开始的时候,我连函数的构建都还十分模糊,而且根本不知道如何去做封装,甚至在最后上交作业还有很多项目没有完成,一个是能力不足,再加上时间限制所以完成的不是很好,虽然想学但是,力不从心。但是这一个作业做出来之后,的确能学到很多东西。至少我是第一次写博客,第一次去封装。轻虐吧。image