作业地址:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110

一、程序要求(60分)

简述

程序名称:wf.exe
作用:一个用于统计文本文件(文件名后缀为txt)中的单词出现次数的控制台程序
单词:不以数值开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。

  • 英文字母:A-Za-z
  • 字母数字符号:A-Za-z0-9
  • 分割符:空格,非字母数字符号
  • 例:file123是一个单词,123file不是一个单词。fileFileFILE是同一个单词

功能列表:

  • 功能1:统计文件中不重复的单词数量
  • 功能2:指定文件目录,统计文件名称按照字典序最靠前的文本文件中不重复的单词数量
  • 功能3:输出出现次数最多的前N个单词
    实现效果请与教师和助教给出样例保持一致。

功能1(10分)

控制台输入格式wf -c 文件名,以“input.txt”作为文件名为例,如下。total为不重复单词的总数量,例如“she is not she”,则total为3。
输出的单词均为小写字母。

wf -c input.txt
/*
 *要求程序统计文本文件input.txt中不重复的单词数量,最终输出
 *例:input.txt文件中内容为"Talk is cheap,Show me the code. I‘m a coder. 123, 123file, file123 is A word! "
 *则输出如下
 */
total 13

talk     1
is       2
cheap    1
show     1
me       1
the      1
code     1
i        1
m        1
a        2
coder    1
file123  1
word     1

功能2(18分)

控制台输入格式wf -f 文件路径,以“E:\code”作为文件路径为例,如下。

wf -f E:\code
/*
 *要求程序统计目录E盘的code文件夹中,文件名称按照字典序最靠前的文本文件的不重复的单词数量,最终输出
 *例:E:\code中有input.txt、output.txt和test.txt三个文本文件,程序应选择input.txt进行词频统计,input.txt文件中内容为"Talk is cheap,Show me the code. I‘m a coder. 123, 123file, file123 is A word! "
 *则输出如下
 */
total 13 words
a        2
cheap    1
code     1
coder    1
file123  1
i        1
is       2
m        1
me       1
show     1
talk     1
the      1
word     1

功能3(27分)

控制台输入格式wf -f 文件路径 -n 数量 或者wf -c 文件名 -n 数量 或者wf -n 数量 -c 文件名或者wf -n 数量 -f 文件路径
以“E:\code”作为文件路径,以“input.txt”作为文件名为例,数量为3,如下。
统计文件中各单词的出现次数,最终只输出频率最高的3个。频率相同的单词,优先输出字典序靠前的单词。

wf -f E:\code -n 3
/*
 *要求程序统计目录E盘的code文件夹中,文件名称按照字典序最靠前的文本文件的不重复的单词数量,最终输出词频最高的3个单词
 *例:E:\code中有input.txt、output.txt和test.txt三个文本文件,程序应选择input.txt进行词频统计,input.txt文件中内容为"Talk is cheap,Show me the code. I‘m a coder. 123, 123file, file123 is A word! "
 *则输出如下
 */
Total words is 13
----------
a        2
is       2
cheap    1

版本控制(5分)

git项目名称为wf,例如:https://git.coding.net/XXX/wf.git。代码要求在 coding.net 做版本控制。要求push&pull时使用git客户端,而不使用web页面。
推荐git客户端tortoisgit。安装过程可参考链接:https://www.cnblogs.com/ranh941/p/7555082.html
请注意助教或教师会使用脚本pull每个人的项目,如果你在博客中给出的链接不符合规范而导致脚本无法获取你的项目,那么程序要求得分为0。

测试

(1)“从控制台读入英文单篇作品”中的英文作品,例如https://coding.net/u/Dawnfox/p/First/git/blob/master/wf/the_dead_return.txthttps://coding.net/u/Dawnfox/p/First/git/blob/master/wf/war_and_peace.txt。除上述两个英文原版txt文件以外,大量英文原版(无版权,不是盗版)的测试用例在[http://www.gutenberg.org/]可以找到。
(2)文本文件input.txt

Ten green bottles
Hanging on the wall

Ten green bottles

Hanging on the wall

And if one green bottle

Should accidentally fall

There'll be nine green bottles

Hanging on the wall!

二、博客要求(40分)

要求0(5分)

【你的博客第一行必须写上作业要求的博客链接】 这样,读者看到学生的博客后,就可以点击到作业要求的博客。
例如:https://www.cnblogs.com/ranh941/p/7999266.html
反向链接,让读者了解背景。要不然很多人看了,并不了解要求,也是一头雾水。
作业如果没有此项,此次作业无效。

要求1(5分)

在博客中给出你们git仓库地址

要求2(10分)

  • 在同一篇博客中,参照教材第35页表2-2和表2-3,为词频统计项目制作PSP阶段表格。
  • PSP阶段表格中第一列中的“具体编码”、“具体设计”和测试应分类,如功能1、功能2、测试功能1等。
  • 词频统计项目的预估耗时和实际耗时的时间颗粒度为分钟,请对比预估耗时和实际耗时的差距,分析原因。
  • 有关PSP的更多内容,请自行阅读邹欣老师的博客:http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html

要求3(20分)

  • 解题思路描述。即刚开始拿到题目后,如何思考,如何找资料的过程。(5分)
  • 介绍上述“项目”中每个功能的重点/难点,展示重要代码片断,展示你感觉得意、突破、困难的地方。(10分)
    代码要求:要求使用cnblogs代码控件。凡粘贴IDE中的代码截图,或者贴文字而没有关键字高亮或彩色的,要求3的得分记作0分。参考往届博客https://www.cnblogs.com/ranh941/p/7545915.htmlhttp://www.cnblogs.com/huangxman/p/5871201.html
  • 结合在构建之法中学习到的相关内容与结对项目的实践经历,撰写解决项目的心路历程与收获。(5分)

附加分(10分)

博客言之有物,表达清楚,不敷衍了事(比如一行笼统文字或者有图片而不对图片内容作解释等),以上标准由助教和教师判定。

我们(本校或外校教师或助教)对于你的作业和项目的任何评价,都不是对你的价值观或道德的评价,而是在我们对软件工程学科的理解基础上,对你的工作的评论。