项目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. [收藏] 传说中的12306买票插件-chrome专用

    12306.cn买票,难死了,登录登录登录... 现在不用了... js插件+chrome浏览器: /* * 12306 Auto Query => A javascript snippet t ...

  2. 基于 Nebula Operator 的 K8s 自动化部署运维

    摘要:Nebula Operator 是 Nebula Graph 在 Kubernetes 系统上的自动化部署运维插件.在本文,你将了解到 Nebula Operator 的特性及它的工作原理. 从 ...

  3. python 之路 《三》列表与元组

    我也试着把我写的东西给我的一些同学看,其实这只是我的经验还是比较建议先看书,或者在网上找相关的教学视频有了一定的基础之后再来看我写的文章,将我的经验与自己所学的知识相结合这样才会有所提高.有的同学建议 ...

  4. Angular变更检测策略报错

    报错信息: ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was ...

  5. 微信_跳一跳辅助程序_Python_(带GitHub项目地址)

    1.安装Python(推荐3.6) https://www.python.org/downloads/ 2.在github上下载脚本 [github项目地址](https://github.com/w ...

  6. Vue.js自定义标签属性并获取属性,及绑定img的src属性的坑

    一.定义属性: 一般定义属性都是为了动态的去获取属性的值,或者动态的设置属性的值,如果想仅仅是设置一个普通的属性,直接在便签上设置属性即可,就像使用html的title.name等属性一样,如< ...

  7. Canvas实现放大镜效果完整案例

    本文主要记录 canvas 在图像.文字处理.离屏技术和放大镜特效的实现过程中使用到的API.先看下效果吧: 一张模糊的图片: 鼠标点击任意位置,产生放大效果: 哇塞~ 一个帅哥,哈哈哈哈~ 1.显示 ...

  8. 我要进大厂之大数据Hadoop HDFS知识点(2)

    01 我们一起学大数据 老刘继续分享出Hadoop中的HDFS模块的一些高级知识点,也算是对今天复习的HDFS内容进行一次总结,希望能够给想学大数据的同学一点帮助,也希望能够得到大佬们的批评和指点! ...

  9. docker搭建渗透环境并进行渗透测试

    目录 docker简介 docker的安装 docker.centos7.windows10(博主宿主机系统)之间相互通信 -docker容器中下载weblogic12c(可以略过不看) docker ...

  10. 【转】AWVS扫描小技巧

    1.文件头加 Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html) 可以绕过狗,waf ...