个人项目-WC(C/C++ Linux/Windows)

1. Github地址

https://github.com/S-TRAVELER/WC

2. PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 20
· Estimate · 估计这个任务需要多少时间 20 20
Development 开发 1370 1405
· Analysis · 需求分析  80 80
· Design Spec · 生成设计文档 60 50
· Design Review · 设计复审  30 45
· Coding Standard · 代码规范 20 30
· Design · 具体设计 60 60
· Coding · 具体编码 900 950
· Code Review · 代码复审 100 90
· Test · 测试(自我测试,修改代码,提交修改) 120 100
Reporting 报告 150 140
· Test Report · 测试报告 60 50
· Size Measurement · 计算工作量 30 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 70
Total  总计 1540 1565


3. 解题思路

由于之前开发基本是在Linux上,看到题目需要exe,于是就计划在Linux平台上开发完基本功能,再兼容Windows平台。

3.1 跨平台

由于考虑了跨平台(Linux+Windows),所以选择了CMake+Qt 的组合;用CMake来实现跨平台的编译,Qt实现跨平台图形界面显示。

在源码中,除了Gui是Qt实现不需要自己考虑跨平台,其他的功能的实现均需要自己进行系统判断,再进行相应平台的操作。

3.2 程序基本实现

为了提高程序的可扩展性,对命令、选项解析器、统计器分别进行了松耦合的处理;使得选项解析器、统计器可以不同需求进行策略替换;命令通过继承的方式进行装饰,以增强命令的功能。然后,再构建一个单例的命令注册器,对命令进行管理(看到这里,你大概可以猜到命令注册器让这个程序可以同时支持多个命令,而不仅仅是一个wc),提高了可扩展性。

3.2 通配符的支持

通配符的实现思路是把通配符表达式转化为正则表达式,然后实现目录轮询器,然后进行递归遍历,把符合通配符的文件名作为参数进行回调。注:由于Linux的终端和Windows的CMD会对通配符进行解析,所以需要用双引号(Windows的是单引号)把通配符表达式括起来。

3.3 图形界面

图形界面是使用Qt来实现,Qt提供了比较美观的用户界面。

3.4 多语言支持(自定义为-L)

这个功能算是对统计注释行、代码行的选项(-a)的扩展。在实现题目要求的功能时,认识到不同语言具有不同的注释方式,可以让用户进行语言选择,然后再根据用户选择的语言的注释语法进行统计。

通过配置文件的方式,读入不同语言的注释语法,实现了在不需要重新编译的情况下对语言种类进行扩展。


四、设计实现

五、测试运行

5.1 输入不存在的文件

Linux:

Windows:

5.2 不选定文件

Linux:

Windows:

5.3 无选项测试

Linux:

Windows:

5.4 多文件测试

Linux:

Windows:

5.5 通配符测试

Linux:

Windows:

5.6 选项乱序测试 

Linux:

Windows:

5.7 递归目录

Linux:

Windows:

 5.8 图形界面测试

Linux:

Windows:

5.9 代码覆盖率

六、项目总结

  本次项目选用C/C++作为开发语言、CMake+Qt作为开发工具、GCov\LCov做代码覆盖率检查。

  本次开发努力遵循使用面向对象的思想解决问题,不断地考虑软件模块的层次,尽量降低模块的耦合度。在设计软件模块方面花的时间比较多。此外,本次开发兼容了Linux和Windows两个系统,在写兼容代码的部分也花了比较多的时间。

这次开发过程中使用比较多的回调,以提高代码的复用率,这也是自己比较满意的地方;但是还是存在不足,代码冗余度还是比较高。

 

原文地址:https://www.cnblogs.com/ZWJCNBLOG/p/11569859.html

时间: 2024-08-29 23:07:01

个人项目-WC(C/C++ Linux/Windows)的相关文章

linux & windows porting

