基于Python的简单企业维修管理系统的设计与实现

news2025/2/3 1:56:56

以下是一个基于Python的简单企业维修管理系统的设计与实现,这里我们会使用Flask作为Web框架,SQLite作为数据库来存储相关信息。
在这里插入图片描述

1. 需求分析

企业维修管理系统主要功能包括:

  • 维修工单的创建、查询、更新和删除。
  • 设备信息的管理。
  • 维修人员信息的管理。

2. 系统设计

数据库设计

我们使用SQLite数据库,包含三张表:devices(设备信息表)、technicians(维修人员信息表)和work_orders(维修工单表)。

表结构设计
  • devices表:

    • id:设备ID,主键,自增。
    • name:设备名称。
    • description:设备描述。
  • technicians表:

    • id:维修人员ID,主键,自增。
    • name:维修人员姓名。
    • contact:维修人员联系方式。
  • work_orders表:

    • id:工单ID,主键,自增。
    • device_id:关联设备ID,外键。
    • technician_id:关联维修人员ID,外键。
    • description:工单描述。
    • status:工单状态(如:待处理、处理中、已完成)。
    • created_at:工单创建时间。

3. 代码实现

3.1 环境搭建

首先,确保你已经安装了Python和Flask,可以使用以下命令安装Flask:

pip install flask
3.2 代码实现
from flask import Flask, request, jsonify
import sqlite3
import datetime

app = Flask(__name__)

# 初始化数据库
def init_db():
    conn = sqlite3.connect('repair_management.db')
    c = conn.cursor()
    # 创建设备表
    c.execute('''CREATE TABLE IF NOT EXISTS devices
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                  name TEXT NOT NULL,
                  description TEXT)''')
    # 创建维修人员表
    c.execute('''CREATE TABLE IF NOT EXISTS technicians
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                  name TEXT NOT NULL,
                  contact TEXT)''')
    # 创建维修工单表
    c.execute('''CREATE TABLE IF NOT EXISTS work_orders
                 (id INTEGER PRIMARY KEY AUTOINCREMENT,
                  device_id INTEGER,
                  technician_id INTEGER,
                  description TEXT,
                  status TEXT DEFAULT '待处理',
                  created_at TEXT,
                  FOREIGN KEY (device_id) REFERENCES devices(id),
                  FOREIGN KEY (technician_id) REFERENCES technicians(id))''')
    conn.commit()
    conn.close()

# 设备管理接口
@app.route('/devices', methods=['GET', 'POST'])
def manage_devices():
    if request.method == 'GET':
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('SELECT * FROM devices')
        devices = c.fetchall()
        conn.close()
        return jsonify(devices)
    elif request.method == 'POST':
        data = request.get_json()
        name = data.get('name')
        description = data.get('description')
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('INSERT INTO devices (name, description) VALUES (?,?)', (name, description))
        conn.commit()
        conn.close()
        return jsonify({'message': '设备添加成功'})

# 维修人员管理接口
@app.route('/technicians', methods=['GET', 'POST'])
def manage_technicians():
    if request.method == 'GET':
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('SELECT * FROM technicians')
        technicians = c.fetchall()
        conn.close()
        return jsonify(technicians)
    elif request.method == 'POST':
        data = request.get_json()
        name = data.get('name')
        contact = data.get('contact')
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('INSERT INTO technicians (name, contact) VALUES (?,?)', (name, contact))
        conn.commit()
        conn.close()
        return jsonify({'message': '维修人员添加成功'})

# 维修工单管理接口
@app.route('/work_orders', methods=['GET', 'POST'])
def manage_work_orders():
    if request.method == 'GET':
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('SELECT * FROM work_orders')
        work_orders = c.fetchall()
        conn.close()
        return jsonify(work_orders)
    elif request.method == 'POST':
        data = request.get_json()
        device_id = data.get('device_id')
        technician_id = data.get('technician_id')
        description = data.get('description')
        created_at = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        conn = sqlite3.connect('repair_management.db')
        c = conn.cursor()
        c.execute('INSERT INTO work_orders (device_id, technician_id, description, created_at) VALUES (?,?,?,?)',
                  (device_id, technician_id, description, created_at))
        conn.commit()
        conn.close()
        return jsonify({'message': '维修工单创建成功'})

