个人项目作业

 

1.GitHub项目地址

https://github.com/nidiankongbai/wc

2.PSP预计时间

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 

· Estimate

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

 30

 

Development

开发

 430

 

· Analysis

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

 60

 

· Design Spec

· 生成设计文档

 30

 

· Design Review

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

 0

 

· Coding Standard

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

10

 

· Design

· 具体设计

30

 

· Coding

· 具体编码

 120

 

· Code Review

· 代码复审

 60

 

· Test

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

120

 

Reporting

报告

 150

 

· Test Report

· 测试报告

 60

 

· Size Measurement

· 计算工作量

 30

 

· Postmortem & Process Improvement Plan

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

 60

 

合计

 

 

 

 

 

3.解题思路

拿到题目后首先想到要学习打开文件及对文件进行处理的函数,然后根据函数的定义写出相应代码完成基本需求。如果能力允许则继续完成扩展需求。

 

心路历程:在找资料的时候既上网查询相关资料、详细了解要点,又在遇到困难久久没解决时询问好友,集思广益。还要通过实际操作来调整代码。

 

4.设计实现过程

计算字符数countcharacter():通过fgets把一行中的字符赋给str字符串,对str进行strlen()得到字符数;并对中文进行处理

计算单词countword():由于无法确定哪些字母组合可以形成字典上的单词,因此以一连串英文为一个单词;

计算行数countline():根据每一行末尾的’字符\n’进行判断进行行数+1

 

5.代码说明 

主函数:

 

#include"stdafx.h"
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
#include<stdlib.h>



int countcharacter(char *filename);
void countword(char *filename);
void countline(char *filename);

int main(char argc, char *argv[]) {
    int x;
    switch (argv[1][1]) {        //根据命令行参数选择操作
    case 'c': x = countcharacter(argv[2]); printf("number of character is %d\n",x); break;
    case 'w': countword(argv[2]); break;
    case 'l': countline(argv[2]); break;
    }
    
    system("pause");
    return 0;
}

 

//计算字符数
int countcharacter(char *filename)
{
    FILE *fp = fopen(filename, "r");
    int count = 0,i;
    
    char str[20];
    while (fgets(str, sizeof(str), fp))
    {
        for (i = 0; i<strlen(str); i++)
        {
            if (str[i] < 0&& str[i+1] < 0) { count++; i++;continue; }
            else count++;
        }
    }
    fclose(fp);
    //printf("number of character is %d\n", count); //计算字符包括‘ ’和‘\n'
    return count;
}
//计算单词数
void countword(char *filename)
{
    FILE *fp = fopen(filename, "r");
    int count, tag, i;
    count = 0; tag = 0;
    char str[20];
    while (fgets(str, sizeof(str), fp))
    {

        for (i = 0; i<strlen(str); i++)
        {
            if (str[i] < 0) continue;
            if (isalpha(str[i]) && tag == 0) { count++; tag = 1; }
            else if (isalpha(str[i]) == 0) { tag = 0; }
        }
    }
    fclose(fp);
    printf("number of word is %d\n", count);
}
//计算行数
void countline(char *filename)
{
    if (countcharacter(filename) == 0) { printf("number of line is 0\n"); return; }
    FILE *fp = fopen(filename, "r");
    int count = 1, i;
    char str[20];
    while (fgets(str, sizeof(str), fp))
    {
        
        i = 1;
        for (i = 0; i<strlen(str); i++)
        {
            if (str[i] < 0) continue;
            if (str[i] == '\n') count++;
        }

    }
    fclose(fp);
    printf("number of line is %d\n", count);
}

对字符的判断是:所有在ASCII码上的字符以及中文

对空文件进行判断,从而输出0.

 

 

6.测试运行

在运行中输入:

空文件:(空文件由于无法上传到GitHub,所以GitHub链接里的文件没有test2.c)

输入:D:\VS文档存储\wc\Debug\wc.exe -c test2.c

 

 

输入:D:\VS文档存储\wc\Debug\wc.exe -w test2.c

 

 

 

输入:D:\VS文档存储\wc\Debug\wc.exe -l test2.c

 

 

 

只有一个字符的文件:

输入:D:\VS文档存储\wc\Debug\wc.exe -c test3.c

输入:D:\VS文档存储\wc\Debug\wc.exe -w test3.c

输入:D:\VS文档存储\wc\Debug\wc.exe -l test3.c

 

 

 

 

 

只有一个词的文件:

输入:D:\VS文档存储\wc\Debug\wc.exe -c test4.c

输入:D:\VS文档存储\wc\Debug\wc.exe -w test4.c

输入:D:\VS文档存储\wc\Debug\wc.exe -l test4.c

 

 

 

 

 

 

只有一行的文件:

 

 

输入:D:\VS文档存储\wc\Debug\wc.exe -c test5.c

输入:D:\VS文档存储\wc\Debug\wc.exe -w test5.c

输入:D:\VS文档存储\wc\Debug\wc.exe -l test5.c

 

 

 

 

 

一个典型的源文件:

 

 输入:D:\VS文档存储\wc\Debug\wc.exe -c jobtest.c

输入:D:\VS文档存储\wc\Debug\wc.exe -w jobtest.c

输入:D:\VS文档存储\wc\Debug\wc.exe -l jobtest.c

 

 

 

 

 

 

7.实际花费的时间

 

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

 30

 30

· Estimate

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

 30

30 

Development

开发

 430

 530

· Analysis

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

 60

70 

· Design Spec

· 生成设计文档

 30

20 

· Design Review

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

 0

· Coding Standard

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

10

10 

· Design

· 具体设计

30

60 

· Coding

· 具体编码

 120

100

· Code Review

· 代码复审

 60

70 

· Test

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

120

200 

Reporting

报告

 150

 170

· Test Report

· 测试报告

 60

 80

· Size Measurement

· 计算工作量

 30

 20

· Postmortem & Process Improvement Plan

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

 60

 70

合计

 

 610

 730

 

8.项目小结

这次项目做的不够好,感觉自己基础并不是太扎实,不能一气呵成。在写代码的时候,受到技术的局限性,不能很好的写出一个让客户满意的工程。而且没有形成很好的大局观,不是在debug就是在debug的路上。学习新函数的时候没有认真去了解应用,导致一个错误卡了几个小时。利的一面是学会了一些函数和VS的用法,初步接触了GitHub。认识到自己的不足,要在之后多完善自己的项目,不断更新改进,顺带提高自己的能力。

posted @ 2020-03-15 19:06  nidian  阅读(191)  评论(0)    收藏  举报