• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
方方小可爱
博客园    首页    新随笔    联系   管理    订阅  订阅

wordcount作业二

一、代码地址:https://gitee.com/wwlpf/codes/8z93cibltqn2sohj0yemp39

二:功能

基本功能:(已完成)

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 file.c //将结果输出到指定文件outputFile.txt

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

高级功能:(未完成)

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

三:PSP表格

 

psp2.1  psp阶段

 估计耗时(分钟)

 实际耗时(分钟)
Planning  计划  1h  45min
 · Estimate  · 估计这个任务需要多少时间  1h 55min
Development  开发 2h  90min
 · Analysis  · 需求分析 (包括学习新技术)  3h  120min
 · Design Spec  · 生成设计文档  2h  70min
 · Design Review  · 设计复审 (和同事审核设计文档)  1h  50min
 · Coding Standard  · 代码规范 (为目前的开发制定合适的规范)  0.5h  30min
 · Design  · 具体设计  1h  50min
 · Coding  · 具体编码  3h  120min
 · Code Review  · 代码复审  0.5h  50min
 · Test  · 测试(自我测试,修改代码,提交修改)  2h  120min
Reporting  报告  1h  70min
 · Test Report  · 测试报告  0.5h  40min
 · Size Measurement  · 计算工作量  0.1h  5min

 · Postmortem & ProcessImprovement Plan

 · 事后总结, 并提出过程改进计划  0.2h  25min
   合计  18.8h 850min

四:解题思路:

审题以后大致思路如下:

  1、资料可以通过诸如百度、谷歌等搜索引擎获取

       2、程序可以分为:命令参数分析、输入输出文件定位、执行命令三个主体部分Main,Count,File

        Main:程序的主函数类,实现整个程序的所有功能的调用,实现要执行功能的判断、各种统计功能的调用和最后的信息输出的功能,其中含有以下方法:

    main():作为主函数。

    int main(int argc, char *argv[]):命令分析函数,对终端中传入的参数进行判断,统计需要执行的功能;

    在主函数中一次对命令参数进行分析,定位输入输出文件并创建类WordCount的对象,最后调用该对象的方法进行响应的统计功能即可。

  3、测试,即单元测试,在Test类中对上述的各种方法执行测试,主要采用的方法为语句覆盖测试。对每个方法采用2-3个用例对其进行测试。

五、代码展示

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include<iostream> 
int main(int argc, char *argv[]) 
{ 
   //读取文件 
 int num,w,num1; 
    if(argc==3) 
 { 
        FILE *fp = fopen(argv[2],"r"); 
 if(!fp) 
 { 
            printf("文件打开失败!!!\n"); 
            return -1; 
        } 
        //对参数进行判断 
    if( !strcmp(argv[1],"-c")) 
 { 
    //字符数 
            char temp; 
            num = 0; 
            temp = fgetc(fp); 
            while(temp!=EOF) 
 { 
                temp = fgetc(fp); 
                num++; 
            } 
            printf("该文本文件的字符数为:%d\n",num); 
 fprintf(fp,"%d",num); 
 } 
        else if(!strcmp(argv[1],"-w")) 
 { 
 //单词数 
            w=0; 
            char a=fgetc(fp); 
            while(a!=EOF) 
 { 
                if((a>='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9')) 
 { 
                    while((a>='a' && a <='z') || ( a >='A' && a <='Z') || ( a >='0' && a <='9')) 
                        a =fgetc(fp); 
                    w++; 
                    a =fgetc(fp); 
 
                } 
                else 
                    a =fgetc(fp); 
            } 
            printf("该文本文件的单词数为:%d\n",w); 
    fprintf(fp,"%d",w); 
 
        } 
        else if( !strcmp(argv[1],"-l") ) 
 { 
 //行数 
            char temp; 
            num1 = 1; 
            temp = fgetc(fp); 
            while(temp != EOF ) 
 { 
                //putchar(temp); 
                if(temp == '\n') 
 { 
 //字符需要用单引号扩住 
                    num1++; 
                } 
                temp = fgetc(fp); 
            } 
            printf("该文本文件的行数为:%d\n",num1); 
           fprintf(fp,"%d",num1); 
        } 
 else if(!strcmp(argv[1],"-o")) 
 { 
 if(argc==3) 
 { 
 FILE *fp1= fopen(argv[1],"w"); 
          if(!fp) 
  { 
              printf("文件打开失败!!!\n"); 
             return -1; 
  } 
  printf("字符数,单词数,行数:\n"); 
  scanf("%d %d %d",&num,&w,&num1); 
 fprintf(fp1,"该文本文件的字符数为:%d\n",num); 
 fprintf(fp1,"该文本文件的单词数为:%d\n",w); 
 fprintf(fp1,"该文本文件的行数为:%d\n",num1); 
 fclose(fp1); 
 } 

 } 
        else{ 
            printf("error:参数超出范围!!\n"); 
            printf("允许参数:-c,-w,-l,-o\n"); 
        } 
        int n=fclose(fp); 
    } 

    else{ 
        printf("error:运行参数必须要3个!!\n"); 
        printf("use:wc.exe [parameter] [file_name]\n"); 
    } 


    system("pause"); 
    return 0; 
}

 

六、测试截图展示

七:总结

用c语言完成的作业。还有很多不足之处,就是因为平时积累的编程经验太少了,导致很多时候在做无用功。写了一个PSP表格,对自己的这个项目进行了大致的评估。但是时间远远超出预算。说明我的专业技能还有待加强。本次实验的结果基本与预期的结果一样,主要是在实现三个功能-------字符数上,行数,词数上花费的时间比较多。

 

posted @ 2018-09-30 18:47  方方小可爱  阅读(202)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3