(二)实现对库存管理系统的模块化编程

1 引言

本次咱们将运用模块化编程技术来实现一个比较有现实意义的项目---《库存管理系统》。该系统将能实现:编程

  1. 实时跟踪库存产品数量、位置等信息;
  2. 新进产品的添加和已售卖产品的移除;
  3. 生成报告一:当前库存产品在各地的数量信息;
  4. 生成报告二:各类产品须要补充的数量信息。

2 设计库存管理系统

咱们可将该系统支持功能细分为如下三类:json

  • 存储信息(data storage);
  • 人机交互(user interface);
  • 生成报告(generating reports)。

按照上面的划分,有助于咱们组织整个项目代码。例如,信息存储可以实现包括产品数量、位置等全部信息的存储操做,人机交互部分则能实现对用户诸如添加产品等操做的响应。app

相应地,咱们就获得三个与之对应的独立模块:框架

  • 信息存储模块(data storage module);
  • 人机交互模块(user interface module);
  • 生成报告模块(generating reports module)。

除了以上三个功能模块外,咱们还需建立一个源文件做为主项目,让用户可以开启和运行整个库存管理系统,一般命名为main.py。模块化

至此,咱们整个项目已包含有四部分,在实现特定功能时一般须要各部分之间的相互协做。好比,生成报告模块须要从数据存储模块获取产品信息。所以,各部分间的交互可由下图进行表示:函数

到这里,咱们就已经彻底弄清了整个项目的框架,接下来咱们就进一步来分析和搭建各部分模块。spa

3 数据存储模块

此模块将负责存储整个项目的信息,存储信息总共有三类:产品信息,位置信息,项目信息(产品代码和位置代码组成)。  设计

3.1 产品信息建立函数

def set_products(products):
    global _products
    _products = products

功能:建立产品信息列表。3d

输入:产品信息,包括产品代码、描述信息和指望存储数量。将上述信息以元组格式做为参数输入到set_products(products)函数中,产品信息格式以下所示:code

[("CODE01", "Product 1", 120), 
 ("CODE02", "Product 2", 100), ... 
]

3.2 返回产品信息函数

当咱们可以输入并建立产品信息后,则须要有进行查看当前产品信息的功能,因而咱们须要建立一个返回产品信息函数,以下所示:

def products():
    global _products
    return _products

功能:实现简单的返回产品相关信息,例如经过下面的语句可对整个产品信息列表进行扫描:

for code, description, desired_number in products():
    ...

3.3 位置信息建立函数

def set_locations(locations):
    global _locations
    _locations = locations

功能:建立位置信息列表。

输入:位置信息,包括位置代码和描述信息,一样以元组格式进行存储并做为参数输入到set_locations(locations)函数中。

3.4 返回位置信息函数

一样地,咱们也须要可以返回产品位置信息的功能,因而建立位置信息返回函数,以下所示:

def locations():
    global _locations
    return _locations

3.5 返回产品项目信息函数

库存中的产品项目信息由产品代码和产品位置代码组成,定义返回库存产品项目信息函数,以下所示:

def items():
    global _items
    return _items

功能:返回产品项目信息,信息返回为元组格式,以下所示:

[("product_code01", "location_code01"), 
 ("product_code02", "location_code02"), ...
]

3.6 增添项目信息函数

def add_item(product_code, location_code):
    global _items
    _items.append((product_code, location_code))
    _save_items()

功能:增添产品项目信息到原始项目信息列表中。

输入:产品代码、位置代码。

3.7 移除项目信息函数

def remove_item(product_code, location_code):
    global _items
    for i in range(len(_items)):
        prod_code, loc_code = _items[i]
        if prod_code == product_code and loc_code == location_code:
          del _items[i]
           _save_items()
           return True
    return False

功能:移除原始项目信息列表中某条产品项目信息。

输入:产品代码、位置代码。

3.8 初始化函数

当程序开始运行时,须要将相关信息数据从硬盘中加载到内存,或者内存中数据保存到硬盘上这样的操做,因而定义初始化函数支持此类操做。

def init():
    _load_items()

功能:程序开始运行时,从硬盘文件中加载数据信息。

3.9 加载数据函数

def _load_items():
  global _items
  if os.path.exists("items.json"):
    f = open("items.json", "r")
    _items = json.loads(f.read())
    f.close()
  else:
    _items = []

功能:从硬盘中名为items的json文件中加载数据到内存中。

3.10 保存数据函数

def _save_items():
    global _items
    f = open("items.json", "w")
    f.write(json.dumps(_items))
    f.close()

功能:保存内存中数据到硬盘文件。

至此,咱们完成了数据存储模块的所有功能函数,它们共同组成了该模块的公共接口以供调用,总体结构以下图所示:

4 人机交互模块

人机交互模块将负责与用户进行交互,包括向用户请求信息和显示信息在屏幕上。这里为了简化,咱们仅实现文字交互,运用input()函数向用户请求信息,运用print()函数显示信息在屏幕上。

4.1 用户命令响应函数

def prompt_for_action():
    ...

功能:响应用户各种操做请求代码,请求代码含义以下表所示:

4.2 响应用户并返回产品代码函数

def prompt_for_product():
    ...

功能:显示列表中产品代码信息供用户选择,若用户取消,则返回None。

4.3 响应用户并返回位置代码函数

def prompt_for_location():
    ...

功能:显示列表中位置代码信息供用户选择,若用户取消,则返回None。

4.4 报告显示函数

def show_report(report):
    print()
    for line in report:
        print(line)
    print()

功能:纯文本格式显示报告内容。

输入:存储报告信息的列表。

5 生成报告模块

5.1 生成当前库存产品信息报告函数

def generate_inventory_report():
    ...

功能:将当前库存所有产品信息生成报告并显示。

5.2 生成需补充产品信息报告函数

def generate_reorder_report():
    ...

功能:将当前须要补充产品信息生成报告并显示。

6 主函数项目

咱们不该该将主项目视为一个模块,而应该将其做为一个标准Python源文件,用户运行此源文件来启动整个项目系统。主项目中须要导入它所须要的各类模块,并调用所定义的各类函数来完成项目的既定任务,它就比如是胶黏剂,将项目各部分所有有机粘合在一块儿。在Python语言中,这种源文件内一般可见到以下所示的语法框架:

def main():
    ...
if __name__ == "__main__":
    main()

整个项目的执行逻辑所有写进main()函数中, 当用户运行此项目时,最后两行程序便会告知系统执行main()函数中的所有逻辑。

对于本次设计的库存管理系统,主项目须要完成的任务有以下:

  1. 调用初始化函数,初始化须要初始化的各个模块;
  2. 提供库存初始产品信息和位置信息;
  3. 请求人机交互模块并给用户显示可用操做命令提示;
  4. 响应用户输入的命令。

【注】:步骤三、4无限循环执行直到用户退出。

7 小结

本次咱们用模块化编程技术完成设计和实现了一个跟踪库存产品信息的管理系统,详细地设计并实现了各个功能模块以及模块中的各个功能函数,完整地体验了整个项目的逻辑结构。可以在设计实现过程当中体会到模块化编程思想能大大提升设计的灵活性和效率。

未完待续...

本文章属于原创做品,欢迎你们转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:躬耕南阳  https://www.cnblogs.com/yangmi511/

相关文章
相关标签/搜索