今天来实现一个简单的超市售货系统
数据存储形式为json的数据
首先是读取数据,这里用到的Python的json库,用于处理json类型的数据
def load(): # 数据读取
j = open('goods.txt', 'r', encoding='utf-8')
# 逐行读取文件中的数据
readers = j.readlines()
# 将数据整理后存入data
for i in readers:
# 对数据进行清洗 以-为间隔符分割 然后将后半段的换行符清洗掉 将单引号换成双引号
data[i.split('-')[0]] = json.loads(i.split('-')[-1].replace('\n', '').replace("\'", '\"'))
for i in data:
for j in data[i]:
data[i][j] = [data[i][j], random.randint(100, 1000)]
然后就是超市的主体部分,实现了用户购买多次购买商品,并打印订单
def sale():
print('欢迎来到XXX超市')
while True:
# 让用户输入购买物品的类别
print(' '.join(list(data.keys())))
category = input('请选择你想购买的类别:')
# 判断用户输入的类别是否存在
if category not in data.keys():
print('您输入的类别不存在,情重新输入')
continue
# 将用户选择的类别内的商品都放入commoditys进行保存
commoditys = data[category]
while True:
print('进入商品选购')
print(' '.join([k+str(v[0]) for k,v in commoditys.items()]))
# 让用户输入购买的商品名
commodity = input('请输入你购买的商品:')
# 判断用户选择的商品是否存在
if commodity not in commoditys.keys():
print('您输入的商品不存在,请重新输入')
continue
# 让用户输入购买商品的数量
number = int(input('请输入购买商品的数量:'))
# 将库存减少
data[category][commodity][1] -= number
# 将购物单子存入购物清单中
detailed_list.append([commodity, commoditys[commodity][0], number, commoditys[commodity][0]*number, data[category][commodity][1]])
print('当前的购物清单为')
# 将购物清单打印出来
print('商品名 数量 总价')
for i in detailed_list:
print(i[0], i[2], i[3])
# 判断用户是否继续选择商品
if input('是否继续选择商品,是输入y:') != 'y':
break
# 判断用户是否继续购物
if input('是否继续选择购物,是输入y:') != 'y':
break
print('=' * 50)
print(' 商品名称|单价| 数量| 小计| 库存|')
print('-' * 50)
# 格式化循环打印购物清单
for i in detailed_list:
print('{:>6}|{:>2}|{:>8}|{:>8}|{:>8}|'.format(i[0], str(i[1]), str(i[2]), str(i[3]), str(i[4])))
print('-' * 50)
print(' 总消费:%.2f '%(sum([i[3] for i in detailed_list])))
print('=' * 50)
print('欢迎再来!')
全部代码如下:
import json
import random
def load(): # 数据读取
j = open('goods.txt', 'r', encoding='utf-8')
# 逐行读取文件中的数据
readers = j.readlines()
# 将数据整理后存入data
for i in readers:
# 对数据进行清洗 以-为间隔符分割 然后将后半段的换行符清洗掉 将单引号换成双引号
data[i.split('-')[0]] = json.loads(i.split('-')[-1].replace('\n', '').replace("\'", '\"'))
for i in data:
for j in data[i]:
data[i][j] = [data[i][j], random.randint(100, 1000)]
def sale():
print('欢迎来到XXX超市')
while True:
# 让用户输入购买物品的类别
print(' '.join(list(data.keys())))
category = input('请选择你想购买的类别:')
# 判断用户输入的类别是否存在
if category not in data.keys():
print('您输入的类别不存在,情重新输入')
continue
# 将用户选择的类别内的商品都放入commoditys进行保存
commoditys = data[category]
while True:
print('进入商品选购')
print(' '.join([k+str(v[0]) for k,v in commoditys.items()]))
# 让用户输入购买的商品名
commodity = input('请输入你购买的商品:')
# 判断用户选择的商品是否存在
if commodity not in commoditys.keys():
print('您输入的商品不存在,请重新输入')
continue
# 让用户输入购买商品的数量
number = int(input('请输入购买商品的数量:'))
# 将库存减少
data[category][commodity][1] -= number
# 将购物单子存入购物清单中
detailed_list.append([commodity, commoditys[commodity][0], number, commoditys[commodity][0]*number, data[category][commodity][1]])
print('当前的购物清单为')
# 将购物清单打印出来
print('商品名 数量 总价')
for i in detailed_list:
print(i[0], i[2], i[3])
# 判断用户是否继续选择商品
if input('是否继续选择商品,是输入y:') != 'y':
break
# 判断用户是否继续购物
if input('是否继续选择购物,是输入y:') != 'y':
break
print('=' * 50)
print(' 商品名称|单价| 数量| 小计| 库存|')
print('-' * 50)
# 格式化循环打印购物清单
for i in detailed_list:
print('{:>6}|{:>2}|{:>8}|{:>8}|{:>8}|'.format(i[0], str(i[1]), str(i[2]), str(i[3]), str(i[4])))
print('-' * 50)
print(' 总消费:%.2f '%(sum([i[3] for i in detailed_list])))
print('=' * 50)
print('欢迎再来!')
if __name__ == '__main__':
detailed_list = [] # 购物清单
data = {
} # 数据存储
# 读取数据
load()
# print(data)
# 客户开始选购
sale()
print('当前库存为:\n', data)
input('按回车退出')