1 引言

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

实时跟踪库存产品数量、位置等信息;

新进产品的添加和已售卖产品的移除;

生成报告一:当前库存产品在各地的数量信息;

生成报告二:各种产品需要补充的数量信息。

2 设计库存管理系统

我们可将该系统支持功能细分为以下三类:

存储信息(data storage);

人机交互(user interface);

生成报告(generating reports)。

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

相应地,我们就得到三个与之对应的独立模块:

信息存储模块(data storage module);

人机交互模块(user interface module);

生成报告模块(generating reports module)。

除了以上三个功能模块外,我们还需创建一个源文件作为主项目,让用户能够开启和运行整个库存管理系统,通常命名为main.py。

至此,我们整个项目已包含有四部分,在实现特定功能时通常需要各部分之间的相互协作。比如,生成报告模块需要从数据存储模块获取产品信息。因此,各部分间的交互可由下图进行表示:

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

3 数据存储模块

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

3.1 产品信息创建函数

defset_products(products):global_products

_products= products

功能:创建产品信息列表。

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

[("CODE01", "Product 1", 120),

("CODE02", "Product 2", 100), ...

]

3.2 返回产品信息函数

当我们能够输入并创建产品信息后,则需要有进行查看当前产品信息的功能,于是我们需要创建一个返回产品信息函数,如下所示:

defproducts():global_productsreturn _products

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

for code, description, desired_number inproducts():

...

3.3 位置信息创建函数

defset_locations(locations):global_locations

_locations= locations

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

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

3.4 返回位置信息函数

同样地,我们也需要能够返回产品位置信息的功能,于是创建位置信息返回函数,如下所示:

deflocations():global_locationsreturn _locations

3.5 返回产品项目信息函数

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

defitems():global_itemsreturn _items

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

[("product_code01", "location_code01"),

("product_code02", "location_code02"), ...

]

3.6 增添项目信息函数

defadd_item(product_code, location_code):global_items

_items.append((product_code, location_code))

_save_items()

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

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

3.7 移除项目信息函数

defremove_item(product_code, location_code):global_itemsfor i inrange(len(_items)):

prod_code, loc_code=_items[i]if prod_code == product_code and loc_code ==location_code:del_items[i]

_save_items()returnTruereturn False

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

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

3.8 初始化函数

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

definit():

_load_items()

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

3.9 加载数据函数

def_load_items():global_itemsif 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()

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

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

4 人机交互模块

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

4.1 用户命令响应函数

defprompt_for_action():

...

功能:响应用户各类操作请求代码,请求代码含义如下表所示:

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

defprompt_for_product():

...

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

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

defprompt_for_location():

...

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

4.4 报告显示函数

defshow_report(report):print()for line inreport:print(line)print()

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

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

5 生成报告模块

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

defgenerate_inventory_report():

...

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

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

defgenerate_reorder_report():

...

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

6 主函数项目

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

defmain():

...if __name__ == "__main__":

main()

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

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

调用初始化函数,初始化需要初始化的各个模块;

提供库存初始产品信息和位置信息;

请求人机交互模块并给用户显示可用操作命令提示;

响应用户输入的命令。

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

7 小结

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

未完待续...

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

原文链接:https://www.cnblogs.com/yangmi511/p/12227119.html

