软工项目WordCount
1.Github项目地址:https://github.com/JameMo/WordCount-for-C
2.在程序的各个模块的开发上耗费的时间:
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
Planning |
计划 |
10 |
8 |
|
· Estimate |
· 估计这个任务需要多少时间 |
10 |
8 |
|
Development |
开发 |
350 |
350 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
150 |
120 |
|
· Design Spec |
· 生成设计文档 |
20 |
30 |
|
· Design Review |
· 设计复审 (和同事审核设计文档) |
20 |
15 |
|
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
10 |
10 |
|
· Design |
· 具体设计 |
30 |
25 |
|
· Coding |
· 具体编码 |
70 |
90 |
|
· Code Review |
· 代码复审 |
20 |
30 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
30 |
30 |
|
Reporting |
报告 |
60 |
60 |
|
· Test Report |
· 测试报告 |
30 |
35 |
|
· Size Measurement |
· 计算工作量 |
20 |
15 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
10 |
10 |
|
合计 |
420 |
418 |
3. 解题思路:
首先,认真审题,将题目中的具体需求写出来,然后再思考具体模块。然后,细化到各个模块内,每个模块如何实现,如何满足需求,并判断自己是否能做到。接下来,将自己所需要的知识写下,并寻找自己所需要的资料,逐一学习,并开始着手打码。最后,对每个模块进行测试,并编辑博文。
4.设计实现过程:
代码一共含有九个函数(其中包含主函数)。其中char_num、word_num、line_num、blankline_num、codeline_num、commentline_num这六个函数为主要功能函数,而main、traverse两个函数主要是用来调用上面的六个函数,还有最后一个fun函数则是用来将两个字符串连接。
5.代码说明:
头文件:
#include<stdio.h>
#include<io.h>
具体函数:
①char_num函数
1 void char_num(char *file)
2 {
3 //查询file.c文件中字符数目的函数
4 int num = 0;
5 FILE *f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while((a = fgetc(f))!=EOF)
11 {
12 //避开空格、换行、Tab字符
13 if(a!=' ' && a!='\n' && a!='\t')
14 num++;
15 }
16 }
17 else
18 {
19 printf("this file does not exist.\n");
20 }
21 fclose(f);
22 printf("char_num:%d\n",num);
23 }
②word_num函数
1 void word_num(char *file)
2 {
3 //查询file.c文件中单词数目的函数
4 int num = 0,flag;
5 FILE *f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while(!feof(f))
11 {
12 a = fgetc(f);
13 //判断字符是否为大小写字母
14 if((a<='z'&&a>='a')||(a<='Z'&&a>='A'))
15 flag = 1;
16 //计算单词数目
17 else if(flag)
18 {
19 num++;
20 flag = 0;
21 }
22 }
23 }
24 else
25 {
26 printf("this file does not exist.\n");
27 }
28 fclose(f);
29 printf("word_num:%d\n",num);
30 }
③line_num函数
1 void line_num(char *file)
2 {
3 //查询file.c文件中行数的函数
4 int num = 1;
5 FILE *f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while(!feof(f))
11 {
12 a = fgetc(f);
13 //换行符为计数标志
14 if(a=='\n')
15 num++;
16 }
17 }
18 else
19 {
20 printf("this file does not exist.\n");
21 }
22 fclose(f);
23 printf("line_num:%d\n",num);
24 }
④blankline_num函数
1 void blankline_num(char *file)
2 {
3 //查询file.c文件中空行数的函数
4 int num = 0,count = 0,flag;
5 FILE *f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while(!feof(f))
11 {
12 a = fgetc(f);
13 //换行时进行判断
14 if(a=='\n')
15 {
16 //字符少于、等于1和不为注释行时进行计数
17 if(count<=1&&flag!=2)
18 num++;
19 count = 0;
20 }
21 else if(a!='\t'&&a!=' '&&a!='/')
22 count++;
23 else if(a=='/')
24 flag++;
25 }
26 }
27 else
28 {
29 printf("this file does not exist.\n");
30 }
31 fclose(f);
32 printf("blankline_num:%d\n",num);
33 }
⑤codeline_num函数
1 void codeline_num(char *file)
2 {
3 //查询file.c文件中代码行数的函数
4 int num = 0,count = 0,flag = 0;
5 FILE *f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while(!feof(f))
11 {
12 a = fgetc(f);
13 //先作字符分类,再进行判断
14 if(a!=' '&&a!='\t'&&a!='\n'&&a!='/')
15 count++;
16 else if(a=='\n')
17 {
18 if(count>1&&flag!=2)
19 num++;
20 count = 0;
21 }
22 else if(a=='/')
23 {
24 flag++;
25 }
26 }
27 }
28 else
29 {
30 printf("this file does not exist.\n");
31 }
32 fclose(f);
33 printf("codeline_num:%d\n",num);
34 }
⑥commentline_num函数
1 void commentline_num(char *file)
2 {
3 //查询file.c文件中注释行数的函数
4 int num = 0,flag = 0;
5 FILE* f;
6 char a;
7 f = fopen(file,"r");
8 if(f!=NULL)
9 {
10 while(!feof(f))
11 {
12 a = fgetc(f);
13 //换行时标志归零
14 if(a=='\n')
15 {
16 flag = 0;
17 }
18 //对注释符进行计数
19 else if(a=='/')
20 {
21 flag++;
22 if(flag==2)
23 num++;
24 }
25 }
26 }
27 else
28 {
29 printf("this file does not exist.\n");
30 }
31 fclose(f);
32 printf("commentline_num:%d\n",num);
33 }
⑦fun函数
1 char *fun(char *c1,char *c2)
2 {
3 //将两个字符串进行连接
4 int i,j;
5 char *ch;
6 for(i=0;c1[i]!='*';i++)
7 {
8 ch[i]=c1[i];
9 }
10 for(j=0;c2[j]!='\0';j++,i++)
11 {
12 ch[i]=c2[j];
13 }
14 ch[i]='\0';
15 return ch;
16 }
⑧traverse_all函数
1 void traverse_all(char *file_folder)
2 {
3 //文件夹内所有*.c文件的所有信息
4 long handle;
5 char *ch;
6 struct _finddata_t fileinfo;
7 handle = _findfirst(file_folder,&fileinfo);
8 if(handle==-1L)
9 return;
10 do
11 {
12 printf("file name:%s\n",fileinfo.name);
13 ch = fun(file_folder,fileinfo.name);
14 char_num(ch);
15 word_num(ch);
16 line_num(ch);
17 blankline_num(ch);
18 codeline_num(ch);
19 commentline_num(ch);
20 }while(!_findnext(handle,&fileinfo));
21 }
⑨main函数
1 int main(int a,char* arg[])
2 {
3 //运行wc.exe的主函数。
4 FILE *f;
5 while(1)
6 {
7 //判断文件是否存在
8 //对文件作不同的处理
9 if((f=fopen(arg[2],"r"))==NULL)
10 {
11 if(!strcmp("-s",arg[1]))
12 {
13 traverse_all(arg[2]);
14 }
15 else
16 {
17 printf("NO FILE NOW\n\n");
18 scanf("%s%s%s",arg[0],arg[1],arg[2]);
19 continue;
20 }
21 }
22 else if(!strcmp("-c",arg[1]))
23 {
24 char_num(arg[2]);
25 }
26 else if(!strcmp("-w",arg[1]))
27 {
28 word_num(arg[2]);
29 }
30 else if(!strcmp("-l",arg[1]))
31 {
32 line_num(arg[2]);
33 }
34 else if(!strcmp("-a",arg[1]))
35 {
36 blankline_num(arg[2]);
37 codeline_num(arg[2]);
38 commentline_num(arg[2]);
39 }
40 else
41 {
42 printf("Out of specification\n\n");
43 }
44 scanf("%s%s%s",arg[0],arg[1],arg[2]);
45 }
46 return 0;
47 }
6.测试运行。
测试文件:
①testing1.c

