基于Python实现的购物商城管理系统


Posted in Python onApril 27, 2021

完整项目地址:

https://github.com/kongxiangchx/Shopping-mall-management-system

简介

本项目使用Python语言编写,实现了顾客端和商家端。

功能

  • 店主功能:注册、登录、修改店铺信息、添加商品、删除商品、修改商品、查找商品、查看交易记录。
  • 顾客功能:注册、登录、修改收货信息、查找商品、购买商品、查看交易记录、取消订单。

商家端

  • shopMain.py:编写界面上组件的功能,并通过调用send_data.py向服务器发送相应的请求。
  • shop :存放商家端的界面代码。
  • ui1 :存放商家端的ui文件,使用qtdesigner设计。
  • send_data.py 将数据封装成json之后发给服务器。

顾客端

  • customerMain.py:编写界面上组件的功能,并通过调用send_data.py向服务器发送相应的请求。
  • customer :存放顾客端的界面代码。
  • ui1 :存放顾客端的ui文件,使用qtdesigner设计。
  • send_data.py 将数据封装成json之后发给服务器。

服务器端

  • server.py:主要用来处理商家和顾客发来的请求,并调用mysql_op对数据库进行操作。
  • mysql_op.py:处理商家和顾客对数据库的操作。

主要代码

shopMain.py

import sys
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
import shop.register_window
from shop.register_window import *
from shop.login_window import *
from shop.shop_main import *
from shop.add_goods import *
from shop.view_goods import *
from shop.change_goods import *
from shop.update_goods import *
from shop.view_trade import *
from shop.shop_info import *
from send_data import *


class Register(QMainWindow, Ui_register_window):
    def __init__(self, parent=None):
        super(Register, self).__init__(parent)
        self.setupUi(self)
        self.reg_bt.clicked.connect(self.click1)
        self.tologin.clicked.connect(self.click2)

    def click1(self):
        username = self.username.text()
        pass1 = self.pass1.text()
        pass2 = self.pass2.text()
        shop_name = self.shop_name.text()
        phone = self.phone.text()
        addr = self.addr.currentText()
        if username == '' or pass1 == '' or shop_name == '' or phone == '' or addr == '':
            QMessageBox.information(self, "注册", "店铺信息不能为空", QMessageBox.Yes)
            return
        if pass1 != pass2:
            QMessageBox.information(self, "注册", "两次密码不同", QMessageBox.Yes)
            return
        data = {'id': 'shop', 'type': 'register', 'user': username,
                'passwd': pass1, 'shop_name': shop_name, 'phone': phone, 'addr': addr}
        s = Send_data()
        recv = s.message(data)
        s.close()
        if recv['result'] == 'success':
            QMessageBox.information(self, "注册", "注册成功", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "注册", "注册失败", QMessageBox.Yes)

    def click2(self):
        myWin1.hide()
        myWin2.show()


class Login(QMainWindow, Ui_login_window):
    def __init__(self, parent=None):
        super(Login, self).__init__(parent)
        self.setupUi(self)
        self.login_bt.clicked.connect(self.click1)
        self.toreg.clicked.connect(self.click2)

    def click1(self):
        global user
        username = self.username.text()
        password = self.password.text()
        if username == '' or password == '':
            QMessageBox.information(self, "登录", "用户名和密码不能为空", QMessageBox.Yes)
            return
        data = {'id': 'shop', 'type': 'login',
                'user': username, 'passwd': password}
        s = Send_data()
        recv = s.message(data)
        s.close()
        if recv['result'] == 'success':
            QMessageBox.information(self, "登录", "登录成功", QMessageBox.Yes)
            user = username
            myWin2.hide()
            myWin3.show()
        else:
            QMessageBox.information(self, "登录", "登录失败", QMessageBox.Yes)

    def click2(self):
        myWin2.hide()
        myWin1.show()


