python实现超市商品销售管理系统
作者:程序员lamed 发布时间:2021-01-06 22:18:14
本文实例为大家分享了python超市商品销售管理系统的具体代码,供大家参考,具体内容如下
需求分析:超市销售管理系统功能
1.欢迎用户使用超市销售管理系统,提示用户登录,如果是用户名为admin,密码为123456,则管理员身份。 如果是其他用户(可以自己设置也可随意接收),则是顾客身份。
2.如果用户是管理员身份,提示用户输入编号,选择对应功能
输入编号"1":显示商品的信息 (编号 商品名称 价格)
输入编号"2":添加商品信息 (输入编号,商品名称,价格)
输入编号"3":删除商品信息 (输入编号,删除对应的名称和价格)
输入编号"4":退出系统功能
3.如果用户是顾客身份,只有一个功能:购买商品,
展示所有商品信息,用户循环输入商品编号和购买数量,输入n时,退出系统,并提示用户总价格。
涉及到的知识点
编程语言变量,语句,函数
面向对象思想结合编程语言进行类的封装与方法的调用
常见数据容器列表与字典的使用
程序中对于文件的操作
因为涉及对于文件的读取和写入,建议大家在程序开始前,先确定文件内容的格式,有效合理的表达商品内容,我采取以下格式,在项目工程目录下创建shop.txt文件夹
逻辑分析:
增删查买都是对于商品的操作,商品信息包括编号名称和价格,可以将信息封装到对象当中,可创建对象所属的类Goods。然后对于增删等操作应该属于管理系统的功能,所以将相关功能封装到ShopManager类当中。在进入系统时,应该首先查看之前是否有存储信息,所以要读取文件写入到内存中,增删操作都是通过编号作为索引,所以可以选择字典dict数据结构作为内存存储容器,然后增删都是对于字典的操作,当系统退出时,在将数据更新写入到文件中,避免恶意修改文件,恶意提交。
功能实现代码:
首先创建表达商品对象的Goods类
class Goods(object):
def __init__(self,id,name,price):
self.id = id
self.name = name
self.price = price
def __str__(self):
info = "编号:%s\t商品名称:%s\t\t价格:%d"%(self.id,self.name,self.price)
return info
将对于商品操作的函数放到ShopManager类当中,功能包括管理员以及普通用户的,在登录后进行分流选择。
class ShopManager(object):
def __init__(self,path):
# path:表示读取文件的路径 shopdic:表示存放内存的容器
self.path = path
self.shopdic = self.readFileToDic()
def readFileToDic(self):
# 读取文件,写入到字典中
f = open(self.path, 'r', encoding='utf-8')
clist = f.readlines()
f.close()
index = 0
shopdic = {}
while index < len(clist):
# 将每一行的字符串进行分割,存放到新的列表中
ctlist = clist[index].replace('\n', "").split("|")
# 将每行的内容存放到一个对象中
good = Goods(ctlist[0],ctlist[1],int(ctlist[2]))
# 将对向存放到集合中
shopdic[good.id] = good
index = index + 1
return shopdic
def writeContentFile(self):
# 将内存当中的信息写入到文件当中
str1 = ''
for key in self.shopdic.keys():
good = self.shopdic[key]
ele = good.id+"|"+good.name+"|"+str(good.price)+"\n"
str1 = str1 + ele
f = open(self.path, 'w', encoding='utf-8')
f.write(str1)
f.close()
def addGoods(self):
# 添加商品的方法
id = input("请输入添加商品编号:>")
if self.shopdic.get(id):
print("商品编号已存在,请重新选择!")
return
name = input("请输入添加商品名称:>")
price = int(input("请输入添加商品价格:>"))
good = Goods(id,name,price)
self.shopdic[id] = good
print("添加成功!")
def deleteGoods(self):
# 删除商品的方法
id = input("请输入删除商品编号:>")
if self.shopdic.get(id):
del self.shopdic[id]
print("删除成功!")
else:
print("商品编号不存在!")
def showGoods(self):
# 展示所有商品信息
print("="*40)
for key in self.shopdic.keys():
good = self.shopdic[key]
print(good)
print("="*40)
def adminWork(self):
info = """
==========欢迎进入好海哦购物商场==========
输入功能编号,您可以选择以下功能:
输入“1”:显示商品的信息
输入“2”:添加商品的信息
输入“3”:删除商品的信息
输入“4”:退出系统功能
==========================================
"""
print(info)
while True:
code = input("请输入功能编号:>")
if code == "1":
self.showGoods()
elif code == "2":
self.addGoods()
elif code == "3":
self.deleteGoods()
elif code == "4":
print("感谢您的使用,正在退出系统!!")
self.writeContentFile()
break
else:
print("输入编号有误,请重新输入!!")
def userWork(self):
print(" ==============欢迎进入好海哦购物商场==============")
print("您可输入编号和购买数量选购商品,输入编号为n则结账")
self.showGoods()
total = 0
while True:
id = input("请输入购买商品编号:>")
if id == "n":
print("本次购买商品共消费%d元,感谢您的光临!"%(total))
break
if self.shopdic.get(id):
good = self.shopdic[id]
num = int(input("请输入购买数量:>"))
total = total+good.price*num
else:
print("输入商品编号有误,请核对后重新输入!")
def login(self):
# 登录功能
print("==========欢迎登录好海哦购物商场==========")
uname = input("请输入用户名:>")
password = input("请输入密码:>")
if uname == "admin":
if password == "123456":
print("欢迎您,admin管理员")
self.adminWork()
else:
print("管理员密码错误,登录失败!")
else:
print("欢迎你,%s用户"%(uname))
#执行用户的购买功能
self.userWork()
最后我们可在main语句中,调用登录方法,会自动选择相关功能。
if __name__ == '__main__':
shopManage = ShopManager("shop.txt")
shopManage.login()
上述代码运行后,会实现的效果为:
以上项目案例将学习内容进行了统一整理和综合,相信同学们顺利理解和敲出这部分代码。
更多学习资料请关注专题《管理系统开发》。
来源:https://blog.csdn.net/weixin_45342712/article/details/94735081
猜你喜欢
- 可能接触网站与编程设计的人都知道,一个属性值需要引号包括起来,但是有的时候就是因为没有正确设定引号类型,导致程序出错,就连我自己也是这样,我
- 首先是对一元函数求积分,使用Scipy下的integrate函数:from scipy import integratedef g(x):
- 共有三种推导式列表(list)推导式字典(dict)推导式集合(set)推导式列表推导式基本语法:[out_express for out_
- keras提供简单方便的模型可视化工具,只需一行代码就可以用框图的形式可视化出你搭建的网络结构。对于复杂网络而言,这个工具就是个神器呀。这篇
- 本文实例讲述了Python实现抓取HTML网页并以PDF文件形式保存的方法。分享给大家供大家参考,具体如下:一、前言今天介绍将HTML网页抓
- Web设计师可以使用HTML4和CSS2.1完成一些很酷的东西。我们可以在不使用陈旧的基于table布局的基础上完成文档逻辑结构并创建内容丰
- 用ASP.NET与SQL SERVER可是缘份最好了,稍大的程序一般第一先考虑的是SQL SERVER,只是一些很考虑经济的才使用ACCES
- 记录一下微信支付整个流程1.公众号申请及配置流程使用微信支付的前提是必须要有公众号。 申请链接: 微信公众号申请.记得选择服务号,根据操作提
- PHP _construct() 函数实例函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:<
- 这几天一直困惑我的问题,我觉得pycharm应该也是有的啊,偶然间找到了这个。把那个框里的选中,就可以了。ps:我的是 PyCharm 20
- 本文实例讲述了Python3.5装饰器原理及应用。分享给大家供大家参考,具体如下:1、装饰器:(1)本质:装饰器的本质是函数,其基本语法都是
- Python来进行查询和替换一个文本字符串?可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, s
- 分享两个常用的代码生成工具:gormgenhandlergengormgen基于 MySQL 数据表结构进行生成 3 个文件:生成表的 st
- 能评估使用方法性能评估模块提供了一系列用于模型性能评估的函数,这些函数在模型编译时由metrics关键字设置性能评估函数类似与目标函数, 只
- Python类的继承在OOP(ObjectOrientedProgramming)程序设计中,当我们定义一个class的时候,可以从某个现有
- 类的私有属性和方法Python是个开放的语言,默认情况下所有的属性和方法都是公开的 或者叫公有方法,不像C++和 Java中有明确的publ
- PDO::rollBackPDO::rollBack — 回滚一个事务(PHP 5 >= 5.1.0, PECL pdo >=
- 推荐阅读:JS iFrame加载慢怎么解决在项目中经常要动态添加iframe,然后再对添加的iframe进行相关操作,而往往iframe还没
- 说下防止PHPDDOS发包的方法 if (eregi("ddos-udp",$read)) { fputs($verbi
- 目录前言线程安全锁的作用Lock() 同步锁基本介绍使用方式死锁现象with语句RLock() 递归锁基本介绍使用方式with语句Condi