首页 > 其他分享 >“Good-Exchanging” 软件开发经验浅谈

“Good-Exchanging” 软件开发经验浅谈

时间:2022-12-31 22:22:33浏览次数:50  
标签:Good 窗口 浅谈 信息 ---- 物品 添加 按钮 Exchanging

需求分析

本次开发将实现一个物资交换软件,具有以下基本功能:

  1. 该程序允许添加物品的信息,删除物品的信息,显示物品列表,也允许查找物品的信息

  2. 物品有公共的信息(物品名称,物品说明,物品所在地址,联系人手机,邮箱)。为了便于管理和查询,物品可以分成不同的类别(例如食品、书籍、工具等),不同类别的物品可能有不同的属性(例如食品有保质期,数量;书籍有作者,出版社等)。

  3. 互帮互助系统有两种类型的用户:管理员和普通用户。

    • 管理员可以设置新的物品类型(定义物品类型的名称和各个属性),修改物品类型。
    • 普通用户在添加物品时先选择物品类型,然后再填入物品信息。普通用户搜寻物品时,需要先选择类型,再输入关键字,关键字可以再用户名称和说明中进行匹配。

    普通用户需要注册(填入基本信息,包括住址,联系方式等),管理员批准后才能成为正式用户。

  4. 为了便于使用上述功能,软件需要提供GUI。

指定开发计划

开发共分为两个阶段,第一阶段实现基本功能;第二阶段实现进阶功能。

基本功能开发规划

  • 开发语言选择:python
  • 数据库实现:MongoDB
    • 物品信息数据库(物品名称,物品说明,WANTS, 联系人手机,邮箱)
  • 人机交互界面设计:PyQt

使用上述开发环境与工具实现基本的物品管理功能(添加,删除,显示与查找)

进阶功能开发规划

  • 需要添加的新数据库
    • 用户基本信息数据库(用户名,密码,手机,邮箱,住址)
    • 物品信息数据库(物品名称,物品说明,物品所在地址,联系人手机,邮箱,类型,详细信息)
  • 需要更新的窗口
    • 主窗口 ---- 文本框:关键字(模糊查询)---- 按钮:只给管理员显示的管理按钮
    • 物品添加窗口 ---- 文本框:名称,详细信息(同步更新问题),物品说明
  • 需要添加的窗口
    • 用户登陆窗口 ---- 文本框:用户名,密码 ---- 按钮:登陆,注册
    • 用户注册窗口 ---- 文本框:用户名,密码,确认密码,手机,邮箱,住址 ---- 按钮:确定,取消
    • 管理员编辑窗口 ---- 文本框:物品详细信息种类,添加的新类型 ---- 按钮:添加新类型,通过用户请求

任务流程:

  1. 增加用户数据库,新建用户登录(出错提示)与注册窗口(出错提示),主窗口添加当前登录用户的基本信息
  2. 增加管理员编辑窗口,完善相关管理功能(前提要更新物品信息数据库)
  3. 更新物品信息显示窗口,添加详细信息显示窗口,更新物品添加窗口,更新物品删除判定
  4. 完善关键字查询功能

开发经验汇总

  • 使用控制类实现多窗口协同控制

    本次开发过程中,最大的一个困难就是多窗口协同工作。

    以最基础的物品信息上传功能为例,用户需要在弹出的界面完成新物品信息的输入。在信息输入完成后,需要用户通过确定按钮完成信息的上传。

    • 方案一:多线程

    在开发初期的设计中,每个窗口按钮槽函数的设置局限在自己的类中,也就是所说的边界类的操作实现中。这样带来的问题便是,当上传窗口的“确定上传”事件触发时,对应的槽函数由于是在边界类中实现,只能操作自己窗口中的元素,不能同时操作其余窗口的元素。为了解决这个棘手的问题,最初采用的方案是使用多线程实现。主窗口每产生一个需要其余窗口合作的操作请求,便开启一个对应的监视线程。由于线程函数可以作为全局函数实现,所以通过在子窗口类的操作中引入全局变量,实现与线程函数的通信,从而能够在子窗口“确定上传”事件触发后,通过监视线程将信息传递到主窗口,完成主窗口相关变量的更新。

    如此操作浪费资源,需要线程函数的不断监视子窗口的活动状态且实现代码繁琐冗长,于是在之后的开发中使用新的实现思路。

    • 方案二:单独的控制类

    使用一个专门的控制类实现主窗口和所有子窗口按钮的槽函数,控制类属性为各个窗口边界类的实例对象。这样由于窗口是作为属性在控制类中存在,在进一步设计其槽函数时,便可以控制全部窗口的内部属性从而替代了上述繁琐的实现方案。

  • 使用Qt Designer开发将人机交互界面的功能与布局设计分离

    采用Qt Designer使用现有的人机界面设计软件,通过可视化的界面设计生成 .ui 文件,之后采用自动代码生成对应的 .py 文件。这样可以将人机界面布局设计与功能分离,从而提高功能代码的可重用性。

