github链接 :https://github.com/YYFCY/Word-Count
一、项目要求
1. 统计文本文件的字符数、单词数和行数
2. 递归处理目录下符合条件的文件
3. 返回更复杂的数据(代码行/空行/注释行)
4. 实现GUI界面
二、项目计划PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时 (分钟) | 实际耗时 (分钟) |
Planning | 计划 | ||
Estimate | 估计这个任务需要多少时间 | 30 | |
Development | 开发 | ||
Analysis | 需求分析(包括学习新技术) | 200 | |
Design Spec | 生成设计文档 | 100 | |
Design Review | 设计复审(和同事审核设计文档) | 100 | |
Coding Standard | 代码规范(为目前的开发制定合适的规范) | 30 | |
Design | 具体设计 | 100 | |
Coding | 具体编码 | 1000 | |
Code Review | 代码复审 | 100 | |
Test | 测试(自我测试、修改代码、提交修改) | 100 | |
Reporting | 报告 | ||
Test Report | 测试报告 | 150 | |
Size Measurement | 计算工作量 | 30 | |
Postmortem & Process Improvement Plan | 事后总结,并提出过程改进计划 | 60 | |
合计 | 2000 |
三、解题思路
参数 | 功能 |
-c | 返回文件file.c的字符数 |
-w | 返回文件file.c的词的数目 |
-l | 返回文件file.c的行数 |
-s | 递归处理目录下符合条件的文件 |
-a | 返回更复杂的数据 |
-x | 打开GUI界面 |
下面对参数读取部分做详细解释:
根据输入的参数检查文件是否可以存在并可以读取,返回-1表示文件不存在,返回-2表示文件存在但是没有读取权限,返回1表示文件可以正常读取。
//检查文件是否存在且可以读取
int check_file_name(char file_name[])
{
if (access(file_name, 0))//判断该文件/文件夹是否存在;
return -1;
if (access(file_name, 2) != 0)//判断该文件/文件夹是否有读权限;
return -2;
return 1;
}
在确定文件可以读取之后,还需要对输入参数的前半部分做一检测,判断其是否符合题目要求,返回为1则表明符合要求,返回为-1表明输入参数错误
//检查命令是否正确,命令正确返回1,错误返回-1.
int check_command(char command[])
{
int len = strlen(command);
if (len != 2 || command[0] != '-')
return -1;
if (command[1] == 'c' || command[1] == 'w' || command[1] == 'l' || command[1] == 'a')
return 1;
else
return -1;
}
四、设计实现
总体设计(程序流程图)
五、各功能模块
1. 统计文件字符数 count_char()函数
//统计文件的字符数
int c