个人项目wc
github地址:https://github.com/YTFFBX/wc
1.题目描述
Word Count
1. 实现一个简单而完整的软件工具(源程序特征统计程序)。
2. 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
3. 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
2. WC 项目要求
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 文件的代码行数、空行数、注释行数。
3.代码实现
获取filename文件中的单词数目
返回值:单词数[字符串数]
int GetWords(char *filename) {
FILE *fp;
int index = 0;
char str[10000];
//打开文件
if ((fp=fopen("file.c","r"))==NULL) {
printf("不能打开file.c文件\n");
return 0;
}
while(!feof(fp)) {
fscanf(fp,"%s",str);
//printf("%d\n",strlen(str));
if(strlen(str) == 0) {
index = 0;
break;
}
index++;
}
//关闭文件
fclose(fp);
return index;
}
获取filename文件中的字符数+行数(找\n数+1)
无返回值
void GetCsAndLines(char *filename,int &cs,int &lines) {
FILE *fp1;
char c;
if ((fp1=fopen("file.c","r"))==NULL) {
printf("不能打开file.c文件\n");
return;
}
while((c = fgetc(fp1)) != EOF) {
if(c != ' ') {
cs++;
}
if(c == '\n') {
lines++;
}
}
//因为要算上最后一行
lines++;
//此时的cs是算上了换行字符\n
if(cs != 0) cs -= (lines-1);
}
主函数
int main() {
//定义文件名
char filename[100];
printf("请输入文件路径:\n");
scanf("%s",&filename);
//字符数
int cs = 0;
//单词数
int words = 0;
//行数
int lines = 0;
GetCsAndLines(filename,cs,lines);
printf("%s文件的字符数:%d\n",filename,cs);
words = GetWords(filename);
printf("%s文件的词数:%d\n",filename,words);
printf("%s文件的行数:%d\n",filename,lines);
}
4.测试
空文件

一个字符

一个词

一行

原文件


5.项目小结
这次项目作业没有做好充分准备,时间比较仓促,只完成了基本功能,我也发现了非常多的不足,吸取了很多教训。
6.psp2.1表格
1. PSP2.1表格
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 |
35 |
|
· Estimate |
· 估计这个任务需要多少时间 |
25 |
30 |
|
Development |
开发 |
820 |
955 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
135 |
200 |
|
· Design Spec |
· 生成设计文档 |
20 |
25 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
15 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
20 |
|
· Design |
· 具体设计 |
50 |
65 |
|
· Coding |
· 具体编码 |
340 |
330 |
|
· Code Review |
· 代码复审 |
50 |
50 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 |
90 |
|
Reporting |
报告 |
70 |
80 |
|
· Test Report |
· 测试报告 |
35 |
40 |
|
· Size Measurement |
· 计算工作量 |
20 |
20 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
|
合计 |
875 |
1020 |
个人项目wc的更多相关文章
- 个人项目-wc
个人项目-WC (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...
- 实践简单的项目WC
#include<iostream> #include<fstream> #include<string> #include<Windows.h> us ...
- 个人项目——wc源程序特征统计
这一次要做的项目是wc——统计程序文件特征的命令行程序. 根据需求需求得到的模式为:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需 ...
- 实现项目WC
软件的需求分析 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 - ...
- 个人项目-WC(C/C++ 兼容Linux和Windows)
一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...
- 个人项目-WC (java实现)
一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...
- 个人项目-WC(Java实现)
一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- 个人项目 wc(java实现)
一.Github网址: https://github.com/Clarazhangbw/Wc.exe 二.PSP表 PSP2.1 Personal Software Process Stages 预估 ...
- 个人项目WC(Python实现)
一.GitHub地址 https://github.com/hoka-17/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际 ...
- 个人项目—WC
一,Github地址:https://github.com/mushan520/WC.git 二.PSP表格: PSP2.1 Personal Software Process Stages 预估耗 ...
随机推荐
- 修改git上传代码的作者姓名
本文参考https://www.cnblogs.com/weiaiqi/p/11842515.html 随着IT行业的不断壮大,开源的东西越来越多,使用git来进行代码管理的人自然也越来越多,而且很多 ...
- PHP tempnam() 函数
定义和用法 tempnam() 函数在指定的目录中创建一个具有唯一文件名的临时文件. 该函数返回新的临时文件名,如果失败则返回 FALSE. 语法 tempnam(dir,prefix) 参数 描述 ...
- PHP imagecharup - 垂直地画一个字符
imagecharup — 垂直地画一个字符.高佣联盟 www.cgewang.com 语法 bool imagecharup ( resource $image , int $font , int ...
- MyBatis-Plus使用(3)-条件构造器
说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现的泛型P ...
- spring 命名空间
命名空间太多了,有必要学习了解一下 xmlns是XML Namespaces的缩写 使用语法: xmlns:namespace-prefix="namespaceURI" xsi全 ...
- DataGrip 2020.1 安装与激活
1 软件下载 百度网盘: 链接:https://pan.baidu.com/s/1kHSq1XS0i4YDF0HuzsxCLg 提取码:djyc 2 安装 解压文件后点击 datagrip-2020. ...
- 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 可能很多新手都会遇到同样的问题:我要我的Asp.net ...
- CI4框架应用四 - 第一个页面
我们来看一下CI4框架的默认页面是如何实现的. 我们先来认识一下路由文件(app\Config\Routes.php),这个文件非常重要,且功能强大,它定义了URL模式及响应处理方法,我们先看一下这个 ...
- Java项目中经常遇到的一些异常情况
一. 1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存 ...
- nvcc fatal : Path to libdevice library not specified
安装完成后,配置环境变量,在home下的.bashrc中加入 export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export ...