软件工程课程项目“物品复活“软件开发最终版本

news/2025/1/4 9:50:12/文章来源:https://www.cnblogs.com/specture/p/18645922

软件工程项目总结:基于JSON的物品管理与用户审批系统

摘要:
本项目通过使用 Python、PyQt5 等技术栈,开发了一个基于 JSON 文件进行数据持久化的物品管理与用户审批系统。系统包含了用户注册与登录、管理员审批、物品添加与删除、物品查看以及物品分类管理的完整功能。本文将从软件工程的角度,对该系统的开发过程、主要技术点、以及个人在实践过程中获得的体会进行总结。


一、项目背景与需求分析

  1. 需求来源:

    • 需要一个简易但功能完备的系统来管理物品,让普通用户可以添加、删除并查看物品,同时允许管理员对用户进行审批、对物品分类进行管理。
    • 系统以JSON文件为主要数据存储方式,避免了部署数据库的复杂度。
  2. 主要功能需求:

    • 用户注册与登录:用户通过用户名和密码进行登录;若为管理员则进入管理员界面,否则进入普通用户界面。
    • 管理员审批:管理员能够查看所有待审批的用户,并且可以批准注册用户成为正式用户。
    • 物品管理:普通用户可以添加、删除、查看物品信息;管理员可以为物品创建新分类。
    • 物品分类:物品按类别进行区分,便于查询和管理。
  3. 非功能需求:

    • 系统界面简洁、易用;
    • 无需依赖外部数据库,采用 JSON 文件进行持久化;
    • 保证正确性和易维护性,防止数据丢失或格式错误。

在此阶段,通过需求分析,可以明确系统的主体用例和角色,为后续设计做铺垫。


二、软件工程思想在设计与实现中的应用

  1. 面向对象设计

    • 我们将系统的主要对象抽象为 UserItemDAO 和界面相关的 GUI 类,这种高内聚、低耦合的设计风格,使得程序后续的维护、功能扩展变得更加方便。
    • UserItem 作为核心数据模型,负责描述用户和物品的属性与行为;DAO 负责读写 JSON 文件,并提供统一的数据接口,避免了业务逻辑与数据操作的耦合。
  2. 迭代式开发

    • 本系统的开发基本遵循了自顶向下,分阶段迭代的思路:
      1. 首先实现最核心的功能——用户登录与注册、管理员审批等;
      2. 接着引入物品管理功能,如添加、删除与查看;
      3. 最后扩展物品分类功能,使管理员可以新建分类、用户可以选择分类进行物品管理。
    • 这种分层次、分优先级的迭代开发使我们在功能逐步稳定的同时,也能迅速进行需求变化的适配。
  3. 用例驱动

    • 在需求分析后,我们抽取出关键的用例:注册、登录、审批、物品增删查、分类管理等;每个用例对照顺序图,实现对应的功能逻辑,并在测试时针对每个用例进行验证。
    • 用例驱动的设计有利于聚焦用户实际操作场景,确保系统满足最核心的业务需求。
  4. 统一建模语言 (UML) 的应用

    • 在设计阶段,使用用例图顺序图类图对系统进行建模:
      • 用例图将系统功能与用户的交互关系进行明确;
      • 顺序图展示用例执行过程中各对象(类)之间的消息交互顺序;
      • 类图则帮助我们从全局上把握系统中的类结构及其相互关系。
    • 通过 UML 建模,可以很好地理清思路,也让团队沟通和后续维护变得更直观。
  5. 数据持久化

    • 使用 JSON 文件存储物品、用户以及分类信息,减少了对于外部数据库的依赖;
    • 需要在读写时注意 编码(统一使用 utf-8),并采取适当的错误处理策略,以防止文件损坏或读取错误。
  6. 易维护与可扩展

    • 系统采用DAO 类封装所有数据操作,外部只通过固定接口与之交互,利于后续切换其他存储方式(如数据库)时的兼容;
    • 在添加物品分类管理的功能时,我们只需在 DAO 中增加对分类文件的读写逻辑,配合管理员 GUI 调用即可,最大化降低对已有功能的影响。

三、测试与质量保证

  1. 单元测试

    • 针对 DAO 类的关键方法(如 add_useradd_itemdelete_item 等)进行单元测试,验证 JSON 文件存储和数据读取的正确性。
  2. 集成测试

    • 将 GUI 与 DAO 结合起来,进行集成测试,确保界面上的操作能正确调用 DAO 的接口并最终写入 JSON 文件。
  3. 用户验证

    • 使用用例场景对系统进行验证,模拟实际用户的操作流程,如“先注册后登录”、“管理员创建分类,用户选择分类添加物品” 等,检验所有功能的有效性。

四、体会与收获

  1. 合理抽象,提高复用性

    • 在该系统中,将用户和物品提炼为两个核心数据模型,把读写逻辑封装进 DAO 中,可以灵活地扩展或修改系统的功能,如新增“搜索功能”、“分页显示”时,原有类与接口可继续复用,改动量较小。
  2. 循序渐进的需求实现

    • 软件开发过程中,遵循迭代思路,从最小可行产品(MVP)开始,不断融入更高级的需求(分类管理、审批等),逐步完善系统,也让我们在开发过程中始终保持系统可用并可演示。
  3. 注重用户体验

    • 通过 PyQt5 提供的 GUI 界面,减少了用户使用时的上手难度;
    • 在表单输入、系统提示、异常处理等方面进行友好设计,能大大提升用户对系统的满意度。
  4. 编码与排错技巧

    • 使用 JSON 进行数据存储,需要注意文件编码以及数据结构的严格性;
    • 单元测试与断点调试能快速定位问题;
    • 养成良好的日志记录与异常捕获习惯,可以显著降低排错成本。
  5. 软件工程实践的重要性

    • 通过需求分析、用例建模、UML 设计、迭代开发、测试与验证等步骤,本项目很好地体现了软件工程从想法到实现的完整流程;
    • 做好事前的需求和设计规划,有助于在后期的开发过程中减少返工和修改;
    • 将理论(如 UML、需求分析、迭代式开发)落地到实际代码,是软件工程学习与实践的关键环节。

