WordCount个人项目

项目码云地址:https://gitee.com/floweror/first_homework/tree/master/homework

1.项目需求

WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name]

存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

2.基本功能

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(未实现)

注意:

空格,水平制表符,换行符,均算字符。

由空格或逗号分割开的都视为单词,且不做单词的有效性校验,例如:thi#,that视为用逗号隔开的2个单词。

-c, -w, -l参数可以共用同一个输入文件,形如:wc.exe –w –c file.c 。

-o 必须与文件名同时使用,且输出文件必须紧跟在-o参数后面,不允许单独使用-o参数。

3.项目psp表格

PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

 60  100

· Estimate

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

 两天 一天半 

Development

开发

 一天 一天 

· Analysis

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

 180    240

· Design Spec

· 生成设计文档

 50    60

· Design Review

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

 30 30 

· Coding Standard

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

 20 60 

· Design

· 具体设计

 100 120 

· Coding

· 具体编码

 240 260 

· Code Review

· 代码复审

 30 50 

· Test

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

 120 60 

Reporting

报告

 140 100 

· Test Report

· 测试报告

 50 30 

· Size Measurement

· 计算工作量

 40 60 

· Postmortem & Process Improvement Plan

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

 60 60 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4.代码分析

(1)主函数分析:在主函数中分别调用统计字符函数,统计单词数函数,统计行数函数,用switch语句获得用户输入的操作

关键代码如下:

 

while(1){
        printf("请输入用户命令:wc.exe-");
        scanf("%s",&input);
        switch(input){
        case 'c':
           printf("请输入文件名:");
           scanf("%s",&File);
          
           charcount=CharCount(File);
           printf("文件的字符数为:%d\n",charcount);
           break;    
    
           case 'w':
            printf("请输入文件名:");
            scanf("%s",&File);
            
            wordcount=WordCount(File);
            printf("文件的词数为:%d\n",wordcount);
           break;
    
        case 'l':
            printf("请输入文件名:");
            scanf("%s",&File);
            
            wordcount=WordCount(File);
            printf("文件的行数为:%d\n",wordcount);
            break;
        default:exit(0);
            break;
        }
    }

 

 

 

(2)统计字符函数

  

 char charnum;
    //查询文件
    FILE *pf=NULL;//定义一个文件指针 遍历文件
    int ccount=0;
    pf=fopen(file,"r");//只以读的方式打开文件
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }
   //统计字符数
    charnum = fgetc(pf);//文件指针pf指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节
    while(charnum!=EOF){
        charnum = fgetc(pf);
        ccount++;        
    }
    fclose(pf);//关闭文件

 

 

 

(3)统计单词数函数

 

FILE *pf=NULL;
    pf=fopen(file,"r");
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }

    charnum = fgetc(pf);
    while(charnum!=EOF){
        if(charnum>='a'&&charnum<='z'||charnum>='A'&&charnum<='Z'||charnum>='0'&&charnum<='9'){
            while(charnum>='a'&&charnum<='z'||charnum>='A'&&charnum<='Z'||charnum>='0'&&charnum<='9'||charnum=='_'){
                charnum=fgetc(pf);
            }
            wcount++;
            charnum=fgetc(pf);
        }
        charnum=fgetc(pf);
    }
    fclose(pf);

 

(4)统计行数函数

FILE *pf=NULL;
    int lcount=0;
    pf=fopen(file,"r");
    if(pf==NULL){
        printf("寻找文件失败\n");
        exit(-1);
    }
    
    charnum = fgetc(pf);
    while(charnum!=EOF){
        if(charnum=='\n'){
            lcount++;
            charnum = fgetc(pf);
        }
        else{
           charnum = fgetc(pf);
        }
    }
    
    fclose(pf);
    return lcount+1;
5.测试结果

6.心得体会
这是我的第一篇博客,按照老师的要求把代码传到了码云上面去,了解了许多课堂之外的东西。刚开始我本来是想用java语言来实现这个功能,但是经过一番尝试之后,
还是觉得这几个基本的功能用C语言来实现是最简单的,只需要熟悉C语言文件操作以及某些函数对字符的操作就可以了。
经过这个项目,我重新回顾了一边C语言并且第
一次使用C语言操作本地的目录文件,同时也将上课的内容转变成了行动,完成了一个项目从0到1的过程,从预估,尝试,设计,发开,测试过了一遍简单的软件开发流程。

7.参考文件链接

(1)C语言文件操作函数大全:https://blog.csdn.net/weibo1230123/article/details/79110542
(2)参考代码:http://www.cnblogs.com/abc123def456/archive/2018/09/15/9649762.html

 

posted @ 2018-09-24 18:00  小花flower  阅读(162)  评论(0编辑  收藏  举报