WC.exe(C++)

Github项目地址:https://github.com/z472/code_all/blob/master/test1.cpp

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 0

· Estimate

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

 四天

 五天

Development

开发

· Analysis

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

 360

 780

· Design Spec

· 生成设计文档

 0

 0

· Design Review

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

 0

 0

· Coding Standard

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

 30

 0

· Design

· 具体设计

 60

 120

· Coding

· 具体编码

 480

720

· Code Review

· 代码复审

 240

 360

· Test

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

 360

 360

Reporting

报告

 60

 未知

· Test Report

· 测试报告

 0

 0

· Size Measurement

· 计算工作量

 0

 0

· Postmortem & Process Improvement Plan

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

 60

 120

合计

 1620

 2460

解题思路:最初觉得命令行就用C的那个命令行参数来做,然后查了很多的windos下C目录操作,因为不会-s的all内容(最难搞懂的是---在知道当前目录时怎么获取它目录下的文件路径的问题),主要是查找对目录操作的内容,看了别人的具体写法,模仿着写的。

设计实现:边写边分析怎么调用使得代码整洁,觉得函数不多,就没画调用关系图。具体的就是在主函数里写了-s的模式,其他的都是给其他函数传个文件名就可以,但是-s要获取当前的路径所有符合条件的文件,就特例化编写了。

代码说明:-s:思路就是利用C目录操作,在给到的目录,进入它的子目录,就通过在路径字符串之后加' \\* ' 。然后通过_findfirst()返回子目录的唯一的文件句柄,并存到一个结构体地址data中,文件结构体data中的attrib属性可以区别,文件是文件夹(目录)还是其他普通文件。进行不同处理。普通文件就可以通过C++中的string类,对字符串进行处理很好做。对目录就要递归,也是用string类的函数处理很好做。

  -a: 就是具体情况,具体分析。设想很多可能情况。.c文件是有它自己特点的。比如说注释写法,还有双引号符号什么的都是成对存在的,不是随意的文本文件。写的思路就是一个外循环来利用fgetc(fp)函数遍历文件的字符。外循环的关键量是linec_sum来记录“一行”(一行是不出现意外的情况)的可见字符数,如果在大循环中遍历到了特殊的字符比如注释的‘ / ’就分类处理,其中就加入了内循环来遍历字符判断是否换行(因为/* */ 的关系),或是注释何时截指,截指后对注释行数量的增加,而且又要不处理注释中的内容,就略过遍历它们。后来看题目中有即使代码行又是注释行的情况,就添加对发现注释之前的linec_sum>1的条件,对代码行加一。还有双引号(c中常用的字符串等用到)问题。就双引号如果像是printf("/*");情况,就不能当成是注释行,就先发现一个双引号然后写内循环,使得双引号内的字符内容封闭起来,也是略过遍历方法。-a时间不够了,空白行是外循环的linec_sum<=1且遍历到‘ \n ’时

,增加一行。但是无法处理最后一行仅有' } '的情况。

测试运行:-s的最大问题就是测试运行,因为我发现C目录操作函数就获取当前目录函数getcwd() ,在编译器内执行的窗口和在DOS执行的结果完全不一样,我是看着编译器走的前半程,后来才发现,耽误了好多时间。

-a的测试不多,但是就在代码说明的几个细节都测试了,问题还没改过来(空白行也是文件结尾那个)

项目小结:psp使用不熟练,其中字眼看不懂,没有很多步骤,下次需要重视去做好。

原文地址:https://www.cnblogs.com/s1mplelectronic/p/12563617.html