python操作mysql实现一个超市管理系统
作者:Huang st
超市管理系统有管理员和普通用户两条分支,只需掌握Python基础语法,就可以完成这个项目,下面这篇文章主要给大家介绍了关于python操作mysql实现一个超市管理系统的相关资料,需要的朋友可以参考下
前言
该项目制作了两个端口,管理员端和顾客用户端,管理员端实现了对数据库中的数据表进行访问和增删改查操作,数据可长期保存,并展示出来,方便超市管理员对超市商品的管理。顾客端实现了对数据库进行访问,并制作一个购物车模式,并对顾客选择的商品进行结算,方便顾客选择商品,没有制作对顾客的购物数据进行长期保存(不想做了)。
此外,这也是一个相对比较完整的项目了呢,菜菜的我可是为了这个肝了不久呢,文章来之不易,好心人请你点赞关注一下,支持一下本博主吧!感谢!么么哒。
1.导入pymysql 模块
通过命令提示符导入:输入cmd 进入,然后输入
pip install pymysql
2.在python里连接mysql,并创建数据表 test1.py
2.1 连接数据库
import pymysql # 连接数据库 conn = pymysql.connect( host='localhost', user='root', password='123abc', charset='utf8' ) # 获得游标 cursor = conn.cursor()
2.2 创建数据表,并输入数据
# 创建数据库 db_student = "create database if not exists dbtest" cursor.execute(db_student) # 创建水果表 sql_use = 'use dbtest' cursor.execute(sql_use) sql_table = 'create table if not exists fruits (stuID int primary key, ' \ 'stuName varchar(20), stuPrice int)' cursor.execute(sql_table) # 插入数据 sql_one = "insert into fruits (stuID, stuName, stuPrice) values (%d, '%s', %d)" data1 = (1001, '香蕉', 20) data2 = (1002, '苹果', 21) data3 = (1003, '樱桃', 20) data4 = (1004, '凤梨', 19) data5 = (1005, '柑橘', 22) for i in [data1, data2, data3,data4, data5]: cursor.execute(sql_one % i) conn.commit()
2.3 打开数据库图形化页面工具,如有该表则说明创建成功(第六条数据是后面运行代码加上去的),也可以用命令提示符查找。
3.设计超市管理服务端代码 test2.py
3.0 连接数据库
import pymysql # 数据库连接 def connect(): conn = pymysql.connect(host='localhost', port=3306, user='root', password='123abc', database='dbtest', #选择数据库 charset='utf8') # 获取操作游标 cursor = conn.cursor() return {"conn": conn, "cursor": cursor}
3.1 超市管理员操作端,实现效果:能对数据库表的数据进行增删查改,并长期保存。
3.1.1 对商品插入操作
#管理员操作,插入商品 def add_goods(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] stuID = int(input('请输入要插入的商品编号:')) stuName = input('请输入要插入的商品名字:') stuPrice = input('请输入要插入的商品价格:') add = cursor.execute('insert into fruits (stuID, stuName , stuPrice)\ values(%s,%s,%s)',(stuID, stuName ,stuPrice)) if add == 1: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 conn.commit() #把数据传入数据库 print('插入成功!') else: print('插入失败!') show_commend() #返回show_commend()类
3.1.2 对商品进行下架操作(删除)
#删除商品记录 def delete_goods(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] stuID= int(input('输入想要删除商品的编号:')) delete = cursor.execute('delete from fruits where stuID= {}' .format(stuID)) if delete == 1: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 conn.commit() #把数据传入数据库 print('删除成功!') else: print('删除失败!') show_commend() #返回show_commend()类
3.1.3 对商品进行单个查找操作(商品名查找方法,商品编号查找方法)
#管理员操作,查询单个商品之按商品编号查询 def g_by_id(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] choice_id = int(input('请输入商品编号:')) cursor.execute('select * from fruits where stuID=%s',(choice_id)) fruits = cursor.fetchall() #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 for j in fruits: print("==============================================") print('---商品编号:{} 商品名称:{} 商品价格:{}---' .format(j[0], j[1], j[2])) print('查询成功') print("==============================================") #设计继续执行下一步操作代码 re = input('是否继续查询(yes/no):') if re == 'yes': # 执行yes返回g_by_name,no返回到操作页面 g_by_id() else: show_commend() # 返回show_commend()类 #管理员操作,查询单个商品之按商品名称查询(以防商品编号输入错误) def g_by_name(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] choose_name = input('请输入商品名称:') cursor.execute('select * from stu where name =%s',(choose_name)) students = cursor.fetchall() #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 for j in students: print("==============================================") print('---商品编号:{} 商品名称:{} 商品价格:{}---'.format(j[0], j[1], j[2])) print('查询成功') print("==============================================") re = input('是否继续查询yes/no:') if re == 'yes': #执行yes返回g_by_name,no返回到操作页面 g_by_name() else: show_commend() #返回show_commend()类
3.1.4 修改商品(修改编号,名称,价格)
#管理员操作,修改商品 def update_goods(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] cur = int(input('请输入想要修改的商品编号:')) cursor.execute('select * from fruits where stuID = %s', (cur)) if cursor.fetchall() == []: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 print('未查找该商品的编号{}'.format(cur)) # 设计继续执行下一步操作代码 mc3 = input('是否重新查询?(yes/no)') if mc3 != 'no': #执行yes返回g_by_name,no返回到操作页面 update_goods() else: show_commend() #返回show_commend()类 else: print('==============') print('1、修改商品编号') print('2、修改商品名称') print('3、修改商品价格') print('==============') mc2 = int(input('请输入对应的操作号:')) if mc2 == 1: stuID= input('请输入修改后的商品编号:') a = cursor.execute('update fruits set stuID = %s where stuID= %s', (stuID, cur)) if a == 1: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 conn.commit() #把数据传入数据库 print('修改成功!') else: print('修改失败!') elif mc2 == 2: stuName = input('请输入修改后的商品名称:') a = cursor.execute('update fruits set stuName = %s where stuID = %s', (stuName, cur)) if a >= 1: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 conn.commit() #把数据传入数据库 print('修改成功!') else: print('修改失败!') elif mc2 == 3: stuPrice = int(input('请输入修改后的商品价格:')) a = cursor.execute('update fruits set stuPrice= %s where stuID = %s', (stuPrice, cur)) if a >= 1: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 conn.commit() #把数据传入数据库 print('修改成功!') else: print('修改失败!') else: pass # 占一个空位符 show_commend() #返回show_commend()类
3.1.5 查看超市全部商品
#管理员操作,查询所有商品信息 def goods_all(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] cursor.execute('select * from fruits') fruits = cursor.fetchall() #利用游标查找数据表,如果数据库中有此表捕获 print("=============================================") print("商品表为:") print("=============================================") for j in fruits: print('---商品编号:{}---商品名称:{}---商品价格:{}---' .format(j[0], j[1], j[2])) print("=============================================") show_commend()
3.1.5 制作退出管理员页面操作端的类
#退出管理员商品管理系统 def end_goods(): print("已提出!") exit()
3.1.6 单个查询商品方法的选择器
goods_dict1={'a':g_by_name,'b':g_by_id} #管理员操作,选择查询单个商品的方法 def show_querycondition(): cmd=input("请输入操作指令:输入商品名称查询(a) 输入商品编号查询(b)\n") if cmd not in goods_dict1: print('输入错误!') else: goods_dict1[cmd]() #进入cmd对应的values输出的类中
3.1.7 超市管理员选择操作类型类
goods_dict2={'a':goods_all,'b':update_goods,'c':add_goods,'d':show_querycondition,'e':delete_goods,'i':end_goods} #商场工作人员对商品的增删查改操作 def show_commend(): cmd=input("请输入操作指令:查询全部商品(a) 修改商品(b) 插入商品(c) 查询单个商品(d) 删除商品(e) 退出(i)\n") if cmd not in goods_dict2: print('输入错误!') Start() else: goods_dict2[cmd]() #进入cmd对应的values输出的类中
3.2 顾客用户操作端,实现效果:购物车模式,选取商品的种类数量,结算,不做长期保存.
3.2.1 将数据库的表转出并转化成指定列表形式
def select_sql(): # 获取操作游标 connection = connect() conn, cursor = connection['conn'], connection['cursor'] sql = "select * from fruits" try: #利用游标查找数据表,如果数据库中有此表捕获,没有报异常 cursor.execute(sql) results = cursor.fetchall() results=list(results) return results except Exception as e: #捕获异常 raise e finally: cursor.close() conn.close() data=select_sql() #拿到selct_sql元组对象 goods=[] #利用该空列表把数据转移出来 #通过遍历把selct_sql元组对象转成字典,再转成列表加到goods列表里 for i in data: var = {'barcode': i[0], 'product': i[1], 'price': i[2]} #获取数据转成字典 li=[var] goods.extend(li) #把数据加到goods列表里 goods_list=[] #利用该空列表把数据转移出来
3.2.2 超市顾客端首页
#给顾客展示商店商品信息(进入商店首页) def show_list(): print('序号---------条形码---------商品名称---------单价---------数量---------小计') for j in range(len(goods_list)): print("{0:<12}{1:<15}{2:<14}{3:<12}{4:<12}{5:<12}". format(j, goods_list[j].get('barcode'), goods_list[j].get('product'), goods_list[j].get('price'), goods_list[j].get('number_add'), goods_list[j]. get('sum_add')))
3.2.3 将商品添加到购物车
#顾客操作,将商品添加到购物车 def add(): barcode_add=int(input("请输入要添加商品的条形码:")) for i in goods: if barcode_add==i['barcode']: goods_list.append(i) numbers_add=int(input("请输入要购买商品的数量")) sum_add=numbers_add*i.get('price') i['number_add']=numbers_add i['sum_add']=sum_add show_list() #返回show_list类
3.2.4 修改购物车中的商品
#顾客操作,修改购物车中的商品信息 def edit(): barcode_edit= int(input("请输入要修改商品的条形码:")) numbers_edit=int(input("请输入要修改商品的数量")) for i in goods_list: if barcode_edit==i['barcode']: i['sum_add']=numbers_edit*i.get('price') i['number_add']=numbers_edit show_list() #返回show_list类
3.2.5 删除购物车中的商品
#顾客操作,删除购物车中的商品 def delete(): barcode_delete = int(input("请输入要修改商品的条形码:")) for i in goods_list: if barcode_delete==i['barcode']: goods_list.remove(i) show_list() #返回show_list类
3.2.6 结算购物车中的商品
#顾客操作,结算商品 def payment(): print('-'*100) show_list() print('-'*100) sum=0 for i in goods_list: sum=sum+i['sum_add'] print("总价为:",sum) print("请扫描!") print("欢迎下次光临") exit()
3.2.7 制作顾客浏览超市商品类
#顾客操作,点击浏览商品信息 def show_goods(): print("条码------------商品名称------------单价") for i in range(len(goods)): print("{0:<15}{1:<17}{2:<}".format(goods[i].get('barcode'),goods[i].get('product'),goods[i].get('price'))) print('-'*100)
3.2.8 制作顾客命令操作类
cmd_dict={'a':add,'e':edit,'d':delete,'p':payment,'s':show_goods} #顾客操作指令 def shopping_commend(): cmd=input("请输入操作指令:添加(a) 修改(e) 删除(d) 结算(p) 超市商品(s)\n") if cmd not in cmd_dict: print('输入错误!') else: cmd_dict[cmd]() #进入cmd对应的values输出的类中
3.3 登录端(起始页登录(管理员端登录,顾客端登录))
3.3.1 管理员端登录类
#商场管理员登录 def Administrator(): print("=========================================") print("管理员登录页面:") print("=========================================") root = ['aaa', 'bbb', 'ccc', 'ddd', 'fff'] root_password = ['123', '456', '789', '223', '245'] a = list(zip(root, root_password)) # 转换为一一对应的列表 num = 0 # 定义一个开始为0的计数变量 while True: list_1 = input("请管理员姓名:") list_1=''.join(list_1.split()) #把输入的空格去掉,保证在输入时不会因为名字或密码字符串里有多余空格而报错 l = list_1.split(",") # 字符串转列表 list_2 = input("请输入密码:") #把输入的空格去掉,保证在输入时不会因为名字或密码字符串里有多余空格而报错 list_2=''.join(list_2.split()) k = list_2.split(",") t = list(zip(l, k)) # 转换为一一对应的列表 c = [] # 定义一个空列表 for i in range(len(t)): c.append(0) for i in range(len(a)): # 对a列表进行遍历操作,如果a列表中的字符串有一个等于t列表,加入c中 for j in range(len(t)): if a[i] == t[j]: c[j] = c[j] + 1 text1 = ''.join(str(i) for i in c) # 由于join里面是字符串类型,让遍历和类型转换同步进行 text1 = int(text1) # 把text1类型转换为整型*(非0及1) if text1 == 1: print("登陆成功!") while True: show_commend() else: num += 1 if num < 3: print("用户名或密码错误,请重新输入:") if num >= 3: print("用户名或密码已经错误3次,请稍后再试!") break
3.3.2 顾客端登录类
#顾客登录 def Client(): name= ['aaa', 'bbb', 'ccc', 'ddd', 'fff'] name_password = ['123', '456', '789', '223', '245'] a = list(zip(name, name_password)) # 转换为一一对应的列表 num = 0 # 定义一个开始为0的计数变量 print("=========================================") print("顾客登录页面:") print("=========================================") while True: list_1 = input("请你的姓名:") list_1=''.join(list_1.split()) #把输入的空格去掉,保证在输入时不会因为名字或密码字符串里有多余空格而报错 l = list_1.split(",") # 字符串转列表 list_2 = input("请输入密码:") list_2=''.join(list_2.split()) #把输入的空格去掉,保证在输入时不会因为名字或密码字符串里有多余空格而报错 k = list_2.split(",") t = list(zip(l, k)) # 转换为一一对应的列表 c = [] # 定义一个空列表 for i in range(len(t)): c.append(0) for i in range(len(a)): # 对a列表进行遍历操作,如果a列表中的字符串有一个等于t列表,加入c中 for j in range(len(t)): if a[i] == t[j]: c[j] = c[j] + 1 text1 = ''.join(str(i) for i in c) # 由于join里面是字符串类型,让遍历和类型转换同步进行 text1 = int(text1) # 把text1类型转换为整型*(非0及1) if text1 == 1: print("登陆成功!") print("欢迎光临来到我的超市") print("以下是我的商品清单,请挑选:") show_goods() print("还未购买商品") while True: shopping_commend() else: num += 1 if num < 3: print("用户名或密码错误,请重新输入:") if num >= 3: print("用户名或密码已经错误3次,请稍后再试!") break
3.3.3 起始页登录类,启动!
#起始页面 def Start(): print("=========================================") print("欢迎来到XXX商场电子系统!") print("=========================================") use=int(input("顾客登录请按1,商场管理员登录请按2:")) if use==1: Client() else: Administrator() Start() #执行Start类
4.实现效果(如下图)
总结
到此这篇关于python操作mysql实现一个超市管理系统的文章就介绍到这了,更多相关python mysql超市管理系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!