②testing2.c

测试结果:
①-c

②-w

③-l

④-a

⑤-s

7.项目小结:
这次项目是我做得最完整的一次项目,而且也是我的第一次做如此困难的项目。在这次项目中,我懂得了如何使用PSP去控制自己做项目的时间,此外,PSP还教会了我如何去完成一个项目。同时在这次项目中学会使用了许多新的函数,利用这些函数可以打开文件以及文件夹,从而在文件层面进行操作。我认为此次项目的最大的缺点是没有用到其他语言去实现,只停留在C语言中。
软工项目WordCount的更多相关文章
- 关于软工项目beta版本
项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...
- 2018软工项目UML设计(团队)
团队信息 队名:火箭少男100 本次作业课上成员 短学号 名 本次作业博客链接 2507 俞辛(临时队长) https://www.cnblogs.com/multhree/p/9821080.htm ...
- 【软工项目Beta阶段】博客目录
绝不划水队Beta冲刺阶段博客目录 一.Scrum Meeting 第十周会议记录 第十一周会议记录 二.测试报告 Beta阶段测试报告 三.习得的软工原理/方法/技能? (1)在进行OUC-Mark ...
- 【软工项目Beta阶段】第11周Scrum会议博客
第十一周会议记录 小组GitHub项目地址https://github.com/ouc-softwareclass/OUC-Market 小组Issue地址https://github.com/ouc ...
- 软工作业WordCount
github项目传送门:https://github.com/zzh010/My-wc 一.WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命 ...
- 【软工项目Beta阶段】第10周Scrum会议博客
第十周会议记录 小组GitHub项目地址https://github.com/ouc-softwareclass/OUC-Market 小组Issue地址https://github.com/ouc- ...
- 玩下软工项目,第一轮--全局Context的获取,SQLite的建立与增删改查,读取用户通话记录信息
项目的Github地址:https://github.com/ggrcwxh/LastTime 采用基于git的多人协作开发模式 软件采用mvc设计模式,前端这么艺术的事我不太懂,交给斌豪同学去头疼了 ...
- 【软工项目Beta阶段】绝不划水队OUC-Market版本测试报告
我们在开发APP的时候进行了软件的测试,同时发现了一些BUG,如下: bug 我的:与各种页面之间的交互不灵活 登录与注册:记住密码功能不完善 商场主界面:搜索功能还没有完善 收藏功能:与数据库的交互 ...
- 软工读书笔记 week 8 —— 《疯狂的程序员》
这次接着上一次的进度继续阅读,并将其中感悟较深的几点记录如下. 程序员是一个幕后工作者 书中绝影给医院写软件,而医生(用户)只是评价这个软件好不好用,而不会去评价写这个软件的程序员优不优秀. ...
随机推荐
- Netlink 内核实现分析 3
Netlink IPC 数据结构 #define NETLINK_ROUTE 0 /* Routing/device hook */ #define NETLINK_UNUSED 1 /* Unuse ...
- 《GNU_Makefile》——第3章,Makefile总述
1.makefile的内容 一个完整的makefile包含5个东西: 显示规则,隐含规则,变量定义,指示符,注释 (1)显示规则 描述如何更新目标文件. (2)隐含规则 make程序内置的规则. ma ...
- IGH_Master主站配置驱动伺服电机和变频器总结
IGH_Master主站配置驱动伺服电机和变频器总结 Ethercat是倍福公司提出的一种工业现场总线协议,具有很好的实时性,IGH是一种开源的Ethercat主站实现协议,本文总结了一下使用IGH_ ...
- git 最新笔记,工作中的必会技能
1.状态查看: git status 可以查看工作区,暂存区的状态 untracked 在暂存区没有该文件 modified 修改过 staged 使用git add 暂存过 2.添加操作: git ...
- 画echart图时,安卓手机正常,苹果手机上tooltip 在坐标轴下一层
问题: 解决: 在tooltip 中添加如下代码: tooltip:{ position:function(point, params , dom, rect, size){ dom.style.tr ...
- 基于物联网的O2O养猪平台
引言:随着生活水平的提高,人们会越来越重视食品安全问题.在城市里的人想养头猪,并想看着它快快乐乐长大.但是无奈于自己没时间和精力.而农户想养猪,可能又缺少启动资金,且不能承担大的风险.这时候我的美团式 ...
- python-基础入门-6快速入门总结
快速入门 程序输出: 1.print语句,字符串用双引号括起来 _在解释器中表示最后一个表达式的值. print语句 与字符串格式(%)结合使用,能实现字符串替换功能. >>>pri ...
- java大厂面经-阿里腾讯、网易美团、京东、华为、快手、字节全在这里了
前言 在这篇文章详细说了该如何去复习,之前也答应各位把面经整理一下,但是因为入职的事情耽搁了,现在整理出来回馈给大家! 美团 一面 0.自我介绍1.问项目(项目详细介绍.用到什么技术.有什么优化)2. ...
- 思维导图MindManager的过滤主题功能如何使用
MindManager是一款多功能思维导图工具软件.但有的思维导图繁杂,用户只需要查看自己感兴趣的主题该怎么办呢?接下来,我就为大家详细介绍MindManager思维导图2020版的过滤主题功能,可以 ...
- 「LOJ 541」「LibreOJ NOIP Round #1」七曜圣贤
description 题面很长,这里给出题目链接 solution 用队列维护扔掉的红茶,同时若后扔出的红茶比先扔出的红茶编号更小,那么先扔出的红茶不可能成为答案,所以可以用单调队列维护 故每次询问 ...