欢迎来到Python教程自学网!
当前位置: 首页 > Pyhon开发 > python制作仓库管理系统软件

python制作仓库管理系统软件

   

python制作仓库管理系统软件

一:系统测试运行

—— 库存信息管理系统——-
| 1: 增加产品信息
| 2: 产品信息报表
| 3: 增加货架位置
| 4: 货架位置报表
| 5: 商品入库管理
| 6: 商品出库管理
| 7: 商品库存信息报表
| 0: 退出
——————————
请选择功能菜单(0-7):
————————————————

二:库存管理系统概述

sku:Stock Keeping Unit,最小存货单位

  •   本节实现一个简单的基于模块的库存管理系统。
  •   系统采用JSON文件来保存数据。
  •   产品信息设计为字典,键为sku_id (产品ID),值为sku_name (产品名称),使用products.json实现其持续化。
  •   货架位置信息也设计为字典,键为loc_id (货架ID),值为loc_name (货架名称),使用location.json实现其持续化。
  •   商品库存信息设计为列表[sku_id, loc_id] 的列表,使用items.json实现其持续化。

库存管理系统设计为三个模块文件: data.py、ui.py 和 main.py。

库存管理系统data.py负责数据的管理

库存管理系统ui.py负责用户界面交互

三:数据处理模块data.py的实现

  •   库存管理系统data.py负责数据的管理
  •   通过Python标准库模块json中的loads()函数和dumps()函数,可以实现从JSON文件读取数据和转储数据到JSON文件的功能。

库存管理系统数据处理模块data.py。

import os
import json

#全局变量
_products = {} #保存产品信息的字典: sku_id:sku_name
_locations = {} #保存货架位置的字典: loc_id:loc_name
_items = [] #保存商品库存的列表,元素为元组(sku_id,loc_id)

def init():
“””从磁盘JSON格式文件中读取数据”””
global _products, _locations, _items
if os.path.exists(“products.json”):
f = open(“products.json”, “r”, encoding = ‘utf-8’)
_products = json.loads(f.read())
f.close()
if os.path.exists(“locations.json”):
f = open(“locations.json”, “r”, encoding = ‘utf-8′)
_locations = json.loads(f.read())
f.close()
if os.path.exists(“items.json”):
f = open(“items.json”, “r”, encoding =’utf-8′)
_items = json.loads(f.read())
f.close()

def _save_products():
“””把产品信息数据_products以JSON格式保存到磁盘文件”””
global _products
f = open(“products.json”, “w”, encoding =’utf-8′)
f.write(json.dumps(_products, ensure_ascii = False))
f.close()

def _save_locations():
“””把货架位置数据_ locations以JSON格式保存到磁盘文”””
global _locations
f = open(“locations.json”, “w”, encoding =’utf-8′)
f.write(json.dumps(_locations))
f.close()

def _save_items():
“””把商品库存数据_ items以JSON格 式保存到磁盘文件”””
global _items
f = open(“items.json”, “w”, encoding =’utf-8’)
f.write(json.dumps(_items))
f.close()

def get_products():
“””返回产品信息”””
global _products
return _products

def get_locations():
“””返回货架位置信息”””
global _locations
return _locations

def get_items():
“””返回商品库存信息”””
global _items
return _items

def add_product(sku_id, sku_name):
“””增加一个产品sku_ id、sku_name”””
global _products
_products[sku_id] = sku_name
_save_products()

def add_location(loc_id, loc_name):
“””增加一个货架位置loc_ id、 loc_ name”””
global _locations
_locations[loc_id] = loc_name
_save_locations()

def add_item(sku_id, loc_id):
“””入库一件商品:商品sku_ id、 货架sku_ id”””
global _items
_items.append((sku_id, loc_id))
_save_items()

def remove_item(sku_id, loc_id):
“””出库一件商品:商品sku_ id、货架sku_ id, 返回True; 如果不存在, 返回False”””
global _items
for i in range(len(_items)):
if sku_id == _items[i][0] and loc_id == _items[i][1]:
del _items[i]
_save_items()
return True
return False

四:用户界面交互模块ui.py的实现

  •   库存管理系统ui.py负责用户界面交互
  •   用户界面交互模块导入data模块
  •   字典.items() 返回字典的(key, value)对的列表

库存管理系统用户界面交互模块ui.py

import data

def prompt_for_action():
“””提示功能菜单。返回用户输入选择”””
while True:
print(‘—— 库存信息管理系统——-‘)
print(‘| 1: 增加产品信息’)
print(‘| 2: 产品信息报表’)
print(‘| 3: 增加货架位置’)
print(‘| 4: 货架位置报表’)
print(‘| 5: 商品入库管理’)
print(‘| 6: 商品出库管理’)
print(‘| 7: 商品库存信息报表’)
print(‘| 0: 退出’)
print(‘——————————‘)

choice = input(‘请选择功能菜单(0-7):’)
if choice == ‘0’: return ‘QUIT’
elif choice == ‘1’: return ‘ADD_PRODUCT’
elif choice == ‘2’: return ‘REPORT_PRODUCTS’
elif choice == ‘3’: return ‘ADD_LOCATION’
elif choice == ‘4’: return ‘REPORT_LOCATIONS’
elif choice == ‘5’: return ‘ADD_ITEM’
elif choice == ‘6’: return ‘REMOVE_ITEM’
elif choice == ‘7’: return ‘REPORT_ITEMS’

def prompt_for_old_sku_id():
“””提示用户输入有效的产品sku_id并返回有效产品ID, 或者返回None”””
while True:
sku_id = input(“请输入产品ID:”)
if sku_id == “”:
return None
elif sku_id not in data.get_products():
print(“该产品不存在,请重新输入”)
else:
return sku_id

