• 欢迎光临~

HaoshuoShao's software_engineering_homework_1

开发技术 开发技术 2022-10-10 次浏览

版本1:后台管理系统版本

软件及代码:https://github.com/HaoshuoShao/homework22-fall

(ps. GUI 和 requirements.txt还没有完善)

需求分析

HaoshuoShao's software_engineering_homework_1

  1. 可以 增,删,查 物品信息
    • 可以加个改... 比如五斤大米改三斤
  2. 没有要求实现物品的交换:
    • 比如用户A提供了物品a,用户B提供了物品b
    • A需要b,向B发起请求
    • B收到请求,觉得可以用b换a,同意请求
    • A得到成功交换的反馈
    • 物品列表中a,b改变状态:未交换->已交换

软件定位

  • 倾向于后台管理系统:
    1. 操作者不是小区里的居民用户:如果有用户之分,就要考虑很多,比如登录,删除修改等操作的权限,自己测试过程中用户的切换,用户数据库表和物品数据库表的连接...
    2. 建议操作者是后台管理员,居委会办公室的大妈接到了居民们的诉求,后台发布了交换信息...

软件设计

根据软件设计经典框架(偏设计思想上的框架,而不是代码开发的框架)

MVC:Model View Controller,是模型 (model)-视图 (view)-控制器 (controller)的缩写

  • M层:

HaoshuoShao's software_engineering_homework_1

可以设计一个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: 项目说明文件。

只是一种建议,程序能跑,好看,文件能按照一定的依据分类,我觉得就行

实现步骤

  1. 环境准备
  2. 数据逻辑层面的关系和操作梳理(数据结构)
  3. 数据的读写实现,比如先尝试成功输入输出信息
  4. 可以先在终端命令行实现增删改查功能,确保函数、类的编写都是正确的
  5. 数据可视化——设计GUI
  6. 不停地测试功能修改bug,考虑特殊情况
程序员灯塔
转载请注明原文链接:HaoshuoShao's software_engineering_homework_1
喜欢 (0)