软件工程第二次作业

一、

1.本周PSP, 类型、任务、开始时间、结束时间、中断时间,delta时间。要求开始和结束时间包括日期。

 

2.本周进度条: 代码行,博文字数,用到的知识点

3.累积进度图: 到本周为止的代码累积折线图,到本周为止的博文字数累积折线图

4.本周PSP饼状图,按任务类别分类,给出时间所占比例

 

 

二、本次软件工程作业主要以C#进行编译,大致内容为:

  1.编写一个程序实现一个文件中单词统计。

  2.从控制台输入文件的名字,然后统计单词的数目。

  3.指定文件目录进行遍历,分别对每一个文件中的单词进行统计,输入前十个出现频次最高的单词及相应的次数。

  4.控制台显示数据。

  Coding代码链接地址:https://coding.net/u/MR__Chen/p/Demo/git

 

  本程序中主要编写了两个方法,一个statis(char s[])的统计方法,一个sort()的排序方法。statis()方法主要是对单词数目进行统计,sort()对单词出现的频次进行排序,然后在main()函数中先读取文件中的单词数据,然后调用statis()和sort()方法,输出数据在控制台显示。

(一)、statis(char s[])统计方法,具体代码显示如下:

void statis(char s[])
{  
      int i,j;  
      int flag=0;  //flag为零时没有重复的
      for(i=0;i<=sum;i++)  
    {   
       if(strcmp(A[i].str,s)==0)   
       {             
            A[i].num++; //重复单词个数加一   
            flag=1;   //有重复
            //sum++;      
         }     
     }  
      if(flag==0)  
       {   
         for(j=0;j<30;j++)       
           A[sum].str[j]=s[j];  
           A[sum].num++;   
           sum++;  
       }       
   }

(二)、sort()排序方法,具体代码显示如下:

  void sort()
{    
      int i,j;    
      struct word a;  
      for(i=0;i<sum;i++)  
    {   
        for(j=i+1;j<sum;j++)      
          if(A[i].num<A[j].num)    
         {     
             a=A[j];          
             A[j]=A[i];
             A[i]=a; 
           }
      }
}

 (三)、main()函数调用statis(char s[])和sort()方法实现程序,具体代码如下:

void main()
{  
      char ch,plan[30],s[30];  
      int i,m=1,flag=0;
      FILE *fp;
     while(m<10)
{      scanf(
"%s",&plan);      getchar();      if((fp=fopen(plan,"r+"))==NULL){         printf("Open the file failure...\n");            }        fp=fopen(plan,"r");
sum
=0;       ch=NULL;        for(i=0;i<1000;i++)        A[i].num=0;
    while(ch!=-1)  {      for(i=0;i<30;i++)       s[i]='\0';       ch=fgetc(fp);      if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))   {         for(i=0;;i++)       {          s[i]=ch;          ch=fgetc(fp);          if((65<=ch&&ch<=90)||(ch>=97&&ch<=122))continue;          else break;        }        statis(s);       }     }        sort();        printf("total %d  words\n",sum);        for(i=0;i<10;i++)         printf("%s\t%d\n",A[i].str,A[i].num);     printf("---\n");       m++;    } }

 (四)通过以上代码实现,具体的截图分为以下三个部分:

功能一

功能描述:test.txt中包括单词 My English is very very poor.计数total数值,对于重复出现的very只显示一次。

具体实现截图如下:

 

功能二

功能描述:支持命令行输入英文作品的文件名,以runbinson.txt文件为例。

具体实现截图如下:

功能三

功能描述:支持命令行输入存储有英文作品文件的目录名,批量统计。(在此,特此说明因为C语言编程能力差,对于C格式调试不擅长,所以没有完全一次性实现添加多个目录后进行集体显示,只实现了一个文件一个文件进行输入,可输入多个文件。)

具体实现截图如下:

 (五)本项目的psp图,功能实现因为只达到了功能三,前期功能四有尝试编译,但是发现编译出来后和要求不太符合,所以后期测试也就没有了。

  总结:本次作业通过C语言进行编程,目的测试文件中单词不重复总数和TOP10的单词数量,通过本次编程也暴露出自己的C编程的能力较差,只能尽可能去完成自己可以做完的功能。但愿以后可以运用所学在这些短处有所弥补。

 

posted @ 2017-09-16 21:00  陈建宇  阅读(355)  评论(0编辑  收藏  举报