项目github地址

https://github.com/gs735028922gs/wordc

项目相关要求

wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

具体功能要求:

程序处理用户需求的模式为:

wc.exe [parameter] [file_name]

基本功能列表:(已实现)

wc.exe -c file.c     //返回文件 file.c 的字符数

wc.exe -w file.c    //返回文件 file.c 的词的数目

wc.exe -l file.c      //返回文件 file.c 的行数

扩展功能:(未实现)

    -s   递归处理目录下符合条件的文件。

    -a   返回更复杂的数据(代码行 / 空行 / 注释行)。

空行:本行全部是空格或格式控制字符,如果包括代码,则只有不超过一个可显示的字符,例如“{”。

代码行:本行包括多于一个字符的代码。

注释行:本行不是代码行,并且本行包括注释。一个有趣的例子是有些程序员会在单字符后面加注释:

} //注释

在这种情况下,这一行属于注释行。

[file_name]: 文件或目录名,可以处理一般通配符。

高级功能:

-x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。

需求举例:

  wc.exe -s -a *.c

返回当前目录及子目录中所有*.c 文件的代码行数、空行数、注释行数。


 

PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

10

10

· Estimate

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

10

10

Development

开发

630

680

· Analysis

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

180

180

· Design Spec

· 生成设计文档

30

50

· Design Review

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

20

10

· Coding
Standard

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

20

10

· Design

· 具体设计

30

30

· Coding

· 具体编码

150

120

· Code Review

· 代码复审

100

100

· Test

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

100

180

Reporting

报告

100

90

· Test Report

· 测试报告

60

60

· Size
Measurement

· 计算工作量

10

10

· Postmortem
& Process Improvement Plan

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

30

20

合计

740

780

 

解题思路描述

使用语言:c语言

开发平台:Dev-C++

拿到题目,我是完全没有思路,从以前只会一些简单的c程序,万万没想到main函数也可以带入参数,这一点花费我大量时间学习和调试。

-c:利用fgetc函数进行逐个字符的读取

-w:同样用fgetc函数,读至空格时词数加一

-l: 同样用fgetc函数,读至’\n’时行数加一

设计实现过程

分别用三个函数来实现字符、词、行数的统计,主函数判断-c、-w、-l,并将文件传给对应函数。

代码说明

字符计数,fopen函数打开文件,fgetc函数自动指向下一个字符并返回给temp

void countc(char a2[100])      

{   

    char temp;

    int c = 0;

    FILE *fp = fopen(a2,"r");  

    temp = fgetc(fp);

    while(temp != EOF)                                                

    {

        if((temp >= 'a'&&temp <= 'z') || (temp >= 'A'&&temp <= 'Z'))

        c++;       

        temp = fgetc(fp);

    }

    printf("字符共:  %d 个\n",c);

}

词计数,fopen函数打开文件,fgetc函数自动指向下一个字符,若遇到字符则跳过,遇到非字符则计数

void countw(char a2[100])        

{                   

    char temp;

    int w = 0;

    FILE *fp = fopen(a2,"r");

    temp = fgetc(fp);

    while (temp != EOF)    

    {

        if ((temp >= 'a'&&temp <= 'z') || (temp >= 'A'&&temp <= 'Z') || (temp >= '0'&&temp <= '9'))

        {

            while ((temp >= 'a'&&temp <= 'z') || (temp >= 'A'&&temp <= 'Z') || (temp >= '0'&&temp <= '9'))

            {

            temp = fgetc(fp);   

            }

            w++;

         temp = fgetc(fp);

        }

        else

            temp = fgetc(fp);

    }

    printf("单词总共:%d 个\n",w);

}

行计数,fopen函数打开文件,fgetc函数自动指向下一个字符,遇到’\n’则计数

void countl(char a2[100])

{

  char temp;

    int l = 0;

    FILE *fp = fopen(a2,"r");

    temp = fgetc(fp);

    while(temp != EOF)

    {      

        if(temp == '\n')             

            l++;

        temp = fgetc(fp);       

    }

    l++;

    printf("行数总共: %d 个\n",l);

}

主函数用if进行判断并传递

int main(int argc,char *argv[])

{   

    char a[100];

    strcpy(a,argv[2]);

       if(!strcmp(argv[1],"-c"))

       countc(a);

       else if(!strcmp(argv[1],"-w"))

       countw(a);

       else if(!strcmp(argv[1],"-l"))

       countl(a);

    getchar();

    return 0;

}

