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类

3.实现效果(如下图)

 

 

 

 

 

物联沃分享整理
物联沃-IOTWORD物联网 » python 操作mysql制作一个超市管理系统

发表评论