基于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装饰器基础详解
Mar 09 Python
使用pandas中的DataFrame数据绘制柱状图的方法
Apr 10 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
python运行时强制刷新缓冲区的方法
Jan 14 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
python实现自动化上线脚本的示例
Jul 01 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
Aug 28 Python
flask框架自定义url转换器操作详解
Jan 25 Python
python 录制系统声音的示例
Dec 21 Python
10张动图学会python循环与递归问题
Feb 06 Python
python实现图片转字符画
Feb 19 Python
Python使用BeautifulSoup4修改网页内容
May 20 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
使用无限生命期Session的方法
2006/10/09 PHP
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
Windows下php+mysql5.7配置教程
2017/05/16 PHP
完美解决Thinkphp3.2中插入相同数据的问题
2017/08/01 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
判断一个变量是数组Array类型的方法
2013/09/16 Javascript
jQuery写fadeTo示例代码
2014/02/21 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
js运动动画的八个知识点
2015/03/12 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
react-native DatePicker日期选择组件的实现代码
2017/09/12 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
JS实现页面侧边栏效果探究
2021/01/08 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
[46:14]完美世界DOTA2联赛PWL S3 Magma vs INK ICE 第一场 12.11
2020/12/16 DOTA
Python实现合并字典的方法
2015/07/07 Python
python操作oracle的完整教程分享
2018/01/30 Python
Django开发中的日志输出的方法
2018/07/02 Python
Python中logging日志库实例详解
2020/02/19 Python
新加坡时尚网上购物:Zalora新加坡
2016/07/26 全球购物
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
struct与class的区别
2014/02/03 面试题
房地产管理毕业生自荐信
2013/11/04 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
年会搞笑主持词串词
2014/03/24 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
python实现自动化群控的步骤
2021/04/11 Python
SQL之各种join小结详细讲解
2021/08/04 MySQL