个人项目作业
1.GitHub项目地址
https://github.com/nidiankongbai/wc
2.PSP预计时间
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 |
|
|
· Estimate |
· 估计这个任务需要多少时间 |
30 |
|
|
Development |
开发 |
430 |
|
|
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
|
|
· Design Spec |
· 生成设计文档 |
30 |
|
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
|
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
|
|
· Design |
· 具体设计 |
30 |
|
|
· Coding |
· 具体编码 |
120 |
|
|
· Code Review |
· 代码复审 |
60 |
|
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
|
|
Reporting |
报告 |
150 |
|
|
· Test Report |
· 测试报告 |
60 |
|
|
· Size Measurement |
· 计算工作量 |
30 |
|
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
60 |
|
|
合计 |
|
|
|
3.解题思路
拿到题目后首先想到要学习打开文件及对文件进行处理的函数,然后根据函数的定义写出相应代码完成基本需求。如果能力允许则继续完成扩展需求。
心路历程:在找资料的时候既上网查询相关资料、详细了解要点,又在遇到困难久久没解决时询问好友,集思广益。还要通过实际操作来调整代码。
4.设计实现过程
计算字符数countcharacter():通过fgets把一行中的字符赋给str字符串,对str进行strlen()得到字符数;并对中文进行处理
计算单词countword():由于无法确定哪些字母组合可以形成字典上的单词,因此以一连串英文为一个单词;
计算行数countline():根据每一行末尾的’字符\n’进行判断进行行数+1
5.代码说明
主函数:
#include"stdafx.h" #include<stdio.h> #include<string.h> #include<math.h> #include<ctype.h> #include<stdlib.h> int countcharacter(char *filename); void countword(char *filename); void countline(char *filename); int main(char argc, char *argv[]) { int x; switch (argv[1][1]) { //根据命令行参数选择操作 case 'c': x = countcharacter(argv[2]); printf("number of character is %d\n",x); break; case 'w': countword(argv[2]); break; case 'l': countline(argv[2]); break; } system("pause"); return 0; }
//计算字符数 int countcharacter(char *filename) { FILE *fp = fopen(filename, "r"); int count = 0,i; char str[20]; while (fgets(str, sizeof(str), fp)) { for (i = 0; i<strlen(str); i++) { if (str[i] < 0&& str[i+1] < 0) { count++; i++;continue; } else count++; } } fclose(fp); //printf("number of character is %d\n", count); //计算字符包括‘ ’和‘\n' return count; }
//计算单词数 void countword(char *filename) { FILE *fp = fopen(filename, "r"); int count, tag, i; count = 0; tag = 0; char str[20]; while (fgets(str, sizeof(str), fp)) { for (i = 0; i<strlen(str); i++) { if (str[i] < 0) continue; if (isalpha(str[i]) && tag == 0) { count++; tag = 1; } else if (isalpha(str[i]) == 0) { tag = 0; } } } fclose(fp); printf("number of word is %d\n", count); }
//计算行数 void countline(char *filename) { if (countcharacter(filename) == 0) { printf("number of line is 0\n"); return; } FILE *fp = fopen(filename, "r"); int count = 1, i; char str[20]; while (fgets(str, sizeof(str), fp)) { i = 1; for (i = 0; i<strlen(str); i++) { if (str[i] < 0) continue; if (str[i] == '\n') count++; } } fclose(fp); printf("number of line is %d\n", count); }
对字符的判断是:所有在ASCII码上的字符以及中文
对空文件进行判断,从而输出0.
6.测试运行
在运行中输入:

空文件:(空文件由于无法上传到GitHub,所以GitHub链接里的文件没有test2.c)
输入:D:\VS文档存储\wc\Debug\wc.exe -c test2.c

输入:D:\VS文档存储\wc\Debug\wc.exe -w test2.c

输入:D:\VS文档存储\wc\Debug\wc.exe -l test2.c

只有一个字符的文件:
输入:D:\VS文档存储\wc\Debug\wc.exe -c test3.c
输入:D:\VS文档存储\wc\Debug\wc.exe -w test3.c
输入:D:\VS文档存储\wc\Debug\wc.exe -l test3.c



只有一个词的文件:

输入:D:\VS文档存储\wc\Debug\wc.exe -c test4.c
输入:D:\VS文档存储\wc\Debug\wc.exe -w test4.c
输入:D:\VS文档存储\wc\Debug\wc.exe -l test4.c



只有一行的文件:

输入:D:\VS文档存储\wc\Debug\wc.exe -c test5.c
输入:D:\VS文档存储\wc\Debug\wc.exe -w test5.c
输入:D:\VS文档存储\wc\Debug\wc.exe -l test5.c



一个典型的源文件:

输入:D:\VS文档存储\wc\Debug\wc.exe -c jobtest.c
输入:D:\VS文档存储\wc\Debug\wc.exe -w jobtest.c
输入:D:\VS文档存储\wc\Debug\wc.exe -l jobtest.c



7.实际花费的时间
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
30 |
30 |
|
· Estimate |
· 估计这个任务需要多少时间 |
30 |
30 |
|
Development |
开发 |
430 |
530 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
60 |
70 |
|
· Design Spec |
· 生成设计文档 |
30 |
20 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
|
· Design |
· 具体设计 |
30 |
60 |
|
· Coding |
· 具体编码 |
120 |
100 |
|
· Code Review |
· 代码复审 |
60 |
70 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
120 |
200 |
|
Reporting |
报告 |
150 |
170 |
|
· Test Report |
· 测试报告 |
60 |
80 |
|
· Size Measurement |
· 计算工作量 |
30 |
20 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
60 |
70 |
|
合计 |
|
610 |
730 |
8.项目小结
这次项目做的不够好,感觉自己基础并不是太扎实,不能一气呵成。在写代码的时候,受到技术的局限性,不能很好的写出一个让客户满意的工程。而且没有形成很好的大局观,不是在debug就是在debug的路上。学习新函数的时候没有认真去了解应用,导致一个错误卡了几个小时。利的一面是学会了一些函数和VS的用法,初步接触了GitHub。认识到自己的不足,要在之后多完善自己的项目,不断更新改进,顺带提高自己的能力。
浙公网安备 33010602011771号