if __name__ == '__main__':
    init_db()
    app.run(debug=True)

4. 系统测试

  • 启动应用:

    • 在终端中运行上述Python脚本,Flask应用会在本地启动,监听http://127.0.0.1:5000
  • 测试设备管理接口:

    • 添加设备:
      curl -X POST http://127.0.0.1:5000/devices -H "Content-Type: application/json" -d '{"name": "打印机", "description": "办公室打印机"}'
      
    • 查询设备:
      curl http://127.0.0.1:5000/devices
      
  • 测试维修人员管理接口:

    • 添加维修人员:
      curl -X POST http://127.0.0.1:5000/technicians -H "Content-Type: application/json" -d '{"name": "张三", "contact": "13800138000"}'
      
    • 查询维修人员:
      curl http://127.0.0.1:5000/technicians
      
  • 测试维修工单管理接口:

    • 创建维修工单:
      curl -X POST http://127.0.0.1:5000/work_orders -H "Content-Type: application/json" -d '{"device_id": 1, "technician_id": 1, "description": "打印机卡纸"}'
      
    • 查询维修工单:
      curl http://127.0.0.1:5000/work_orders
      

5. 系统优化与扩展

  • 可以增加用户认证和权限管理功能,确保只有授权用户可以访问和操作系统。
  • 完善前端界面,使用HTML、CSS和JavaScript构建用户友好的界面,方便用户操作。
  • 增加更多的功能,如工单状态的更新、设备和维修人员信息的修改和删除等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291043.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

< OS 有关 > Android 手机 SSH 客户端 app: connectBot

connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …

【算法设计与分析】实验7:复杂装载及0/1背包问题的回溯法设计与求解

目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 针对复杂装载问题、及0/1背包问题开展分析、建模、评价,算法设计与优化,并进行编码实践。 理解复杂装载…

仿真设计|基于51单片机的温湿度、一氧化碳、甲醛检测报警系统

目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部内容 资料获取 具体实现功能 (1)温湿度传感器、CO传感器、甲醛传感器实时检测温湿度值、CO值和甲醛值进…

使用vhd虚拟磁盘安装两个win10系统

使用vhd虚拟磁盘安装两个win10系统 前言vhd虚拟磁盘技术简介准备工具开始动手实践1.winX选择磁盘管理2.选择“操作”--“创建VHD”3.自定义一个位置,输入虚拟磁盘大小4.右键初始化磁盘5.选择GPT分区表格式6.右键新建简单卷7.给卷起个名字,用于区分8.打开…

深入理解Spring事务管理

一、事务基础概念 1.1 什么是事务? 事务(Transaction)是数据库操作的最小工作单元,具有ACID四大特性: 原子性(Atomicity):事务中的操作要么全部成功,要么全部失败 一致…

自制虚拟机(C/C++)(二、分析引导扇区,虚拟机读二进制文件img软盘)

先修复上一次的bug&#xff0c;添加新指令&#xff0c;并增加图形界面 #include <graphics.h> #include <conio.h> #include <windows.h> #include <commdlg.h> #include <iostream> #include <fstream> #include <sstream> #inclu…

ASP.NET Core 启动并提供静态文件

ASP.NET Core 启动并提供静态文件 即是单个可执行文件&#xff0c;它既运行 API 项目&#xff0c;也托管 前端项目&#xff08;通常是前端的发布文件&#xff09;。 这种方式一般是通过将 前端项目 的发布文件&#xff08;例如 HTML、CSS、JavaScript&#xff09;放入 Web AP…

4 [危机13小时追踪一场GitHub投毒事件]

事件概要 自北京时间 2024.12.4 晚间6点起&#xff0c; GitHub 上不断出现“幽灵仓库”&#xff0c;仓库中没有任何代码&#xff0c;只有诱导性的病毒文件。当天&#xff0c;他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒&#xff0c;等待不…

