ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:500.95KB ,
资源ID:13529615      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/13529615.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C语言代码统计器文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C语言代码统计器文档格式.docx

1、2.1可行性分析前面已经说过,现在使用计算机编程的人已经越来越多了,其中使用C语言或C+语言编程的更是占了很大的比列。由于C语言的编写工程很大,但有时却需要统计一些其中的有关信息。如果用人工统计的话,既浪费时间,也浪费编程人员的精力,降低工作效率。所以现在对一些辅助型的软件需求量特别大。面对这样的现状,这款C&C+代码统计器应运而生。它能够弥补人力的不足,大大地提高了人们的工作效率,使程序员能集中精力编写更多有用的程序。另一方面,这个代码统计器占用空间很小,电脑的要求很低并且很便携,更能使大多数人接受,而且使用简单,更便于推广。总体来说,这款代码统计器满足了当前大多数编程人员的部分需求,并且凭

2、借着它独自的特点使大多数人能够接受。2.2整体功能这款C&C+代码统计器是用纯C编写的控制台程序,它既能单独地够统计单个文件,还能批量统计整个文件夹中所有文件,这也是前面说的提高效率的关键地方。主要统计的项目有:文件总数、代码总行数、有效代码总行数、注释行数、空白行数以及注释率等,由此看出,该统计器不仅可以用在它的本职工作(统计代码行数),还能用来统计一个文件夹中的所有文件个数。除了以上功能,该统计器还有以下优点:操作简单,用户既可以手动输入所需统计的文件或文件夹路径,也可以直接将文件或文件夹拖入特定区域进行统计,方便快捷。由于该代码统计器是在DOS下运行的控制台程序,所以运行速度比Windo

3、ws程序要快很多,这也弥补了它在界面上的劣势。第3章 关键技术3.1文件操作前面已经说到,文件操作很重要,特别是文件夹的遍历问题。3.1.1文件的打开与读取在C标准库函数中,头文件下包含了各种输入输出函数,其中就包括了实现文件操作的一系列函数:FILE *fopen(char *filename, char *mode) :以指定的方式打开一个文件。在该代码统计器的程序中,是以只读(r)方式打开一个文件的。为什么选只读呢?因为以只读方式打开的文件,无论是否有其他程序在使用它,都不会影响到对它的统计,这样使用起来也是更加的方便。int fgetc(FILE *fp) :从文件中当前位置读一个字符

4、。由于该程序中需要连续读取两个字符,而这个函数在读取时会自动移动文件内部指针,所以必须采取特殊措施才能实现连续读取。该程序是将文件打开两次,两个指针一前一后交替读取字符,从而达到连续读取的目的。int fclose(void) :关闭所有已打开的文件。文件打开之后一定要关闭,否则将会使数据丢失。3.1.2遍历文件夹 在头文件中,定义了一个结构体:struct _finddata_t unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name260;并且定

5、义函数 long _cdecl _findfirst(const char *, struct _finddata_t *),利用该函数,能够对一个文件夹路径进行检索,返回所给文件夹路径的子文件或子文件夹指针。从而,我们就可以从这个返回的结构体指针中获取文件夹子目录的全部相关信息,例如:文件或文件夹名、文件类型、文件大小以及更改日期等得知这些信息之后,我们只需要对不同类型的文件分别进行处理,就能实现对整个目录的遍历。这个程序是采用递归算法,如果所给文件夹的子目录是文件,则直接统计;如果所给文件夹的子目录是文件夹,则将对子文件夹的路径继续调用该函数,直至没有子文件夹为止。3.2变量处理由于要统计

6、代码源文件中的文件行数、代码函数、注释行数、空白行数等信息,则需要使用多个变量来分别统计各种信息。并且,有些变量不只在一个函数中使用,有些变量在递归时不能改变它的值。为此,在该统计器的程序设计中,一共使用了五个全局变量、九个静态变量。其中,五个全局变量分别统计用户输入的文件夹中的文件总数、总代码行数、总有效代码行数、总注释行数、总空白行数;九个静态变量位于字符判断的模块,分别用来统计单个文件的代码行数、有效代码行数、注释行数、注释率,以及用来标记字符是否在注释中、是否在字符串中、该行是否有注释、是否有代码等。这样做减少了函数之间值的地址的传递,出错也就更少,安全性也就越高。3.3错误识别与防范

7、3.3.1内存错误C语言中,指针一直都是最容易出错的地方。为了防止指针出错,本程序在关键处使用了C标准库函数中,头文件下void assert(int exp) 这个函数,它是用于表达式结果的正确性测试并且当表达式结果为假时使程序终止。本程序总共在三个地方使用到了它:1、在接受用户所输入的文件(夹)路径,将该路径传递给一个数组时,用于判断数组下标是否越界。2、在递归遍历文件夹时,函数入口参数是一个指针变量,接受文件夹路径。此处是用它来防止指针为空的情况。3、在判断文件是否为C或C+代码文件时,和第二种情况差不多,也是用来防止接收的文件名指针为空。3.3.2用户输入有误为了让用户更好地使用软件,

