版本1:后台管理系统版本
软件及代码:https://github.com/HaoshuoShao/homework22-fall
(ps. GUI 和 requirements.txt还没有完善)
需求分析
- 可以 增,删,查 物品信息
- 可以加个改... 比如五斤大米改三斤
- 没有要求实现物品的交换:
- 比如用户A提供了物品a,用户B提供了物品b
- A需要b,向B发起请求
- B收到请求,觉得可以用b换a,同意请求
- A得到成功交换的反馈
- 物品列表中a,b改变状态:未交换->已交换
软件定位
- 倾向于后台管理系统:
- 操作者不是小区里的居民用户:如果有用户之分,就要考虑很多,比如登录,删除修改等操作的权限,自己测试过程中用户的切换,用户数据库表和物品数据库表的连接...
- 建议操作者是后台管理员,居委会办公室的大妈接到了居民们的诉求,后台发布了交换信息...
软件设计
根据软件设计经典框架(偏设计思想上的框架,而不是代码开发的框架)
MVC:Model View Controller,是模型 (model)-视图 (view)-控制器 (controller)的缩写
- M层:
可以设计一个class GoodInformation(goods, provider, time, amount, isChanged, des)
每一条具体的信息就是这个class的实例(一个对象)!
同时设计他的方法,比如getGoods(),setGoods(),getProvider(),setProvider()...
个人建议增删改查不放在这个class里,这个class还只处于表格的row层级
可以再设计一个GoodsTable,也就是表格级别的对象,这个对象的数据成员有大量的row级别对象GoodInformation,并且具有增删改查方法。
比如Table.delete(5) # 删除第五行
表格具有删除某一行的方法,逻辑上会合理一点
还要注意,GoodInformation还只是停留在逻辑设计层面的类,代码中不一定要实现!
比如对表格操作,添加一层,删除一层,似乎调用Table类的方法就行,Table直接读写文件,结果用一个二维列表存储就行了,不一定要用GoodInformation[]数组去存储。
说的有点杂,有点啰嗦,最近在学数据库,有感而发,数据结构、数据库的设计很重要,需要花时间打磨一下,逻辑和物理层面都要考虑下
-
V层:也就是界面,比如有个添加物品信息的按钮,按钮绑定了一个函数addGoods(),点击就触发(这个触发过程一般写GUI的库都已经提供,只需要我们绑定相应的函数事件)
这个软件主要就是把数据库(excel)里的数据显示在界面上呗,然后提供一点按钮,输入的框框,大概就这些元素了
-
C层:实现具体的业务逻辑,可以把函数实现之类的都放在这一层里理解,比如addGoods()函数触发后,接受相关参数(具体的物品名称等等),然后new一个对象,给对象赋值,将这个对象放入列表...等等
简而言之,软件的使用者在界面点鼠标、敲键盘(都是输入),View层的某个组件感知到了输入,相当于使用者发出了请求,C层的任务就是合理的处理请求与数据。
以上有大量个人理解成分,对各层的解释可能有不太恰当的地方,M层的设计只是举例,还需要做更周到的考虑,或者多考虑几种设计方案
工具使用
-
系统
win...吧,linux由于是remote,上传GitHub没搞定
-
编辑器(编程环境)
- vscode 轻便
-
语言:python
-
python提供文件处理库,做数据的读写,存excel还不错
-
python提供GUI设计库,个人用过PyQt5
-
优点:接口丰富,可以QtDesigner完成组件的建立和布局,类似于高中visual basic里拖拽一个按钮,一个文本框之类的,并且提供了表格显示,可以满足物品列表显示的需求;
-
面向对象编程的思想很强,因人而异是好还是不好
-
缺点:有时候很多功能用不明白,要心静下来写,网络上的一些指导帖子都略微抽象,当初用的时候经常被小问题卡住;不确定pyqt5的表格显示中是否支持点击
-
可以看看其他GUI库
-
-
-
文件结构
- MyProject |-- bin/ | |-- foo/ | |-- tests/ | | |-- __init__.py | | |-- test_main.py | |-- class/ | | |-- __init__.py | | |-- class.py | |-- function/ | | |-- __init__.py | | |-- function.py | |-- __init__.py | |-- main.py | |-- docs/ | |-- | |-- | |-- setup.py |-- requirements.txt |-- README
-
bin/: 存放项目的一些可执行文件,当然你可以起名script/之类的也行。
-
foo/: 存放项目的所有源代码。
(1) 源代码中的所有模块、包都应该放在此目录。不要置于顶层目录。
(2)其子目录tests/存放单元测试代码;
(3)其子目录class/存放自己设计的类;
(4)其子目录function/存放自己设计的函数;
(5) 程序的入口最好命名为main.py。
-
docs/: 存放一些文档。
-
setup.py: 安装、部署、打包的脚本。
-
requirements.txt: 存放软件依赖的外部Python包列表。
-
README: 项目说明文件。
-
只是一种建议,程序能跑,好看,文件能按照一定的依据分类,我觉得就行
实现步骤
- 环境准备
- 数据逻辑层面的关系和操作梳理(数据结构)
- 数据的读写实现,比如先尝试成功输入输出信息
- 可以先在终端命令行实现增删改查功能,确保函数、类的编写都是正确的
- 数据可视化——设计GUI
- 不停地测试功能修改bug,考虑特殊情况