软工项目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语言中。

原文地址:https://www.cnblogs.com/JaneMo/p/12495554.html

时间: 2024-07-31 05:00:24

软工项目WordCount的相关文章

软工项目个人总结

目录 相关链接 个人工作总结 项目总结 课程建议 一.相关链接 饱了吗app前端:https://github.com/startproge/baolema 需求分析:https://www.cnblogs.com/Clover-yee/p/11771395.html UML图:https://www.cnblogs.com/Clover-yee/p/11882669.html 原型设计:https://www.cnblogs.com/Clover-yee/p/11934420.html 会议记

软工项目总结

这学期软工小组的开发就快结束了,回想整个开发过程,感慨颇多. 首先是刚开学时的组队和选题,我们各自提了好多项目,有的太简单,有的没有价值,有的又太不切实际,最终我们选定付千山同学在高中设计的游戏作为题目,因为这既新颖又有前期调研,而且也比较有趣. 但其实,我之前从来没有游戏开发的经验,组员们也只了解一两门语言,几乎没有大型项目开发经验.所以,这次项目从技术选型到开发都是一边摸索一边做.现在回过头去看,有得有失.首先,Travis CI 的学习和使用是非常正确的决定,因为后端运行环境比较苛刻,不方

软工第一次作业-01 软件工程的实践项目的自我目标

1.对实践项目完成后学习到的能力的预期: 完成实践项目,首先有利于自己编程代码的能力,对软工项目的热情也能有所提高,熟悉并熟练掌握项目的开发过程.培养团队合作精神.在实践课程结束之前,希望自己能掌握单独完成一个简单项目的能力. 2.对项目课程的期望: 希望课程能深度的讲授项目开发的操作过程,如何应用.并且能给予团队之间更多配合交流的机会.能不拒绝同学的一些提问和疑惑. 3.对项目的愿景规划: 在初期,投入百分百的热情去学习与交流,努力加强团队意识.之后,会努力完成自己所要做的任务,在团队中尽可能

软工2019_MucMuc项目个人总结

MucMuc项目个人总结 1.相关链接 原型界面设计链接 UML设计链接 github项目链接 2.项目个人分工 项目总体的部分设计 后端项目总体构建, 代码实现, 以及测试 阿里云后端服务器的配置和项目部署 3.开发过程 开始 在项目最初的阶段, 整个组对于要做怎样的工作并没有清晰的想法. 不知道如何开始工作, 从何做起, 开发工具为何, 是面临的最大难题. 因为没有任何有对于web开发有经验的成员. 从前后端开发工具的选择上, 到前后端通信的具体流程, 都没有一个较好的认知. 这也直接导致了

软工绘图

由于是截图,清晰度可能不够,这里有源文件:http://pan.baidu.com/s/1i4XC6HJ 个人博客ER图: 绘制机票预订系统的类图: 绘制机票预订系统的用例图 沙河<->本部: 网上购书流程图: 软工项目甘特图:

软工总结博客

本学期是我大学这三年中最忙碌的一个学期,因为编译大作业.数据库大作业和软工项目都集中在了这一个学期中,在这个学期里我也第一次有了通宵码代码调程序的“可怕”经历.在我们的团队项目中,我担当的是主力的前端程序员,主要负责对往届的前端代码进行重构.在M1阶段中,我对往届的代码进行了认真的分析,在他们的代码逻辑基础上结合最新的android技术进行代码的重构.重构的任务比较重,我也为这项任务通宵过.在M1阶段中,我们团队的另外两位同学对后端进行修改,从而成功地支持了我前端的各类功能.虽然还有一些功能没有

软工课程之我思我收获

<软件工程>这门课像我们的诤友,不断督促我们前进,又不断指引我们收获.时间飞逝,我一个个完成了课程中的所有任务,一步步走到了期末年末.走的远了,也该回头看看.回顾于此: 一个学期的软件工程即将落下帷幕,在这样一个历程中,我收获很多,也感受到很多.    这是一门与实践结合极其紧密的课,而对于这样的课,总是让我感到兴奋.因为我们确实是在做中学,在学中做.而不是单单地背些转眼就忘.没有切身体会的枯燥词句.而团队项目更是让我感到刺激.我一直觉得一群人,朝着一个共同目标,并肩地努力,是最美好的事情.

软工读书笔记 week 8 —— 《疯狂的程序员》

这次接着上一次的进度继续阅读,并将其中感悟较深的几点记录如下.      程序员是一个幕后工作者 书中绝影给医院写软件,而医生(用户)只是评价这个软件好不好用,而不会去评价写这个软件的程序员优不优秀.这看起来对程序员不太公平,我辛辛苦苦写的代码,评价都没有我的份.但是这就是个事实,一个软件开放给用户的只是它的功能.它的界面,用户不会管某一个功能实现起来背后的代码有多复杂,他只是从他用这个软件的感受出发.所以,还是那句话,用户体验是第一位的. 高分和技术矛盾吗 在周总审阅简历的时候,有这么一份简历

软工个人总结

个人总结,持续一个学期的软工终于画下了句点,我们的网站也能够运行.在本次的软工项目中,我被分在后端小组,学习了数据库的建立和基本操作,学期中我投入的精力较少,仅学习了后端操作,并制作了PPT,也给小组的其他成员造成了过多的负担.在后端的建立中我并未出太多的力气,学期结束后,我负责服务器的购买,域名的注册,连接,备案.并负责将程序从本地上传的服务器上,选择利用FLASHFXP软件将软件上传的服务器去.上传的过程中我一开始只将文件传上去而没有build,在build过后才能在服务器端使用. 这次软工