软件工程——第二次作业

Posted 打酱油的路过

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程——第二次作业相关的知识,希望对你有一定的参考价值。

软件工程——第二次作业(2)

作业要求: https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/922

代码: https://git.coding.net/ss505072461/wf.git

————————————————————————————————————————————————————

  项目要求是编写出一个拥有“词频统计”功能的小程序,作为一个小程序,若只是实现基本的词频统计功能,其实并不是很难。但是,如果再附加一些需求和功能的话就会让我感到有点难度了,更何况为了以后课程的要求,我选择使用Visual Studio 2015编译器和C#语言这两种从未学过的工具,在4-5天之内共10个小时左右(预计,但是实际上确实是花了更多时间……)的时间里一边学习C#语言一边去做一个小程序,并且尝试着完成更多的需求和功能,这对我来说是一次充满挑战的作业。

  这次作业项目,我碰到的第一个难点就是我选择的C#语言是我从来未用过的语言,这考验着我的短期学习能力(毕竟需要做的作业是有时限的,当然这次作业之后学习还会继续的)和消化能力(理解参考书中的内容后运用出来),所以当我周四下课后就立刻开始查询C#语言的学习参考书和调查其常用的编译环境,幸好我有过Pascal、C和C++的语言学习经历,我对于新语言的学习还是很有信心的。通过参考书、百度,以及实际项目的实践,我认为C#语言是一种很好的语言,简洁便利,依靠基本的类库等就能实现相当多的功能。比如,Split就能用特定字符筛选,将一个字符串分割成一个字符串数组;ToLower能直接将字符串中所有大写英文字母转化为小写字母,等等。当然,我还未学会很多东西,比如我还未学会如何在函数中调用主程序中获得的字符串数组等,导致我的程序其实全部都被塞在main主程序中,程序结构很不美观……

  我对于这个程序项目的理解,认为这个程序首先要做到的是“词频统计”这个功能。C#语言Split语言便利地分割了被读入的string类型的文章text,将其转化成一个string型一维数组textArray,之后只需要进行词频统计,我选择使用了从第一个词textArray[0],使其与之后的所有词进行对比,存在的每个相同的词,都会使对应的统计数组countWord[0](初值为1)+1,然后为了避免重复统计,而将之后的词向前移动,将被统计过的单词覆盖掉,之后是第二个词textArray[1],对应着countWord[1],一直进行下去。这个部分的代码如下:

 1 for (int i = 0; i < sWord; i++)
 2 {
 3     countWord[i] = 1;
 4     for (int j = i + 1; j < sWord; j++)
 5     {
 6         if (textArray[i].Equals(textArray[j]))
 7         {
 8             countWord[i]++;
 9             for (int k = j + 1; k < sWord; k++)
10                 textArray[k - 1] = textArray[k];//覆盖掉被查重过的单词
11             sWord--;//被查重的单词已被剔除,最后sWord将是不重复单词数量
12             j--;
13         }
14     }              
15 }

   之后,我注意到从功能2开始,由于文章词汇量巨大,所以只需要输出词频前10个的单词及其数量,因此在输出之前,要对词频进行排序整理,之前将词和频一一对应也正是为了这个。在词频统计和词频排序方面,我已经完成了这个小程序最基础的功能。

实现功能的截图如下:

第一个测试用例文章:

  

第一个样例的结果如下,其中为了测试输入的内容是否如同预期(最上方句子),被识别出来的单词数量(17)被暂时加入到代码中:

 

之后我准备了第二个测试用文章:

 

其测试结果如下,其中总词数(189)是符合作业提供的数据的:

  我之后也曾使用了老师提供的那篇很长的测试文章(War and Peace),然而因为我的程序初步设计只是为了达成基本功能,统计的算法极其简陋,因此运行了5分钟左右(时间不是很准确,我截图应该是慢了几秒的)才输出结果,而且总词数统计与老师的数据(568286)不同……是574756(之前我将-也作为分割标准,结果是53万左右,后来认为连词符-应该不算分割单词的依据)

  在之后我尝试了命令行的识别输入,但是由于我C#语言尚未学习透彻,因此在尝试了数小时后未果便放弃了……

————————————————————————————————————————————————

个人PSP

 

以上是关于软件工程——第二次作业的主要内容,如果未能解决你的问题,请参考以下文章

软件工程第二次作业

软件工程第二次作业

第二次软件工程作业

软件工程第二次作业中第一个作业

软件测试第二次作业

软件工程第二次作业