WordCount系统分析与设计作业

Gitee项目地址

https://gitee.com/gitdq/homework

psp表

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 10

 10

· Estimate

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

 10

 10

Development

开发

 300

 400

· Analysis

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

 120

 300

· Design Spec

· 生成设计文档

 30

 0

· Design Review

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

 30

 0

· Coding Standard

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

 10

 5

· Design

· 具体设计

 30

 20

· Coding

· 具体编码

 50

 40

· Code Review

· 代码复审

 20

 5

· Test

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

 10

 30

Reporting

报告

 80

 0

· Test Report

· 测试报告

 30

 0

· Size Measurement

· 计算工作量

 30

 0

· Postmortem & Process Improvement Plan

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

 20

 0

 

合计

 390

 410

解题思路

考虑到要使用命令行带参运行,java转exe文件比较麻烦,于是我选择使用c语言编写。

需要实现的基础功能是:wc.exe -c file.c     //返回文件 file.c 的字符数

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

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

wc.exe -o outputFile.txt     //将结果输出到指定文件outputFile.txt

对于统计字符,只需要将字符读出时记录个数即可;对于统计单词数,以空格和逗号来隔开,并且判断单词内容是否为a-z和A-Z中字符组成即可;对于统计行数,记录'\n'字符个数即可;对于-o参数,记录参数中文件夹名字并将数据输出其中即可;

于是我选择用一个结构体来储存从命令行解析出来的参数数据:

typedef struct Node
{
bool isC,isW,isL,isO;//记录传入的参数
char fileName[50];//要统计的文件名字
char outFile[50];//要输出的文件名字
int charNum,wordNum,lineNum;//统计结果
}Node;

程序设计实现过程

为-c,-w,-l三个功能分别设计了三个函数:void charNum() //字符统计函数 void wordNum() //单词统计函数 void lineNum() //行数统计函数

专门设置一个函数解析命令行参数,并用一个结构体把数据储存起来,再写一个函数解析这个结构体,视情况调用功能函数实现需求

代码说明

功能函数代码没什么难度,关键是命令行解析,此处贴出代码:

void initNode(int num,char* str[])

{

node.isC=false;

  node.isW=false;

 node.isL=false;

  node.isO=false;

  strcpy(node.outFile,"result.txt");

  node.charNum=0;

  node.wordNum=0;

  node.lineNum=1;

  if(strcmp(str[1],"-o")==0)

  {

  printf("命令参数出错!");

   exit(0);

  }

for(int i=1;i<num;i++)

{

if(str[i][0]=='-')

{

if(str[i][1]=='c')

       node.isC=true;

       if(str[i][1]=='w')

       node.isW=true;

       if(str[i][1]=='l')

       node.isL=true;

       if(str[i][1]=='o')

       {

       if(str[i+1][0]!='-')

   {

   strcpy(node.outFile,str[i+1]);

   i++;

   }

   else

   {

   printf("命令参数出错!");

   exit(0);

   }

   node.isO=true;

       }

   }

   else

   {

   if(strcmp(str[i-1],"-c")==0||strcmp(str[i-1],"-w")==0||strcmp(str[i-1],"-l")==0)

{

strcpy(node.fileName,str[i]);

}

else

   {

   printf("命令参数出错!");

   exit(0);

   }

   }

}

}

测试设计过程

创建一个wcTest.bat文件,写入测试内容如下:

wc.exe -c f1.txt
wc.exe -w -c f1.txt
wc.exe -c -w -l f1.txt
wc.exe -c -w -l f1.txt -o output.txt
wc.exe -c -w -l f1.txt f2.txt
wc.exe -c f2.txt
wc.exe -c f3.txt
wc.exe f1.txt
wc.exe -c w f1.txt
wc.exe c -w f1.txt
wc.exe -f f1.txt
wc.exe -w --- f1.txt
wc.exe -l
wc.exe -o output.txt

 目录结构如下:

 

文件内容如下:

测试结果如下:

 程序很简陋,测试可能有遗漏,但就目前而言,基础功能实现并没有问题。

参考文献链接:

廖雪峰老师git教程地址 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/

posted on 2018-09-24 22:49  塑料组选手  阅读(165)  评论(1编辑  收藏  举报

导航