class Mainwin(QMainWindow, Ui_shop_main):
    def __init__(self, parent=None):
        super(Mainwin, self).__init__(parent)
        self.setupUi(self)
        self.add_goods.clicked.connect(self.click1)
        self.view_goods.clicked.connect(self.click2)
        self.change_goods.clicked.connect(self.click3)
        self.view_trade.clicked.connect(self.click4)
        self.shop_info.clicked.connect(self.click5)

    def click1(self):
        myWin4.show()

    def click2(self):
        myWin5.load()
        myWin5.show()

    def click3(self):
        myWin6.load()
        myWin6.show()

    def click4(self):
        myWin7.show()

    def click5(self):
        myWin8.load()
        myWin8.show()


class Addgoods(QMainWindow, Ui_add_goods):
    global user

    def __init__(self, parent=None):
        super(Addgoods, self).__init__(parent)
        self.setupUi(self)
        self.tomain.clicked.connect(self.click1)
        self.add_bt.clicked.connect(self.click2)

    def click1(self):
        self.hide()

    def click2(self):
        goods_name = self.goods_name.text()
        goods_type = self.goods_type.currentText()
        goods_prices = float(self.goods_prices.text())
        goods_rest = int(self.goods_rest.text())
        data = {'id': 'shop', 'user': user, 'type': 'add_goods', 'goods_name': goods_name,
                'goods_type': goods_type, 'goods_prices': goods_prices, 'goods_rest': goods_rest}
        s = Send_data()
        recv = s.message(data)
        if recv['result'] == 'success':
            QMessageBox.information(self, "添加商品", "添加成功", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "添加商品", "添加失败", QMessageBox.Yes)
        s.close()


class Viewgoods(QMainWindow, Ui_view_goods):
    global user

    def __init__(self, parent=None):
        super(Viewgoods, self).__init__(parent)
        self.setupUi(self)
        self.tomain.clicked.connect(self.click1)
        self.ser_bt.clicked.connect(self.click2)

    def click1(self):
        self.hide()

    def click2(self):
        goods_name = self.goods_name.text()
        goods_type = self.goods_type.currentText()
        data = {'id': 'shop', 'type': 'view_goods', 'user': user,
                'goods_name': goods_name, 'goods_type': goods_type}
        s = Send_data()
        recv = s.message(data)
        s.close()
        l1 = len(recv['result'])
        self.model = QStandardItemModel(l1, 5)
        self.model.setHorizontalHeaderLabels(['名称', '类型', '价格', '库存', '已售'])
        for i in range(l1):
            for j in range(5):
                item = QStandardItem('%s' % (recv['result'][i][j]))
                self.model.setItem(i, j, item)
        self.goods.setModel(self.model)

    def load(self):
        self.model = QStandardItemModel(0, 5)
        self.model.setHorizontalHeaderLabels(['名称', '类型', '价格', '库存', '已售'])
        self.goods.setModel(self.model)


class Changegoods(QMainWindow, Ui_change_goods):
    def __init__(self, parent=None):
        super(Changegoods, self).__init__(parent)
        self.setupUi(self)
        self.tomain.clicked.connect(self.click1)
        self.delete_bt.clicked.connect(self.click2)
        self.toupdate.clicked.connect(self.click3)

    def click1(self):
        self.hide()

    def click2(self):
        goods_name = self.goods_name.currentText()
        if goods_name == '':
            return
        data = {'id': 'shop', 'type': 'delete_goods',
                'user': user, 'goods_name': goods_name}
        # print(json.dumps(data))
        s = Send_data()
        recv = s.message(data)
        s.close()
        if recv['result'] == 'success':
            self.load()
            QMessageBox.information(self, "删除商品", "删除成功", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "删除商品", "删除失败", QMessageBox.Yes)

    def click3(self):
        goods_name = self.goods_name.currentText()
        # print(goods_name)
        if goods_name != '':
            myWin9.load(goods_name)
            myWin9.show()

    def load(self):
        data = {'id': 'shop', 'type': 'select_goods', 'user': user}
        s = Send_data()
        recv = s.message(data)
        s.close()
        # print(recv['result'])
        l1 = len(recv['result'])
        self.goods_name.clear()
        for i in range(l1):
            self.goods_name.addItem(recv['result'][i][0])


