• 个人项目wordcount


    1.Github项目地址:https://github.com/inimble/wordcount.git

    2.估算耗费的时间(如右表)

    PSP2.1

    Personal Software Process Stages

    预估耗时(分钟)

    实际耗时(分钟)

    Planning

    计划

     30

     10

    · Estimate

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

     10

     5

    Development

    开发

     60

     30

    · Analysis

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

     20

     40

    · Design Spec

    · 生成设计文档

     10

     20

    · Design Review

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

     10

     10

    · Coding Standard

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

     10

     10

    · Design

    · 具体设计

     30

     20

    · Coding

    · 具体编码

     240

     180

    · Code Review

    · 代码复审

     10

     20

    · Test

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

     60

     300

    Reporting

    报告

     30

     30

    · Test Report

    · 测试报告

     10

     10

    · Size Measurement

    · 计算工作量

     10

     10

    · Postmortem & Process Improvement Plan

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

     30

     30

    合计

     600

     725

    3.解题思路

      刚开始看到这道题目的时候,对我个人而言不会的知识点还是挺多的,其中有两点比较主要。第一个是不知道如何用c++打开并读取一个文件,主要是通过百度查找,找到了fopen函数,然后在用visual stdio编译的时候,出现了用fopen不安全的情况,于是又学习了fopen_s函数。然后又查到了与读取文件相关的逐个读取fgetc。第二个看到题目中要求程序处理用户需求的模式为:wc.exe [parameter] [file_name]时不知道是什么,百度之后发现是主函数参数的相关知识,于是便进行了学习。其他基本都能根据以前的知识完成。所以在拿到题目后对这两个方面进行了学习,然后就正式开始了项目的开发。

    4.设计实现过程

      实现这道题目我运用了两种方法,这里只介绍我上传的这种。拿到题目后,由于我个人的习惯,先讲项目分为了WC.h、WC.cpp和main.cpp三个部分,然后对于基础部分,我分为了三个函数进行实现,分别用于计算字符数、单词数以及行数,每个函数都比较简单。这三个函数属于并列关系,分别实现一种功能。最终我的程序由这三个函数及主函数构成。

    5.代码说明

      在三个功能函数中,我认为头两个是比较关键的,因为两个都有特殊的点。

      

       这是第一个函数,用于实现字符数的计算。首先用fgetc函数对输入进来的文件进行逐个读取,然后把除了空格的字符全部加上。这个函数特殊在,由于转义字符不应该算在内,而txt文件换行的转义字符为 ,结束的转义字符为,所以有了return后面的公式,是为了减去这些不必要的字符。

      

       这是第二个函数,也是运用逐个读取,而这个函数特殊的点是由于fgetc返回的值是整型,所以在进行比较的时候需要用到ascii表转换。

    6.测试运行

      用于测试的文件(如下图):text.txt

      

       测试字符个数的结果:

      

       测试单词个数的结果:

      

      测试行数的结果:

      

       输入错误示例:

        1.命令错误

        

         2.无该文件

        

    7.实际耗费的时间(如上表)

    8.项目小结

      虽然这次只完成了基础部分,但是却花费了我相当长的时间,这说明了我学习的内容还太少,更关键的是,学过的内容不够细致,很多由于细节而导致的bug花费了我非常的时间。其中有一个我花了三个小时才找出来的细节,我认为以后非常需要注意,在三个功能函数中,都有这样一个判断语句是(c = fgetc(str)) != EOF,而我一开始编程的时候是这么写的c = fgetc(str) != EOF,由于!=号的优先程度大于=号,所以会先进行后半部分的计算,这导致了我的结果一直出错,我总是认为优先级这个知识点很简单,所以经常被我忽视,但在实际编程中确是非常关键,这点引起了我的反思,其实每个知识点都是非常重要的,需要我们去留心和记忆,只有把这些简单,基础的知识点掌握到倒背如流,才有可能进行下一步的提升。这次个人项目对我来说收获颇多,感慨良多。让我戒骄戒躁,扎实学习。所以我还是很感谢这次个人项目的。

  • 相关阅读:
    AutoMapper在ABP框架
    Github for Windows使用介绍
    Net中的反应式编程
    webstorm创建nodejs + express + jade 的web 项目
    Nancy 框架
    Quartz.NET 任务调度框架
    从电商秒杀与抢购谈Web系统大规模并发
    SVN中tag branch trunk用法详解
    Hsql中In没有1000的限制
    Gradle sourceCompatibility has no effect to subprojects(转)
  • 原文地址:https://www.cnblogs.com/inimble/p/12549838.html
Copyright © 2020-2023  润新知