Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master

基本功能:

                 对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。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

扩展功能:

              wc.exe -s            //递归处理目录下符合条件的文件wc.exe -a file.c     //返回更复杂的数据(代码行 / 空行 / 注释行)wc.exe -e stopList.txt  // 停用词表,统计文件单词总数时,不统计该表中的单词

基本思路:

由于很久没使用C语言了,导致编写进度进展的很慢。但根据要求进行需求分析,主要要实现的功能有:用户的命令行输入,文件的获取与读写,文件内容遍历,字符串匹配等。该程序代码的结构如下, 从根据argv[]传入的参数,条件语句判断。来决定进行什么功能。

代码设计:

-c 返回文件字符数

int countc(char *file) //返回文件的字符数
{   FILE *f;f = fopen(file, "r");char a;if(NULL==(f=fopen(file,"r"))){printf("file is NULL");}elsewhile (!feof(f)){a=fgetc(f);if (a != ' '&&a != '\n'&&a != '\t')cchar++;}fclose(f);printf("charnum:%d ",cchar);
}

-w返回文件单词总数

int countw(char *file)//返回文件词的数目
{   FILE *f;f=fopen(file,"r");char ch;if(NULL==(f=fopen(file,"r"))){printf("file is NULL");}elsewhile(!feof(f)){ch=fgetc(f);if((ch >= 'a'&&ch <= 'z')||(ch>='A'&&ch<='Z')||ch=='_')aword=1;else if (aword){cword++;aword=0;}}fclose(f);printf("wordnum:%d ",cword);
}

-l返回文件总行数

int countl(char *file) //返回文件的行数
{   FILE *f;f = fopen(file, "r");int cline = 0;char a;if(NULL==(f=fopen(file,"r"))){printf("file is NULL");}else while(!feof(f)){a=fgetc(f);if(a=='\n'||a=='\t')cline++;}fclose(f);printf("Linenum:%d ",cline);return 1;
}

主函数根据argv[]传入的参数,进行条件语句判断。来决定进行什么功能。

int main(int argc, char* argv[])
{FILE *fp;while(1){if((fp=fopen(argv[2],"r"))==NULL){  printf("FileNull\n\n\n");scanf("%s%s%s",argv[0],argv[1],argv[2]);continue;}else if(!strcmp(argv[1],"-w")) countw(argv[2]);       else if(!strcmp(argv[1],"-c"))  countc(argv[2]);   else if(!strcmp(argv[1],"-l"))    countl(argv[2]);      else if(!strcmp(argv[1],"-a"))                {     count_blankline(argv[2]); count_noteline(argv[2]);count_codeline(argv[2]);}else if(!strcmp(argv[1],"-s")){searchfile();}elseprintf("NullPoint\n");printf("\n\n");scanf("%s%s%s",argv[0],argv[1],argv[2]);}return 0;
}

测试思路:

采用白盒测试用例设计法覆盖可能出现的左右情况,尽量找到代码中可能蕴含的错误并改正,因此,测试设计应该覆盖判断中的各种边界情况。-c test.txt,-w test.txt,-l test.txt,-c –w test.txt,-c –l test.txt,-w –l test.txt,-c –w –l test.txt,-c test.txt –o output.txt,-w test.txt –o output.txt,-l test.txt –o output.txt,-c –w test.txt –o output.txt,-c –l test.txt –o output.txt,-w –l test.txt –o output.txt,-c –w –l test.txt –o output.txt。

测试文件:


测试均可通过,表示基本功能没有问题,不一一列举了。

总结:本次作业较为仓促,有多个功能聚集在主函数内部,比较杂乱,没有比较好的代码优化。算法的性能还有待提高和优化,对问题的考虑可以更全面。但是加强了编程能力,让我对时间安排有了更充分的理解,理解了上课所学习的基本内容,初步理解的测试的相关方法,希望能在今后的学习中对软件测试有更加深刻的理解和学习。

参考文献

【1】http://www.cnblogs.com/xinz/p/5044037.html
【2】http://www.cnblogs.com/xiaobao123/p/9649693.html
【3】https://www.cnblogs.com/IHHHH/p/8612972.html
【4】https://www.jianshu.com/p/5323bca00825

转载于:https://www.cnblogs.com/Damonblogs/p/9733083.html

