python实现超市进销存管理系统

yizhihongxing

Python实现超市进销存管理系统攻略

1. 系统设计

超市进销存管理系统主要包含以下几个模块:

  • 商品管理
  • 进货管理
  • 销售管理
  • 库存管理
  • 报表统计

其中,商品管理模块主要负责商品的添加、修改、删除和查询;进货管理模块主要负责进货单的添加、查询以及进货单与商品库存的更新;销售管理模块主要负责销售单的添加、查询以及销售单与商品库存的更新;库存管理模块主要负责商品库存的查询和更新;报表统计模块主要负责商品销售情况的统计和报表生成。

2. 数据库设计

为了方便管理和操作,我们需要使用数据库来保存商品、进货单、销售单和库存等数据。

在本系统中,我们采用SQLite作为数据库引擎,使用Python标准库中的sqlite3模块来操作数据库。

数据表设计如下:

商品表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 商品编号
name TEXT NOT NULL 商品名称
price REAL NOT NULL 商品单价

进货单表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 进货单编号
date TEXT NOT NULL 进货日期(格式为YYYY-MM-DD)

进货详情表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 进货单详情编号
purchase_id INTEGER NOT NULL 进货单编号
sku_id INTEGER NOT NULL 商品编号
quantity INTEGER NOT NULL 进货数量
price REAL NOT NULL 商品单价

销售单表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 销售单编号
date TEXT NOT NULL 销售日期(格式为YYYY-MM-DD)

销售详情表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 销售单详情编号
sales_id INTEGER NOT NULL 销售单编号
sku_id INTEGER NOT NULL 商品编号
quantity INTEGER NOT NULL 销售数量
price REAL NOT NULL 商品单价

库存表

字段名 数据类型 约束条件 说明
id INTEGER PRIMARY KEY 库存编号
sku_id INTEGER NOT NULL 商品编号
quantity INTEGER NOT NULL 库存数量

3. Python代码实现

3.1. 数据库连接

import sqlite3

conn = sqlite3.connect("inventory.db")

3.2. 商品管理

def add_item(name, price):
    cursor = conn.cursor()
    cursor.execute("INSERT INTO item(name, price) VALUES (?, ?)", (name, price))
    conn.commit()

def edit_item(id, name, price):
    cursor = conn.cursor()
    cursor.execute("UPDATE item SET name=?, price=? WHERE id=?", (name, price, id))
    conn.commit()

def delete_item(id):
    cursor = conn.cursor()
    cursor.execute("DELETE FROM item WHERE id=?", (id,))
    conn.commit()

def search_item(id=None, name=None):
    cursor = conn.cursor()
    if id is not None:
        cursor.execute("SELECT * FROM item WHERE id=?", (id,))
    elif name is not None:
        cursor.execute("SELECT * FROM item WHERE name LIKE ?", ("%"+name+"%",))
    else:
        cursor.execute("SELECT * FROM item")
    return cursor.fetchall()

3.3. 进货管理

def add_purchase(date, details):
    cursor = conn.cursor()
    cursor.execute("INSERT INTO purchase(date) VALUES (?)", (date,))
    purchase_id = cursor.lastrowid
    for sku_id, quantity, price in details:
        # Update inventory
        cursor.execute("SELECT quantity FROM inventory WHERE sku_id=?", (sku_id,))
        row = cursor.fetchone()
        if row is not None:
            quantity += row[0]
            cursor.execute("UPDATE inventory SET quantity=? WHERE sku_id=?", (quantity, sku_id))
        else:
            cursor.execute("INSERT INTO inventory(sku_id, quantity) VALUES (?, ?)", (sku_id, quantity))
        # Add purchase detail
        cursor.execute("INSERT INTO purchase_detail(purchase_id, sku_id, quantity, price) VALUES (?, ?, ?, ?)", (purchase_id, sku_id, quantity, price))
    conn.commit()

def search_purchase(id=None, date=None):
    cursor = conn.cursor()
    if id is not None:
        cursor.execute("SELECT * FROM purchase WHERE id=?", (id,))
    elif date is not None:
        cursor.execute("SELECT * FROM purchase WHERE date=?", (date,))
    else:
        cursor.execute("SELECT * FROM purchase")
    return cursor.fetchall()

def get_purchase_details(id):
    cursor = conn.cursor()
    cursor.execute("SELECT detail.id, item.name, detail.quantity, detail.price FROM purchase_detail detail JOIN item ON detail.sku_id=item.id WHERE detail.purchase_id=?", (id,))
    return cursor.fetchall()

3.4. 销售管理

def add_sale(date, details):
    cursor = conn.cursor()
    cursor.execute("INSERT INTO sale(date) VALUES (?)", (date,))
    sale_id = cursor.lastrowid
    for sku_id, quantity, price in details:
        # Update inventory
        cursor.execute("SELECT quantity FROM inventory WHERE sku_id=?", (sku_id,))
        row = cursor.fetchone()
        if row is not None and quantity <= row[0]:
            quantity = row[0] - quantity
            cursor.execute("UPDATE inventory SET quantity=? WHERE sku_id=?", (quantity, sku_id))
        else:
            raise ValueError("Insufficient quantity for sale")
        # Add sale detail
        cursor.execute("INSERT INTO sale_detail(sale_id, sku_id, quantity, price) VALUES (?, ?, ?, ?)", (sale_id, sku_id, quantity, price))
    conn.commit()

def search_sale(id=None, date=None):
    cursor = conn.cursor()
    if id is not None:
        cursor.execute("SELECT * FROM sale WHERE id=?", (id,))
    elif date is not None:
        cursor.execute("SELECT * FROM sale WHERE date=?", (date,))
    else:
        cursor.execute("SELECT * FROM sale")
    return cursor.fetchall()

