项目要求
Github:https://github.com/YgR9710/c-WordCount
一、基本功能
- 统计文件字符数 -c (实现)
- 统计文件词数 -w (实现)
- 统计文件行数 -l (实现)
二、扩展功能
- 递归处理目录下符合条件的文件。 -s (未实现)
- 返回更复杂的数据(代码行 / 空行 / 注释行)。
三、高级功能
-
基本的Windows GUI 程序操作
支持通过图形界面选取文件 -x (未实现)
支持通过图形界面展现文件的信息
四、设计思路
由于只实现了基本功能,因此不需要太过于复杂的设计。针对不同的功能设计一个函数去实现即可。
五、具体实现
1、统计字符数代码
int charCounter(char *fName)
{
FILE *fp; if((fp=fopen(fName,"r"))==NULL) { printf("CAN'T OPEN THE FILE"); exit(0); } char ch; int cCount=0; while(!feof(fp)) { ch=fgetc(fp); if(ch!=EOF)cCount++; } fclose(fp); return cCount; }
2、统计词数代码
int wordCounter(char *fName)
{
FILE *fp; if((fp=fopen(fName,"r"))==NULL) { printf("CAN'T OPEN THE FILE"); exit(0); } char ch1,ch2; int n=1; int wCount=0; while(!feof(fp)) { ch1=fgetc(fp); if(n==1) { if(ch1!=' '&&ch1!='\n'&&ch1!='\''&&ch1!='\"'&&ch1!='\?'&&ch1!='\\'&&ch1!='\a' &&ch1!='\b'&&ch1!='\f'&&ch1!='\r'&&ch1!='\t'&&ch1!='\v'&&ch1!=EOF) { wCount++; } n--; ch2=ch1; continue; } if(ch1!=' '&&ch1!='\n'&&ch1!='\''&&ch1!='\"'&&ch1!='\?'&&ch1!='\\'&&ch1!='\a'&&ch1!='\b' &&ch1!='\f'&&ch1!='\r'&&ch1!='\t'&&ch1!='\v'&&ch1!=EOF&&(ch2==' '||ch2=='\n')) { wCount++; } ch2=ch1; } fclose(fp); return wCount; }
3、统计行数代码
int lineCounter(char *fName)
{
FILE *fp; if((fp=fopen(fName,"r"))==NULL) { printf("CAN'T OPEN THE FILE"); exit(0); } char ch; int n=1; int lCount; while(!feof(fp)) { ch=fgetc(fp); if(n==1) { if(ch==EOF)lCount=0; else lCount=1; n--; } if(ch=='\n') { lCount++; } } fclose(fp); return lCount; }
六、测试用例
七、测试结果
八、PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
30 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
60 |
Development |
开发 |
360 |
600 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
120 |
· Design Spec |
· 生成设计文档 |
30 |
60 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
20 |
· Design |
· 具体设计 |
60 |
60 |
· Coding |
· 具体编码 |
120 |
360 |
· Code Review |
· 代码复审 |
30 |
30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
120 |
Reporting |
·报告 |
60 |
120 |
· Test Report |
· 测试报告 |
30 |
60 |
· Size Measurement |
· 计算工作量 |
30 |
60 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
60 |
合计 |
|
620 |
1150 |
九、总结
这次的项目设计虽然基本功能不太难实现,但是由于采用的是c语言,所以在扩展功能与高级功能的部分处理起来十分麻烦,因此在知识有限的情况下便没有继续去实现。总的来说这种类型的项目能够使我们系统地去分析需求、设计和实现功能,对我们是一次很好的锻炼机会和经验积累,有助于我们更高效地去完成任务。