1.Github项目地址:https://github.com/BayardM/WordCount
2.PSP表格(before):
| 
 PSP2.1  | 
 Personal Software Process Stages  | 
 预估耗时(分钟)  | 
 实际耗时(分钟)  | 
| 
 Planning  | 
 计划  | 
 30  | 
 
  | 
| 
 · Estimate  | 
 · 估计这个任务需要多少时间  | 
 30  | 
 
  | 
| 
 Development  | 
 开发  | 
 50  | 
 
  | 
| 
 · Analysis  | 
 · 需求分析 (包括学习新技术)  | 
 100  | 
 
  | 
| 
 · Design Spec  | 
 · 生成设计文档  | 
 15  | 
 
  | 
| 
 · Design Review  | 
 · 设计复审 (和同事审核设计文档)  | 
 0  | 
 
  | 
| 
 · Coding Standard  | 
 · 代码规范 (为目前的开发制定合适的规范)  | 
 10  | 
 
  | 
| 
 · Design  | 
 · 具体设计  | 
 40  | 
 
  | 
| 
 · Coding  | 
 · 具体编码  | 
 40  | 
 
  | 
| 
 · Code Review  | 
 · 代码复审  | 
 30  | 
 
  | 
| 
 · Test  | 
 · 测试(自我测试,修改代码,提交修改)  | 
 60  | 
 
  | 
| 
 Reporting  | 
 报告  | 
 25  | 
 
  | 
| 
 · Test Report  | 
 · 测试报告  | 
 10  | 
 
  | 
| 
 · Size Measurement  | 
 · 计算工作量  | 
 10  | 
 
  | 
| 
 · Postmortem & Process Improvement Plan  | 
 · 事后总结, 并提出过程改进计划  | 
 20  | 
 
  | 
| 
 合计  | 
 
  | 
 470  | 
 
 
  | 
3.解题思路:
刚开始拿到题目时因为感觉题目很长,要求很多,所以感到很懵,一点没懂到底要做什么,便在网上查阅了一些资料与博客,研究了牛人们的讲解终于明白题目意思,并且知道此次题目会涉及文档流的操作,因为自己暂时对c语言使用更加灵活,所以本次开发全为C语言。
4.设计实现过程:
代码简单明了大致分为四部分,三个基本功能各一个函数实现,主函数中对功能进行相应调用执行及功能使用的指引。
5.代码说明:
字符数类:
1 //字符数 2 int CharacterCount(char filepath[]) 3 { 4 FILE *f1 = NULL; 5 char c; 6 int charcount = 0; 7 f1 = fopen(filepath , "r"); 8 if(f1 == NULL) 9 { 10 printf("Can‘t Find!\n"); 11 exit(1); 12 } 13 c = fgetc(f1); 14 while(c != EOF) 15 { 16 c = getc(f1); 17 charcount++; 18 } 19 fclose(f1); 20 return charcount; 21 }
单词数类:
1 //词数 2 int WordCount(char filepath[]) 3 { 4 FILE *f2 = NULL; 5 char w; 6 int wordcount = 0; 7 f2 = fopen(filepath , "r"); 8 if(f2 == NULL) 9 { 10 printf("Can‘t Find!\n"); 11 exit(1); 12 } 13 w = fgetc(f2); 14 while(w != EOF) 15 { 16 if((w>=‘A‘ && w<=‘Z‘) || (w>=‘a‘ && w<=‘z‘) || (w>=‘0‘ && w<=‘9‘)) 17 { 18 while((w>=‘A‘ && w<=‘Z‘) || (w>=‘a‘ && w<=‘z‘) || (w>=‘0‘ && w<=‘9‘) || w == ‘_‘) 19 { 20 w = fgetc(f2); 21 } 22 wordcount++; 23 } 24 w = fgetc(f2); 25 } 26 fclose(f2); 27 return wordcount; 28 }
行数:
1 //行数 2 int LineCount(char filepath[]) 3 { 4 FILE *f3 = NULL; 5 char l; 6 int linecount = 1; 7 f3 = fopen(filepath , "r"); 8 if(f3 == NULL) 9 { 10 printf("Can‘t Find!\n"); 11 exit(1); 12 } 13 l = fgetc(f3); 14 while(l != EOF) 15 { 16 if(l == ‘\n‘) 17 { 18 linecount++; 19 l = fgetc(f3); 20 } 21 else{ 22 l = fgetc(f3); 23 } 24 } 25 if(CharacterCount(filepath) == 0) 26 linecount = 0; 27 fclose(f3); 28 return linecount; 29 }
以上类代码结构基本一致,不同点仅在于判断条件。
6.测试运行:
(1)普通文本测试结果及文件


(2)空文件测试结果及文件


(3)单字符测试结果及文件


(4)单行测试结果及文件


(5)普通代码测试结果及文件
 

(6)路径错误测试

7.PSP(after):
| 
 PSP2.1  | 
 Personal Software Process Stages  | 
 预估耗时(分钟)  | 
 实际耗时(分钟)  | 
| 
 Planning  | 
 计划  | 
 30  | 
 30  | 
| 
 · Estimate  | 
 · 估计这个任务需要多少时间  | 
 30  | 
 25  | 
| 
 Development  | 
 开发  | 
 50  | 
 55  | 
| 
 · Analysis  | 
 · 需求分析 (包括学习新技术)  | 
 100  | 
 120  | 
| 
 · Design Spec  | 
 · 生成设计文档  | 
 15  | 
 5  | 
| 
 · Design Review  | 
 · 设计复审 (和同事审核设计文档)  | 
 0  | 
 0  | 
| 
 · Coding Standard  | 
 · 代码规范 (为目前的开发制定合适的规范)  | 
 10  | 
 10  | 
| 
 · Design  | 
 · 具体设计  | 
 40  | 
 30  | 
| 
 · Coding  | 
 · 具体编码  | 
 40  | 
 40  | 
| 
 · Code Review  | 
 · 代码复审  | 
 30  | 
 25  | 
| 
 · Test  | 
 · 测试(自我测试,修改代码,提交修改)  | 
 60  | 
 65  | 
| 
 Reporting  | 
 报告  | 
 25  | 
 20  | 
| 
 · Test Report  | 
 · 测试报告  | 
 10  | 
 10  | 
| 
 · Size Measurement  | 
 · 计算工作量  | 
 10  | 
 10  | 
| 
 · Postmortem & Process Improvement Plan  | 
 · 事后总结, 并提出过程改进计划  | 
 20  | 
 25  | 
| 
 合计  | 
 
  | 
 470  | 
 
 470 
  | 
8.项目小结:
这次项目在编码上学到的主要是c语言相关文档的操作,这是之前从没涉及到过的领域,因此感觉收获蛮丰富的;然后在整个策划详细设计时主要是感悟到遇到困难决不能轻言放弃。要学会有效的借鉴前人的经验,从中汲取知识转化为自己的能力;除此之外,还是有遗憾的地方,便是觉得自己只能用c语言去做项目是非常单一的,并且也并没有将c语言用得融会贯通,还是需要继续学习,并且本次项目其实题目理解方面大部分都是查阅资料才弄清楚,感觉还是要加强自己的理解能力,平时自己还得做一些其他更复杂能锻炼人的项目,如果老师能推荐那更好,来日方称,未来可期,切勿放弃!
WordCount of Software Engineering
原文:https://www.cnblogs.com/bayardm/p/12558457.html