结语

本次的基于 JSON 文件的数据管理系统,虽然规模不大,却基本覆盖了软件工程项目的主要环节,包括需求分析、系统设计、编码实现、测试与验证以及最终的演示部署。通过本项目实践,我们不仅加深了对 UML 建模面向对象设计GUI 界面开发JSON 数据存储 等知识点的理解,也亲身体验了需求演化迭代式开发的实际操作方式。

在今后更复杂的项目中,可以继续采用类似的流程,结合更先进的工具(如数据库、容器化部署、云服务等),进一步提升系统的可扩展性与易维护性。希望本项目的开发经验能够为大家后续从事软件工程项目提供一定的参考与借鉴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/862265.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java/Spring] 深入理解:Spring Web DispatcherServlet

1 概述:Spring Web DispatcherServlet DispatcherServlet 简介org.springframework.web.servlet.DispatcherServlet 是一个 Servlet,它接收所有的 HTTP 请求,并根据请求的信息将其分发给相应的处理器(Handler)进行处理。 它是 Spring MVC 架构模式中的关键部分,将请求处理…

DVWA靶场File Inclusion (文件包含) 漏洞所有级别通关教程及源码解析

文件包含 文件包含漏洞(File Inclusion Vulnerability)是一种常见的网络安全漏洞,主要出现在应用程序中不安全地处理文件路径时。攻击者可以利用此漏洞执行恶意文件,或者访问不该被访问的文件 1. low 有3个页面随便点击一个,可以在url处发现传参点访问:http://127.0.0.1/…

[Java]代理模式

本篇文章主要是对静态代理和动态代理实现思路的简述,以示例为主,少涉及理论。 如果文中阐述不全或不对的,多多交流。【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://www.cnblogs.com/cnb-yuchen/p/18002823 出自【进步*于辰的博客】参考笔记一…

lvs+dr+httpd+keepalived高可用部署

lvs+dr+httpd+keepalived高可用部署参考文档:http://blog.csdn.net/m582445672/article/details/7670015 a、 keepalived 是lvs 的扩展项目,因此它们之间具备良好的兼容性。这点应该是keepalived 部署比其他类似工具能更简洁的原因吧! b、 通过对服务器池对象的健康检查,实…

《数字经济:行业产业链》全景梳理及区域热力图

行业主要上市公司:中兴通讯(000063)、大华股份(002236)、中科创达(300496)、软通动力(301236)、奇安信(688561)、同方股份(600100)、……等 本文核心数据:《数字经济:产业链 》、《数字经济:产业链 - 生态图谱》、《“产业数字化” 和 “数字产业化” 上市公司…

《数字经济行业产业链》全景梳理及区域热力图

行业主要上市公司:中兴通讯(000063)、大华股份(002236)、中科创达(300496)、软通动力(301236)、奇安信(688561)、同方股份(600100)、……等 本文核心数据:《数字经济产业链 》、《数字经济产业链生态图谱》、《产业数字化 和 数字产业化上市公司区域分布 TOP5》、…

【长路经】C#读取文件抛出FileNotFoundException异常

前言 在winform中读取文件信息时,突然抛出了FileNotFoundException的异常,但是本地是有这个文件的。 随后找到了这个文件,查看属性,[位置]属性,多了"\\?\"的前缀,百度得知这是windows对长路经的处理。需要注意: 目前在NetFx框架下,才有这个问题。 在NetCore…

【unity】学习制作类银河恶魔城游戏-5-

在-1---4-中,了解了unity的基础操作,从创建一个人物开始,通过状态机和代码完善人物的各种功能达到预期效果,随着功能的越来越多,状态机的处理也就越发麻烦,因此,从零开始设计一个合理的状态机很有必要 梦开始的地方 创建一个新的项目修改舒服的布局创建状态机,通过脚本…

CH340C 请求 USB 设备描述符失败

简短不看版如果出现上述状况,说明线有问题:线的确是数据线(不是电源线),但是不是能与CH340正常通讯的数据线(数据线的数据传输功能有问题。 需要更换其它数据线.前文该文分享CH340驱动使用过程可能出现的问题,以下出现的问题解决方案都建立在CH340硬件正常的情况下。CH3…

CH32V203F6P6-TSSOP20测试之02

一、问题思考 直接用官方提供的例程,为何下载程序后没有什么响应,难道自己设计的电路有什么不妥? 于是,对于电路进行具体分析,结果发现: 第一、官方的BOOT0采用杜邦线连接,在芯片手册好像找不到关于BOOT0的叙述,仅仅在《CH32V20x评估板说明书》中看到:也就是说,这芯片…

PVC

短线反弹

大语言模型提示技巧(一)-指令要清晰、具体

在与大语言模型对话时,应该提供尽可能清晰和具体的指令来表达希望模型执行的操作,这将有助于模型给出接近你所期待的输出,并降低得到无关或不正确回复的可能性。但需要注意的是,编写清晰的指令不意味着编写简短的指令,事实上,更长的提示实际上更清晰且提供了更多的上下文…