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

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日

相关文章

  • 利用Python如何实现数据驱动的接口自动化测试

    利用Python如何实现数据驱动的接口自动化测试 数据驱动的接口自动化测试是一种常用的测试方法,可以通过自动化脚本执行多组测试数据,验证接口的正确性和稳定性。以下是两个示例,介绍了如何使用Python实现数据驱动的接口自动化测试。 示例一:使用Python实现数据驱动的接口自动化测试 以下是一个示例,可以使用Python实现数据驱动的接口自动化测试: imp…

    python 2023年5月15日
    00
  • 用python实现词云效果实例介绍

    接下来我将为您详细介绍如何用Python实现词云效果,并带您了解两个示例。 标题 用Python实现词云效果实例 简介 词云是可视化文本数据的一种形式,可以以直观、艺术的方式展现文本的重要主题和关键字,并使读者更容易理解和分析文本。本文将介绍如何利用Python生成词云,并提供两种示例。 安装词云库 Python生成词云需要用到第三方库WordCloud,使…

    python 2023年5月31日
    00
  • Python处理键映射值操作详解

    Python处理键映射值操作详解 在Python编程中,字典(dictionary)是一种常用的数据类型,它是一个无序的键(key)和值(value)的集合,使用键来取出对应的值。在字典中,键必须是唯一的,而值则是可以重复的。本文将详细介绍Python中字典的键映射值操作。 字典的定义与创建 在Python中,可以使用两种方式来定义字典: 使用花括号{}来创…

    python 2023年5月13日
    00
  • python钉钉机器人运维脚本监控实例

    下面是关于“Python钉钉机器人运维脚本监控实例”的完整攻略: 目录 介绍 使用步骤 配置机器人 运行脚本 示例说明 监控服务器CPU使用率 监控服务器磁盘空间 总结 介绍 钉钉机器人是钉钉提供的一种形式化的通信渠道,可以通过代码来调用钉钉机器人的API,实现以机器人的形式向钉钉群组发送消息。本篇攻略将介绍如何使用Python语言发送消息至钉钉机器人,以及…

    python 2023年5月23日
    00
  • 详解Python3 对象组合zip()和回退方式*zip

    详解Python3对象组合zip()和回退方式*zip 什么是zip() zip() 是 Python3 中的一个内置函数,它接受任意多个可迭代对象作为参数,并且返回一个使用参数中所有序列并行排列的元组组成的迭代器。换言之,它将多个列表、元组或其他序列的元素进行打包,返回一个由元组组成的迭代器,而每个元组中的元素都来自于各个输入迭代器中的相同位置。 zip(…

    python 2023年5月14日
    00
  • Tornado Web Server框架编写简易Python服务器

    下面我将为您详细讲解“Tornado Web Server框架编写简易Python服务器”的完整攻略。 1. 简介 Tornado是一个轻量级的Python Web框架,因为其高并发、异步I/O等特性而受到广泛关注和使用。其中,tornado.web模块是Tornado Web框架的核心部分,包含了HTTP请求和响应的封装,可以快速地编写出一个基于HTTP的…

    python 2023年6月3日
    00
  • Python数据分析JupyterNotebook3魔法命令详解及示例

    Python数据分析JupyterNotebook3魔法命令详解及示例 Jupyter Notebook是一个非常流行的交互式计算环境,可以用于数据分析、机器学习等领域。在Jupyter Notebook中,有一些特殊的命令,称为魔法命令(Magic Command),可以帮助我们更方便地进行数据分析。本文将介绍Jupyter Notebook中的魔法命令,…

    python 2023年5月15日
    00
  • Python初学者需要注意的事项小结(python2与python3)

    Python初学者需要注意的事项小结(python2与python3) Python是一门非常适合初学者学习的编程语言,在学习的过程中,初学者需要注意一些事项,尤其对于Python2与Python3版本的区别需要特别注意。在这里,我们来总结一下初学者需要注意的事项。 注意Python版本 Python2和Python3有一些不同之处,其中最主要的不同就在于P…

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