"C语言设计WC"
个人开发流程
一、地址 https://github.com/June12345/WC
二、PSP
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
60 |
70 |
· Estimate |
· 估计这个任务需要多少时间 |
30 |
25 |
Development |
开发 |
720 |
1020 |
· Analysis |
· 需求分析 (包括学习新技术) |
120 |
150 |
· Design Spec |
· 生成设计文档 |
40 |
30 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 |
40 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 |
30 |
· Design |
· 具体设计 |
120 |
140 |
· Coding |
· 具体编码 |
180 |
210 |
· Code Review |
· 代码复审 |
120 |
100 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
180 |
150 |
Reporting |
报告 |
120 |
90 |
· Test Report |
· 测试报告 |
60 |
45 |
· Size Measurement |
· 计算工作量 |
10 |
10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 |
30 |
|
合计 |
1880 |
2140 |
三、解题思路
刚拿到这个项目时感觉无从下手,后来在做的过程中遇到的困难有:如何解析命令行、不理解文件操作等
思考:C语言设计 每个命令写一个函数一共三个函数
查找资料:有关C语言的书籍、网上查找命令行如何读入参数等
是否解决:是
学习总结:学会文件读取操作 逐字符逐行读取
四、设计实现
五、关键代码
//读取文件字符数 int GetChNum(char *strFilePath) { int nNum = 0; FILE* fp = NULL; fp = fopen(strFilePath, "r");//打开文件 if( fp == NULL ) { return 0; } //读取文件信息 while(!feof(fp)) { fgetc(fp); nNum++; } fclose(fp); return nNum; } //读取单词数目 int GetWordNum(char *strFilePath) { int nTotal = 0; int nStart = 0; int nEnd = 0; char szBuf[M] = { 0 }; FILE* fp = NULL; //读入文件 fp = fopen(strFilePath, "r");//打开文件 if( fp == NULL ) { return 0; } //读取文件信息 while ( fgets(szBuf, M, fp) ) { nStart = 0; nEnd = 0; while ( nStart < strlen(szBuf) ) { //大写字母转换为小写字母 if ( szBuf[nStart] >= 'A' && szBuf[nStart] <= 'Z' ) { szBuf[nStart] += 32; } else if ( szBuf[nStart] < 'a' || szBuf[nStart] > 'z' ) { szBuf[nStart] = ' '; } //取每个单词 if ( (szBuf[nStart] >= 'a' && szBuf[nStart] <= 'z') || (szBuf[nStart] >= '0' && szBuf[nStart] <= '9')) { nEnd = nStart + 1; while ( szBuf[nEnd] >= 'a' && szBuf[nEnd] <= 'z' ) { nEnd++; } nTotal++; nStart = nEnd; } nStart++; } } fclose(fp); return nTotal; } //读取文件行数 int GetLineNum(char *strFilePath) { int nTotalLine = 0; FILE* fp = NULL; //读入文件 char szBuf[M] = { 0 }; fp = fopen(strFilePath, "r");//打开文件 if( fp == NULL ) { return 0; } //读取文件信息 while ( fgets(szBuf, M, fp) ) { nTotalLine++; } fclose(fp); return nTotalLine; }
六、测试运行图
基本功能测试图
七、小结
这次作业是我有史以来花费时间精力最多的一次作业,但依然做的效果不理想。只完成了三个基本功能,看到其他同学在时间上花费得更少却实现了更多功能,真正地看到了我与他们的差距,以后一定要多花时间钻研。通过这次作业,我学习到了很多,因为许久没有做过这么有难度的设计,所以重拾回一些知识实操比较吃力,谢谢老师给我们这个机会打码钻研。