结对项目

合作者:

201631062305 ,201631082114


代码地址:

基础功能:https://gitee.com/dxl123456/webcount2

 拓展功能:https://gitee.com/dxl123456/WordCount


 作业链接:

 https://edu.cnblogs.com/campus/xnsy/2018Systemanalysisanddesign/homework/2188 


 

1.任务简述

       两人组队完成WordCount的基本功能及扩展功能(可以自行增加功能),并对其进行一系列测试和优化,形成可稳定运行的版本。

2.PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 40

 30

· Estimate

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

 180

 240

Development

开发

 360

 600

· Analysis

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

 120

 100

· Design Spec

· 生成设计文档

 0

 0

· Design Review

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

 60

 30

· Coding Standard

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

 60

 20

· Design

· 具体设计

60

 80

· Coding

· 具体编码

 300

 420

· Code Review

· 代码复审

 120

 150

· Test

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

 120

 120

Reporting

报告

120

 60

· Test Report

· 测试报告

 30

 40

· Size Measurement

· 计算工作量

 30

 40

· Postmortem & Process Improvement Plan

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

 60

 50

 

合计

 1660

 1953

3.代码互审

       在项目的第一阶段,我们两个均是用的C语言完成这个作业,编写的代码也很相似,都是将整体分成小问题,然后通过函数逐步实现,最后在在主函数里面调用,所以在代码互审的时候,我们只需要检查对方的函数是否能够正确实现功能(在主函数里调用即可)。在检查了对方的代码没有错误的之后,就开始分析谁写的函数更加高效以及精简,最终采纳。我们两个基本上都实现了基本和扩展功能,但是高级功能均没有实现,因为用C语言实现界面化对我们来说是一个极其陌生的领域,在共同的努力之下我们争取完成。

4.设计过程

5.代码说明

(1)打开文件,把数据写进去

void writeToFile(char *fileName,char* feature,int num)
{
    /*fileName 表示读取的文件名
     * feature表示记录的内容 单词或者字母或者行数
     */
     FILE *f=NULL;
     f=fopen("F:\\gcc\\bin\\result.txt","a");
     if(f==NULL)
      {
         printf("failed when wrinting the count to file\n");
      }
   //写入文件
     fprintf(f,"%s,%s,%d\n",fileName,feature,num);
     fclose(f);
}

(2)统计字符数目

void c_num(char *file)//return the file nums
{
  FILE *f;
  char* a="c_num:";
  f=fopen(file,"r");
  char c;   //char
  int num=0;  //char num
  if(f==NULL)
  {
    printf("file is null");
  }
  else
      while(!feof(f))
      {
        c=fgetc(f);
        if(c!=' ' && c!= '\n' && c!='\t')
         num++;
      }
      fclose(f);
      printf("cnum %d ",num);

          writeToFile(file,a,num);
}

(3)统计单词个数

void word_num(char *file)//return word nums
{
  FILE *f;
  char*  a="word_num:";
  f=fopen(file,"r");
  char ch;
  int aword,cword=0;
  if(f==NULL)
  {
    printf("file is null");
  }
  else
  while(!feof(f))
  {
     ch=fgetc(f);
     if((ch>='a' &&ch <= 'z')||(ch>= 'A'&&ch<='Z') ||         ch=='_')
       aword=1;
     else if(aword)
      {
         cword++;
         aword=0;
       }
   }
   fclose(f);
   printf("wordnum:%d ",cword);
   writeToFile(file,a,cword);
}

(4)统计行数

void crl_num(char *file)//return crl
{
   FILE *f;
   f=fopen(file,"r");
   char* s="crl_num:";
   int crl=1;
   char a;
   if(f==NULL)
  {
    printf("file is null");
   }
   else
     while(!feof(f))
   {
      a=fgetc(f);
      if(a=='\n' || a=='\t')
        crl++;
   }
  fclose(f);
  printf("crlnum:%d ",crl);
  writeToFile(file,s,crl);
} 

(5)统计空行数

void crl_num(char *file)//return crl
{
   FILE *f;
   f=fopen(file,"r");
   char* s="crl_num:";
   int crl=1;
   char a;
   if(f==NULL)
  {
    printf("file is null");
   }
   else
     while(!feof(f))
   {
      a=fgetc(f);
      if(a=='\n' || a=='\t')
        crl++;
   }
  fclose(f);
  printf("crlnum:%d ",crl);
  writeToFile(file,s,crl);
} 

(6)统计注释行数