变量和常量

一.变量 1.标准声明 var 变量名 变量类型 变量声明行末不需要分号 2..批量声明 package main import "fmt" func main(){var(a string b int c boold float32)}3.变量的初始化 var a int 10 var b float321.1 4.类型推导 var name"tom" var age18 fmt.Pr…

大模型概述(方便不懂技术的人入门)

1 大模型的价值 LLM模型对人类的作用&#xff0c;就是一个百科全书级的助手。有多么地百科全书&#xff0c;则用参数的量来描述&#xff0c; 一般地&#xff0c;大模型的参数越多&#xff0c;则该模型越好。例如&#xff0c;GPT-3有1750亿个参数&#xff0c;GPT-4可能有超过1万…

流浪 Linux: 外置 USB SSD 安装 ArchLinux

注: ArchLinux 系统为滚动更新, 变化很快, 所以本文中的安装方法可能很快就过时了, 仅供参考. 实际安装时建议去阅读官方文档. 最近, 突然 (也没有那么突然) 有了一大堆 PC: 4 个笔记本, 2 个台式主机 (M-ATX 主板), 1 个小主机 (迷你主机). 嗯, 多到用不过来. 但是, 窝又不能…

Hot100之子串

560和为K的子数组 题目 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列 思路解析 ps&#xff1a;我们的presum【0】就是0&#xff0c;如果没有这个0的话我们的第一个元素就无法减去上…

网络工程师 (11)软件生命周期与开发模型

一、软件生命周期 前言 软件生命周期&#xff0c;也称为软件开发周期或软件开发生命周期&#xff0c;是指从软件项目的启动到软件不再被使用为止的整个期间。这个过程可以细分为多个阶段&#xff0c;每个阶段都有其特定的目标、任务和产出物。 1. 问题定义与需求分析 问题定义…

(三)QT——信号与槽机制——计数器程序

目录 前言 信号&#xff08;Signal&#xff09;与槽&#xff08;Slot&#xff09;的定义 一、系统自带的信号和槽 二、自定义信号和槽 三、信号和槽的扩展 四、Lambda 表达式 总结 前言 信号与槽机制是 Qt 中的一种重要的通信机制&#xff0c;用于不同对象之间的事件响…

hot100_21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[…

安全防护前置

就业概述 网络安全工程师/安全运维工程师/安全工程师 安全架构师/安全专员/研究院&#xff08;数学要好&#xff09; 厂商工程师&#xff08;售前/售后&#xff09; 系统集成工程师&#xff08;所有计算机知识都要会一点&#xff09; 学习目标 前言 网络安全事件 蠕虫病毒--&…

01-六自由度串联机械臂(ABB)位置分析

ABB工业机器人&#xff08;IRB2600&#xff09;如下图所示&#xff08;d1444.8mm&#xff0c;a1150mm&#xff0c;a2700mm&#xff0c;a3115mm&#xff0c;d4795mm&#xff0c;d685mm&#xff09;&#xff0c;利用改进DH法建模&#xff0c;坐标系如下所示&#xff1a; 利用改进…

JVM运行时数据区域-附面试题

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域 有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是 依赖用户线程的启动和结束而建立和销毁。 1. 程序计…

HTML(快速入门)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导&#xff0c;有错误的地方会改进的哦~点击这里了解更多内容 目录 一、前言二、HTML基础2.1 什么是HTML?2.2 认识HTML标签2.2.1 HTML标签当中的基本结构2.2.2 标签层次结构 2.3 HTML常见标签2.3.1 标题标签2.3.2 段落标签2.3.3…

《苍穹外卖》项目学习记录-Day10订单状态定时处理

利用Cron表达式生成器生成Cron表达式 1.处理超时订单 查询订单表把超时的订单查询出来&#xff0c;也就是订单的状态为待付款&#xff0c;下单的时间已经超过了15分钟。 //select * from orders where status ? and order_time < (当前时间 - 15分钟) 遍历集合把数据库…