基于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 相关文章推荐
零基础写python爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
Python通过future处理并发问题
Oct 17 Python
利用numpy实现一、二维数组的拼接简单代码示例
Dec 15 Python
python获取服务器响应cookie的实例
Dec 28 Python
python 将大文件切分为多个小文件的实例
Jan 14 Python
pandas 时间格式转换的实现
Jul 06 Python
softmax及python实现过程解析
Sep 30 Python
python实现学生成绩测评系统
Jun 22 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
python的setattr函数实例用法
Dec 16 Python
matplotlib bar()实现百分比堆积柱状图
Feb 24 Python
python re模块和正则表达式
Mar 24 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
php接口与接口引用的深入解析
2013/08/09 PHP
PHP使用phpunit进行单元测试示例
2019/09/23 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
python调用shell的方法
2013/11/20 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
Python3实现zip分卷压缩过程解析
2019/10/09 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
测控技术与仪器个人求职信范文
2013/12/30 职场文书
组织关系转移介绍信
2014/01/16 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
科技开发中心办公室主任岗位责任制
2014/02/10 职场文书
新年抽奖获奖感言
2014/03/02 职场文书
检举信的格式及范文
2014/04/04 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
白岩松演讲
2014/05/21 职场文书
校庆口号
2014/06/20 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
校园安全广播稿范文
2014/09/25 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
人事任命通知书
2015/04/21 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
化妆品促销活动总结
2015/05/07 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
总结Pyinstaller打包的高级用法
2021/06/28 Python