第二次作业(WordCount)重制版相关推荐

  1. 软件质量与测试--第二周作业 WordCount

    软件质量与测试--第二周作业 WordCount Github地址: https://github.com/RicardoDZX/WordCount PSP: PSP2.1 PSP 阶段 预估耗时 ( ...

  2. 第二周作业 wordcount

    Github地址 https://github.com/DolittleQZ/CountWord PSP2.1表格 PSP2.1 PSP 阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning ...

  3. 软测第二周作业WordCount

    一.Github地址: https://github.com/duwei1996/wc 二.PSP2.1表格 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 ...

  4. 重邮2019级cqupt实验室第二次作业

    第二次作业(棕色是主要的) 实际上写这次作业不可能只看四个中其中一个就完成的,所以我四个都写了一些,因为"TCP/IP协议.ARP协议.路由协议.DHCP协议"四个是相互有联系的. ...

  5. 无路可逃java攻略_生化危机2重制版无路可逃怎么过_100丧尸模式幽灵生还者无路可逃流程攻略_3DM单机...

    <生化危机2:重制版>的幽灵生还者DLC中,当玩家通关了前面的三章之后就能解锁第四章--无路可逃,这个关卡需要解决100个丧尸,难度十分之高,下面小编就为大家带来一篇"lu_mk ...

  6. BUAA-OO 第二单元作业“电梯调度”总结与思考

    一.需求分析 利用java线程的相关知识实现 1)单部多线程傻瓜调度(FAFS)电梯 2)单部多线程可捎带调度(ALS)电梯 3)多部多线程智能(SS)调度电梯 二.思路分析 1.基于度量的程序结构分 ...

  7. 学习linux第二周作业

    第二周作业: 本周作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. touch,rm,mv,cp,file,ls,chmod,chown,ln,rename, ...

  8. 计算机文化基础第二次作业-简答题,中传2018年秋计算机文化基础第二次作业-简答题...

    <中传2018年秋计算机文化基础第二次作业-简答题>由会员分享,可在线阅读,更多相关<中传2018年秋计算机文化基础第二次作业-简答题(7页珍藏版)>请在人人文库网上搜索. 1 ...

  9. 憨批的语义分割重制版11——Keras 搭建自己的HRNetV2语义分割平台

    憨批的语义分割重制版11--Keras 搭建自己的HRNetV2语义分割平台 学习前言 什么是HRNetV2模型 代码下载 HRNetV2实现思路 一.预测部分 1.主干网络介绍 a.Section- ...

  10. 20189200余超 2018-2019-2 移动平台应用开发实践第二周作业

    2018-2019-2 移动平台应用开发实践第二周作业 实验部分,在linux中用git命令将代码传到码云上 成功上传的截图 码云上的截图 遇到如下的问题 解决方法 我发现在进行第一步git clon ...

最新文章

  1. Java h265视频抽帧提取照片支持Window,Linux
  2. ASP.NET Core 动作结果 - ASP.NET Core 基础教程 - 简单教程,简单编程
  3. 分布式系统的可靠协调系统——Zookeeper
  4. java反射成员变量_java反射之成员变量的反射
  5. YouTube键盘快捷键:速查表
  6. 计算机网络网际协议实验报告,计算机网络课程网际协议IP地址实验报告.doc
  7. Android Alertdialog之多选对话框
  8. c语言程序设计最后一题调试时闪退,visual studio 2017调试时闪退。
  9. 欧华android导航刷机,寻找欧华DVD导航一体机刷机文件。
  10. 颜色的原理,三基色原理以及HLS(色相、亮度、饱和度)原理
  11. 统计学简介之十七——双因素方差分析
  12. 动态SQL之choose
  13. 领导力21法则-- 要点总结
  14. 深度学习是表示学习的经典代表(浅谈什么是深度学习)
  15. spring 的 applicationcontext.xml
  16. 播放器地址抓取 php,从优酷土豆视频地址中获取swf播放器分享地址 - PHP示例代码...
  17. java neon_Eclipse Neon安装指导
  18. win10电脑防火墙允许ping设置
  19. FFmpeg中调用av_read_frame函数导致的内存泄漏问题
  20. 一些opencv小工程(蓝白转换,进度条亮度对比度,鼠标位置读取rgb)

热门文章

  1. QingTing.Fm-WPF是调用蜻蜓FMAPI 查询API内容展示,进行播放
  2. Java常用基础-String和各类集合
  3. 在武汉的拥有计算机专业的学校,武汉市有计算机专业的各大高校
  4. 猪与蟒(pig and python)
  5. python换行对齐
  6. 2021蓝旭工作室暑期第五次培训课-数据库设计文档
  7. Android读取asserts和raw文件夹下的文件
  8. pythom练习(二)
  9. 如何使用Arduino开发板连接PS2无线控制器
  10. Unity 农场 1 —— 环境搭建、背包系统、时间系统