python操作mysql实现一个超市管理系统
Huang st 人气:0前言
该项目制作了两个端口,管理员端和顾客用户端,管理员端实现了对数据库中的数据表进行访问和增删改查操作,数据可长期保存,并展示出来,方便超市管理员对超市商品的管理。顾客端实现了对数据库进行访问,并制作一个购物车模式,并对顾客选择的商品进行结算,方便顾客选择商品,没有制作对顾客的购物数据进行长期保存(不想做了)。
此外,这也是一个相对比较完整的项目了呢,菜菜的我可是为了这个肝了不久呢,文章来之不易,好心人请你点赞关注一下,支持一下本博主吧!感谢!么么哒。
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.实现效果(如下图)
总结
加载全部内容