个人项目-wc
个人项目-WC (C语言)
一、Github地址:https://github.com/Lin-J-F/WC
二、PSP表格
| PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 30 | 30 |
| · Estimate | · 估计这个任务需要多少时间 | 240 | 400 |
| Development | 开发 | 120 | 160 |
| · Analysis | · 需求分析 | 30 | 45 |
| · Design Spec | · 生成设计文档 | 40 | 50 |
| · Design Review | · 设计复审 | 40 | 60 |
| · Coding Standard | · 代码规范 | 20 | 30 |
| · Design | · 具体设计 | 60 | 60 |
| · Coding | · 具体编码 | 160 | 300 |
| · Code Review | · 代码复审 | 30 | 30 |
| · Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
| Reporting | 报告 | 120 | 130 |
| · Test Report | · 测试报告 | 60 | 50 |
| · Size Measurement | · 计算工作量 | 20 | 30 |
| · Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | 40 |
| 合计 | 1070 | 1475 |
三、解题思路
1、拿到项目,我首先确定我想要用的语言,因为我对C语言的熟悉程度比JAVA高,所以我先思考了一下如何用C语言来写。对比发现C语言上手比较简单,并且已经有了部分思路,就确定用C来写。
2、首先确定整体框架,确定用C语言写后,决定直接把-w、-l、-c 的统计方法写出来,然后直接在主程序中调用方法,来实现这三个功能。(后面在写 -a 的时候,发现自己将统计空白行、代码行和注释行的代码写在同一个方法里面的时候,互相之间条件的影响导致里面存在BUG,修复后还是不能正确统计三个数据,所以后来重新写 -a 的代码,将三种方法分开,使他们的条件不会互相影响,然后在主程序中,触发了 --a 的条件后,直接调用三种方法各自计算自己的数据)。
3、由于对文件操作函数不是很熟悉,所以我又花了大概40分钟上网查了C语言文件操作函数的相关资料。
4、在做图形界面的时候找不到很好的方法来解决,加上时间上稍微有点赶,就鸽了这个内容。(做了一大半发现后面要弄图形界面,没有看好要求,用JAVA做图形界面简单多了)
四、设计实验过程
1、一开始先将基本需求写出来,写了统计字符、单词和行数的三个函数出来,然后用主函数main 调用这三个函数,将所要求的结果值返回到主程序中。
2、根据要求写拓展功能,返回更复杂的数据。跟第三大点提到的一样,一开始写了一个Complex的函数。来直接求那三组数据,后面因为各自条件的影响,无法解决导致不能求出正确的数据,后面将Complex函数分成三个函数,然后在主函数中,收到“-a”的条件时,直接调用这三个函数,将结果值返回到主函数。
五、测试运行
测试不存在文件:

测试空文件:

测试只有一个词的文件:


测试只有一行的文件:


测试一个典型的源文件:


