个人项目wordcount

1.项目GitHub地址:https://github.com/WFzhao0530/WFzhao

2.解题思路:分析这个程序的基本需求,将其功能分为多个函数来调用,找到功能的逻辑关系和计算方式,找资料学习文件调用函数等技术。

3.设计分为主函数和6个功能实现函数,分别为主函数main(),功能函数Ccount()、Wcount()、Lcount()、blankcount()、codecount()、notecount(),主函数检测输入选择调用功能函数。

4.代码说明:

头文件:

#include <stdio.h>
#include <string.h>

主函数main():

void main(int a,char **fname){
FILE *file;
while(1){
        file=fopen(fname[2],"r");
        if(file==NULL){//检查文件是否存在
            printf("no file\n");
            scanf("%s%s%s",fname[0],fname[1],fname[2]);
            continue;
        }else if(!strcmp(fname[1],"-c")) Ccount(fname[2]);
         else if(!strcmp(fname[1],"-w")) Wcount(fname[2]);
         else if(!strcmp(fname[1],"-l")) Lcount(fname[2]);
         else if(!strcmp(fname[1],"-a")){
            blankcount(fname[2]);
            codecount(fname[2]);
            notecount(fname[2]);
         }
         printf("\n");
         scanf("%s%s%s",fname[0],fname[1],fname[2]);
    }
}

字符数目计算函数Ccount():

void Ccount(char *file){//查询字符数函数
FILE *f;
char a;
int num=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if(a!=' '&&a!='\n'&&a!='\t')//检测是否为空格、换行符、tab
        num++;
    }
fclose(f);
if(f!=NULL) printf("the char number is:%d\n",num);
}

单词数目计算函数Wcount():

void Wcount(char *file){//查询词数函数
FILE *f;
char a;
int num=0; int tag=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if((a>='a'&&a<='z')||(a>='A'&&a<='Z')) tag=1;
        else if(tag==1){//a不是字母且标志为1时则说明刚检测完一个单词
            num++;
            tag=0;
        }
    }
fclose(f);
if(f!=NULL) printf("the word number is:%d\n",num);
}

行数计算函数Lcount():

void Lcount(char *file){//查询行数函数
FILE *f;
char a;
int num=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if(a=='\n') num++;
    }
num++;//由于文件结束时无换行符,但当前行也算一行,故要加一
fclose(f);
if(f!=NULL) printf("the line number is:%d\n",num);
}

空行数计算函数blankcount():

void blankcount(char *file){//查询空行函数
FILE *f;
char a;
int num=0; int tag=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if((a>='a'&&a<='z')||(a>='A'&&a<='Z')) tag=1;//标志位为1表示本行有字符
        else if(a=='\n'&&tag==0){//本行无单词字符且读取到换行符则计数加一
            num++;
        }
        else if(a=='\n'&&tag==1){//本行有单词字符且读取到换行符则标志位复位到0
            tag=0;
        }
    }
if(tag==0) num++;
fclose(f);
if(f!=NULL) printf("the blankline number is:%d\n",num);
}

代码行数计算函数codecount():

void codecount(char *file){//查询代码行函数
FILE *f;
char a;
int num1=0,num2=0,num; int tag=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if(a=='\n') num1++;//num1统计行数
        if((a>='a'&&a<='z')||(a>='A'&&a<='Z')) tag=1;//num2统计空行数
        else if(a=='\n'&&tag==0){
            num2++;
        }
        else if(a=='\n'&&tag==1){
            tag=0;
        }
    }
num1++;
if(tag==0) num2++;
num=num1-num2;//代码行等于行数减空行数
fclose(f);
if(f!=NULL) printf("the codeline number is:%d\n",num);
}

注释行数计算函数notecount():

void notecount(char *file){//查询注释行函数
FILE *f;
char a;
int num=0; int tag=0;
f=fopen(file,"r");
if(f==NULL) printf("no file\n");
else while(!feof(f)){
        a=fgetc(f);
        if(a=='/'&&tag==0) tag=1;//当检测到第一个‘/’时如果下一个字符为‘/’或者‘*’则代表一行注释
        else if((tag==1&&a=='/')||(tag==1&&a=='*')){
            num++;
            tag=0;
        }
    }
fclose(f);
if(f!=NULL) printf("the noteline number is:%d\n",num);
}

5.测试运行:

测试文件:

测试结果:

6.项目小结:

这次项目可以算是我真正意义上做的实用的项目,为了完成这次项目,又深入学习了C语言的很多关于文件调用的函数,实现程序中调用文件。除此之外,学会了用PSP表格去记录自己完成的时间,以供事后分析。此次项目也充分认识到了C语言的繁琐和复杂,没有能做出-s的功能,这是我技术上的不足。

7.各个模块开发上耗费的时间:                                                                                                                                  

PSP2.1  Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 10
·Estimate ·估计这个任务需要多少时间 240

180

Development 开发 150 150
·Analysis  ·需求分析(包括学习新技术) 30 30
·Design Spec ·生成设计文档 10 20
·Design Review ·设计复审(和同事审核设计文档) 20 10
·Coding Standard ·代码规范(为目前的开发制定合适的规范) 10 10
·Design ·具体设计 20 15
·Coding ·具体编码 60 90
·Coding Review ·代码复审 20 20
·Test ·测试(自我测试,修改代码,提交修改) 60 40
Reporting 报告 30 30
·Test Report ·测试报告 15 15
·Size Measurement ·计算工程量 10 10
·Postmortem & Process Improvement Plan ·事后总结,并提交过程改进计划 10 10
合计   335 310

猜你喜欢

转载自www.cnblogs.com/WFxhao/p/12498212.html