测试运行

项目小结

本次项目是软件工程课程的第一个项目,我深深地认识到编程和软件开发的差距。本次wc项目的开发是非常有意义的,项目开发的过程中我再次深化了对c语言的认识和理解。人外有人,天外有天,目前我的知识储备还是太欠缺,今后我确实更应该丰富自己的编程能力并继续累积自己的项目开发经验。万事开头难,我希望下次开发能够做的更好。

个人项目作业WC的更多相关文章

  1. 个人项目作业WC(JAVA)

    GitHub地址:https://github.com/1666403186/WC 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试.回归 ...

  2. 个人项目作业——wc.exe

    一.Github项目地址 https://github.com/PIPIYing/wc 二.项目概况 项目描述 Word Count 1. 实现一个简单而完整的软件工具(源程序特征统计程序). 2. ...

  3. 个人项目作业--WC的实现

     GitHub项目地址 https://github.com/1721819634/WC 1.Word Count 项目要求: wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数. ...

  4. 个人项目作业(wc.exe)

    1.GitHub项目地址 https://github.com/QiuBin666/WC 项目介绍: 题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行 ...

  5. 个人项目作业-Word Count

    个人项目作业 1.Github地址 https://github.com/CLSgGhost/SE_work 2.项目相关需求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数. ...

  6. 结对项目作业GUI

    一.Coding.Net项目地址:https://git.coding.net/zhengsh589/CoupleProject.git 二.PSP表格(完成前): PSP 任务内容 计划共完成需要的 ...

  7. 个人项目作业$\cdot$求交点个数

    个人项目作业\(\cdot\)求交点个数 一.作业要求简介 本次作业是北航计算机学院软件工程课程的个人项目作业,个人开发能力对于软件开发团队是至关重要的,本项目旨在通过一个求几何图形的交点的需求来使学 ...

  8. 【BUAA 软工个人项目作业】玩转平面几何

    BUAA 软件工程个人项目作业 项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程个人项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法 ...

  9. 【软工】个人项目作业——个人软件流程(PSP)

    [软工]个人项目作业--个人软件流程(PSP) 项目 内容 班级:北航2020春软件工程 006班(罗杰.任健 周五) 博客园班级博客 作业:设计程序求几何对象的交点集合 个人项目作业 个人课程目标 ...

随机推荐

  1. Docker + Jenkins + Gitlab + Pytest + Allure 接口自动化测试之持续集成实战终极教程

    实战教程篇 前言 这边就不教大家怎么用 pytest 写项目了哦,下面有系列文章能帮助你快速入门 Pytest + Allure 这一篇教程主要是教如何从 0 到 1 搭建自动化测试的持续集成环境 后 ...

  2. ssh连接客户端一段时间没响应就断掉的解决办法-保持长连接

    修改(添加)server端的 /etc/ssh/sshd_config #server每隔60秒发送一次请求给client,然后client响应,从而保持连接 ClientAliveInterval ...

  3. 【django】长轮询

    API.PY import queue from django.contrib.auth.hashers import check_password from rest_framework.views ...

  4. epoll oneshot

    /* Epoll private bits inside the event mask */#define EP_PRIVATE_BITS (EPOLLWAKEUP | EPOLLONESHOT | ...

  5. java 基础知识(java web 方面的)

    1.java面向对象的基本特征:封装性,多态性,继承性. 2.Java的泛型:iterator接口主要有hasnext()方法,next()方法,remove()方法:collection接口继承了i ...

  6. [JLOI2011]飞行路线 题解

    [JLOI2011]飞行路线 题解 题目TP门 题目描述 Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有 ...

  7. vue项目中echarts属性总结

    <div id="echarts" style="width: 600px;height: 400px;margin-top: 100px;margin-left: ...

  8. java中高级面试利器(boot,cloud,vue前后端提升)

    https://github.com/Snailclimb/JavaGuide   Java知识大全(面试) https://github.com/doocs/advanced-java  Java工 ...

  9. 不一样的Flink入门教程

    前言 微信搜[Java3y]关注这个朴实无华的男人,点赞关注是对我最大的支持! 文本已收录至我的GitHub:https://github.com/ZhongFuCheng3y/3y,有300多篇原创 ...

  10. Redis 基础数据结构之一:string(字符串)

    Redis 有 5 种基础数据结构,分别为:string (字符串).list (列表).set (集合).hash (哈希) 和 zset (有序集合),Redis存储数据的结构是键值对形式的. 首 ...