"C语言设计WC"

个人开发流程

一、地址  https://github.com/June12345/WC

二、PSP

 

 

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

70

· Estimate

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

30

25

Development

开发

720

1020

· Analysis

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

120

150

· Design Spec

· 生成设计文档

40

30

· Design Review

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

60

40

· Coding Standard

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

30

30

· Design

· 具体设计

120

140

· Coding

· 具体编码

180

210

· Code Review

· 代码复审

120

100

· Test

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

180

150

Reporting

报告

120

90

· Test Report

· 测试报告

60

45

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

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

30

30

 

合计

1880

2140

三、解题思路

刚拿到这个项目时感觉无从下手,后来在做的过程中遇到的困难有:如何解析命令行、不理解文件操作等

思考:C语言设计 每个命令写一个函数一共三个函数

查找资料:有关C语言的书籍、网上查找命令行如何读入参数等

是否解决:是

学习总结:学会文件读取操作 逐字符逐行读取

 

四、设计实现

 

 

五、关键代码

 

//读取文件字符数
int GetChNum(char *strFilePath)
{
    int nNum = 0;
    FILE* fp = NULL;
    
    fp = fopen(strFilePath, "r");//打开文件
    if( fp == NULL )
    {
        return 0;
    }
    
    //读取文件信息
    while(!feof(fp))
    {
        fgetc(fp);
        nNum++;
    }
    
    fclose(fp);
    
    return nNum;
}

//读取单词数目
int GetWordNum(char *strFilePath)
{
    int nTotal = 0;
    int nStart = 0;
    int nEnd = 0;
    char szBuf[M] = { 0 };
    FILE* fp = NULL; //读入文件

    fp = fopen(strFilePath, "r");//打开文件

    if( fp == NULL )
    {
        return 0;
    }
    
    //读取文件信息
    while ( fgets(szBuf, M, fp) )
    {
        nStart = 0;
        nEnd = 0;
        while ( nStart < strlen(szBuf) )
        {
            //大写字母转换为小写字母
            if ( szBuf[nStart] >= 'A' &&  szBuf[nStart] <= 'Z' )
            {
                szBuf[nStart] += 32;
            }
            else if ( szBuf[nStart] < 'a' ||  szBuf[nStart] > 'z' )
            {
                szBuf[nStart] = ' ';
            }

            //取每个单词
            if ( (szBuf[nStart] >= 'a' &&  szBuf[nStart] <= 'z') || (szBuf[nStart] >= '0' &&  szBuf[nStart] <= '9'))
            {
                nEnd = nStart + 1;
                while ( szBuf[nEnd] >= 'a' &&  szBuf[nEnd] <= 'z' )
                {
                    nEnd++;
                }
                    
                nTotal++;

                nStart = nEnd;
            }

            nStart++;
        }
    }

    fclose(fp);

    return nTotal;
}

//读取文件行数 
int GetLineNum(char *strFilePath)
{
    int nTotalLine = 0;
    FILE* fp = NULL; //读入文件
    char szBuf[M] = { 0 };
    
    fp = fopen(strFilePath, "r");//打开文件
    
    if( fp == NULL )
    {
        return 0;
    }
    
    //读取文件信息
    while ( fgets(szBuf, M, fp) )
    {
        nTotalLine++;
    }
    
    fclose(fp);
    
    return nTotalLine;
}

 

 

 

六、测试运行图

基本功能测试图

七、小结

        这次作业是我有史以来花费时间精力最多的一次作业,但依然做的效果不理想。只完成了三个基本功能,看到其他同学在时间上花费得更少却实现了更多功能,真正地看到了我与他们的差距,以后一定要多花时间钻研。通过这次作业,我学习到了很多,因为许久没有做过这么有难度的设计,所以重拾回一些知识实操比较吃力,谢谢老师给我们这个机会打码钻研。

 

posted @ 2018-09-15 02:22  谢竣  阅读(187)  评论(0编辑  收藏  举报