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/
WordCount系统分析与设计作业的更多相关文章
- 系统分析与设计个人作业:WordCount
本次作业gitee地址:https://gitee.com/ackary/WordCount 一.项目简介 1.基础功能 基础功能部分主要实现的功能是统计一个程序设计语言源文件的字符数.单词数.行数, ...
- 系统分析与设计lesson6
| 分类 作业 | 1.用例建模 a. 阅读 Asg_RH 文档,绘制用例图. 按 Task1 要求,请使用工具 UMLet,截图格式务必是 png 并控制尺寸 b. 选择你熟悉的定旅馆在线服务系统 ...
- FPGA最小系统分析与电路设计
<FPGA最小系统分析与电路设计> 部分节选自<FPGA应用开发入门与典型.pdf > FPGA最小系统包括:FPGA芯片.下载电路.外部时钟.复位电路和电源. 如果使用NIO ...
- [福大软工] Z班 团队作业——UML设计 作业成绩
团队作业--UML设计 作业链接 http://www.cnblogs.com/easteast/p/7745703.html 作业要求 1)团队分工(5分) 描述团队的每个成员分别完成了UML图的哪 ...
- 文献综述十六:基于UML的中小型超市管理系统分析与设计
一.基本信息 标题:基于UML的中小型超市管理系统分析与设计 时间:2016 出版源:Journal of Xiangnan University 文件分类:uml技术系统的研究 二.研究背景 开发一 ...
- 系统分析与设计——WordCount
成果: https://gitee.com/ZMLJZ/codes/0k19q4upgmrfde265l7vx36 作业要求: 根据WordCount的需求描述,先编程实现,再编写单元测试,最后撰写博 ...
- 系统分析与设计结对项目——WordCount
结对项目完成WordCount 合作者:201631062507 201631062526(学号) 代码地址:https://gitee.com/WordCountMC/WordCountTeam ...
- 实时控制软件设计作业_01——汽车ABS系统分析
制动防抱死系统(antilock brake system)简称ABS.作用就是在汽车制动时,自动控制制动器制动力的大小,使车轮不被抱死,处于边滚边滑(滑移率在20%左右)的状态,以保证车轮与地面的附 ...
- 奖学金评分系统(系统分析与设计版与Delphi实现代码)
一.系统规划 1.1 项目背景介绍 在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段.对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化. ...
随机推荐
- CentOS 6.7 下 MYSQL 5.7 的安装与配置
安装 #yum源 http://dev.mysql.com/downloads/repo/yum/ #安装 rpm -Uvh http://dev.mysql.com/get/mysql57-comm ...
- Flexbox指南
Flexbox布局(Flexible Box)模块旨在提供一个更加有效的方式制定.调整和分布一个容器里的项目布局,即使他们的大小是未知或者是动态的.(这里我们称为Flex). Flex布局主要思想是让 ...
- 源码分析篇 - Android绘制流程(一)窗口启动流程分析
Activity.View.Window之间的关系可以用以下的简要UML关系图表示,在这里贴出来,比较能够帮组后面流程分析部分的阅读. 一.Activity的启动流程 在startActivity() ...
- JDBC中链接数据库前为什么要用Class.forName(驱动类)加载驱动类?
使用JDBC链接数据库时,为什么要先使用Class.forName(String name)来加载类? 答: 实际上就是为了加载类时,调用静态初始化块中的注册函数. 可以看一下MySql的Driber ...
- PBN旁切转弯保护区组图
旁切转弯是PBN(Performance Based Navigation基于性能导航)中使用频率最高的一种飞行方式,旁切转弯保护区支持最大120°的转弯. 旁切转弯保护区叠加图: 旁切转弯保护区分解 ...
- [转]Microsoft SQL SERVER 2008 R2 REPORT SERVICE 匿名登录
本文转自:https://www.cnblogs.com/Zouzhe/p/5736070.html SQL SERVER 2008 R2 是微软目前最新的数据库版本,在之前的SQL SERVER 2 ...
- WCF无法引入Model实体解决方案
在重新引用服务的时候,或者是是更新引用服务的时候,点“高级”按钮,在服务引用设置对话框中,将“重新使用引用的程序集中的类型”这个勾取消,这样就能安全的重新引用服务.
- c# winform播放声音的两种方式
axWindowsMediaPlayer1.settings.setMode("", true); axWindowsMediaPlayer1.URL = "skcg.m ...
- 彻底理解voliate
1.voliate简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥 ...
- Lucene 学习-安装 Elasticsearch 服务器
全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选,它的底层是开源库 Lucene.但是我们没法直接使用 Lucene,必须自己写代码去调用它的接口. Elasti ...