def prompt_for_new_sku_id():
“””提示用户输入新的产品sku_id并返回新产品ID, 或者返回None”””
while True:
sku_id = input(“请输入新的产品ID:”)
if sku_id == “”:
return None
elif sku_id in data.get_products():
print(“该产品已经存在,请重新输入”)
else:
return sku_id

def prompt_for_old_loc_id():
“””提示用户输入有效的货架位置loc_id并返回有效货架位置ID,或者返回None”””
while True:
loc_id = input(“请输入货架位置ID:”)
if loc_id == “”:
return None
elif loc_id not in data.get_locations():
print(“该货架位置不存在,请重新输入”)
else:
return loc_id

def prompt_for_new_loc_id():
“””提示用户输入新的货架位置loc_ id并返回,或者返回None”””
while True:
loc_id = input (“请输新的货架位置ID:”)
if loc_id == “”:
return None
elif loc_id in data.get_locations():
print(‘该货架位置已经存在,请重新输入’)
else:
return loc_id

def prompt_for_sku_name():
“””提示用户输入产品名称sku_name并返回产品名称,或者返回None”””
while True:
sku_name = input(“请输入产品名称:”)
if sku_name ==””:
return None
else:
return sku_name

def prompt_for_loc_name():
“””提示用户输入货架位置名称loc_ name并返回货架位置名称,或者返回None”””
while True:
loc_name = input(“请输入货架位置名称:”)
if loc_name == “”: return None
else: return loc_name

def report_products():
“””产品信息报表”””
for (k, v) in data.get_products().items():
print(‘{0:8} {1}’.format(k, v))

def report_locations():
“””货架位置报表”””
for (k, v) in data.get_locations().items():
print(‘ {0:8} {1}’. format(k, v))

def report_items():
“””库存信息报表”””
for (k, v) in data.get_items():
sku_name = data.get_products()[k]
loc_name = data.get_locations()[v]
print(‘{0:8} {1}: {2:8} {3}’.format(k, sku_name, v, loc_name))

五:库存管理系统的功能设计

终究逃不过增、删、改、查四个字

prompt,提示

  •   增加产品信息
  1.   调用ui.prompt_for_new__sku_id(),提示用户输入新的产品ID,
  2.   调用ui.prompt_for_sku_name(),提示用户输入产品名称。
  3.   调用data.add_product(sku_id, sku_name) 增加新的产品。
  4.   如果用户输入为空,则返回None,即什么也不做。
  •   产品信息报表
  1.   调用ui.report_products(),显示产品信息列表。
  2.   增加货架位置
  3.   调用ui.prompt_for_new_loc_id(), 提示用户输入新的货架位置ID,
  4.   调用ui.prompt_for_loc_name(),提示用户输入货架名称。
  5.   调用data.add_location(sku_id, sku_name) 增加新的货架。
  6.   如果用户输入为空,则返回None,即什么也不做。
  •   货架位置报表
  1.   调用ui.report_location(),显示货架位置信息列表。
  2.   商品入库管理
  3.   调用ui.prompt_for_old_sku_id(),提示用户输入产品ID,
  4.   调用ui.prompt_for_old_loc_id(),提示用户输入货架ID。
  5.   调用data.add_item(sku_id, loc_id),实现商品入库。
  6.   如果用户输入为空,则返回None,即什么也不做。
  •   商品出库管理
  1.   调用ui.prompt_for_old_sku_id(),提示用户输入产品ID,
  2.   调用ui.prompt_for_old_loc_id(),提示用户输入货架ID。
  3.   调用data.remove_item(sku_id, loc_id),实现商品出库。
  4.   如果库存不存在,则报错。如果用户输入为空,则返回None,即什么也不做。
  5.   商品库存信息报表
  6.   调用ui.report_items(), 显示库存信息列表。

六:主模块main.py的实现

  1.   主模块导入data和ui模块。
  2.   在main.py中,定义main()函数,首先调用data.init(),从磁盘JSON格式文件中读取数据。然后在无限循环中,调用ui.prompt_for_action()显示功能菜单,接受用户输入,并根据用户的功能选择,实现各模块相应功能。

库存管理系统主模块main. py

“””库存管理系统:基于JS0N”””
import data
import ui

def main():
data.init()
while True:
action = ui.prompt_for_action()
if action == ‘QUIT’:
break
elif action == ‘ADD_PRODUCT’:
sku_id = ui.prompt_for_new_sku_id()
if sku_id != None:
sku_name = ui.prompt_for_sku_name()
if sku_name != None:
data.add_product(sku_id, sku_name)
elif action == ‘REPORT_PRODUCTS’:
ui.report_products()
elif action == ‘ADD_LOCATION’:
loc_id = ui.prompt_for_new_loc_id()
if loc_id != None:
loc_name = ui.prompt_for_loc_name()
if loc_name != None:
data.add_location(loc_id, loc_name)
elif action == ‘REPORT_LOCATIONS’:
ui.report_locations()
elif action == ‘ADD_ITEM’:
sku_id = ui.prompt_for_old_sku_id()
if sku_id != None:
loc_id = ui.prompt_for_old_loc_id()
if loc_id != None:
data.add_item(sku_id, loc_id)
elif action == ‘REMOVE_ITEM’:
sku_id = ui.prompt_for_old_sku_id()
if sku_id != None:
loc_id = ui.prompt_for_old_loc_id()
if loc_id != None:
if not data.remove_item(sku_id, loc_id):
print(‘该库存不存在!’)
elif action == ‘REPORT_ITEMS’:
ui.report_items()

if __name__ == “__main__”: main()