def get_sale_details(id):
    cursor = conn.cursor()
    cursor.execute("SELECT detail.id, item.name, detail.quantity, detail.price FROM sale_detail detail JOIN item ON detail.sku_id=item.id WHERE detail.sale_id=?", (id,))
    return cursor.fetchall()

3.5. 库存管理

def get_inventory():
    cursor = conn.cursor()
    cursor.execute("SELECT item.name, inventory.quantity FROM inventory JOIN item ON inventory.sku_id=item.id")
    return cursor.fetchall()

def update_inventory(sku_id, quantity):
    cursor = conn.cursor()
    cursor.execute("UPDATE inventory SET quantity=? WHERE sku_id=?", (quantity, sku_id))
    conn.commit()

3.6. 报表统计

def get_sale_report(start_date=None, end_date=None):
    cursor = conn.cursor()
    if start_date is None:
        cursor.execute("SELECT item.name, SUM(detail.quantity), MAX(detail.price), MIN(detail.price), AVG(detail.price) FROM sale_detail detail JOIN item ON detail.sku_id=item.id GROUP BY detail.sku_id")
    else:
        cursor.execute("SELECT iten.name, SUM(detail.quantity), MAX(detail.price), MIN(detail.price), AVG(detail.price) FROM sale_detail detail JOIN item ON detail.sku_id=item.id WHERE sale.date BETWEEN ? AND ? GROUP BY detail.sku_id", (start_date, end_date))
    return cursor.fetchall()

4. 示例说明

示例1:新增商品

add_item("可乐", 2.50)

示例2:进货

details = [(1, 100, 2.00), (2, 50, 3.00)]
add_purchase("2022-01-01", details)

5. 总结

通过上述攻略,我们可以实现一个基本的超市进销存管理系统,涵盖了商品管理、进货管理、销售管理、库存管理和报表统计等功能。同时,我们还可以根据实际需求扩展其他功能,从而满足更多的业务需求,提高管理效率和准确性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现超市进销存管理系统 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • Django如何使用asyncio协程和ThreadPoolExecutor多线程

    首先需要明确的是,Django本身是不支持asyncio和多线程的,但可以通过结合第三方库来实现对应的功能。 使用asyncio协程的步骤如下: 在views.py中导入asyncio库和asyncio的异步装饰器@asyncio.coroutine 将原本的同步视图函数改为异步函数,并用yield from调用异步函数 在异步函数中使用asyncio.sl…

    python 2023年5月19日
    00
  • Python3实现的画图及加载图片动画效果示例

    Python3实现画图与加载图片动画效果 在Python3里,我们可以使用第三方库pygame来实现基本的画图和加载图片动画效果。下面将会给出这一过程的详细攻略。 1. 准备 首先我们需要安装pygame库,可以使用pip来安装,在命令行中输入下面的代码: pip install pygame 成功安装之后,我们就可以开始使用pygame库。 2. 画图 2…

    python 2023年5月19日
    00
  • python3+requests接口自动化session操作方法

    以下是关于Python3+Requests接口自动化session操作方法的攻略: Python3+Requests接口自动化session操作方法 在Python3+Requests接口自动化中,我们可以使用session对象来维持会话状态,以便在多个请求之间共享cookie和其他参数。以下是Python3+Requests接口自动化session操作方法…

    python 2023年5月15日
    00
  • Python基础中所出现的异常报错总结

    当我们在Python编程中,经常会遇到各种异常报错。以下是一些常见的Python异常报错及其解决方案: 1. SyntaxError Syntax通常是由于代码中语法错误引起的。解决方案是检查代码中的语法错误,并进行修正。 示例1:缺少冒号 # 错误示例 if x == 1 print("x is 1") # 正确示例 if x == 1…

    python 2023年5月13日
    00
  • 详解python中的defaultdict 默认值

    关于“详解Python中的defaultdict默认值”的攻略,我可以按照下面的方式说明: 1. 什么是defaultdict defaultdict 是 Python 标准库中的一个类, 它与字典类 dict 非常相似,但是 defaultdict 允许调用者提供一个函数来设置每个键的默认值。这在某些情况下十分有用,因为我们不必要为字典的每个键指定默认值,…

    python 2023年6月3日
    00
  • python通过链接抓取网站详解

    Python通过链接抓取网站详解 简介 Web爬虫是一种自动化程序,可以从互联网上的网站中提取数据。Python可以通过链接抓取网站,将网络数据从HTML源代码中提取出来。 步骤 下面是Python通过链接抓取网站的基本步骤: 导入所需模块。Python有许多模块可以实现网络数据抓取。最常用的是requests和BeautifulSoup。运行pip ins…

    python 2023年5月14日
    00
  • Python制作词云图代码实例

    下面是“Python制作词云图代码实例”的完整攻略: 1. 准备工作 安装Python环境及相关的库:jieba,wordcloud 准备好需要生成词云图的文本 2. 数据预处理 首先,需要对文本进行预处理,将其中的无用字符剔除,只留下有效的文本部分,例如: import jieba # 读取文本文件 with open(‘input.txt’, ‘r’, …

    python 2023年5月31日
    00
  • Python 流媒体播放器的实现(基于VLC)

    下面我将为您详细讲解“Python 流媒体播放器的实现(基于VLC)”的完整攻略。 一、背景介绍 在Python程序中,我们有时需要集成流媒体播放器的功能,让用户可以直接在应用程序内部播放媒体文件。本攻略将基于VLC库实现Python中的流媒体播放器。 二、实现步骤 1. 安装VLC 在开始之前,我们需要先安装VLC,安装过程请参考VLC官方文档。 2. 安…

    python 2023年6月13日
    00
合作推广
合作推广
分享本页
返回顶部