主函数:
int main(){
char in[2], file[10];
while(1){
printf("请用户输入命令: WC exe -");
scanf("%s",&in);
if(in[0]=='c'){
printf("请输入文件名:");
scanf("%s",&file) ;
int count=0;
count=Count(file);
printf("文件的字符数为: %d\n",count);
continue;
}
if(in[0]=='w'){
printf("请输入文件名:");
scanf("%s",&file) ;
int world=0;
world=World(file);
printf("文件单词数为: %d\n",world);
continue;
}
if(in[0]=='l'){
printf("请输入文件名:");
scanf("%s",&file) ;
int line=0;
line=Line(file);
printf("文件行数为: %d\n",line);
continue;
}
if(in[0]=='a'){
printf("请输入文件名:");
scanf("%s",&file) ;
int blank,code,explain,line;
blank=Blank(file),line=Line(file) ,explain=Explain(file);
printf("空白行数为: %d\n",blank);
printf("代码行数为: %d\n",line-blank);
printf("注释行数为: %d\n",explain);
continue;
}
}
getchar();
system("pause");
}
六、项目总结:
1、对C语言相关知识点遗忘得有点厉害,查找资料的时间花得有点多,但是经过这次的作业,又捡回了C语言的相关知识。
2、做项目之前要仔细看所给出的要求,根据需求选择更好的语言,然后整理好自己的思路,再慢慢通过代码实现,不要想着一蹴而就。
3、写代码的时候逻辑不够严谨,而且容易顾此失彼,因为某些改动导致程序出错,后来发现改动的地方在前面相应位置没有改动。
4、好好利用PSP,调整自己在整个工程中相应板块所用的时间,不要再不重要的地方放过多的时间。
个人项目-wc的更多相关文章
- 实践简单的项目WC
#include<iostream> #include<fstream> #include<string> #include<Windows.h> us ...
- 个人项目——wc源程序特征统计
这一次要做的项目是wc——统计程序文件特征的命令行程序. 根据需求需求得到的模式为:wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需 ...
- 实现项目WC
软件的需求分析 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 - ...
- 个人项目-WC(C/C++ 兼容Linux和Windows)
一.Github地址 https://github.com/S-TRAVELER/WC 实现的功能: 支持 -c 支持 -w 支持 -l 支持 -s 支持 -a 图形界面 多参数(文件名或通配符表达式 ...
- 个人项目-WC (java实现)
一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...
- 个人项目-WC(Java实现)
一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- 个人项目 wc(java实现)
一.Github网址: https://github.com/Clarazhangbw/Wc.exe 二.PSP表 PSP2.1 Personal Software Process Stages 预估 ...
- 个人项目WC(Python实现)
一.GitHub地址 https://github.com/hoka-17/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际 ...
- 个人项目—WC
一,Github地址:https://github.com/mushan520/WC.git 二.PSP表格: PSP2.1 Personal Software Process Stages 预估耗 ...
随机推荐
- 玩转淘宝SVN
http://guojun2sq.blog.163.com/blog/static/64330861201492965059142/(参考) 三步走: 1.注册账号http://code.taobao ...
- WordPress自定义查询WP_Query使用方法大全
自定义调用文章在网站建设中很常用,wordpress也很人性化,用新建查询new WP_Query就能实现相关功能.WP_Query怎么用呢?随ytkah一起来看看吧 我们知道wordpress的主循 ...
- Appium+python自动化(三)- SDK Manager(超详解)
简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”.SDK顾名思 ...
- JUnit 4 和 TestNG
JUnit 4和TestNG都是Java中非常受欢迎的单元测试框架.两种框架在功能上看起来非常相似.哪一个更好?在Java项目中应该使用哪个单元测试框架? 下面表中概括了JUnit 4和TestNG之 ...
- Python前言之Markdown使用
一.Markdown基本语法 1.1标题 代码: # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 ##### 五级标题 ###### 六级标题 效果: 一级标题 二级标题 三级标题 ...
- golang和python互相调用
http://blog.yuanzhaoyi.cn/2018/06/27/golang_python.html python3-ctypes: https://docs.python.org/3.5/ ...
- leetcode209. 长度最小的子数组
双指针滑动窗口解法,时间复杂度O(N). 滑动窗口,想象一下,在一个坐标上存在两个指针begin 和i ,begin 代表滑窗的左边框,i代表滑窗的右边框.两者通过分别向右滑动,前者能使窗口之间的和减 ...
- mysql出生日期转成年龄
可以直接用数据库函数进行转换,省去java代码转换的麻烦 SELECT TIMESTAMPDIFF(YEAR, '1988/01/10', CURDATE()) 且此函数容错很好,就算是null,‘ ...
- Oracle--SMON
一,SMON功能 a) 系统监控管理,定期合并空闲,回收临时段: b) 做实例的恢复:前滚.回滚.释放资源 二,SMON什么时候做恢复? 数据修改随时发生,但是数据同步定期做:所以会产生脏块(灰块), ...
- NTT&FFT(快速?变换)
NTT&FFT 预先知识:无 我觉得我们可以从NTT/FFT讲起? 两个其实本质相同,都是求 多项式乘积 的算法 FFT \((x,y)\)指复数,我们可以不用管它 首先我们构造单位根\(\o ...