第三次作业
git地址:https://github.com/moran029/WordCount.git
本次作业链接:https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882
搭档博客:https://www.cnblogs.com/Abbas/p/10646661.html
1.结对项目PSP编写
我们的项目于4月2日正式开始,在开始编写代码之前,我们先就对项目需求进行了一次商定与讨论,大体分析了一下需要我们做什么。结合自身课程情况,约定了一起进行结对编程的时间和地点,并且共同完成了PSP表格的填写:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 | 25 |
· Estimate |
· 估计这个任务需要多少时间 |
30 | 25 |
Development |
开发 |
1095 | 1360 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 | 60 |
· Design Spec |
· 生成设计文档 |
40 | 60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 | 60 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 30 |
· Design |
· 具体设计 |
60 | 100 |
· Coding |
· 具体编码 |
800 | 900 |
· Code Review |
· 代码复审 |
45 | 100 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 | 50 |
Reporting |
报告 |
110 | 125 |
· Test Report |
· 测试报告 |
60 | 80 |
· Size Measurement |
· 计算工作量 |
20 | 20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 25 |
合计 |
1235 | 1510 |
2.描述结对过程及照片
我们的项目于4月2日正式开始,共同对题目进行了分析,分别阐述了对题目的看法,并进行了任务分工以及制定代码规范,并且共同完成PSP表格的填写。按照项目要求,分别实现功能。遇到不懂的,两人互相帮助,查阅资料。在各自实现基本功能之后,按照制定的代码规范进行对程序的修改,将程序整合在一起,完成此次结对项目。
3.解题思路描述
阅读题目过程后,发现需要实现的功能主要有以下几个方面:
- 读取文件。
- 统计文件的字符数。
- 统计文件的单词总数。
- 统计文件的有效行数。
- 统计文件中各单词的出现次数。
- 输出格式:
- characters: number
words: number
lines: number
<word1>: number
<word2>: number
...
4.设计实现过程
5.代码规范及链接
1.类型(类、结构、委托、接口)、字段、属性、方法、事件的命名:
优先考虑使用英文(尽量使用英文),如果实在没有合适的英文进行描述,可以使用拼音。
2.不使用缩写:
所有类型、字段、属性、方法、事件尽量不使用缩写。
3.不使用单个字母的变量:
不使用单个字母的变量, 像 i、m、n,使用temp等来替换,用于循环迭代的变量除外。
4.用Tab作为缩进,并设置缩进大小为4。
5.注释:类型、属性、事件、方法、方法参数,根据需要添加注释。
6.一个方法只完成一个任务。不要把多个任务组合到一个方法中,即使那些任务非常小。
7.调用类型成员内部其他成员,需加this,调用父类成员需加base。
8.在一个类中,各个方法需用一空行(最好是一个空行)。
6.代码说明
统计单词出现次数
class Word { public int GetWords(string Filename) { StreamReader sr = new StreamReader(Filename); int count = 0; string s = sr.ReadToEnd(); string[] word = s.Split(' ', ',', '.', '!', '?', '\n'); foreach (string i in word) { int n = 0; int m = 0; foreach (char c in i) { n++; if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90)) m++; while (m == 4 && n == 4) { count++; break; } } } return count; }
统计词频并排序
class Wordfrequency { public List<string> Insert(string Filename)//将符合条件的单词写入list集合中 { List<string> list = new List<string>(); StreamReader sr = new StreamReader(Filename); string s = sr.ReadToEnd(); string[] word = s.Split(' ', ',', '.', '!', '?', '\n', '\t'); foreach (string i in word) { int count = 0; int m = 0; foreach (char c in i) { count++; if ((c >= 97 && c <= 122) || (c >= 65 && c <= 90)) m++; while (m == 4 && count == 4) { list.Add(i); break; } } } return list; } public Dictionary<string, int> Fre(List<string> word)//将list写入dictionary { Dictionary<string, int> Wd = new Dictionary<string, int>(); for (int i = 0; i < word.Count; i++) { if (Wd.ContainsKey(word[i])) Wd[word[i]]++; else Wd[word[i]] = 1; } Dictionary<string, int> Wd_sort = Wd.OrderByDescending(o => o.Value).ToDictionary(p => p.Key, o => o.Value);//将集合按value值进行逆序排序 return Wd_sort; } }
截图
7.感受
结对编程需要时间的磨合,起初不能达到1+1>2的效果。最开始时根本不知道从哪里入手,经过一段时间的磨合之后,才能初步进入状态。