本次咱们将运用模块化编程技术来实现一个比较有现实意义的项目---《库存管理系统》。该系统将能实现:编程
咱们可将该系统支持功能细分为如下三类:json
按照上面的划分,有助于咱们组织整个项目代码。例如,信息存储可以实现包括产品数量、位置等全部信息的存储操做,人机交互部分则能实现对用户诸如添加产品等操做的响应。app
相应地,咱们就获得三个与之对应的独立模块:框架
除了以上三个功能模块外,咱们还需建立一个源文件做为主项目,让用户可以开启和运行整个库存管理系统,一般命名为main.py。模块化
至此,咱们整个项目已包含有四部分,在实现特定功能时一般须要各部分之间的相互协做。好比,生成报告模块须要从数据存储模块获取产品信息。所以,各部分间的交互可由下图进行表示:函数
到这里,咱们就已经彻底弄清了整个项目的框架,接下来咱们就进一步来分析和搭建各部分模块。spa
此模块将负责存储整个项目的信息,存储信息总共有三类:产品信息,位置信息,项目信息(产品代码和位置代码组成)。 设计
def set_products(products): global _products _products = products
功能:建立产品信息列表。3d
输入:产品信息,包括产品代码、描述信息和指望存储数量。将上述信息以元组格式做为参数输入到set_products(products)函数中,产品信息格式以下所示:code
[("CODE01", "Product 1", 120), ("CODE02", "Product 2", 100), ... ]
当咱们可以输入并建立产品信息后,则须要有进行查看当前产品信息的功能,因而咱们须要建立一个返回产品信息函数,以下所示:
def products(): global _products return _products
功能:实现简单的返回产品相关信息,例如经过下面的语句可对整个产品信息列表进行扫描:
for code, description, desired_number in products(): ...
def set_locations(locations): global _locations _locations = locations
功能:建立位置信息列表。
输入:位置信息,包括位置代码和描述信息,一样以元组格式进行存储并做为参数输入到set_locations(locations)函数中。
一样地,咱们也须要可以返回产品位置信息的功能,因而建立位置信息返回函数,以下所示:
def locations(): global _locations return _locations
库存中的产品项目信息由产品代码和产品位置代码组成,定义返回库存产品项目信息函数,以下所示:
def items(): global _items return _items
功能:返回产品项目信息,信息返回为元组格式,以下所示:
[("product_code01", "location_code01"), ("product_code02", "location_code02"), ... ]
def add_item(product_code, location_code): global _items _items.append((product_code, location_code)) _save_items()
功能:增添产品项目信息到原始项目信息列表中。
输入:产品代码、位置代码。
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
功能:移除原始项目信息列表中某条产品项目信息。
输入:产品代码、位置代码。
当程序开始运行时,须要将相关信息数据从硬盘中加载到内存,或者内存中数据保存到硬盘上这样的操做,因而定义初始化函数支持此类操做。
def init(): _load_items()
功能:程序开始运行时,从硬盘文件中加载数据信息。
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文件中加载数据到内存中。
def _save_items(): global _items f = open("items.json", "w") f.write(json.dumps(_items)) f.close()
功能:保存内存中数据到硬盘文件。
至此,咱们完成了数据存储模块的所有功能函数,它们共同组成了该模块的公共接口以供调用,总体结构以下图所示:
人机交互模块将负责与用户进行交互,包括向用户请求信息和显示信息在屏幕上。这里为了简化,咱们仅实现文字交互,运用input()函数向用户请求信息,运用print()函数显示信息在屏幕上。
def prompt_for_action(): ...
功能:响应用户各种操做请求代码,请求代码含义以下表所示:
def prompt_for_product(): ...
功能:显示列表中产品代码信息供用户选择,若用户取消,则返回None。
def prompt_for_location(): ...
功能:显示列表中位置代码信息供用户选择,若用户取消,则返回None。
def show_report(report): print() for line in report: print(line) print()
功能:纯文本格式显示报告内容。
输入:存储报告信息的列表。
def generate_inventory_report(): ...
功能:将当前库存所有产品信息生成报告并显示。
def generate_reorder_report(): ...
功能:将当前须要补充产品信息生成报告并显示。
咱们不该该将主项目视为一个模块,而应该将其做为一个标准Python源文件,用户运行此源文件来启动整个项目系统。主项目中须要导入它所须要的各类模块,并调用所定义的各类函数来完成项目的既定任务,它就比如是胶黏剂,将项目各部分所有有机粘合在一块儿。在Python语言中,这种源文件内一般可见到以下所示的语法框架:
def main(): ... if __name__ == "__main__": main()
整个项目的执行逻辑所有写进main()函数中, 当用户运行此项目时,最后两行程序便会告知系统执行main()函数中的所有逻辑。
对于本次设计的库存管理系统,主项目须要完成的任务有以下:
【注】:步骤三、4无限循环执行直到用户退出。
本次咱们用模块化编程技术完成设计和实现了一个跟踪库存产品信息的管理系统,详细地设计并实现了各个功能模块以及模块中的各个功能函数,完整地体验了整个项目的逻辑结构。可以在设计实现过程当中体会到模块化编程思想能大大提升设计的灵活性和效率。
本文章属于原创做品,欢迎你们转载分享,禁止修改文章的内容。尊重原创,转载请注明来自:躬耕南阳 https://www.cnblogs.com/yangmi511/