个人项目-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 预估耗 ...
随机推荐
- JDOJ 1958 机器分配
JDOJ 1958: 机器分配 Description 某总公司拥有高效生产设备M台,准备分给下属的N个分公司.各分公司若获得这些设备,可以为总公司提供一定的盈利.问:如何分配这M台设备才能使国家得到 ...
- pyenv python 多版本管理工具
pyenv fork 自rbenv 以及ruby-build ,然后修改为转为python 使用 venv 以及virtualenv 解决了版本选择的问题,pyenv 同时为我们解决 了python ...
- string方法介绍
#_*_coding:utf-8_*_#作者:王佃元#日期:2019/12/9#string操作print('hello'*2) #乘法操作,输出对应次数print('helloworld'[2:]) ...
- cf1039D 分块
cf1039D 链接 cf 思路 一次k可以贪心O(n)算. 对于\(≤\sqrt{n}\)的k,暴力算. 对于\(>\sqrt{n}\)的k,最多会有\(\sqrt{n}\)种答案,而且答案单 ...
- [LeetCode] 450. Delete Node in a BST 删除二叉搜索树中的节点
Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...
- Intellij-Cannot download Sources解决方法
当你点击Dowload Sources的时候它会报一个错误 提示你不能下载源代码,这个时候你可以打开下方的命令窗口 然后 进入到项目根路径后 使用mvn dependency:resolve -Dc ...
- 记录webservice
公司的一个老项目,定义了接口,供其他应用访问.定义的方式就是webservice. 我这边的环境是springboot. 首先引入依赖jar 声明一个服务端. @WebSerevice注解中name则 ...
- java,string和list,list和set相互转换
list转string String str= String.join("','", list); list转set Set<String> set = new Has ...
- PHP中直接使用sql语句
SELECT * FROM `tf_user` WHERE (`company_id` = '117' OR `other_company_ids` LIKE '%117,%' OR `other_c ...
- ReentrantReadWriteLock可重入,锁升级,锁降级
public class ReentrantReadWriteLockTest { public static void main(String[] args) throws InterruptedE ...