python超市售货统计程序_用Python实现简易超市售货系统

今天来实现一个简单的超市售货系统

数据存储形式为json的数据

首先是读取数据,这里用到的Python的json库,用于处理json类型的数据

```python

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)]

```

然后就是超市的主体部分,实现了用户购买多次购买商品,并打印订单

```python

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('欢迎再来!')

```

全部代码如下:

```python

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('按回车退出')

```

效果图:

一起学习python,小白指导,教学分享记得私信我

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue安装概要以及vue测试工具

一、概述 1、安装node,去node官网 2、新建一个项目,通过npm init命令初始化,即创建一个package.json文件 3、用命令 npm install vue -g 全局安装vue(网上已经有详细的资料,在此就不复述了) 二、vue测试…

linux安装与远程连接

1、在VMware上创建新的虚拟机,保证有linux版本的iso镜像文件 具体参考http://jingyan.baidu.com/article/eae0782787b4c01fec548535.html 2、进行切换用户 进行root用户的切换:   #su password: 进行普通用户的切换: #su username 3、编辑…

Spring框架:三种Spring Bean生命周期技术

当使用术语“生命周期”时,Spring的家伙指的是您的bean的构造和破坏,通常这与Spring Context的构造和破坏有关。 在某些情况下,Bean生命周期的管理不是一件容易的事,因为需要它执行自己的内部设置。 当您的bean必须与外部系统进行…

wincc客户机打开服务器文件通讯不上,wincc客户机连不上服务器

如果你计算机名称改正确了,检查一下安装OPC服务软件吗?比如SIMATIC NET。然后试一试下面方法能否解决:首先,设置一下PG/PC接口。方法:开始--设置--控制面板--设置PG/PC接口,在接口分配参数,选择你要的参数(根据你的情…

笔记《精通css》第2章 选择器,注释

第2章 选择器,注释 1.常用选择器(id选择器,类选择器,类型选择器,后代选择器,伪类选择器(文档结构之外)) 通用选择器(*{ }) 高级选择器&a…

Android ios嵌套web页面

我们现在做一个活动页面,Android和ios的活动页面用web来做,方便更改,下面有几个小问题; 1、在Android和ios中,虽然web上面可以存localstorage,但是到了Android和ios上面就失效了,也就是说不能存…

课程学习:程序设计与算法

基本单位 0-1: 1位(2^12), 比特, bit(b)字节: 8位(2^8256), byte(B);1KB: 2^10字节(2^13位)ASCII编码方案就是用一个字节表示一个字母,数字或标点进制转换 十进制->n进制: A0xk^0....AnxK^nn进制->十进制: 取余数(从右往左)十六进制->二进制: 4进制对应1十…

css3点击会移动到点,CSS3过渡点击事件

根据CSS3过渡:div{transition-property: width;transition-duration: 1s;transition-timing-function: linear;transition-delay: 2s;}transition-property:指定应用转换的CSS属性的名称.transition-duration:定义转换所需的时间长度.默认值为…

通过JAX-WS Provider在Web服务中利用MOXy

在先前的文章中,我演示了如何将EclipseLink JAXB(MOXy)直接集成到WebLogic(从12.1.1开始)和GlassFish(从3.1.2开始)的JAX-WS实现中 。 在本文中,我将演示如何通过使用JAX-WS Provide…

python如何获取url中的内容_python怎么提取url中的参数

目标:结果:{tma_jssdk_version: 1.93.0.1, ac: WIFI, appTheme: dark}代码:import urllib.parse as urlparseurl https://search5-search-hl.amemv.com/aweme/v1/challenge/search/?tma_jssdk_version1.93.0.1&acWIFI&appThemedark…

子元素的margin-top会影响父元素

---恢复内容开始--- 之前在写项目的时候,发现原本想让父子元素之间加点边距,却让父元素产生了margin-top,于是百度之后发现了原因。 在css2.1盒模型中 In this specification, the expression collapsing margins means that adjoining ma…

spring boot高性能实现二维码扫码登录(上)——单服务器版

前言 目前网页的主流登录方式是通过手机扫码二维码登录。我看了网上很多关于扫码登录博客后,发现基本思路大致是:打开网页,生成uuid,然后长连接请求后端并等待登录认证相应结果,而后端每个几百毫秒会循环查询数据库或r…

查看 固态硬盘位置_3米防摔+人脸/指纹解锁:西数Armorlock移动固态硬盘

要求快速而又安全的数据拷贝工具?指纹识别移动SSD大家应该都见过了,今天西数推出了一个更为特别的人脸/指纹识别加密移动SSD。G-Technology Armorlock使用AES256全盘加密固态硬盘中的数据,解锁方式不是常见的密码或自带指纹传感器&#xff0c…

CCF - 201403-2 - 窗口

问题描述 试题编号:201403-2试题名称:窗口时间限制:1.0s内存限制:256.0MB问题描述: 问题描述在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之…

通过Spring集成从Hibernate 3迁移到4

本周是时候将我们的代码库升级到最新的Hibernate 4.x了。 我们推迟了迁移(仍在Hibernate 3.3上),因为3.x分支的较新维护版本需要对API进行一些更改,这些更改显然仍在不断变化中。 一个示例是UserType API,该API仍然存在…

web前端工程师全套教程免费分享

这是我自己早前听课时整理的前端全套知识点,适用于初学者,也可以适用于中级的程序员,你们可以下载下来。我自认为还是比较系统全面的,可以抵得上市场上90%的学习资料。讨厌那些随便乱写的资料还有拿出来卖钱的人!在这里…

vb在服务器上新建文件夹,vb.net-如果不存在,如何在VB中创建文件夹?

vb.net-如果不存在,如何在VB中创建文件夹?我为自己编写了一个小小的下载应用程序,以便我可以轻松地从服务器上获取一组文件,然后将它们全部放入带有全新安装的Windows的新PC上,而无需实际运行网络。 不幸的是&#xff…

mybatis一对一联表查询的两种常见方式

1.一条语句执行查询(代码如下图) 注释:class表(c别名),teacher表(t别名)teacher_id为class表的字段t_id为teacher表的字段,因为两者有主键关联的原因,c_id为c…

在Windows 7中设置Java开发环境

一段时间以来,我收到了很多愿意尝试Java语言的学生和人们的要求,它们提供了关于如何设置Java开发环境的简单指南,类似于我一年前写的那样。 Mac用户。 看到这里和这里 。 因此,本文主要针对Java开发新手,他们寻求有关使…

写给想成为前端工程师的同学们―前端工程师是做什么的?

前端工程师是做什么的? 前端工程师是互联网时代软件产品研发中不可缺少的一种专业研发角色。从狭义上讲,前端工程师使用 HTML、CSS、JavaScript 等专业技能和工具将产品UI设计稿实现成网站产品,涵盖用户PC端、移动端网页,处理视觉…