项目代码

该项目代码开源在本人Github的 Goods-Exchanging 上。

标签:Good,窗口,浅谈,信息,----,物品,添加,按钮,Exchanging
From: https://www.cnblogs.com/sosoeeee/p/17017462.html

相关文章

  • Good Bye 2022: 2023 is NEAR(持续更新)
    Preface2022的LastRound了,结果CD全卡住,反复横跳后最后才堪堪看出C的问题D的话其实我刚开始是准备写并查集的,但后来nt了不知道为什么想到边双去了写Tarjan去了唉只能说......
  • Good Bye 2022: 2023 is NEAR C
    GoodBye2022:2023isNEARC第一道题真是没理解,wa了好多次还好后来知道了题意就好做了,我现在在这里就补一下c,之前想了一会,还是不明白,后来想到了一些,容我讲一讲C这道......
  • Good Bye 2022: 2023 is NEAR
    A.KoxiaandWhiteboards(CF1770A)题目大意给定一个包含\(n\)个数的数组\(a\),以及\(m\)次操作。第\(i\)次操作将\(a\)中的一个数替换为\(b_i\)。问\(m\)次操......
  • Good Bye 2022: 2023 is NEAR D
    D.KoxiaandGametilian很容易发现就是我们要让每个数字都doublechoice一次才能得到答案比如第一个样例我们发现11已经doublechoice一次过了所以我们该点可以搞......
  • Good Bye 2022: 2023 is NEAR
    KoxiaandNumberTheory(鸽巢原理)题目大意给定一个长度为\(n(2\len\le100)\)的数组\((1\lea[i]\le10^{18})\),问是否存在一个正整数x,使得对于任意的i,j都满足\(gc......
  • Codeforces Good Bye 2022 CF 1770 A~E 题解
    题目链接A.KoxiaandWhiteboards注意每一步替换操作都是强制的,而不是可选的。所以就用一个multiset维护所有的数,每次选一个最小的替换掉即可。时间复杂度\(O(nlogn)\)......
  • Good Bye 2022: 2023 is NEAR
    D.KoxiaandGame记\(ans=\prod\limits_{i=1}^{i=n}add_i\),\(add_i\)就是\(i\)的贡献。记数字\(i\)只和自己连起来称为\(i\)自环。例如:123123则称\(1......
  • Codeforces Good Bye 2022: 2023 is NEAR
    题目传送门:CodeforcesGoodBye2022:2023isNEAR。目录A.KoxiaandWhiteboardsA.KoxiaandWhiteboardsB.KoxiaandPermutationC.KoxiaandNumberTheoryD.Kox......
  • 浅谈C语言编译原理
    C语言我们在学习计算机学科时,往往最先接触到的编程语言是C,它是所有语言中,最接近底层的高级语言之一,因而它具有执行速度快的优点。但它又具有开发周期长和对于经验不足......
  • 浅谈如何召回流失用户
    对于负责用户运营的人员,用户流失是一个必须要关注的问题。如果没有及时发现用户流失的原因,及时采取相对应的策略进行干预和挽留,最终到了流失的末期,那么整个产品可能会宣告死......