void blankline_num(char *file)//返回文件空行数
{
   FILE *f;
   int b_num=0;//空行数
   int ch_num=0;//字符个数
   char* a="word_num:";
   char ch;
   f=fopen(file,"r");
  if(f==NULL)
  {printf("file is null");}
  else
  while(!feof(f))
   {
     ch=fgetc(f);
     if(ch=='\n')
    {
       if(ch_num<=1) b_num++;
       ch_num=0;
     } 
    else if(ch!= ' '&& ch!= '\t' && ch!= '}' )
         ch_num++;

    else if(ch=='}')
          b_num++;//只有一个‘}’的空行数
  
   }
   fclose(f);
   printf("blanklinenum:%d ",b_num);
   writeToFile(file,a,b_num);
}

(7)统计代码行数

void noteline_num(char *file)//返回注释行
{
  FILE *f;
  int ch_num =0;
  int note_num=0;
  char ch;
  char* a="noteline_num:";
  f=fopen(file,"r");
  if(f==NULL)
  {
     printf("file is null");
   }
   else
   while(!feof(f))
   {
     ch =fgetc(f);
     if(ch=='\n')
     {
        if(ch_num==2) note_num++;
        ch_num=0;
      }
     else if (ch=='/') ch_num++;
     else if(ch_num==1)
    {
      if(ch=='/')
       ch_num++;
    }

   }
   fclose(f);
   printf("notelinenum:%d ",note_num);
   writeToFile(file,a,note_num);
}

(8)统计代码行数

void codeline_num(char *file)//return code_num
{
   FILE *f;
   int ch_num=0;
   int code_num=0;
   int tag=0;
   int flag=0;
   char a;
   char* s="codeline_num:";
   f=fopen(file,"r");
   if(f==NULL)
    {
       printf("file is null");
    }
   else
   while(!feof(f))
  {
     a=fgetc(f);
    if(flag==2)
     {
         flag=0;tag++;
       }
     else 
      {
        if(a=='\n' && ch_num>1)
            {
                code_num++;
                ch_num=0;
            }
         else if(a!=' ' && a!='\n' && a!='\t' &&a!='/')
            ch_num++;
        else if(a=='/')
             flag++;
       }
 
   }
   fclose(f);printf("codelinenum:%d ",code_num);
   writeToFile(file,s,code_num);
}

(9)寻找制定文件

void searchfile()
{
   struct _finddata_t  filefind;
   long handle;
   int t=0;
   if((handle=_findfirst("E:\\wordcount\\*.txt",&filefind))== -1L)
   {
      printf("file not found\n");
   }
  else
   do
   {
      t++;
      printf("find file :%s\n",filefind.name);
   }while(_findnext(handle,&filefind)==0);
    
    _findclose(handle);
   printf("文件数量:%d\n ",t);

}

(10)主函数

int main(int argc, char* argv[])             
{
    FILE *fp;
    while(1)
    {
        if((fp=fopen(argv[2],"r"))==NULL)
        {  
        printf("FileNull\n\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
        continue;
        }
        else if(!strcmp(argv[1],"-w")) 
        word_num(argv[2]);                
        else if(!strcmp(argv[1],"-c"))  
        c_num(argv[2]);                
        else if(!strcmp(argv[1],"-l"))    
        crl_num(argv[2]);            
        else if(!strcmp(argv[1],"-a"))                
       {     
          blankline_num(argv[2]); 
          noteline_num(argv[2]);
          codeline_num(argv[2]);
       }
        else if(!strcmp(argv[1],"-s"))
       {
           searchfile();
       }
        else
            printf("NullPoint\n");
        printf("\n\n");
        scanf("%s%s%s",argv[0],argv[1],argv[2]);
    }
    return 0;
}

6.代码测试以及运行结果

基本功能

扩展功能

测试

 

7.总结

(1)代码合并阶段:在合并阶段没有什么大的问题,因为我们都是用的同一种语言(C语言写的),只要功能函数能够实现就行了,主需要在我们两个中间的选择其中一个人的代码就行了,然后主函数是一起编写的。

(2)问题:我们两个都实现了基本功能和扩展功能,但是高级功能还没有实现,在编写高级功能的时候我们遇到了很多问题,C语言的界面化对于我们两个人来说都是比较陌生的领域,在后面的时间,我们不断地一起尝试,一起排出错误。但是目前还是没有实现这个功能,在后续中会继续尝试编写。

(3)体会:对于1+1是否大于二这个问题,我认为两个人在一起工作的时候,每个人都有自己的思想,有时候意见不合就容易产生分歧,这个时候就会耽误很多时间来讨论,但是在讨论的同时也可以学到很多东西。在遇到困难的时候,两个人就也可以一起解决,比一个人的效率高很多,所以我认为1+1是大于二的。在这次结对项目中,我收获很多,也体会到了合作的重要性。我很感谢我的队友。

 

posted @ 2018-10-17 10:47  小花flower  阅读(157)  评论(0编辑  收藏  举报