个人项目WordCount

1.Github项目地址:https://github.com/fangxiao-99/WordCount

2.解体思路:
  开始拿到题目后,先思考这个题目设计的程序类似于之前写过的图书管理系统中,对于文本文件的读取,因其他语言不熟,所以选用C,可以实现对文件文件的字符数、单词数、行数的统计功能。在网络上搜索关于c的对于文件操作的函数,进行学习使用

3.设计实现过程:
  代码应有四个,主函数和三个实现统计功能的函数,在主函数中调用三个功能函数实现基本功能
  主函数:调用功能函数实现功能
  统计字符数函数:打开文件后,用while循环调用fgetc函数直至文件结尾,对出现的字符数统计自加
  统计单词数函数:打开文件后,用while循环调用fgetc函数直至文件结尾,当统计的字符出现字母时,单词数+1
  统计行数函数:打开文件后,用while循环调用fgetc函数直至文件结尾,当统计的字符出现换行符号”\n“时,行数+1,注意的是行数应从1开始算起

4.代码说明:
  
(1)主函数:

#include <stdio.h>
#include <stdlib.h>

int flag;  //判断文件是否为空 
void x1(char address[]);
void x2(char address[]);
void x3(char address[]);

int main()
{
    char address[100];  //文件地址
    while(1)
      {
              printf("请输入你要查找的文件的地址:\n");
              scanf("%s",address);
            x1(address);  //统计字符数 
            x2(address);  //统计单词数 
            x3(address);  //统计行数 
      }   
}

  (2)统计字符数函数:

void x1(char address[])  //计算字符数函数
 {
     int Charnum = 0;
    FILE *fp = NULL;
    if((fp = fopen(address,"r")) == NULL)  //判空 
    {
        printf("打开文件失败\n");
        exit(-1);
    }
    char x = NULL;
    x = fgetc(fp);
    while(x != EOF)
    {
        x = fgetc(fp);
        Charnum++;
    }
    
    if(Charnum == 0)  //如果该文件字符数为0,则置flag为0,表示该文件为空文件
      {
        flag = 0;
      } 
    else 
      {
        flag = 1;
      }
    printf("该文件的字符数为%d\n", Charnum);
 }

  (3)统计单词数函数:

void x2(char address[])  //计算单词数函数 
 {
     int Wordnum = 0;
    FILE *fp = NULL;
    if((fp = fopen(address,"r")) == NULL)  //判空 
    {
        printf("打开文件失败\n");
        exit(-1);
    }
    char x = NULL;
    x = fgetc(fp);
    int word = 0;  //统计单词数的标志 
        while(x != EOF)
        {
            if(!(x >= 'A' && x <= 'Z'|| x >= 'a' && x <= 'z'))  //当字符为非字母时 
                {
                     word = 0;  //置单词标志为0 
                }
            else if((word == 0) && (x >= 'A' && x <= 'Z'|| x >= 'a' && x <= 'z'))  //当字符为字母时 
                {
                     word = 1;  //置单词标志为1,表示字符串为一个单词 
                     Wordnum++;
                }
        x = fgetc(fp);    
        } 
    printf("该文件的单词数为%d\n", Wordnum);
 }

(4)统计行数函数:

void x3(char address[])  //计算行数函数 
 {
     int Linenum = 0;
     FILE *fp = NULL;
    if((fp = fopen(address,"r")) == NULL)
    {
        printf("打开文件失败\n");
        exit(-1);
    }
    char x = NULL;
    x = fgetc(fp);
    while(x != EOF)
     {
        if(x == '\n')  //x为转行符号时 
        {
            Linenum++;
        }
        x = fgetc(fp);    
    }
    Linenum++;  //行数+1 
    if(flag == 0)  //当文件为空,行数为0
     {
        Linenum = 0;
     } 
    printf("该文件的行数为%d\n", Linenum);
 }

说明:在字符数函数中应判断文件是否为空,通过计算字符数函数中字符数是否为0来判断,若是空文件则在行数统计中置行数为0,行数不能自加一

5.测试运行:
(1)空文件:


(2)一个字符的文件:


(3)一个单词的文件:

 


(4)只有一行的文件:

 

 

(5)典型的源文件:

 

 

6.PSP表格:

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 30

· Estimate

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

 300

 400

Development

开发

 120

 150

· Analysis

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

 20

10

· Design Spec

· 生成设计文档

 5

 5

· Design Review

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

 0

 0

· Coding Standard

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

 15

 10

· Design

· 具体设计

 30

 30

· Coding

· 具体编码

 40

 45

· Code Review

· 代码复审

 20

 25

· Test

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

5

 10

Reporting

报告

 10

 5

· Test Report

· 测试报告

 0

 0

· Size Measurement

· 计算工作量

 5

 5

· Postmortem & Process Improvement Plan

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

 15

 15

合计

 

 615

 740


7.项目小结:
1.第一次使用github和博客园,进行一次个人项目的设计,在学习使用github这里花费较多的时间,但也在github收获很多宝贵的资源
2.对其他语言还不熟悉,只能用c,在开发时感觉到不是那么的方便,而且有些扩展功能和高级功能没有完成,鉴于时间先上交作业,课后要自己去研究这些功能怎么写
3.初试程序时没有考虑到空文件的情况,后面发现需要判断空文件,利用全局变量可以在分函数里套用使用,就不需要太大的改动
4.自身的理论知识储备不足,在写代码时感觉是边学习边写,而且时间规划不明确,在理论知识的实践应用上也不熟手,需要加强自己的代码能力

 

 

 

 

 

 

 



posted @ 2020-03-24 21:21  不觉zL  阅读(160)  评论(0编辑  收藏  举报