• 软件工程第二次作业


    Github地址https://github.com/baichenxi:


    PSP表格


    PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
    Planning 计划 10 20
    · Estimate · 估计这个任务需要多少时间 80 70
    Development 开发 1000 1000
    · Analysis · 需求分析 (包括学习新技术) 180 180
    · Design Spec · 生成设计文档 10 10
    · Design Review · 设计复审 30 40
    · Coding Standard · 代码规范 (为目前的开发制定合适的规范) 30 45
    · Design · 具体设计 20 100
    · Coding · 具体编码 300 350
    · Code Review · 代码复审 200 200
    · Test · 测试(自我测试,修改代码,提交修改) 500 200
    Reporting 报告 50 120
    · Test Repor · 测试报告 20 30
    · Size Measurement · 计算工作量 100 30
    · Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 40
    |       | 	合计  | 2560|2635
    

    需求分析


    对程序的功能进行需求分析如下:

    实现Wrdcount.exe的命令行程序

     //C语言类
     WordCount.exe input.txt
     //Java语言
    java WordCount input.txt
    

    基本功能

    • 统计文件的字符总量:

             只需要统计Ascii码,汉字不需考虑(我的理解就是,中文不能计入)
      空格,水平制表符,换行符,均算字符
      
    • 统计文件有效行数:

                 任何包含非空白字符的行,都需要统计。
      
    • 统计文件单词总数。

              单词:至少以4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写
      分割符:空格,非字母数字符号
      例:file123是一个单词,123file不是一个单词。file,File和FILE是同一个单词
      
    • 统计单词出现频率,并且输出前10个出现频率最高的单词。

    • 输出格式

    •         characters: number
      words: number
      lines: number
      <word1>: number
      <word2>: number
      

    环境


                           操作系统:Windows 10
    IDE:Visual Studio 2017 Community
    编程语言:C++
    

    思路


    我开始的思路很明确,建立结构体,存放单词以及单词出现的频率,其中存放单词的是一个数组,存放频率的为整型。难点在于取文件中的字符和单词的判断。于是借鉴了博客的一些大牛。解决对txt文件的调用,基本就没什么难点了。虽然我的基础很差,但是我就是这么想的。后面需要两个函数,一个函数需要判断单词,在判断单词的同时实现存储单词,判断单词时候出现过,由于在判断单词的时候,需要判断字符,所以同时会完成字符总量的统计和有效行数的统计。在这个函数体中,需要传入的参数是调用文件的指针,指向的字符,还有建立的结构体。另一个函数,需要对结构体中出现单词频率最高的是个单词进行排序,采用冒泡排序法。

    设计测试文档


    按照题目要求设计了如下的!
    image
    基本符合测试的要求。这是初步设计的测试文件,后续会在测试结果中呈现

    具体设计

    函数实现之统计函数

    • [ wordsta]
      void wordsta(FILE *fp,sq t_word,sq *word)
      image
      这是发现一个单词的整个过程,在发现单词的同时,统计了字符,有效行数,以及单词数量。之后对比前面是否以后相同的单词,进行计数
    • [ sq] sq*namemath(sq *word)
      这是一个简单的冒泡排序,这里不再给出代码。

    运行结果及性能分析

    我选择了一本英文名著《傲慢与偏见》进行新能测试
    image
    由于名著中三个字母的单词很常出现,所以单词和字符的比例很正常,算是成功吧。
    image
    第一次接触性能分析,着实着迷那条条框框。
    image
    不难看出其中对比单词是否在以前出现过消耗的时间是最多的,在我的意料之中,因为涉及到数组的查找,但是不知道该怎么去优化。
    总的来说不算庞大,但是用时也不是很长。

    关于封装

    这是我最头痛的问题,问了很多学长,但得到的基本都是不知道,我不会。所以只能去找一些资料自学,然后着了一些简单的函数封装,最后花了一个晚上(真真确确的一个晚上没睡觉)琢磨了一番,最后终于算是成功了。结构体的封装与类相似,函数的封装最为简单
    image

    总结

    怎么说呢,其实很仓粗,因为到了周一才忙完一些事情,才开始着手去做这个作业。我的基础真的是差的没边,甚至我觉得我根本完成不了这次作业,在最开始的时候,我连函数的构建都还十分模糊,而且根本不知道如何去做封装,甚至在最后上交作业还有很多项目没有完成,一个是能力不足,再加上时间限制所以完成的不是很好,虽然想学但是,力不从心。但是这一个作业做出来之后,的确能学到很多东西。至少我是第一次写博客,第一次去封装。轻虐吧。image

  • 相关阅读:
    WCF后续之旅(3): WCF Service Mode Layer 的中枢—Dispatcher
    .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)
    我的WCF之旅(13):创建基于MSMQ的Responsive Service
    .net程序集强名称签名实践
    WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成
    .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等) 2
    WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
    SilverlightCatchWcfError
    WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成
    WCF后续之旅(4):WCF Extension Point 概览
  • 原文地址:https://www.cnblogs.com/dawnduck/p/9637858.html
Copyright © 2020-2023  润新知