python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)
前言
該項(xiàng)目制作了兩個(gè)端口,管理員端和顧客用戶端,管理員端實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫中的數(shù)據(jù)表進(jìn)行訪問和增刪改查操作,數(shù)據(jù)可長期保存,并展示出來,方便超市管理員對(duì)超市商品的管理。顧客端實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫進(jìn)行訪問,并制作一個(gè)購物車模式,并對(duì)顧客選擇的商品進(jìn)行結(jié)算,方便顧客選擇商品,沒有制作對(duì)顧客的購物數(shù)據(jù)進(jìn)行長期保存(不想做了)。
此外,這也是一個(gè)相對(duì)比較完整的項(xiàng)目了呢,菜菜的我可是為了這個(gè)肝了不久呢,文章來之不易,好心人請(qǐng)你點(diǎn)贊關(guān)注一下,支持一下本博主吧!感謝!么么噠。
1.導(dǎo)入pymysql 模塊
通過命令提示符導(dǎo)入:輸入cmd 進(jìn)入,然后輸入
pip install pymysql
2.在python里連接mysql,并創(chuàng)建數(shù)據(jù)表 test1.py
2.1 連接數(shù)據(jù)庫
import pymysql # 連接數(shù)據(jù)庫 conn = pymysql.connect( host='localhost', user='root', password='123abc', charset='utf8' ) # 獲得游標(biāo) cursor = conn.cursor()
2.2 創(chuàng)建數(shù)據(jù)表,并輸入數(shù)據(jù)
# 創(chuàng)建數(shù)據(jù)庫 db_student = "create database if not exists dbtest" cursor.execute(db_student) # 創(chuàng)建水果表 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) # 插入數(shù)據(jù) 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 打開數(shù)據(jù)庫圖形化頁面工具,如有該表則說明創(chuàng)建成功(第六條數(shù)據(jù)是后面運(yùn)行代碼加上去的),也可以用命令提示符查找。
3.設(shè)計(jì)超市管理服務(wù)端代碼 test2.py
3.0 連接數(shù)據(jù)庫
import pymysql # 數(shù)據(jù)庫連接 def connect(): conn = pymysql.connect(host='localhost', port=3306, user='root', password='123abc', database='dbtest', #選擇數(shù)據(jù)庫 charset='utf8') # 獲取操作游標(biāo) cursor = conn.cursor() return {"conn": conn, "cursor": cursor}
3.1 超市管理員操作端,實(shí)現(xiàn)效果:能對(duì)數(shù)據(jù)庫表的數(shù)據(jù)進(jìn)行增刪查改,并長期保存。
3.1.1 對(duì)商品插入操作
#管理員操作,插入商品 def add_goods(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] stuID = int(input('請(qǐng)輸入要插入的商品編號(hào):')) stuName = input('請(qǐng)輸入要插入的商品名字:') stuPrice = input('請(qǐng)輸入要插入的商品價(jià)格:') add = cursor.execute('insert into fruits (stuID, stuName , stuPrice)\ values(%s,%s,%s)',(stuID, stuName ,stuPrice)) if add == 1: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 conn.commit() #把數(shù)據(jù)傳入數(shù)據(jù)庫 print('插入成功!') else: print('插入失?。?) show_commend() #返回show_commend()類
3.1.2 對(duì)商品進(jìn)行下架操作(刪除)
#刪除商品記錄 def delete_goods(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] stuID= int(input('輸入想要?jiǎng)h除商品的編號(hào):')) delete = cursor.execute('delete from fruits where stuID= {}' .format(stuID)) if delete == 1: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 conn.commit() #把數(shù)據(jù)傳入數(shù)據(jù)庫 print('刪除成功!') else: print('刪除失敗!') show_commend() #返回show_commend()類
3.1.3 對(duì)商品進(jìn)行單個(gè)查找操作(商品名查找方法,商品編號(hào)查找方法)
#管理員操作,查詢單個(gè)商品之按商品編號(hào)查詢 def g_by_id(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] choice_id = int(input('請(qǐng)輸入商品編號(hào):')) cursor.execute('select * from fruits where stuID=%s',(choice_id)) fruits = cursor.fetchall() #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 for j in fruits: print("==============================================") print('---商品編號(hào):{} 商品名稱:{} 商品價(jià)格:{}---' .format(j[0], j[1], j[2])) print('查詢成功') print("==============================================") #設(shè)計(jì)繼續(xù)執(zhí)行下一步操作代碼 re = input('是否繼續(xù)查詢(yes/no):') if re == 'yes': # 執(zhí)行yes返回g_by_name,no返回到操作頁面 g_by_id() else: show_commend() # 返回show_commend()類 #管理員操作,查詢單個(gè)商品之按商品名稱查詢(以防商品編號(hào)輸入錯(cuò)誤) def g_by_name(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] choose_name = input('請(qǐng)輸入商品名稱:') cursor.execute('select * from stu where name =%s',(choose_name)) students = cursor.fetchall() #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 for j in students: print("==============================================") print('---商品編號(hào):{} 商品名稱:{} 商品價(jià)格:{}---'.format(j[0], j[1], j[2])) print('查詢成功') print("==============================================") re = input('是否繼續(xù)查詢yes/no:') if re == 'yes': #執(zhí)行yes返回g_by_name,no返回到操作頁面 g_by_name() else: show_commend() #返回show_commend()類
3.1.4 修改商品(修改編號(hào),名稱,價(jià)格)
#管理員操作,修改商品 def update_goods(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] cur = int(input('請(qǐng)輸入想要修改的商品編號(hào):')) cursor.execute('select * from fruits where stuID = %s', (cur)) if cursor.fetchall() == []: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 print('未查找該商品的編號(hào){}'.format(cur)) # 設(shè)計(jì)繼續(xù)執(zhí)行下一步操作代碼 mc3 = input('是否重新查詢?(yes/no)') if mc3 != 'no': #執(zhí)行yes返回g_by_name,no返回到操作頁面 update_goods() else: show_commend() #返回show_commend()類 else: print('==============') print('1、修改商品編號(hào)') print('2、修改商品名稱') print('3、修改商品價(jià)格') print('==============') mc2 = int(input('請(qǐng)輸入對(duì)應(yīng)的操作號(hào):')) if mc2 == 1: stuID= input('請(qǐng)輸入修改后的商品編號(hào):') a = cursor.execute('update fruits set stuID = %s where stuID= %s', (stuID, cur)) if a == 1: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 conn.commit() #把數(shù)據(jù)傳入數(shù)據(jù)庫 print('修改成功!') else: print('修改失?。?) elif mc2 == 2: stuName = input('請(qǐng)輸入修改后的商品名稱:') a = cursor.execute('update fruits set stuName = %s where stuID = %s', (stuName, cur)) if a >= 1: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 conn.commit() #把數(shù)據(jù)傳入數(shù)據(jù)庫 print('修改成功!') else: print('修改失??!') elif mc2 == 3: stuPrice = int(input('請(qǐng)輸入修改后的商品價(jià)格:')) a = cursor.execute('update fruits set stuPrice= %s where stuID = %s', (stuPrice, cur)) if a >= 1: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 conn.commit() #把數(shù)據(jù)傳入數(shù)據(jù)庫 print('修改成功!') else: print('修改失?。?) else: pass # 占一個(gè)空位符 show_commend() #返回show_commend()類
3.1.5 查看超市全部商品
#管理員操作,查詢所有商品信息 def goods_all(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] cursor.execute('select * from fruits') fruits = cursor.fetchall() #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲 print("=============================================") print("商品表為:") print("=============================================") for j in fruits: print('---商品編號(hào):{}---商品名稱:{}---商品價(jià)格:{}---' .format(j[0], j[1], j[2])) print("=============================================") show_commend()
3.1.5 制作退出管理員頁面操作端的類
#退出管理員商品管理系統(tǒng) def end_goods(): print("已提出!") exit()
3.1.6 單個(gè)查詢商品方法的選擇器
goods_dict1={'a':g_by_name,'b':g_by_id} #管理員操作,選擇查詢單個(gè)商品的方法 def show_querycondition(): cmd=input("請(qǐng)輸入操作指令:輸入商品名稱查詢(a) 輸入商品編號(hào)查詢(b)\n") if cmd not in goods_dict1: print('輸入錯(cuò)誤!') else: goods_dict1[cmd]() #進(jìn)入cmd對(duì)應(yīng)的values輸出的類中
3.1.7 超市管理員選擇操作類型類
goods_dict2={'a':goods_all,'b':update_goods,'c':add_goods,'d':show_querycondition,'e':delete_goods,'i':end_goods} #商場工作人員對(duì)商品的增刪查改操作 def show_commend(): cmd=input("請(qǐng)輸入操作指令:查詢?nèi)可唐罚╝) 修改商品(b) 插入商品(c) 查詢單個(gè)商品(d) 刪除商品(e) 退出(i)\n") if cmd not in goods_dict2: print('輸入錯(cuò)誤!') Start() else: goods_dict2[cmd]() #進(jìn)入cmd對(duì)應(yīng)的values輸出的類中
3.2 顧客用戶操作端,實(shí)現(xiàn)效果:購物車模式,選取商品的種類數(shù)量,結(jié)算,不做長期保存.
3.2.1 將數(shù)據(jù)庫的表轉(zhuǎn)出并轉(zhuǎn)化成指定列表形式
def select_sql(): # 獲取操作游標(biāo) connection = connect() conn, cursor = connection['conn'], connection['cursor'] sql = "select * from fruits" try: #利用游標(biāo)查找數(shù)據(jù)表,如果數(shù)據(jù)庫中有此表捕獲,沒有報(bào)異常 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元組對(duì)象 goods=[] #利用該空列表把數(shù)據(jù)轉(zhuǎn)移出來 #通過遍歷把selct_sql元組對(duì)象轉(zhuǎn)成字典,再轉(zhuǎn)成列表加到goods列表里 for i in data: var = {'barcode': i[0], 'product': i[1], 'price': i[2]} #獲取數(shù)據(jù)轉(zhuǎn)成字典 li=[var] goods.extend(li) #把數(shù)據(jù)加到goods列表里 goods_list=[] #利用該空列表把數(shù)據(jù)轉(zhuǎn)移出來
3.2.2 超市顧客端首頁
#給顧客展示商店商品信息(進(jìn)入商店首頁) def show_list(): print('序號(hào)---------條形碼---------商品名稱---------單價(jià)---------數(shù)量---------小計(jì)') 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("請(qǐng)輸入要添加商品的條形碼:")) for i in goods: if barcode_add==i['barcode']: goods_list.append(i) numbers_add=int(input("請(qǐng)輸入要購買商品的數(shù)量")) 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("請(qǐng)輸入要修改商品的條形碼:")) numbers_edit=int(input("請(qǐng)輸入要修改商品的數(shù)量")) 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("請(qǐng)輸入要修改商品的條形碼:")) for i in goods_list: if barcode_delete==i['barcode']: goods_list.remove(i) show_list() #返回show_list類
3.2.6 結(jié)算購物車中的商品
#顧客操作,結(jié)算商品 def payment(): print('-'*100) show_list() print('-'*100) sum=0 for i in goods_list: sum=sum+i['sum_add'] print("總價(jià)為:",sum) print("請(qǐng)掃描!") print("歡迎下次光臨") exit()
3.2.7 制作顧客瀏覽超市商品類
#顧客操作,點(diǎn)擊瀏覽商品信息 def show_goods(): print("條碼------------商品名稱------------單價(jià)") 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("請(qǐng)輸入操作指令:添加(a) 修改(e) 刪除(d) 結(jié)算(p) 超市商品(s)\n") if cmd not in cmd_dict: print('輸入錯(cuò)誤!') else: cmd_dict[cmd]() #進(jìn)入cmd對(duì)應(yīng)的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)) # 轉(zhuǎn)換為一一對(duì)應(yīng)的列表 num = 0 # 定義一個(gè)開始為0的計(jì)數(shù)變量 while True: list_1 = input("請(qǐng)管理員姓名:") list_1=''.join(list_1.split()) #把輸入的空格去掉,保證在輸入時(shí)不會(huì)因?yàn)槊只蛎艽a字符串里有多余空格而報(bào)錯(cuò) l = list_1.split(",") # 字符串轉(zhuǎn)列表 list_2 = input("請(qǐng)輸入密碼:") #把輸入的空格去掉,保證在輸入時(shí)不會(huì)因?yàn)槊只蛎艽a字符串里有多余空格而報(bào)錯(cuò) list_2=''.join(list_2.split()) k = list_2.split(",") t = list(zip(l, k)) # 轉(zhuǎn)換為一一對(duì)應(yīng)的列表 c = [] # 定義一個(gè)空列表 for i in range(len(t)): c.append(0) for i in range(len(a)): # 對(duì)a列表進(jìn)行遍歷操作,如果a列表中的字符串有一個(gè)等于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里面是字符串類型,讓遍歷和類型轉(zhuǎn)換同步進(jìn)行 text1 = int(text1) # 把text1類型轉(zhuǎn)換為整型*(非0及1) if text1 == 1: print("登陸成功!") while True: show_commend() else: num += 1 if num < 3: print("用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入:") if num >= 3: print("用戶名或密碼已經(jīng)錯(cuò)誤3次,請(qǐng)稍后再試!") 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)) # 轉(zhuǎn)換為一一對(duì)應(yīng)的列表 num = 0 # 定義一個(gè)開始為0的計(jì)數(shù)變量 print("=========================================") print("顧客登錄頁面:") print("=========================================") while True: list_1 = input("請(qǐng)你的姓名:") list_1=''.join(list_1.split()) #把輸入的空格去掉,保證在輸入時(shí)不會(huì)因?yàn)槊只蛎艽a字符串里有多余空格而報(bào)錯(cuò) l = list_1.split(",") # 字符串轉(zhuǎn)列表 list_2 = input("請(qǐng)輸入密碼:") list_2=''.join(list_2.split()) #把輸入的空格去掉,保證在輸入時(shí)不會(huì)因?yàn)槊只蛎艽a字符串里有多余空格而報(bào)錯(cuò) k = list_2.split(",") t = list(zip(l, k)) # 轉(zhuǎn)換為一一對(duì)應(yīng)的列表 c = [] # 定義一個(gè)空列表 for i in range(len(t)): c.append(0) for i in range(len(a)): # 對(duì)a列表進(jìn)行遍歷操作,如果a列表中的字符串有一個(gè)等于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里面是字符串類型,讓遍歷和類型轉(zhuǎn)換同步進(jìn)行 text1 = int(text1) # 把text1類型轉(zhuǎn)換為整型*(非0及1) if text1 == 1: print("登陸成功!") print("歡迎光臨來到我的超市") print("以下是我的商品清單,請(qǐng)?zhí)暨x:") show_goods() print("還未購買商品") while True: shopping_commend() else: num += 1 if num < 3: print("用戶名或密碼錯(cuò)誤,請(qǐng)重新輸入:") if num >= 3: print("用戶名或密碼已經(jīng)錯(cuò)誤3次,請(qǐng)稍后再試!") break
3.3.3 起始頁登錄類,啟動(dòng)!
#起始頁面 def Start(): print("=========================================") print("歡迎來到XXX商場電子系統(tǒng)!") print("=========================================") use=int(input("顧客登錄請(qǐng)按1,商場管理員登錄請(qǐng)按2:")) if use==1: Client() else: Administrator() Start() #執(zhí)行Start類
4.實(shí)現(xiàn)效果(如下圖)
總結(jié)
到此這篇關(guān)于python操作mysql實(shí)現(xiàn)一個(gè)超市管理系統(tǒng)的文章就介紹到這了,更多相關(guān)python mysql超市管理系統(tǒng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3中關(guān)于cookie的創(chuàng)建與保存
今天小編就為大家分享一篇關(guān)于Python3中關(guān)于cookie的創(chuàng)建與保存的文章,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-10-10python 列表元素左右循環(huán)移動(dòng) 的多種解決方案
這篇文章主要介紹了python 列表元素左右循環(huán)移動(dòng) 的多種解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03matplotlib實(shí)戰(zhàn)之餅圖繪制詳解
餅圖,或稱餅狀圖,是一個(gè)劃分為幾個(gè)扇形的圓形統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制餅圖,需要的小伙伴可以參考下2023-08-08python 實(shí)現(xiàn)圖片修復(fù)(可用于去水?。?/a>
這篇文章主要介紹了python 實(shí)現(xiàn)圖片修復(fù)(可用于去水?。?,幫助大家更好的理解和使用opencv庫,感興趣的朋友可以了解下2020-11-11Python3合并兩個(gè)有序數(shù)組代碼實(shí)例
這篇文章主要介紹了Python3合并兩個(gè)有序數(shù)組代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python實(shí)現(xiàn)將絕對(duì)URL替換成相對(duì)URL的方法
這篇文章主要介紹了Python實(shí)現(xiàn)將絕對(duì)URL替換成相對(duì)URL的方法,涉及Python字符串操作及正則匹配的相關(guān)技巧,需要的朋友可以參考下2015-06-06解決Django部署設(shè)置Debug=False時(shí)xadmin后臺(tái)管理系統(tǒng)樣式丟失
這篇文章主要介紹了解決Django部署設(shè)置Debug=False時(shí)xadmin后臺(tái)管理系統(tǒng)樣式丟失的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04