1.GitHub项目
https://github.com/Littlehui3/wc
2.用时表格
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
45 |
50 |
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
45 |
50 |
Development |
开发 |
880 |
740 |
Analysis |
需求分析 (包括学习新技术) |
60 |
30 |
Design Spec |
生成设计文档 |
30 |
- |
Design Review |
设计复审 (和同事审核设计文档) |
10 |
- |
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
40 |
40 |
Design |
具体设计 |
60 |
80 |
Coding |
具体编码 |
400 |
510 |
Code Review |
代码复审 |
30 |
30 |
est |
测试(自我测试,修改代码,提交修改) |
250 |
200 |
Reporting |
报告 |
450 |
180 |
Test Report |
测试报告 |
300 |
370 |
Size Measurement |
计算工作量 |
30 |
- |
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
60 |
80 |
Summary |
合计 |
2690 |
2410 |
3.解题思路
一开始审题认为可能需要处理多条语句,考虑使用线程池来处理每个用户的请求,这样既可以封装用户的每个请求到一个request类里,还能有效防止线程过多造成的效率下降。考虑到控制台和图形界面都需要与管理线程的业务逻辑相分离,设计了一个RequestManager来管理所有请求。统计空格、行数、字符数都十分相似,分开为三个类,实现Counter接口,使得它们的结构更加规范,同时也使得增加新的Counter更方便,可扩展性提高。
实际开发过程中,从三个Counter的实现开始,让Request处理选项和文件,代码有点长,于是分开了两个方法来分别处理选项和文件。
文件方面,支持相对路径、绝对路径、当前目录下的同类型文件(*.txt *.c)输入
选项方面,支持 -l、-w、-c、-s
4.类的关系图