zoukankan      html  css  js  c++  java
  • 个人项目1

                                   个人项目

    github地址:https://github.com/GMloria/GGMYING/blob/master/%E4%B8%AA%E4%BA%BA%E9%A1%B9%E7%9B%AE.cpp

     

    一,题目要求

    Word Count      1. 实现一个简单而完整的软件工具(源程序特征统计程序)。      2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。     3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。

    二,项目要求        

       wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。      

    实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

    三,.基本功能实现

    wc.exe -c file.c     //返回文件 file.c 的字符数

    wc.exe -w file.c  //返回文件 file.c 的词的数目  

    wc.exe -l file.c     //返回文件 file.c 的行数

    四,.扩展功能实现  

      -s   递归处理目录下符合条件的文件。    

    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

    空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符

    代码行:本行包括多于一个字符的代码。

    注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注

    五,基本思路

    拿到题目后,说实话有点懵,完全不知道如何下手,项目内容在刚开始也没有完全的理解,在熟读了项目要求以及在网上搜索了wc项目之后,对于需求有了一定的了解,由于目前我的能力较弱,还没有掌握其他高级的语言,所以决定用c语言写该项目,确定了语言之后,我开始逐个功能函数进行写代码,进行调试,在功能函数中,通过对库函数的资料查阅,知道了fgetc(),fclose()等函数的原理,通过多次测试最后得到了结果。

    六,设计实现过程

    七,代码说明

    统计字符数函数代码:

    复制代码
    int charnum(char *filename)     //统计字符数 
    {
        FILE *fp;
        char ch;
        int numc=0;
        fp=fopen(filename,"r");
        ch = fgetc(fp);
        while(ch != EOF)
        {
              numc++;
              ch=fgetc(fp);
        }
        printf("该文件的字符数为:%d
    ",numc);
        fclose(fp);
        return 0;
    }
    复制代码

    统计行数函数:

    复制代码
    int linenum(char *filename)    //统计行数 
    {
        FILE *fp;
        char lp;
        int linenum = 0;
        fp = fopen(filename,"r");
        lp = fgetc(fp);
        while(lp != EOF)
        {
            if(lp == '
    ')             
              {
                 linenum++;
            }
            lp = fgetc(fp);
        }
        linenum++; 
        printf("该文件行数为:%d
    ",linenum);
        fclose(fp);
        return 0;    
    }
    复制代码

    统计单词数函数:

    复制代码
    int wordnum(char *filename)              //统计单词数 
    {
        FILE *fp;
        char wp;
        int wordnum=0;
        fp = fopen(filename,"r");
        wp = fgetc(fp);
        while (wp != EOF)   
        {
            if((wp>='a'&&wp<='z') || (wp>='A'&&wp<='Z'))
            {
                 wp = fgetc(fp);    
            }
            else
            {
                wordnum++;
                wp = fgetc(fp);
            }
        }
        wordnum++; 
        printf("该文件中单词数为:%d
    ",wordnum);
        fclose(fp);
        return 0;
    }
    复制代码

    主函数:

    复制代码
    int main()
     {
         int countc=0;
         FILE *file;
         char filename[50];
         printf("请输入将要查询的文件名:");
         scanf("%s",filename);
        charnum(filename);
        linenum(filename); 
        wordnum(filename);
        return 0;
    }
    复制代码

    八,测试结果

    可执行文件:

    空文件:

                      

    只含一个字符:

       

    只含有一个词的文件:

    只含有一行的文件:

    一个典型的源文件:(该个人项目源文件)

     九,PSP表

    PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
    Planning 计划                30   30
    · Estimate · 估计这个任务需要多少时间  200  260
    Development 开发  240  200
    · Analysis · 需求分析 (包括学习新技术)  120 120 
    · Design Spec · 生成设计文档  20  20 
    · Design Review · 设计复审 (和同事审核设计文档)  20        20 
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范)
    · Design · 具体设计 10  15 
    · Coding · 具体编码 200 300
    · Code Review · 代码复审 20  60 
    · Test · 测试(自我测试,修改代码,提交修改) 60 50
    Reporting 报告 100   150
    · Test Report · 测试报告 30   20
    · Size Measurement · 计算工作量 20  10
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30   15
      合计  650  950

    十,收获

    第一次像这样完成一个个人项目,真的收获了很多,也知道了很多以前不知道的知识,由于现在其他高级语言只是有点匮乏,没有用其他高级语言实现该项目,在深入理解其他高级语言的知识之后,会尝试着用其他语言编写该个人项目,在写代码的过程中也出现了一些问题,第一次编写进行运行时,无论输入什么文件,字符数以及行数和单词数都是不变的,当我把后缀名改为cpp之后,才有了正确答案,在此次项目中,我明显感觉自己的知识储备不足,很多项目可能完成不了,在今后的时间里,我会增加自己的知识储备,多学新知识。之后会利用其他语言进行wc操作的实现

  • 相关阅读:
    IDENT_CURRENT ,@@identity,SCOPE_IDENTITY() 之间对比
    移动无边框窗体
    Winform拖拽改变无边框窗体大小
    配置错误---分析器错误消息: 无法识别的属性“targetFramework”。请注意属性名称区分大小写。
    c# winform中预防窗体重复打开
    C# TreeView 控件的综合使用方法
    c# vs2010 连接access数据库
    解决python pip缓慢
    securecrt密码获取
    linux开启telnet
  • 原文地址:https://www.cnblogs.com/yyyy118/p/12603565.html
Copyright © 2011-2022 走看看