zoukankan      html  css  js  c++  java
  • 软工项目WordCount

      1.Github项目地址https://github.com/JameMo/WordCount-for-C

           2.在程序的各个模块的开发上耗费的时间

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

     10

     8

    · Estimate

    · 估计这个任务需要多少时间

     10

     8

    Development

    开发

     350

     350

    · Analysis

    · 需求分析 (包括学习新技术)

     150

     120

    · Design Spec

    · 生成设计文档

     20

     30

    · Design Review

    · 设计复审 (和同事审核设计文档)

     20

     15

    · Coding Standard

    · 代码规范 (为目前的开发制定合适的规范)

     10

     10

    · Design

    · 具体设计

     30

     25

    · Coding

    · 具体编码

     70

     90

    · Code Review

    · 代码复审

     20

     30

    · Test

    · 测试(自我测试,修改代码,提交修改)

     30

     30

    Reporting

    报告

     60

     60

    · Test Report

    · 测试报告

     30

     35

    · Size Measurement

    · 计算工作量

     20

     15

    · Postmortem & Process Improvement Plan

    · 事后总结, 并提出过程改进计划

     10

     10

    合计

     

     420

     418

       3. 解题思路

      首先,认真审题,将题目中的具体需求写出来,然后再思考具体模块。然后,细化到各个模块内,每个模块如何实现,如何满足需求,并判断自己是否能做到。接下来,将自己所需要的知识写下,并寻找自己所需要的资料,逐一学习,并开始着手打码。最后,对每个模块进行测试,并编辑博文。

      4.设计实现过程

      代码一共含有九个函数(其中包含主函数)。其中char_num、word_num、line_num、blankline_num、codeline_num、commentline_num这六个函数为主要功能函数,而main、traverse两个函数主要是用来调用上面的六个函数,还有最后一个fun函数则是用来将两个字符串连接。

      5.代码说明

      头文件:

          #include<stdio.h>
        #include<io.h>

       具体函数:

      ①char_num函数

     1 void char_num(char *file)
     2 {
     3     //查询file.c文件中字符数目的函数 
     4     int num = 0;
     5     FILE *f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)
     9     {    
    10         while((a = fgetc(f))!=EOF)
    11         {    
    12             //避开空格、换行、Tab字符 
    13             if(a!=' ' && a!='
    ' && a!='	')
    14                 num++;
    15         }
    16     }
    17     else
    18     {
    19         printf("this file does not exist.
    ");
    20     }
    21     fclose(f);
    22     printf("char_num:%d
    ",num);
    23 }

      ②word_num函数

     1 void word_num(char *file)
     2 {
     3     //查询file.c文件中单词数目的函数
     4     int num = 0,flag;
     5     FILE *f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)
     9     {
    10         while(!feof(f))
    11         {
    12             a = fgetc(f);
    13             //判断字符是否为大小写字母 
    14             if((a<='z'&&a>='a')||(a<='Z'&&a>='A'))
    15                 flag = 1;
    16             //计算单词数目 
    17             else if(flag)
    18             {
    19                 num++;
    20                 flag = 0;    
    21             }            
    22         }
    23      } 
    24      else
    25      {
    26         printf("this file does not exist.
    ");     
    27      }
    28      fclose(f);
    29      printf("word_num:%d
    ",num);
    30  } 

      ③line_num函数

     1 void line_num(char *file)
     2 {
     3     //查询file.c文件中行数的函数
     4     int num = 1;
     5     FILE *f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)    
     9     {
    10         while(!feof(f))
    11         {
    12             a = fgetc(f);
    13             //换行符为计数标志 
    14             if(a=='
    ')
    15                 num++;
    16         }    
    17     }
    18     else
    19     {
    20         printf("this file does not exist.
    "); 
    21     } 
    22     fclose(f);
    23     printf("line_num:%d
    ",num);
    24 }

      ④blankline_num函数

     1 void blankline_num(char *file)
     2 {
     3     //查询file.c文件中空行数的函数
     4     int num = 0,count = 0,flag;
     5     FILE *f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)    
     9     {
    10         while(!feof(f))
    11         {
    12             a = fgetc(f);
    13             //换行时进行判断 
    14             if(a=='
    ')
    15             {
    16                 //字符少于、等于1和不为注释行时进行计数 
    17                 if(count<=1&&flag!=2)
    18                     num++;
    19                 count = 0;
    20             }
    21             else if(a!='	'&&a!=' '&&a!='/')
    22                 count++;
    23             else if(a=='/')
    24                 flag++;
    25         }    
    26     }
    27     else
    28     {
    29         printf("this file does not exist.
    "); 
    30     } 
    31     fclose(f);
    32     printf("blankline_num:%d
    ",num);    
    33 }

      ⑤codeline_num函数

     1 void codeline_num(char *file)
     2 {
     3     //查询file.c文件中代码行数的函数
     4     int num = 0,count = 0,flag = 0;
     5     FILE *f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)    
     9     {
    10         while(!feof(f))
    11         {
    12             a = fgetc(f);
    13             //先作字符分类,再进行判断 
    14             if(a!=' '&&a!='	'&&a!='
    '&&a!='/')
    15                 count++;
    16             else if(a=='
    ')
    17             {
    18                 if(count>1&&flag!=2)
    19                     num++;
    20                 count = 0;
    21             }
    22             else if(a=='/')
    23             {
    24                 flag++;
    25             } 
    26         }    
    27     }
    28     else
    29     {
    30         printf("this file does not exist.
    "); 
    31     } 
    32     fclose(f);
    33     printf("codeline_num:%d
    ",num);    
    34 }

      ⑥commentline_num函数

     1 void commentline_num(char *file)
     2 {
     3     //查询file.c文件中注释行数的函数
     4     int num = 0,flag = 0;
     5     FILE* f;
     6     char a;
     7     f = fopen(file,"r");
     8     if(f!=NULL)
     9     {
    10         while(!feof(f))
    11         {
    12             a = fgetc(f);
    13             //换行时标志归零 
    14             if(a=='
    ')
    15             {
    16                 flag = 0;
    17             }
    18             //对注释符进行计数 
    19             else if(a=='/')
    20             {
    21                 flag++;
    22                 if(flag==2)
    23                     num++;
    24             }
    25         }
    26     }
    27     else
    28     {
    29         printf("this file does not exist.
    ");
    30     }
    31     fclose(f);
    32     printf("commentline_num:%d
    ",num);
    33 }

      ⑦fun函数

     1 char *fun(char *c1,char *c2)
     2 {    
     3     //将两个字符串进行连接 
     4     int i,j;
     5     char *ch;
     6     for(i=0;c1[i]!='*';i++)
     7     {
     8         ch[i]=c1[i];
     9     }
    10     for(j=0;c2[j]!='';j++,i++)
    11     {
    12         ch[i]=c2[j];
    13     }
    14     ch[i]='';
    15     return ch;    
    16 }    

      ⑧traverse_all函数

     1 void traverse_all(char *file_folder)
     2 {    
     3     //文件夹内所有*.c文件的所有信息 
     4     long handle;
     5     char *ch;
     6     struct _finddata_t fileinfo;
     7     handle = _findfirst(file_folder,&fileinfo);
     8     if(handle==-1L)
     9         return;
    10     do
    11     {
    12         printf("file name:%s
    ",fileinfo.name);
    13         ch = fun(file_folder,fileinfo.name);
    14         char_num(ch);
    15         word_num(ch);
    16         line_num(ch);
    17         blankline_num(ch);
    18         codeline_num(ch);
    19         commentline_num(ch);
    20     }while(!_findnext(handle,&fileinfo));    
    21 }

      ⑨main函数

     1 int main(int a,char* arg[])
     2 {
     3     //运行wc.exe的主函数。
     4     FILE *f;
     5     while(1)
     6     {    
     7         //判断文件是否存在
     8         //对文件作不同的处理 
     9         if((f=fopen(arg[2],"r"))==NULL)
    10         {
    11             if(!strcmp("-s",arg[1]))
    12             {
    13                 traverse_all(arg[2]);    
    14             }
    15             else
    16             {
    17                 printf("NO FILE NOW
    
    ");
    18                 scanf("%s%s%s",arg[0],arg[1],arg[2]);
    19                 continue;
    20             }    
    21         }
    22         else if(!strcmp("-c",arg[1]))
    23         {
    24             char_num(arg[2]);
    25         }
    26         else if(!strcmp("-w",arg[1]))
    27         {
    28             word_num(arg[2]);
    29         }
    30         else if(!strcmp("-l",arg[1]))
    31         {
    32             line_num(arg[2]);
    33         }
    34         else if(!strcmp("-a",arg[1]))
    35         {
    36             blankline_num(arg[2]);
    37             codeline_num(arg[2]);
    38             commentline_num(arg[2]);
    39         }
    40         else
    41         {
    42             printf("Out of specification
    
    ");
    43         }
    44         scanf("%s%s%s",arg[0],arg[1],arg[2]);
    45     }
    46     return 0;
    47 }

      6.测试运行

      测试文件:

      ①testing1.c

      

      ②testing2.c

      

      测试结果:

      ①-c

      

       ②-w

       

       ③-l

      

       ④-a

      

       ⑤-s

      

      7.项目小结:

      这次项目是我做得最完整的一次项目,而且也是我的第一次做如此困难的项目。在这次项目中,我懂得了如何使用PSP去控制自己做项目的时间,此外,PSP还教会了我如何去完成一个项目。同时在这次项目中学会使用了许多新的函数,利用这些函数可以打开文件以及文件夹,从而在文件层面进行操作。我认为此次项目的最大的缺点是没有用到其他语言去实现,只停留在C语言中。

  • 相关阅读:
    显因子模型简介
    关联规则中最小支持度和最小置信度
    Matlab读取音频数据
    初识禁忌搜索算法
    Word中将图表变为表格
    明尼苏达推荐系统导论(第一课 欢迎来到RS)
    python复杂网络分析库NetworkX
    python使用zlib实现压缩与解压字符串
    PostgreSQL 对字段大小写敏感
    pycharm快捷键及一些常用设置
  • 原文地址:https://www.cnblogs.com/JaneMo/p/12495554.html
Copyright © 2011-2022 走看看