好的,下面是使用 Python 和 MySQL 实现超市日常管理的代码。
首先,需要安装 `mysql-connector-python` 库来连接 MySQL 数据库。可以使用以下命令来安装:
```
pip install mysql-connector-python
```
接下来是完整的代码,包括创建数据表、填充数据、登录验证和各个菜单的功能实现。
```python
import mysql.connector
# 连接数据库
db = mysql.connector.connect(
host="localhost",
user="root",
password="password",
database="supermarket"
)
# 创建游标
cursor = db.cursor()
# 创建用户表
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), pwd VARCHAR(255))")
# 创建产品表
cursor.execute("CREATE TABLE IF NOT EXISTS products (id INT AUTO_INCREMENT PRIMARY KEY, num VARCHAR(255), name VARCHAR(255), price FLOAT, discount FLOAT)")
# 创建订单表
cursor.execute("CREATE TABLE IF NOT EXISTS orders (id INT AUTO_INCREMENT PRIMARY KEY, num VARCHAR(255), count INT, amount FLOAT)")
# 填充用户数据
cursor.execute("INSERT INTO users (name, pwd) VALUES (%s, %s)", ("0001", "0001"))
cursor.execute("INSERT INTO users (name, pwd) VALUES (%s, %s)", ("0002", "0002"))
# 填充产品数据
cursor.execute("INSERT INTO products (num, name, price, discount) VALUES (%s, %s, %s, %s)", ("0001", "商品1", 10.0, 0.9))
cursor.execute("INSERT INTO products (num, name, price, discount) VALUES (%s, %s, %s, %s)", ("0002", "商品2", 20.0, 0.8))
cursor.execute("INSERT INTO products (num, name, price, discount) VALUES (%s, %s, %s, %s)", ("0003", "商品3", 30.0, 0.7))
# 提交更改
db.commit()
# 登录验证
def login():
while True:
name = input("请输入用户名:")
pwd = input("请输入密码:")
cursor.execute("SELECT * FROM users WHERE name=%s AND pwd=%s", (name, pwd))
user = cursor.fetchone()
if user:
print("登录成功!")
return user[1] # 返回用户名
else:
print("用户名或密码错误,请重新输入。")
# 查看所有产品信息
def view_products():
cursor.execute("SELECT * FROM products")
rows = cursor.fetchall()
print("编号\t名称\t单价\t折扣")
for row in rows:
print(f"{row[1]}\t{row[2]}\t{row[3]}\t{row[4]}")
# 查找商品
def find_product():
name = input("请输入商品名称:")
cursor.execute("SELECT price, discount FROM products WHERE name=%s", (name,))
row = cursor.fetchone()
if row:
print(f"{name} 的单价为 {row[0]},折扣为 {row[1]}。")
else:
print(f"未找到名为 {name} 的商品。")
# 添加商品
def add_product():
name = input("请输入新商品的名称:")
price = float(input("请输入新商品的单价:"))
discount = float(input("请输入新商品的折扣:"))
num = f"{login()[1:]}{cursor.lastrowid+1:03}" # 自动生成编号
cursor.execute("INSERT INTO products (num, name, price, discount) VALUES (%s, %s, %s, %s)", (num, name, price, discount))
db.commit()
print(f"添加商品 {name} 成功,编号为 {num}。")
# 修改商品价格和折扣
def update_product():
num = input("请输入要修改的商品编号:")
price = float(input("请输入新的单价:"))
discount = float(input("请输入新的折扣:"))
cursor.execute("UPDATE products SET price=%s, discount=%s WHERE num=%s", (price, discount, num))
db.commit()
print(f"商品 {num} 的价格和折扣已更新。")
# 删除商品
def delete_product():
num = input("请输入要删除的商品编号:")
cursor.execute("DELETE FROM products WHERE num=%s", (num,))
db.commit()
print(f"商品 {num} 已删除。")
# 查看所有订单
def view_orders():
cursor.execute("SELECT * FROM orders")
rows = cursor.fetchall()
print("编号\t数量\t金额")
for row in rows:
print(f"{row[1]}\t{row[2]}\t{row[3]}")
# 订单统计
def order_statistics():
cursor.execute("SELECT SUM(count), SUM(amount) FROM orders")
row = cursor.fetchone()
print(f"总货品数量为 {row[0]},总销售额为 {row[1]}。")
# 商品结算
def checkout():
num = input("请输入要结算的商品编号:")
count = int(input("请输入购买数量:"))
cursor.execute("SELECT price, discount FROM products WHERE num=%s", (num,))
row = cursor.fetchone()
if row:
amount = row[0] * row[1] * count
cursor.execute("INSERT INTO orders (num, count, amount) VALUES (%s, %s, %s)", (num, count, amount))
db.commit()
print(f"商品 {num} 结算成功,共计 {amount} 元。")
else:
print(f"未找到编号为 {num} 的商品。")
# 菜单
menu = {
"0": "用户登录",
"1": "查看所有产品信息",
"2": "查找商品",
"3": "添加商品",
"4": "修改商品价格和折扣",
"5": "删除商品",
"6": "查看所有订单",
"7": "订单统计",
"8": "商品结算",
}
while True:
# 显示菜单
for key, value in menu.items():
print(f"{key}. {value}")
choice = input("请输入要执行的操作:")
# 执行对应的功能
if choice == "0":
login()
elif choice == "1":
view_products()
elif choice == "2":
find_product()
elif choice == "3":
add_product()
elif choice == "4":
update_product()
elif choice == "5":
delete_product()
elif choice == "6":
view_orders()
elif choice == "7":
order_statistics()
elif choice == "8":
checkout()
else:
print("输入有误,请重新输入。")
```
在代码中,我们首先连接了名为 `supermarket` 的 MySQL 数据库,并创建了三个数据表:`users`、`products` 和 `orders`。然后,我们填充了一些示例数据。
接着,我们实现了登录验证、查看所有产品信息、查找商品、添加商品、修改商品价格和折扣、删除商品、查看所有订单、订单统计和商品结算这些功能。每个功能都对应了菜单中的一个选项,用户可以根据自己的需要选择相应的操作。
注意,为了避免用户输入重复的商品名称导致查询出多个结果,我们在查询时使用了 MySQL 的参数化查询,即将查询条件作为参数传递给 `execute()` 方法。这样可以保证查询条件不被解释为 SQL 语句的一部分,从而避免 SQL 注入攻击。
此外,在添加商品时,我们通过自动生成编号来确保每个商品都有一个唯一的标识符。编号由登录用户的后四位学号和自增的 ID 组成,共七位数字。例如,第一个添加的商品的编号为 `0001001`。