python语言与存货管理,(二)实现对库存管理系统的模块化编程相关推荐

  1. (二)Linux设备驱动的模块化编程

    本系列导航 (一)初识Linux驱动 (二)Linux设备驱动的模块化编程 (三)写一个完整的Linux驱动程序访问硬件并写应用程序进行测试 (四)Linux设备驱动之多个同类设备共用一套驱动 (五) ...

  2. python语言基础(二)环境搭建

    一.编译器和解释器 python是解释性语言,它含有解释器,在python安装路径下,python.exe其实就是可执行的程序,含有内置的标准库和方法. 编辑器 是写代码的工具,不是编译器. 高级语言 ...

  3. C语言探索之旅 | 第二部分第一课:模块化编程

    C语言之父 Dennis Ritchie -- 简书作者 谢恩铭 转载请注明出处 第二部分第一课:模块化编程 上一课是C语言探索之旅 | 第一部分第十课:练习题+习作,至此,我们[C语言探索之旅]的第 ...

  4. 基于Python 语言的高分二号卫星全色和多光谱遥感数据融合(锐化)

    # coding:utf-8 import arcpy import sys from arcpy import env import timereload(sys) sys.setdefaulten ...

  5. 编程入门python语言是多大孩子学的-包头孩子学编程python好吗

    包头孩子学编程python好吗,学习少儿编程就选童程童美,童程童美专注3-18岁少儿编程教育.历时多年,形成了以创意启蒙课程.人工智能编程.智能机器人编程.信息学奥赛编程等课程为核心的一站式编程教育平 ...

  6. 运维自动化之基于python语言的文字界面的运维管理软件

    之前开发了php+mysql+shell运维监控系统,监控起来很方便,但在运维管理方便还是不能实现,所以最近打算使用python语言编写一套的运维管理系统,可以使用单台或多台机器同时管理与部署等功能, ...

  7. 2022中国大学python语言程序设计测试六答案(北理工嵩天 、黄天羽 、礼欣)

    本文章为大家准备2022中国大学python语言程序设计答案,与教学同步,但是还是希望同学们自己可以自己写. 测试一:http://t.csdn.cn/W7fWE 测试二:2022中国大学python ...

  8. 2022中国大学python语言程序设计测试五答案(北理工嵩天 、黄天羽 、礼欣)

    本文章为大家准备2022中国大学python语言程序设计答案,与教学同步,但是还是希望同学们自己可以自己写. 测试一:http://t.csdn.cn/W7fWE 测试二:2022中国大学python ...

  9. python语言程序设计基础网课-程序设计基础(Python语言)答案

    [单选题]下面代码的输出结果是 ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬ d = ...

  10. 《从问题到程序:用Python学编程和计算》——1.2 Python语言简介

    本节书摘来自华章计算机<从问题到程序:用Python学编程和计算>一书中的第1章,第1.2节,作者 裘宗燕,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1. ...

最新文章

  1. SAP创建webservice
  2. 白盒测试之路径测试练习
  3. 剑指offer18.删除链表结点(添加dummy,next域结点指向head)
  4. 外包 银行数字签名U盘的用法
  5. Android课程设计倒计时app,单片机课程设计-可调倒计时器.doc
  6. mysql去除重复数据 重建表_删除掉mysql 的.ibd,.frm,ibdata1,ib_logfile0和ib_logfile1文件后再drop表。然后重建此表,有问题吗...
  7. 《深入理解Nginx:模块开发与架构解析》一1.6 Nginx的命令行控制
  8. 发布中文搜索引擎数据库 TngouDB
  9. qmenu基本用法_使用QProxyStyle定制QMenu (二)
  10. clickhouse kafka引擎入门
  11. 公文流转 java_javaweb 公文流转系统制作
  12. MacBook Pro 触摸板手势突然失效的解决方案
  13. 流量、电量、弱网环境怎么测?
  14. VUE项目中打印/转换图片打印
  15. 面试官:设计“抖音”直播功能测试用例吧
  16. java 查看类_JAVA基础知识之JVM-——通过反射查看类信息
  17. display:grid 布局实现两行两列
  18. 如何设置计算机自动连接宽带,宽带自动连接设置,教您电脑怎么设置宽带自动连接...
  19. 苹果/Mac电脑软件卸载不了怎么办?
  20. Android开发-弹出对话框

热门文章

  1. 金蝶云星空表单插件开发常用事件、方法、函数
  2. 远控免杀从入门到实践 (11) 终结篇
  3. VASP 系列001. 高通量计算 Python 库 pymatgen 安装和一些使用(用 pymatgen 画 HSE 能带的细节和输出图片字体的简单调整)
  4. [Windows] 【直播放映馆V9.0】Bilibili,斗鱼,虎牙,企鹅电竞,音乐电台,无广告看电影直播!...
  5. JAVA的MySQL字符串拼接_MySQL字符串拼接、截取
  6. 09.html使用iframe、embed查看pdf不显示(未解决),使用pdf.js预览pdf
  7. 基于Qt的海康威视SDK二次开发-摄像头登陆、预览和抓图
  8. MATLAB 输出当前时间
  9. manjaro i3wm 的一些配置
  10. 手把手教你使用EndNote X8 详细笔记