class Updategoods(QMainWindow, Ui_update_goods):
    def __init__(self, parent=None):
        super(Updategoods, self).__init__(parent)
        self.setupUi(self)
        self.tofront.clicked.connect(self.click1)
        self.update_bt.clicked.connect(self.click2)

    def click1(self):
        self.hide()

    def click2(self):
        old_goods_name = self.old_goods_name
        goods_name = self.goods_name.text()
        goods_type = self.goods_type.currentText()
        goods_prices = float(self.goods_prices.text())
        goods_rest = int(self.goods_rest.text())
        data = {'id': 'shop', 'type': 'update_goods', 'user': user, 'old_goods_name': old_goods_name,
                'goods_name': goods_name, 'goods_type': goods_type, 'goods_prices': goods_prices, 'goods_rest': goods_rest}
        s = Send_data()
        recv = s.message(data)
        s.close()
        if recv['result'] == 'success':
            self.hide()
            myWin6.load()
            QMessageBox.information(self, "修改商品", "修改成功", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "修改商品", "修改失败", QMessageBox.Yes)

    def load(self, goods_name):
        self.old_goods_name = goods_name
        data = {'id': 'shop', 'type': 'select_goodsinfo',
                'user': user, 'goods_name': goods_name}
        # print(json.dumps(data))
        s = Send_data()
        recv = s.message(data)
        s.close()
        # print(recv['result'])
        self.goods_name.setText(recv['result'][0])
        self.goods_type.setCurrentText(recv['result'][1])
        self.goods_prices.setValue(recv['result'][2])
        self.goods_rest.setValue(recv['result'][3])


class Viewtrade(QMainWindow, Ui_view_trade):
    def __init__(self, parent=None):
        super(Viewtrade, self).__init__(parent)
        self.setupUi(self)
        self.tomain.clicked.connect(self.click1)
        self.ser_bt.clicked.connect(self.click2)

    def click1(self):
        self.hide()

    def click2(self):
        goods_name = self.goods_name.text()
        goods_type = self.goods_type.currentText()
        data = {'id': 'shop', 'type': 'view_trade', 'user': user,
                'goods_name': goods_name, 'goods_type': goods_type}
        s = Send_data()
        recv = s.message(data)
        s.close()
        # print(recv['result'])
        l1 = len(recv['result'])
        self.model = QStandardItemModel(l1, 8)
        self.model.setHorizontalHeaderLabels(
            ['商品名称', '商品类型', '交易数量', '交易金额', '交易时间', '顾客', '联系方式', '收货地址'])
        for i in range(l1):
            for j in range(8):
                item = QStandardItem('%s' % (recv['result'][i][j]))
                self.model.setItem(i, j, item)
        self.trade.setModel(self.model)

    def load(self):
        self.model = QStandardItemModel(0, 8)
        self.model.setHorizontalHeaderLabels(
            ['商品名称', '商品类型', '交易数量', '交易金额', '交易时间', '顾客', '联系方式', '收货地址'])
        self.trade.setModel(self.model)


