1、项目地址
码云地址:https://gitee.com/cppcppcpp/codes/fmxi9g8re5kjs4yw6a3b736
2、PSP表格
PSP2.1表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
20 |
18 |
· Estimate |
· 估计这个任务需要多少时间 |
20 |
18 |
Development |
开发 |
360 |
362 |
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
40 |
· Design Spec |
· 生成设计文档 |
30 |
23 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 |
28 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
16 |
· Design |
· 具体设计 |
40 |
30 |
· Coding |
· 具体编码 |
120 |
130 |
· Code Review |
· 代码复审 |
30 |
25 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
70 |
Reporting |
报告 |
60 |
70 |
· Test Report |
· 测试报告 |
30 |
30 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
30 |
合计 |
440 |
450 |
3、解题思路
WordCount的需求:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
打算采用C语言,会使用到文件,遍历源文件的内容,分别对源文件里的字符数、单词数、行数进行统计并保存后输出到指定文件。
网上百度了一下文件操作,回顾文件操作。
C语言文件操作详解,网址https://www.jb51.net/article/37688.htm
4、程序设计实现过程。
程序包含三个功能,对源文件里的字符数、单词数、行数进行统计并保存后输出到指定文件。
参数及其约定如下:
参数名字 |
参数意义 |
用法示例 |
-c[必选] |
文件的字符数 |
示例:wc.exe -c file.c [表示返回文件file.c的字符数,并存储在result.txt中] |
-w[必选] |
文件单词总数 |
示例:wc.exe -w file.c [表示返回文件file.c的单词数,并存储在result.txt中] |
-l[必选] |
文件行数 |
示例:wc.exe -l file.c [表示返回文件file.c的总行数,并存储在result.txt中] |
-o[必选] |
输出文件名 |
示例:wc.exe –c file.c -o outfile.txt [表示返回文件file.c的字符数,并存储在outfile.txt中] |
5、代码说明
对行数进行统计:
if (strstr(commandStr, "-l"))
{
// 对行数进行统计
while (!feof(fp))
{
if (fgetc(fp) == '
')
{
rows++;
}
}
rewind(fp);
rows++;
fprintf(rp, "rows:%d
", rows);
}
对单词数进行统计:
1 if (strstr(commandStr, "-w")) 2 { 3 //对单词进行统计 4 char c; 5 int flag = 1; 6 while (!feof(fp)) 7 { 8 c = fgetc(fp); 9 if (flag == 1) 10 { 11 if (c != ' ') 12 { 13 words++; 14 flag = 0; 15 } 16 } 17 else if (c == ' ' || c == ' ') 18 { 19 flag = 1; 20 } 21 } 22 fprintf(rp, "words:%d ", words); 23 }
对字符数进行统计:
1 if (strstr(commandStr, "-c")) 2 { 3 // 对字符进行统计 4 while (!feof(fp)) 5 { 6 if (fgetc(fp)) 7 { 8 characters++; 9 } 10 } 11 rewind(fp); 12 characters--; 13 fprintf(rp, "characters:%d ", characters); 14 }
6、测试设计过程
6.1测试代码如何设计
设计空白文档、中文文档、英文文档、特殊字符文档、特殊格式文档等,对代码进行测试。
6.2设计测试用例及结果
用例一:
用例二:
用例三:
用例四:
用例五:
用例六:
用例七:
用例八:
用例九:
用例十:
6.3哪些地方会导致程序高风险
特殊字符和空格处,会导致统计结果的异常。
7、感想
这次的作业我只是实现了基本功能,由于这次作业比较简单,所以并没有花费太多的时间。
就去回顾了C语言文件操作的一些内容。
但是测试代码那里花费了比较久,以前没有这种系统的对代码进行测试的做法。
通过测试也发现了自己代码的一些不足,比如对单词数统计那块的缺陷,修改了一些,还是感觉不够完善。
8、参考文献链接
C语言文件操作详解,网址https://www.jb51.net/article/37688.htm