Wc.exe
wc.exe是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。
githud地址:https://github.com/Coothen/practice.git
一、PSP表-预估耗时
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) |
---|---|---|
Planning | 计划 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 60 |
Development | 开发 | 840 |
· Analysis | · 需求分析 (包括学习新技术) | 60 |
· Design Spec | · 生成设计文档 | 30 |
· Design Review | · 设计复审 (和同事审核设计文档) | 30 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 |
· Design | · 具体设计 | 30 |
· Coding | · 具体编码 | 480 |
· Code Review | · 代码复审 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 |
Reporting | 报告 | 100 |
· Test Report | · 测试报告 | 60 |
· Size Measurement | · 计算工作量 | 10 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 |
合计 | 1000 |
二、解题思路
-
先去GitHub或CSDN博客上面找类似的源程序,比较其他语言,我对C语言较熟悉,所以找了几份用C编程的源程序,并在编译器上运行测试效果。
-
选择一份具备基本功能的源代码开始分析,并尝试根据其思路自己编辑。
-
基本功能实现后,开始尝试实现拓展功能。
-
拓展功能实现后,开始测试并修改代码。
三、设计实现过程
-
先写两个功能函数
void file_error(){};文件打开错误
void c_w_lCount(int wc_char,int wc_word,int wc_line,FILE *fp){};实现字符,单词,行数的计数
-
再写主函数
四、代码说明
//文件打开错误函数
void file_error(){
printf("打开有误!\n");
printf("请按enter键继续....");
_getch();
exit(0);
}
//字符数,单词数,行数计算
void c_w_lCount(int wc_char,int wc_word,int wc_line,FILE *fp){//单词,字符,行数计算函数
char *c;
while (1){
char ch;
ch = fgetc(fp);//fgetc():从FP中 返回一个字符
if (ch >= 'A'&&ch <= 'z'){
putchar(ch);//终端输出一个字符
wc_char++;}
else if (ch == ' '){
putchar(ch);
wc_word++;}
else if (ch == '\n'){
putchar(ch);
wc_word++;
wc_line++;}
else if (ch==EOF){
break;}
_getch();
printf("\n该文件中字符数有 %d个。\n", wc_char);
printf("该文件中单词数有 %d个。\n", wc_word);
printf("该文件中行数有 %d行。\n", wc_line);
printf("请输入统计方式如(-c\-w\-l):");//输入“-c"显示字符数 ,输入“-l"显示行数,输入“-w"显示单词数
gets(c);
if (strcmp(c, "-c") == 0){
printf("该文件中字符数有 %d个。\n",wc_char);}
else if (strcmp(c, "-w") == 0){
printf("该文件中单词数有 %d个。\n",wc_word);}
else if (strcmp(c, "-l") == 0){
printf("该文件中行数有 %d行。\n",wc_line);}
exit(0);}
五、测试运行
基本功能:
文件打开错误提示
实现文件字符数,单词数,行数的计算。
输入-w/-c/-l,相对应输出字符数,单词数和行数。
统计字符数:
统计单词数:
统计行数:
六、PSP表-实际耗时
PSP2.1 | Personal Software Process Stages | 实际耗时(分钟) | |
---|---|---|---|
Planning | 计划 | 50 | |
· Estimate | · 估计这个任务需要多少时间 | 50 | |
Development | 开发 | 680 | |
· Analysis | · 需求分析 (包括学习新技术) | 90 | |
· Design Spec | · 生成设计文档 | 20 | |
· Design Review | · 设计复审 (和同事审核设计文档) | 20 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 10 | |
· Design | · 具体设计 | 60 | |
· Coding | · 具体编码 | 240 | |
· Code Review | · 代码复审 | 120 | |
· Test | · 测试(自我测试,修改代码,提交修改) | 120 | |
Reporting | 报告 | 90 | |
· Test Report | · 测试报告 | 60 | |
· Size Measurement | · 计算工作量 | 10 | |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 20 | |
合计 | 820 |
七、总结
遇到的问题:
-
时间过于紧迫。拿到题目,虽然题目并不是很难,但对于缺乏实践的我来说,是一个挑战,我从来没试过在这么短的时间内写一个小程序。
-
之前未接触过GitHub,在GItHub使用上面花费了较长时间。
-
开始的时间较晚,到后面发现很多问题,但是来不及修改。
改进及建议:学习用JAVA语言编写程序,此次用C语言编写程序,运行界面为编译器的运行窗口,并未自己制作视图界面。
收获:
-
知道独自开发一个小程序的基本步骤,学会使用预估耗时和实际耗时进行对比,从而提高自己的效率。
-
意识到自己C语言和JAVA语言的薄弱,应利用大三时间复习巩固,并多实践。
-
学会使用GitHub。