8、就需要有很好的人机对话,当用户输入错误信息的时候,就应该有所提示。这款软件能识别用户所输入的参数是否为文件(夹)路径,并且会给出相应的语言提示。并且,当用户所输入的文件或文件夹路径不存在时,也会给出相应的提示或警告,从而不会出现统计对象出错等现象。第4章 概要设计4.1.1路径判断为了高效统计用户所需的代码文件,就要求统计器能够批量统计文件夹。因此,首要任务就是要识别用户输入的信息,看用户所给的路径名是文件还是文件夹,从而做出相应的处理,该部分流程图如下:判断完用户所输路径后,就需要对其分开处理。因为该代码统计器是专门用来统计C语言或C+语言的,所以当接收路径名为文件时,就需要判断该文件的种类

9、,如果是C或C+程序代码文件,则直接进行统计;否则报错,提示用户文件格式不正确。该部分流程图如下:4.1.2遍历文件因为要实现批量处理文件,所以如果用户输入的是文件夹路径,就需要对该文件中的所有文件进行遍历,包括子文件夹中的所有文件,再分别统计出各个文件的相关信息。文件遍历是一个很关键的部分,遍历是否完全关系到统计的精确度,该统计器采用的是递归遍历法,其流程如下:4.1.3字符判断如果说文件遍历很重要,那么对文件字符的判断则是整个程序的核心部分。因为这部分直接关系到单个文件的统计是否正确。由于代码中存在许多关键字符,如:“/*”,“*/”,“/”等,这都需要两个字符连续判断,所以在读取时,需要

10、从文件中连续读取两个字符。该部分还关系到了文件的打开与读取,以及文件有效性的判断和从文件中读取字符,大致流程如下:字符判断又分为几大类:1、注释符:“/*”、“*/”、“/”;2、引号:单引号和双引号;3、空白:空格和制表符;4、转义字符:如“”;5、换行符:回车键;6、其它一般字符。这些字符的判断以及相应的处理在后面会相对详细的给出说明,这里就不赘述。4.1.4信息统计输出字符判段以及相应的处理后,就需要对文件行数、有效代码行数、注释率等一系列信息进行统计并输出,然后结束。大致流程如下:这就是该代码统计器的设计思路,至于一些关键部分的处理,接下来会有详细的说明。第5章 详细设计该代码统计器的

11、关键部分有三个:文件类型的判断、文件夹的遍历、文件字符的判断和变量处理。5.1文件类型判断C和C+源代码文件加起来一共有三类,分别是以.C、.H、.CPP为后缀名,有了这个依据,我们就能准确地从一系列文件中找出我们所需要的这三种文件。在设计程序时,为了避免有些文件对判断的干扰(比如:文件名为 *ctxt 这样的文件),我们是从文件名末尾开始判断的。由于由函数接收来的文件名是正常次序的,因此需要另外设定函数将文件名字符串倒置,然后再依据文件名后缀来进行判断筛选。值得一提的是,文件命名时不区别字母大小写,所以在判断之前要做一下简单的处理,那就是把文件名字符串的字符全部转换成小写或大写,这样就避免了

12、同样的事代码写两遍,显得啰嗦复杂,不简明,使用函数为“stdio.h”头文件下的strlwr( )函数。具体的字符串倒置和判断方法见附录A,代码中的子函数int FileJudge(char const *p)部分。单独将此部分提出来用一个子函数实现的目的是:以后如果增加了对其它语言的程序代码文件的统计,只需在此模块的文件类型的判断语句上增加一种或几种文件类型就行了,而不需要改动整个程序5.2遍历文件夹前面已经粗略提到过遍历文件夹的方法,这里再做具体的说明。前面讲过在头文件struct _finddata_t Unsigned attrib; /* Attributes, see consta

13、nts above. */ time_t time_create; time_t time_access; /* always midnight local time */ time_t time_write; _fsize_t size; char nameFILENAME_MAX; /* may include spaces. */并且定义了:int _cdecl _MINGW_NOTHROW _findfirst(const char *, struct _finddata_t *);int _cdecl _MINGW_NOTHROW _findnext (long, struct _finddata_t*);int _cdecl _MINGW_NOTHROW _findclose (long) 这三个函数。利用这三个函数,就能够实现对一个文件夹路径进行检索,并返回所给文件夹路径的子文件或子文件夹指针,并且关闭文件夹。文件或文件夹名、文件类型、文件

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1