个人项目WordCount
时间:2020-03-24
本文章向大家介绍个人项目WordCount,主要包括个人项目WordCount使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
个人项目WordCount
Github项目地址:https://github.com/Towito2/WC
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | |
· Estimate | · 估计这个任务需要多少时间 | 30 | |
Development | 开发 | 600 | |
· Analysis | · 需求分析 (包括学习新技术) | 180 | |
· Design Spec | · 生成设计文档 | 30 | |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 40 | |
· Design | · 具体设计 | 30 | |
· Coding | · 具体编码 | 180 | |
· Code Review | · 代码复审 | 30 | |
· Test | · 测试(自我测试,修改代码,提交修改) | 80 | |
Reporting | 报告 | 80 | |
· Test Report | · 测试报告 | 30 | |
· Size Measurement | · 计算工作量 | 20 | |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | |
合计 | 710 |
一、题目描述
Word Count
- 实现一个简单而完整的软件工具(源程序特征统计程序)。
- 进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
- 进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
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 的行数
二、解题思路
看见题目的时候,首先想到的是这个项目应该是与文件的操作相关的,由于之前没有学习过相关的知识,因此我先到网站上面搜索相关的资料进行学习。因为c语言的文件操作学习起来比较简单,所以我选择了使用c语言。
三、实现过程
主要用了4个函数,其中一个主函数,另外通过3个函数来实现3个基本功能。
四、代码说明
主函数
void main() {
int WordCount(FILE *p);
int CharCount(FILE *p);
int LineCount(FILE *p);
int number;
char FileName[100];
FILE *fp;
char se;
printf("请输入用户命令:wc.exe -");
scanf("%c", &se);
if (se == 'c') {
printf("请输入文件名:");
scanf("%s", &FileName);
fp = fopen(FileName, "r");
number = CharCount(fp);
printf("字符数为:%d\n", number);
fclose(fp);
}
else if (se == 'w') {
printf("请输入文件名:");
scanf("%s", &FileName);
fp = fopen(FileName, "r");
number = WordCount(fp);
printf("词的数目为:%d\n", number);
fclose(fp);
}
else if (se == 'l') {
printf("请输入文件名:");
scanf("%s", &FileName);
fp = fopen(FileName, "r");
number = LineCount(fp);
printf("行数为:%d\n", number);
fclose(fp);
}
else {
printf("输入错误!");
}
}
返回文件的字符数
int CharCount(FILE *p) {
if (NULL == p) {
printf("找不到该文件!");
}
char a;
int charcount = 0;
while (!feof(p)) {
a = fgetc(p);
if (a != '\n') {
charcount++;
}
}
return --charcount;
}
返回文件的词的数目
int WordCount(FILE *p) {
if (NULL == p) {
printf("找不到该文件!!");
}
char b;
int wordcount = 1;
b = fgetc(p);
if (feof(p)) return 0;
while (!feof(p)) {
b = fgetc(p);
if (b == ' ') {
wordcount++;
}
}
return wordcount;
}
返回文件的行数
int LineCount(FILE *p) {
if (NULL == p) {
printf("找不到该文件!");
}
char c[100];
int linecount = 0;
fgetc(p);
while (!feof(p)) {
fgets(c, 100, p);
linecount++;
}
return linecount;
}
五、测试运行
测试样例:1.空文件
2.只有一个字符的文件
3.只有一个词的文件
4.只有一行的文件
5.一个典型的源文件
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | |
· Estimate | · 估计这个任务需要多少时间 | 30 | |
Development | 开发 | 720 | |
· Analysis | · 需求分析 (包括学习新技术) | 200 | |
· Design Spec | · 生成设计文档 | 20 | |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | |
· Design | · 具体设计 | 60 | |
· Coding | · 具体编码 | 300 | |
· Code Review | · 代码复审 | 30 | |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | |
Reporting | 报告 | 70 | |
· Test Report | · 测试报告 | 30 | |
· Size Measurement | · 计算工作量 | 10 | |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | |
合计 | 790 |
六、项目小结
通过这次的项目,我对文件的一些基本的操作有了不少的了解,学习到了许多相关的知识。在一开始查找资料的过程中,由于没有很好的搞清楚项目的目标,耗费了不少的时间。实际的项目耗费的时间比预估的时间要多出一些,同时也与预期有不少的不符,这对我以后对项目所需时间的评估有了一定的帮助。
原文地址:https://www.cnblogs.com/zjh233/p/12561394.html
- 洛谷P3224 [HNOI2012]永无乡
- 手把手教你使用sklearn快速入门机器学习
- 【 关关的刷题日记48】Leetcode 58. Length of Last Word
- RESTful API 设计指南
- 洛谷P1043 数字游戏
- 使用“空”对象替代引用是否为空判断
- 真是绝了!史上最详细的Jupyter Notebook入门教程
- 10.socket网络编程
- BZOJ1269: [AHOI2006]文本编辑器editor
- 开发人员为何需要企业服务总线?
- 搭建Visual Studio Code+Python开发环境1.对象简介2. 搭建步骤3.小结
- 洛谷P3835 【模板】可持久化平衡树
- 17.HTML
- 洛谷P2925 [USACO08DEC]干草出售Hay For Sale
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法