软工作业WC

Github地址

https://github.com/yyyyyykx/yyyyyyykx98

项目要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:
程序处理用户需求的模式为:wc.exe [parameter] [file_name]

基本功能列表:

  wc.exe -c file.c     //返回文件 file.c 的字符数 

  wc.exe -w file.c    //返回文件 file.c 的词的数目  

  wc.exe -l file.c      //返回文件 file.c 的行数

扩展功能:
  -s   递归处理目录下符合条件的文件。
  -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

  空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

  代码行:本行包括多于一个字符的代码。

  注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释: } //注释  在这种情况下,这一行属于注释行。

高级功能:

   -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。需求举例:wc.exe -s -a *.c

  返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。

心路历程

拿到题目后先去查的网上代码,发现都是有打开文件关闭文件等,感觉很陌生,后来得知时书本上第十章的内容,就先看的书。等了解了与文件有关的相关知识后,开始按照以往的思路打,先建立一个大的框架按照之前模式写好了main后开始一部分一部分的写其他的。

遇到的困难及解决方法

·困难描述

在计算空行代码行和注释行时总是错误

·做过哪些尝试

在计算空行时加入否的各种字母失败,改成fscanf用字符数组也失败。

·是否解决

·有何收获

学会了自己去思考各种可能的方法,虽然没有成功

关键代码

 

·计算字符数:即计算字母、数字和标点字符的总和,使用了isalnum和ispunct两个函数来判断。

1         m = fgetc(fp);
2         if(isalnum(m) || ispunct(m)) {
3             num++;
4         }

·计算单词数:使用格式化的方式读写文件fscanf,通过判断第一个是否为字母来确定是否为单词。

1         m = fgetc(fp);
2         if(!((m>='a' && m<='z') || (m>='A' && m<='Z'))) {
3             point = 0;
4         } else if(((m>='a' && m<='z') || (m>='A' && m<='Z')) && point==0) {
5             point = 1;
6             num++;
7         }

·计算行数:通过计算 \n 个数来确定行数。

1         if(m=='\n') {
2             num++;
3         }
4         m = fgetc(fp);

·计算空行代码行注释行:

·主函数:使用switch语句来判断要进行哪一种命令。

 1         printf("请输入文件的位置:\n");
 2         scanf("%s",filename);
 3         printf("请输入需要的命令:\n");
 4         scanf("%s",ch);
 5         switch(ch[1]) {
 6             case 'c':
 7                 Character(filename);
 8                 back();
 9                 break;
10             case 'w':
11                 Word(filename);
12                 back();
13                 break;
14             case 'l':
15                 Line(filename);
16                 back();
17                 break;
18             case 'a':
19                 EmptyCodeComment(filename);
20                 back();
21                 break;
22             default:
23                 printf("error\n");
24         }

测试

·空文件:

  

 

·只有一个字符的文件:

  

·只有一个词的文件:

  

·只有一行的文件:

  

·一个典型的源文件:

  

PSP

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

思考和收获

不会纠错,而且查资料的时候一看到大片大片文字就容易没有耐心,要逐渐学着自己纠错和要有耐心。

c语言忘了好多,要逐渐的再学回来。

经常容易打着打着就干别的事情,PSP让我学习的时候能够不断的提醒自己。

 

posted @ 2018-09-15 02:20  yyyyyykx  阅读(117)  评论(0编辑  收藏  举报