1. linux   int snprintf(char *restrict buf, size_t n, const char * restrict   format, ...); windows  int _snprintf( 2. 头文件都是string. h windows平台:函数:stricmp(char *str1, char *str2), strnicmp(char *str1, char *str2, size_t n).Linux平台: 函数:strcasecmp(char

Linux Windows对NTFS移动盘的写入

一块西数1G的移动盘(2.5寸),厂家格式化为NTFS格式的文件系统.    最先挂到Windows 7机器上,拷入50G的文件,主要为MKV封装的电影和对应的字幕文件.刚开始拷速度很快,大约70M/秒,但是很快就降到32M/秒左右.拷贝完成后立即拔下,移动盘烫手.    后来挂到Ubuntu(版本14.04)下,也拷贝50G的视频文件,一开始的速度就在30M/秒的样子,很稳定.拷完立即拔盘,移动盘不热,甚至都不温.    这两台机器配置有差异,Windows 7更高,并且差别很大.如果想比较速

汉澳sinox为什么没有下载源,因为sinox运行unix/linux/windows程序

有用户下载使用汉澳sinox后说sinox没有下载源. 意思是说类似linux那样能下载linux 开源程序安装. 但是你要知道,sinox并不是linux. 首先,sinox是商业操作系统,就像 windows那样,你看到 windows有下载源吗? sinox不是开源操作系统,因此也就没有开源源代码和程序下载这种说法. 其次,sinox能运行bsd/unix/linux/windows程序,要做一个下载源那么该有多大?而且主要是支持商业软件开发,除了提供一些必要下载,大部分还是让其他软件公司

Linux (Windows Linux子系统)

Linux (Windows Linux子系统) 如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE这些主流的Distribution都是支持的.如果读者朋友们觉得这种方式比较麻烦,我们也可以采用虚拟机的形式安装相应的Linux Distribution,比如我经常使用的都是安

DNS(linux windows)

DNS 案例一: 域名:abc.com dns服务器:192.168.2.100 www:1.1.1.1 ftp:2.2.2.2 mail:3.3.3.3 pop3 smtp MX ① 安装准备 mount /dev/cdrom /media/cdrom/ cd /media/cdrom/Packages/ ll bind* yum --disablerepo=\* --enablerepo=c6-media install bind bind-chroot bind-utils cd /var

Linux&&Windows文件同步简单配置[rsync]

1.Windows to Windows 1.1.所需软件:cwRsyncServer_4.1.0_Installer.zip 1.2.安装: 解压后,直接双击安装 此步骤为设置同步的帐户和密码,该步骤会在操作系统层面创建一个用户:SvcCWRSYNC.当然,我们也可以修改这个用户,自己设置密码,都可以. 但是Windows下面可以不设置,全部默认即可. 1.3.配置服务端 编辑文件:rsyncd.conf use chroot = false strict modes = false host

端口转发(Linux/Windows)

[目的] 监听本机 7777 端口,将数据转发到 192.168.7.8 的 8888 端口,实现 TCP 数据转发. [方法] 1.ncat(Linux/Windows 通用)(ncat端口转发) ncat --sh-exec "ncat 192.168.7.8 8888" -l 7777 --keep-open 2.netsh(Windows)(port forwarding in windows) 2.1.设置 netsh interface portproxy add v4to

在Mac/Linux/Windows上编译corefx遇到的问题及解决方法

这两天尝试在Mac/Linux/Windows三大平台上编译.NET跨平台三驾马车(coreclr/corefx/dnx)之一的corefx(.NET Core Framework),结果三个平台的编译都失败了.后来一一都解决了,在这篇博文中分享一下. (一) 在Mac上编译corefx遇到的错误如下: /git/dotnet/corefx/dir.props(214,5): warning : The Roslyn targets do not exist- Roslyn will not b

samba linux windows 请联系管理员

在使用Samba进行建立Window与Linux共享时,要是不能访问,出现“您可能没有权限使用网络资源”, 那就是SELinux在作怪了 要是想让共享目录能访问,可以使用命令 #setenforce 0 暂时停掉SELinux 使用 #setenforce 1 启用SELinux 有关SELinux 在系统中的作用就不讲了,另外一种方法可以不用关闭SELinux.以下命令将允许这个权限: setsebool -P samba_enable_home_dirs=1 若SElinux啟用中,在Win