• 系统分析与设计课程个人项目作业 WordCount


    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

     

  • 相关阅读:
    Android EditText 文本框实现搜索和清空效果
    Android学习笔记之打钩显示输入的密码
    Mysql limit offset
    Android SDK更新以及ADT更新出现问题的解决办法
    Android Broadcast Receiver 使用入门
    立即执行函数
    JS 原型 & 继承
    JS 对象
    chrome extension overview
    JS 修改元素
  • 原文地址:https://www.cnblogs.com/cpp-cpp/p/9695903.html
Copyright © 2020-2023  润新知