软件工程第1次作业

要求0

作业连接:【https://edu.cnblogs.com/campus/nenu/2016CS/homework/2110

要求1

git仓库地址https://git.coding.net/Soloversion/wf.git】

要求2

1.PSP阶段表格

 

SP2.1

任务内容

计划共完成需要的时间(min)

实际完成需要的时间(min)

  Planning

计划

2000

2240

Estimate

估计这个任务需要多少时间,并规划大致工作步骤

2000

2240

  Development

开发

1580

2330

 Analysis

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

120

150

Design Spec

生成设计文档

90

120

Design Review

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

0

0

 Coding Standard

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

60

100

Design

具体设计

240

500

Coding

具体编码

920

1220

 Code Review

代码复审

60

90

Test

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

90

150

  Reporting

报告

410

500

Test Report

测试报告

200

230

Size Measurement

计算工作量

90

120

Postmortem & Process Improvement Plan

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

120

150

 

 

 

功能模块

具体阶段

预计时间(min)

实际时间(min)

  功能1

具体设计

具体编码

测试完善

20

130

20

30

200

25

功能2

具体设计

具体编码

测试完善

30

140

20

15

150

25

  功能3

具体设计

具体编码

测试完善

 

40

210

30

 

未完成

未完成

未完成

 

2.分析预估耗时和实际耗时的差距原因:

•自身能力薄弱。由于自己的编程能力比较弱,所以在拿到作业之后花了很长时间去尽力实现其中的部分功能,这个过程中还包含着我对于自己之前不熟悉的语言的重新学习;

•分析不到位。可能是基础比较差和缺少经验的原因,我虽然感觉自己学过这种频率统计,但是实际仔细分析的时候才发现有很大的不同,所以出于一种不断发现问题的循环中;

•细节处理不好。对于代码的规范和整体框架,我做的并不好,脑子中没有一个outline,这是我欠缺的一种能力。

要求3

1.解题思路

先将题目要求实现的功能大致分为以下三大块:(1)读取txt文本(2)统计其中单词个数(3)将单词(按照某种顺序)输出。

对功能一进行分析:要求统计文本中不重复的单词个数,同时将大写全部转化为小写输出。

多功能而进行分析:在功能一的基础上增加了在路径下寻找指定文本,在调用功能一即可。

然而,理想很丰满,现实很骨感。分析起来好像很简单,实际上真正做起来自己完成的部分少之又少,还是在借鉴了其他博主思路的情况下。

2.部分代码展示

1)首先利用函数判断该单词是否符合规定的单词格式,从而进行第一道筛选

bool islegal( char a[] ) /* 判断是否是一个合法单词 */
{
    int i = 0;
    for ( i = 0; a[i] != '\0'; i++ )
        if ( (a[i] >= 'a' && a[i] <= 'z') || (a[i] >= '0' && a[i] <= '9') )
            return(true);
        else
            return(false);
}

 2)将找到的单词的字母进行大小写的转换,再将转换后所得结果result存入数组中

int j = 0; /* 大写转为小写 */
    while ( result[j] != '/0' && result[j + 1] != '/0' )
    {
        if ( result[j] >= 'A' && result[j] <= 'Z' )
        {
            result[j] = result[j] +32;/*单个字母的大小写转换*/
            j++;
        }
    }
    cout << result;
    char *sep = " ";

3)扫描要求路径下的所有txt文件,同时选定在字典顺序中最靠前的文件,从而实现功能2.

这一部分代码是借鉴于其他博主的,引用自:https://www.cnblogs.com/tgyf/p/3839894.html

/*-------获取特定格式的文件名-------*/
void GetAllFormatFiles( string path, vector<string>& files,string format)
{

    long   hFile = 0;//文件句柄
    struct _finddata_t fileinfo; //文件信息
    string p;
    if((hFile = _findfirst(p.assign(path).append("\\*" + format).c_str(),&fileinfo)) !=  -1)
    {
        do
        {
            if((fileinfo.attrib &  _A_SUBDIR))
            {
                if(strcmp(fileinfo.name,".") != 0  &&  strcmp(fileinfo.name,"..") != 0)
                {
                    GetAllFormatFiles( p.assign(path).append("\\").append(fileinfo.name), files,format);
                }
            }
            else
            {
                files.push_back(p.assign(fileinfo.name));
            }
        }while(_findnext(hFile, &fileinfo)  == 0);

        _findclose(hFile);
    }
}

 4)处理输入的文件名,即只有当控制台输入“”wf -c 文件名”时,才能够对相应的.txt文件进行读取

此处对字符串的处理我引用自:http://blog.sina.com.cn/s/blog_5cef35c50100dqy5.html

bool filename()/*处理输入的文件名*/
{
     bool exist=false;
    string::size_type index1 = inputstr.find("-c");/*确定输入的为-c*/
        if(index1!=string::npos)
        {
            exist=true;
            index1=index1+3;
            while(inputstr[index1]!=' '&&inputstr[index1]!='\n')
            {
                file_name=file_name+inputstr[index1];
                index1++;
            }
        }
        return exist;
}

 5)对单词的出现频率进行排序,采用的算法是冒泡排序算法,此处用到数据结构当中的相关排序知识

for(k=1;k<=j-1;k++)/*利用冒泡排序算法*/ 
      for(i=k+1;i<=j;i++)
     {  
          if(number[k]<number[i])
          {  
               int temp=number[k];
               number[k]=number[i];
               number[i]=temp;
               r[0]=(char *)malloc(sizeof(w[k]));/*将对应的单词也进行交换*/ 
               r[0]=w[k];                                                                             
               w[k]=(char *)malloc(sizeof(w[i]));                                                                                                                     
               w[k]=w[i];                                                                               
               w[i]=(char *)malloc(sizeof(r[0]));                                               
               w[i]=r[0];
           }
   return 0;
    }

 

要求4

由于我自己没有将各个功能全部完成,所以最后的测试部分借用的是别人的代码

1)老师样例测试

 

2)外国名著《飘》

3)外国短篇小说《小王子》

 总结

其实说句实话,在拿到这个作业之后,我感到无从下手,只能不断的查资料,从别的博主那里获得一些相关知识,不仅耗费了大量的时间也耗费了大量的精力,重点是最后还没有完全写出来,这也让我感到迷茫和伤心,我越来越觉得自己可能不适合干这行,越来越对自己产生怀疑。再看看《构建之法》中作者用诙谐的语言给我们讲着软件工程这门学科,我更加觉得自己的渺小和无知,因为只有真正懂得的人才能用通俗的语言讲给其他人听,而我没有也做不到。

posted @ 2018-09-22 08:43  Soloversion  阅读(205)  评论(1编辑  收藏  举报