一、Github项目地址
https://github.com/005088/Aries/tree/master
二、.在程序的各个模块的预计开发时间:
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
||
· Estimate |
· 估计这个任务需要多少时间 |
10 |
|
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
|
· Design Spec |
· 生成设计文档 |
10 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
|
· Design |
· 具体设计 |
60 |
|
· Coding |
· 具体编码 |
60 |
|
· Code Review |
· 代码复审 |
10 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
|
Reporting |
报告 |
||
· Test Report |
· 测试报告 |
60 |
|
· Size Measurement |
· 计算工作量 |
10 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
|
合计 |
320 |
|
三、解题思路:
设计语言:C语言
题目中的需求进行分析:该题目是对wc.exe 功能中各项功能的模拟,采用命令形式输出各模块结果。
四、设计实现过程:
通过main函数连接3个不同功能的接口,并给出相应命令得出的结果。
五、代码说明:
(1)头文件:
#include "stdio.h" #include "stdlib.h"
(2)功能函数:
获取字符数:
int CountcCharacter(FILE* fp) //文件中字符数 { char c; int count = 0; while ((c = fgetc(fp)) != EOF) count++; return count; //返回字符数 }
获取词数:
int CountWord(FILE* fp) { //文件中词数 char c; int count = 0, mark = 0; //标记:mark为0不是词,mark为1是词 while ((c = fgetc(fp)) != EOF) { if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { if (mark == 0) { mark = 1; count++; } } else { if (mark == 1) mark = 0; } } return count; }
获取行数:
int CountLine(FILE* fp) //文件中行数 { char c; int count = 0; if (fp == NULL)return 0; //判断文件内是否为空 count = 1; //不为空,首行为1 while ((c = fgetc(fp)) != EOF) if (c == ' ') //用数换行符的方式计算文件中的行数 count++; return count; //返回行数 }
(3)主函数:
int main() { while (1) { FILE* fp; errno_t err = 0; int count, order; //count:计数,order:控制命令 err = fopen_s(&fp, "D:\test.txt", "r"); // 测试文件位置 if (err) { printf("文件读取失败! "); exit(0); } printf("wc.exe模仿功能: 1.-c(获取字符数)2.-w(获取词数)3.-l(获取行数)0.exit 请选择您要进行的操作: "); scanf_s("%d", &order); //命令输入 do { switch (order) { case 1: count = CountcCharacter(fp); printf("该文件字符数为%d。 ", count); break; case 2: count = CountWord(fp); printf("该文件词数为%d。 ", count); break; case 3: count = CountLine(fp); printf("该文件行数为%d。 ", count); break; default:if (order == 0)exit(0); printf("输入错误,请重新选择您要进行的操作: "); scanf_s("%d", &order); break; } } while (order != 1 && order != 2 && order != 3 && order != 0); printf(" "); fclose(fp); } }
六、测试运行
测试文件:
#include<stdio.h> int main() { printf("Hello World!"); return 0; }
运行结果:
七、PSP表
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
||
· Estimate |
· 估计这个任务需要多少时间 |
10 |
10 |
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
30 |
50 |
· Design Spec |
· 生成设计文档 |
10 |
10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
10 |
10 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
5 |
· Design |
· 具体设计 |
60 |
40 |
· Coding |
· 具体编码 |
60 |
120 |
· Code Review |
· 代码复审 |
10 |
5 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
15 |
Reporting |
报告 |
||
· Test Report |
· 测试报告 |
60 |
60 |
· Size Measurement |
· 计算工作量 |
10 |
5 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 |
20 |
合计 |
320 |
350 |
八、项目小结
本次项目中,编写了wc.exe的模仿功能,结合PSP表,我意识到了:
1.编写代码能力不足,效率低下
2.知识的漏洞会在开发过程中明显的显示出来
3.开发编程需要有耐心