class Shopinfo(QMainWindow, Ui_shop_info):
    def __init__(self, parent=None):
        super(Shopinfo, self).__init__(parent)
        self.setupUi(self)
        self.tomain.clicked.connect(self.click1)
        self.change_bt.clicked.connect(self.click2)

    def click1(self):
        self.hide()

    def click2(self):
        pass1 = self.pass1.text()
        pass2 = self.pass2.text()
        shop_name = self.shop_name.text()
        phone = self.phone.text()
        addr = self.addr.currentText()
        data = {'id': 'shop', 'type': 'update_shop', 'user': user,
                'passwd': pass1, 'shop_name': shop_name, 'phone': phone, 'addr': addr}
        s = Send_data()
        recv = s.message(data)
        s.close()
        if recv['result'] == 'success':
            QMessageBox.information(self, "修改店铺信息", "修改成功", QMessageBox.Yes)
        else:
            QMessageBox.information(self, "修改店铺信息", "修改失败", QMessageBox.Yes)
        self.load()

    def load(self):
        data = {'id': 'shop', 'type': 'shop_info', 'user': user}
        s = Send_data()
        recv = s.message(data)
        s.close()
        self.username.setText(recv['result'][0])
        self.username.setFocusPolicy(QtCore.Qt.NoFocus)
        self.pass1.setText(recv['result'][1])
        self.pass2.setText(recv['result'][1])
        self.shop_name.setText(recv['result'][2])
        self.phone.setText(recv['result'][3])
        self.addr.setCurrentText(recv['result'][4])
        self.shop_time.setText(recv['result'][5])
        self.shop_time.setFocusPolicy(QtCore.Qt.NoFocus)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    user = ""
    myWin1 = Register()
    myWin1.show()
    myWin2 = Login()
    myWin3 = Mainwin()
    myWin4 = Addgoods()
    # myWin4.show()
    myWin5 = Viewgoods()
    # myWin5.show()
    myWin6 = Changegoods()
    # myWin6.show()
    myWin7 = Viewtrade()
    # myWin7.show()
    myWin8 = Shopinfo()
    # myWin8.show()
    myWin9 = Updategoods()
    if app.exec_() == 0:
        sys.exit(0)

代码较多不便全部放出,请自行下载或克隆仓库。

以上就是基于Python实现的购物商城管理系统的详细内容,更多关于python 购物商城管理系统的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
在python里协程使用同步锁Lock的实例
Feb 19 Python
Python实现FM算法解析
Jun 18 Python
python实现的生成word文档功能示例
Aug 23 Python
python构造函数init实例方法解析
Jan 19 Python
Python unittest 自动识别并执行测试用例方式
Mar 09 Python
python3安装OCR识别库tesserocr过程图解
Apr 02 Python
OpenCV Python实现图像指定区域裁剪
Mar 12 Python
python实现逻辑回归的示例
Oct 09 Python
python turtle绘图命令及案例
Nov 23 Python
详解用Python把PDF转为Word方法总结
python实现的web监控系统
python opencv人脸识别考勤系统的完整源码
Apr 26 #Python
python实现监听键盘
Apr 26 #Python
python如何做代码性能分析
Apr 26 #Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 #Python
python如何进行基准测试
Apr 26 #Python
You might like
人族 TERRAN 概述
2020/03/14 星际争霸
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
PHP CURL使用详解
2019/03/21 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
Vue.js实战之Vuex的入门教程
2017/04/01 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
js实现的在本地预览图片功能示例
2019/11/09 Javascript
Vue监听滚动实现锚点定位(双向)示例
2019/11/13 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
[01:25:38]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第一场 1月19日
2021/03/11 DOTA
Python变量和字符串详解
2017/04/29 Python
Python中单例模式总结
2018/02/20 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
美国知名的家庭连锁百货商店:Boscov’s
2017/07/27 全球购物
英国领先的男装设计师服装购物网站:Mainline Menswear
2018/02/04 全球购物
荷兰手表网站:Watch2Day
2018/07/02 全球购物
如何保障Web服务器安全
2014/05/05 面试题
2014年乡镇植树节活动方案
2014/02/28 职场文书
优秀员工推荐信
2014/05/10 职场文书
大学生求职信
2014/06/17 职场文书
检举信的写法
2019/04/10 职场文书
工作简历的自我评价
2019/05/16 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang
原生JavaScript实现简单五子棋游戏
2021/06/28 Javascript