第二次作业

项目 内容
这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc
这个作业的目标 实现一个命令行文本计数统计程序。能正确统计导入的纯英文txt文本中的字符数,单词数,句子数。
姓名 - 学号 吴瑞泽-2023331200037
码云仓库地址 https://gitee.com/wu-di-h/zstu-wc-project.git

命令行文本统计工具

一、项目介绍

这是一个使用 Python 语言编写的命令行文本统计程序 wc.exe。本项目严格按照 V0.1 (空项目)、V0.2 (基础功能)、V0.3 (扩展功能) 的版本迭代流程进行开发,并通过独立的文件夹对各版本进行管理,项目结构清晰直观。

程序使用 argparse 库构建用户友好的命令行接口,使用 unittest 框架保证代码质量,并最终通过 PyInstaller 打包为可在 Windows 环境下直接运行的 .exe 文件。

主要功能

  • 基础功能: 统计文本文件的字符数 (-c)、单词数 (-w)、句子数 (-s)。
  • 拓展功能 (加分项): 分析代码文件,统计总行数、代码行、空行、注释行 (-a)。

二、使用说明

第一步:进入版本目录并启动命令行
根据您的需求,使用文件资源管理器进入 v0.2v0.3 文件夹。在该文件夹的地址栏输入 cmd 并按下回车键,即可启动命令行。

use_1

第二步:按约定格式运行程序
在弹出的命令行窗口中,根据以下命令模式输入指令即可。

命令模式: wc.exe [参数] [文件名]

版本 命令 描述
V0.2 & V0.3 wc.exe -c <文件名> 统计字符数
V0.2 & V0.3 wc.exe -w <文件名> 统计单词数
V0.2 & V0.3 wc.exe -s <文件名> 统计句子数
V0.3 wc.exe -a <文件名> 分析代码文件

三、文件列表及相关说明

本仓库采用版本文件夹进行管理,根目录下的 picture 文件夹存放本文档所需的所有截图。

wc_project/
│
├── v0.1/ # V0.1 空项目版本 (仅含占位脚本)
│
├── v0.2/ # V0.2 基础功能版本 (含源代码、测试和.exe)
│
├── v0.3/ # V0.3 扩展功能版本 (含源代码、测试和.exe)
│
├── picture/ # 本 README.md 文档所引用的所有截图
│
├── .gitignore # Git忽略配置文件
└── README.md # 本项目说明文档、

四、运行结果展示

V0.2 基础功能运行结果

v0

V0.3 扩展功能运行结果

v0


五、健壮性与单元测试

健壮性测试 (异常处理)

为提升用户体验和程序稳定性,代码中加入了完善的异常处理逻辑。

1. 文件不存在异常
当用户输入一个不存在的文件名时,程序会给出友好提示,而非直接崩溃。

error_handling

2. 错误指令处理
得益于 argparse 库,当用户输入一个未定义的指令(如 -z)时,程序会自动提示所有可用的正确指令,引导用户正确使用。

wrong_command

单元测试

  • V0.2 单元测试: 针对基础功能编写了测试用例。

v0

  • V0.3 单元测试 (加分项): 增加了对扩展功能的测试,并使用 tempfile 模块确保测试环境的纯净。

v0


六、性能测试 (加分项)

使用 Python 内置的 cProfile 模块对 V0.2 和 V0.3 版本进行了性能分析。

  • V0.2 性能测试:

performance_test_v0

  • V0.3 性能测试:

performance_test


七、心得体会

通过本次软件技术基础的作业,我完成了一次从零到一的、完整的微型软件项目实践。这不仅是一次编码任务,更是一次对软件工程全貌的深刻体验。我最大的收获可以总结为以下几个方面:

1. 核心技术栈的全面掌握:

  • 版本控制 (Git): 从初始化仓库到熟练使用 add, commit, push 的标准流程,并理解了 .gitignore 对于保持项目整洁的意义。
  • Python 核心库: 深入实践了 argparse 库来构建规范的命令行接口,并使用 unittest 框架为代码质量保驾护航,甚至在测试中运用了 tempfile 等高级技巧。
  • 软件交付流程: 掌握了使用 PyInstaller 将代码打包成可独立运行的 .exe 文件,以及使用 cProfile 对程序进行性能分析,完成了从开发到交付的闭环。

2. 软件工程思想的深刻感悟:

  • 版本管理的价值: 通过亲手实践文件夹式的版本管理,我更加深刻地理解了为什么Git的分支和提交历史是更专业、更高效的协作方式。
  • 质量是生命线: 编写单元测试的过程让我明白,测试不是开发的负担,而是保证代码正确、让后续修改更有信心的基石。
  • 健壮性与用户体验: 健壮的异常处理(如FileNotFoundError)和清晰的文档,让我体会到,一个好的软件不仅要实现功能,更要能优雅地处理错误并引导用户。

3. 解决实际问题的能力提升:
在整个过程中,我独立解决了 No module named PyInstaller 的环境配置问题,以及 README.md 文件列表的 Markdown 格式渲染问题。这些挑战极大地锻炼了我的调试能力和通过查阅资料解决未知问题的能力。

总而言之,这次作业是一次宝贵的旅程。它让我明白,软件工程是一门严谨的学科,它不仅关乎代码,更关乎流程、规范、测试和文档。这次经历为我未来的学习和工作打下了坚实的基础。

posted @ 2025-10-31 22:43  wrz_11223  阅读(16)  评论(0)    收藏  举报