个人项目:WC(Node.js+Web端实现)

本项目GitHub地址:https://github.com/sherlockHSY/WC

一、项目要求

  wc.exe 是一个常见的工具,它能统计文本文件的字符数、单词数和行数。这个项目要求写一个命令行程序,模仿已有wc.exe 的功能,并加以扩充,给出某程序设计语言源文件的字符数、单词数和行数。

实现一个统计程序,它能正确统计程序文件中的字符数、单词数、行数,以及还具备其他扩展功能,并能够快速地处理多个文件。

  具体功能要求:

    程序处理用户需求的模式为:wc.exe [parameter] [file_name]

    基本功能列表:

      wc.exe -c file.c //返回文件 file.c 的字符数

      wc.exe -w file.c //返回文件 file.c 的词的数目

      wc.exe -l file.c //返回文件 file.c 的行数

    扩展功能:

扫描二维码关注公众号,回复: 7362628 查看本文章

      -s 递归处理目录下符合条件的文件。
      -a 返回更复杂的数据(代码行 / 空行 / 注释行)。

    高级功能:

      -x 这个参数单独使用。用户可图形化选取界面,选取文件展示文件信息。

二、PSP表格

PSP Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划  40 30
· Estimate · 估计这个任务需要多少时间  30  25
Development 开发  790 710
· Analysis · 需求分析 20  20
· Design Spec · 生成设计文档  40  30
· Design Review · 设计复审   30  30
· Coding Standard · 代码规范  30  40
· Design · 具体设计  80  100
· Coding · 具体编码(查找文档)  470  370
· Code Review · 代码复审  60  50
· Test · 测试(自我测试,修改代码,提交修改)  60  80
Reporting 报告 120 120
· Test Report · 测试报告  60  80
· Size Measurement · 计算工作量  30  50
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划  30  30
  合计  950  960

三、解题思路

  拿到这个题目后,首先理解项目需求,大致是统计文件中的数据,需要统计包括字符数、行数、单词数、代码行、注释行、空行等结果。会涉及到文件的读写操作。经考虑后,决定用Node.js实现。图形界面直接使用web页面。

  1. 开发准备

   实现语言:Node.js

   IDE:VSCode

  2.需求分析:

   (1)基础功能:首先是命令行指令与参数的获取。利用yargs模块读取命令的输入,判断指令类型,以及对指令和参数进行验证,确保输入是否合法。然后执行相应的逻辑处理。使用原生fs模块创建文件IO流,利用readline模块逐行读取文件内容,再结合正则表达式实现对文件字符数、行数、单词数的统计

   (2)进阶功能:实质上是在基础功能上的一些拓展,写个递归函数增加对文件夹的递归处理,以及正则匹配出通配符(* ?),在对文件搜索时加以判断。-a 命令中的复杂查找,结合正则匹配即可实现统计。

   (3)高级功能:图形化界面的实现。由于Node.js语言本身作为一门新起的后端语言,本身就服务于web端,所以图形界面直接用web实现,只要命令行输入命令,调用Node的子进程实现自动打开浏览器窗口运行。web页面采用html,css,js实现。

四、设计实现

  流程图

  

  1. index.js作为程序主入口,获取命令行输入的指令和参数后,校验指令输入是否合法,做出相应处理,相当于Controll层。

  2. handleCommand.js将对各个指令的逻辑处理过程高度封装对应函数,并通过export暴露出模块,相当于Service层,对数据的深层处理。供Controll层调用

  3. webView.js实现对web层的处理。通过开启http server监听页面请求,并主动触发自动打开web页面,渲染index.html(相当于View层)。

五、测试

  单元测试

  1.测试基础指令

          测试文件 1.c

   

   测试结果:

     

  2.测试进阶指令  测试递归读取文件夹下的文件,并统计复杂数据

         测试文件夹 testDir

         

    测试结果:

     

  3.测试高级指令

     

   4. 通配符测试

   测试通配符 * :

     

     测试通配符 ? :

          

六、总结     

  本项目采用Node.js+web是我的一次尝试,使用web的初衷是想要与传统的GUI不一样。这个项目的开发,我第一次一个人实现一个完整的流程,从需求分析、设计、开发到测试,学习到了软件工程的很多思想和知识,把项目的本身功能点实现是一方面,项目的测试也是非常重要的一部分。在实际开发中,模块的构建和整体框架的搭建也十分重要。我也认识到只有把各个方面都尽可能的做好,才能使程序具有更好的健壮性。

猜你喜欢

转载自www.cnblogs.com/sherlocksy/p/11588216.html