1.效果如下
实现了增删改查,数据保存
2.操作方法
使用 csdn一直推荐的 trace cn,通过选择deepseek进行对话操作
把终端配置成git bash
从这边配置
3.配置好后就直接提问题就好
主要就是点击运行和应用
这个就是想改一下编码方式,直接说,按他提示应用就好
其他的也是这样
4.命令行方式运行
运行起来就是这种效果
5.让他直接搞成网页
就是这么地运行应用
像这种的有问题的也是直接添加到对话,他也是会修改,直接应用就好。
搞完就是开篇的效果
6.代码及文件结构
这个就是搞了两个小时的最后的文件结构
app.py
from flask import Flask, render_template, request, redirect, url_for
from models import Material
from utils import MaterialManager
app = Flask(__name__)
manager = MaterialManager()
@app.route('/')
def index():
materials = manager.list_materials()
return render_template('index.html', materials=materials)
@app.route('/apply', methods=['GET', 'POST'])
def apply_material():
if request.method == 'POST':
name = request.form['name']
description = request.form['description']
quantity = float(request.form['quantity'])
unit = request.form['unit']
applicant = request.form['applicant']
image_url = request.form['image_url']
reference_url = request.form['reference_url']
material = Material(name, description, quantity, unit, applicant)
material.image_url = image_url
material.reference_url = reference_url
manager.create_material(material)
return redirect(url_for('index'))
return render_template('apply.html')
@app.route('/approve/<material_id>', methods=['POST'])
def approve_material(material_id):
material = manager.get_material(material_id)
if material:
action = request.form['action']
if action == 'approve':
material.approve()
elif action == 'reject':
material.reject()
return redirect(url_for('index'))
@app.route('/update/<material_id>', methods=['GET', 'POST'])
def update_material(material_id):
material = manager.get_material(material_id)
if request.method == 'POST':
material.name = request.form['name']
material.description = request.form['description']
material.quantity = float(request.form['quantity'])
material.unit = request.form['unit']
material.applicant = request.form['applicant']
material.image_url = request.form['image_url']
material.reference_url = request.form['reference_url']
return redirect(url_for('index'))
return render_template('update.html', material=material)
@app.route('/delete/<material_id>')
def delete_material(material_id):
manager.delete_material(material_id)
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True)
data.json的内容,这个是根据你实际情况生成的。不必拘泥具体数据。
{"counter": 100005, "materials": {"100001": {"id": "100001", "name": "\u624b\u673a", "description": "\u5c0f\u7c73 14", "quantity": 2.0, "unit": "pcs", "applicant": "lee", "status": "rejected", "image_url": "", "reference_url": ""}, "100002": {"id": "100002", "name": "\u9f20\u6807", "description": "\u65b0\u79d1", "quantity": 2.0, "unit": "pcs", "applicant": "lee", "status": "pending", "image_url": "2344", "reference_url": "1234"}, "100003": {"id": "100003", "name": "\u7535\u8111", "description": "i7", "quantity": 2.0, "unit": "\u4e2a", "applicant": "cheni", "status": "pending", "image_url": "", "reference_url": ""}, "100004": {"id": "100004", "name": "\u952e\u76d8", "description": "\u800c\u4e14", "quantity": 2.0, "unit": "34", "applicant": "67", "status": "pending", "image_url": "", "reference_url": ""}}}
main.py
from models import Material
from utils import MaterialManager
def main_menu():
print("\n物料编码申请系统")
print("1. 申请新物料")
print("2. 查看物料列表")
print("3. 审批物料")
print("4. 变更物料信息")
print("5. 删除物料") # 新增选项
print("6. 退出")
def delete_material(manager):
material_id = input("请输入要删除的物料ID: ")
if manager.delete_material(material_id):
print("物料删除成功")
else:
print("物料删除失败,可能ID不存在")
def list_materials(manager):
print("\n物料列表:")
# 打印表头
print(f"{'ID':<10} {'名称':<20} {'描述':<30} {'数量':<10} {'单位':<10} {'申请人':<15} {'状态':<10}")
print("-" * 105)
# 打印物料信息
for material in manager.list_materials():
print(f"{material.id:<10} {material.name:<20} {material.description:<30} "
f"{material.quantity:<10} {material.unit:<10} {material.applicant:<15} {material.status:<10}")
print("------")
def apply_material(manager):
print("\n新物料申请")
name = input("物料名称: ")
description = input("物料描述: ")
quantity = float(input("数量: "))
unit = input("单位: ")
applicant = input("申请人: ")
material = Material(name, description, quantity, unit, applicant)
material_id = manager.create_material(material)
print(f"物料申请已提交,ID: {material_id}")
def approve_material(manager):
material_id = input("请输入要审批的物料ID: ")
material = manager.get_material(material_id)
if material:
print(f"物料信息: {material.name}")
action = input("审批操作 (1. 通过 2. 拒绝): ")
if action == "1":
material.approve()
print("物料已通过")
elif action == "2":
material.reject()
print("物料已拒绝")
else:
print("未找到该物料")
def update_material(manager):
material_id = input("请输入要变更的物料ID: ")
material = manager.get_material(material_id)
if material:
print("\n当前物料信息:")
print(f"1. 名称: {material.name}")
print(f"2. 描述: {material.description}")
print(f"3. 数量: {material.quantity}")
print(f"4. 单位: {material.unit}")
print(f"5. 申请人: {material.applicant}")
choice = input("请选择要变更的项目 (1-5): ")
if choice == "1":
new_value = input("请输入新的物料名称: ")
elif choice == "2":
new_value = input("请输入新的物料描述: ")
elif choice == "3":
new_value = float(input("请输入新的数量: "))
elif choice == "4":
new_value = input("请输入新的单位: ")
elif choice == "5":
new_value = input("请输入新的申请人: ")
else:
print("无效选择")
return
field_map = {
"1": "name",
"2": "description",
"3": "quantity",
"4": "unit",
"5": "applicant"
}
if manager.update_material(material_id, **{field_map[choice]: new_value}):
print("物料信息更新成功")
else:
print("物料信息更新失败")
else:
print("未找到该物料")
def main():
manager = MaterialManager()
while True:
main_menu()
choice = input("请选择操作: ")
if choice == "1":
apply_material(manager)
elif choice == "2":
list_materials(manager)
elif choice == "3":
approve_material(manager)
elif choice == "4":
update_material(manager)
elif choice == "5": # 新增操作
delete_material(manager)
elif choice == "6":
print("退出系统")
break
else:
print("无效选择,请重试")
if __name__ == "__main__":
main()
models.py
class Material:
def __init__(self, name, description, quantity, unit, applicant):
self.id = None
self.name = name
self.description = description
self.quantity = quantity
self.unit = unit
self.applicant = applicant
self.status = "pending"
self.image_url = ""
self.reference_url = ""
def approve(self):
from utils import MaterialManager # 将导入移到方法内部
self.status = "approved"
MaterialManager().save_data()
def reject(self):
from utils import MaterialManager # 将导入移到方法内部
self.status = "rejected"
MaterialManager().save_data()
utils.py
import uuid
import json
from models import Material # 添加这行导入语句
class MaterialManager:
def __init__(self):
self.materials = {}
self.counter = 100000
self.load_data() # 加载保存的数据
def create_material(self, material):
material.id = str(self.counter)
self.counter += 1
self.materials[material.id] = material
self.save_data() # 保存数据
return material.id
def get_material(self, material_id):
return self.materials.get(material_id)
def list_materials(self):
return list(self.materials.values())
def save_data(self):
with open("c:\\Users\\leech\\erp_system\\data.json", "w") as f:
data = {
"counter": self.counter,
"materials": {k: v.__dict__ for k, v in self.materials.items()}
}
json.dump(data, f)
def load_data(self):
try:
with open("c:\\Users\\leech\\erp_system\\data.json", "r") as f:
data = json.load(f)
self.counter = data["counter"]
for k, v in data["materials"].items():
material = Material("", "", 0, "", "")
material.__dict__.update(v)
self.materials[k] = material
except FileNotFoundError:
pass # 第一次运行时文件不存在是正常的
def update_material(self, material_id, **kwargs):
material = self.get_material(material_id)
if material:
for key, value in kwargs.items():
if hasattr(material, key):
setattr(material, key, value)
self.save_data()
return True
return False
def delete_material(self, material_id):
if material_id in self.materials:
del self.materials[material_id]
self.save_data()
return True
return False
网页的代码就不粘贴了,可以自己试一下。