标签:view 代码 体会 ext 个人能力 计划 com img fclose
github项目地址:https://github.com/KID53/wordcount
PSP:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
20 |
31 |
· Estimate |
· 估计这个任务需要多少时间 |
390 |
439 |
Development |
开发 |
310 |
358 |
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
20 |
· Design Spec |
· 生成设计文档 |
25 |
34 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
15 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
20 |
15 |
· Design |
· 具体设计 |
120 |
144 |
· Coding |
· 具体编码 |
55 |
75 |
· Code Review |
· 代码复审 |
20 |
15 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
40 |
Reporting |
报告 |
60 |
50 |
· Test Report |
· 测试报告 |
25 |
30 |
· Size Measurement |
· 计算工作量 |
15 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
10 |
合计 |
|
390 |
439 |
一、题目描述
wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。
具体功能要求:
程序处理用户需求的模式为:
wc.exe [parameter] [file_name]
-c file.c //返回文件 file.c 的字符数
-w file.c //返回文件 file.c 的词的数目
-l file.c //返回文件 file.c 的行数
-s 递归处理目录下符合条件的文件。
-a 返回更复杂的数据(代码行 / 空行 / 注释行)。
高级功能
基本的Windows GUI 程序操作
支持通过图形界面选取文件
支持通过图形界面展现文件的信息
二、解题思路
由于个人能力有限,对于Java等面向对象的程序语言认识不足,故使用较为熟悉的c语言实现功能。首先分别构造了3个不同函数实现对应3个基本功能,用控制台输入文件路径的方式计算对应文件中的字符、词、行数。
三、主要代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int char_NUM(char *file) {//统计字符数
FILE *fp=NULL;
int char_num=0;
char file_char=‘\0‘;
if (NULL==(fp=fopen(file, "r"))) {//打开文件
printf("寻找文件失败!\n");
exit(0);
}
while ((file_char=fgetc(fp))!=EOF) {//逐个读取文件字符
char_num++;//计算字符数
}
fclose(fp);
return char_num;
int word_NUM(char *file) {//统计单词数
FILE *fp=NULL;
int word_num=0;
char file_word=‘\0‘;
int i=0;//判断单词数是否加1标志
if (NULL==(fp=fopen(file, "r"))) {
printf("文件寻找失败!\n");
exit(0);
}
while ((file_word=fgetc(fp))!=EOF) {
if (file_word<‘A‘||(file_word>‘Z‘&&file_word<‘a‘)||file_word>‘z‘){
i=0;
}
else if(i==0){
i=1;
word_num++;
}
}
return word_num;
}
int line_NUM(char *file) {//统计行数
FILE *fp=NULL;
int line_num=0;
char file_line=‘\0‘;
if (NULL==(fp=fopen(file, "r"))) {
printf("文件寻找失败!\n");
exit(0);
}
while ((file_line=fgetc(fp))!=EOF) {
if (file_line==‘\n‘) {//换行计算行数
line_num++;
}
}
fclose(fp);
return line_num;
}
int main() {
char file[150], in=‘\0‘;
int a=1;
printf("输入c -> wc.exe -c file.c //返回文件 file.c 的字符数\n");
printf("输入w -> wc.exe -w file.c //返回文件 file.c 的词的数目\n");
printf("输入l -> wc.exe -l file.c //返回文件 file.c 的行数\n");
printf("输入E则退出程序\n");
while(a){
printf("请输入用户命令:wc.exe -");
scanf(" %c",&in);
switch(in)
{
case ‘c‘:{
printf("\n请输入文件名:");
scanf("%s", &file);
printf("文件字符数为:%d \n\n",char_NUM(file));
break;}
case ‘w‘:{
printf("\n请输入文件名:");
scanf("%s", &file);
printf("文件单词数为:%d \n\n",word_NUM(file));
break;}
case ‘l‘:{
printf("\n请输入文件名:");
scanf("%s", &file);
printf("文件行数为:%d \n\n",line_NUM(file));
break;}
case ‘E‘:{
printf("感谢使用此程序!\n");
a=0;
break;}
default:
printf("错误操作!请重新输入\n");
}
}
return 0;
}
四、测试文件
1.空文件
2.两个字符文件(包括换行符)
3.一个词文件
4.一行文件
5.典型的源文件
五.个人总结
通过这次个人开发,我深刻体会到个人编程能力的不足,由于对c语言的fopen()等文件函数知之甚少,所以花了一些时间学习这板块,也看出来我之前学习的懒惰。尽管这次只实现了基本功能,但也花了不少时间。
标签:view 代码 体会 ext 个人能力 计划 com img fclose
原文地址:https://www.cnblogs.com/zhangzhaoyang4319/p/12555400.html