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) == '\n')
            {
                rows++;
            }
        }
        rewind(fp);
        rows++;
        fprintf(rp, "rows:%d\n", 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 == '\n')
18             {
19                 flag = 1;
20             }
21         }
22         fprintf(rp, "words:%d\n", 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\n", characters);
14     }

 

6、测试设计过程

6.1测试代码如何设计

设计空白文档、中文文档、英文文档、特殊字符文档、特殊格式文档等,对代码进行测试。

6.2设计测试用例及结果

用例一:

 

 

 

用例二:

 

 

用例三:

 

 

用例四:

 

 

用例五:

 

 

用例六:

 

 

用例七:

 

 

用例八:

 

 

用例九:

 

 

用例十:

 

 

6.3哪些地方会导致程序高风险

特殊字符和空格处,会导致统计结果的异常。

7、感想

 

这次的作业我只是实现了基本功能,由于这次作业比较简单,所以并没有花费太多的时间。

就去回顾了C语言文件操作的一些内容。

但是测试代码那里花费了比较久,以前没有这种系统的对代码进行测试的做法。

通过测试也发现了自己代码的一些不足,比如对单词数统计那块的缺陷,修改了一些,还是感觉不够完善。

8、参考文献链接

 C语言文件操作详解,网址https://www.jb51.net/article/37688.htm