当前位置: 首页 > news >正文

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

以下是一个基于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 datetimeapp = 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构建用户友好的界面,方便用户操作。
  • 增加更多的功能,如工单状态的更新、设备和维修人员信息的修改和删除等。

相关文章:

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

以下是一个基于Python的简单企业维修管理系统的设计与实现,这里我们会使用Flask作为Web框架,SQLite作为数据库来存储相关信息。 1. 需求分析 企业维修管理系统主要功能包括: 维修工单的创建、查询、更新和删除。设备信息的管理。维修人员…...

【C++】B2120 单词的长度

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述💯我的做法代码实现:思路解析: 💯老师的第一种做法代码实现:思路解析: 💯老师的…...

2501,编写dll

DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…...

【router路由的配置】

router路由的配置 App.vuerouter在main.ts引入插件 App.vue <template><RouterView /> </template><script setup lang"ts"></script><style scoped lang"scss"></style>router import { createRouter, creat…...

算法基础——一致性

引入 最早研究一致性的场景既不是大数据领域&#xff0c;也不是分布式系统&#xff0c;而是多路处理器。 可以将多路处理器理解为单机计算机系统内部的分布式场景&#xff0c;它有多个执行单元&#xff0c;每一个执行单元都有自己的存储(缓存)&#xff0c;一个执行单元修改了…...

刷题记录 动态规划-6: 62. 不同路径

题目&#xff1a;62. 不同路径 难度&#xff1a;中等 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#x…...

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker&#xff0c;运行lamp 编译安装php的时候发现要按天来算&#xff0c;于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…...

014-STM32单片机实现矩阵薄膜键盘设计

1.功能说明 本设计主要是利用STM32驱动矩阵薄膜键盘&#xff0c;当按下按键后OLED显示屏上会对应显示当前的按键键值&#xff0c;可以将此设计扩展做成电子秤、超市收银机、计算器等需要多个按键操作的单片机应用。 2.硬件接线 模块管脚STM32单片机管脚矩阵键盘行1PA0矩阵键盘…...

Sentinel 断路器在Spring Cloud使用

文章目录 Sentinel 介绍同类对比微服务雪崩问题问题原因问题解决方案请求限流线程隔离失败处理服务熔断解决雪崩问题的常见方案有哪些&#xff1f; Sentineldocker 安装账号/ 密码项目导入簇点链路请求限流线程隔离Fallback服务掉线时的处理流程 服务熔断 Sentinel 介绍 随着微…...

[内网安全] 内网渗透 - 学习手册

这是一篇专栏的目录文档&#xff0c;方便读者系统性的学习&#xff0c;笔者后续会持续更新文档内容。 如果没有特殊情况的话&#xff0c;大概是一天两篇的速度。&#xff08;实验多或者节假日&#xff0c;可能会放缓&#xff09; 笔者也是一边学习一边记录笔记&#xff0c;如果…...

算法总结-二分查找

文章目录 1.搜索插入位置1.答案2.思路 2.搜索二维矩阵1.答案2.思路 3.寻找峰值1.答案2.思路 4.搜索旋转排序数组1.答案2.思路 5.在排序数组中查找元素的第一个和最后一个位置1.答案2.思路 6.寻找旋转排序数组中的最小值1.答案2.思路 1.搜索插入位置 1.答案 package com.sunxi…...

基于python的Kimi AI 聊天应用

因为这几天deepseek有点状况&#xff0c;导致apikey一直生成不了&#xff0c;用kimi练练手。这是一个基于 Moonshot AI 的 Kimi 接口开发的聊天应用程序&#xff0c;使用 Python Tkinter 构建图形界面。 项目结构 项目由三个主要Python文件组成&#xff1a; 1. main_kimi.py…...

动手学深度学习-3.2 线性回归的从0开始

以下是代码的逐段解析及其实际作用&#xff1a; 1. 环境设置与库导入 %matplotlib inline import random import torch from d2l import torch as d2l作用&#xff1a; %matplotlib inline&#xff1a;在 Jupyter Notebook 中内嵌显示 matplotlib 图形。random&#xff1a;生成…...

Spring 面试题【每日20道】【其二】

1、Spring MVC 具体的工作原理&#xff1f; 中等 Spring MVC 是 Spring 框架的一部分&#xff0c;专门用于构建基于Java的Web应用程序。它采用模型-视图-控制器&#xff08;MVC&#xff09;架构模式&#xff0c;有助于分离应用程序的不同方面&#xff0c;如输入逻辑、业务逻辑…...

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…...

Vue06

目录 一、声明式导航-导航链接 1.需求 2.解决方案 3.通过router-link自带的两个样式进行高亮 二、声明式导航的两个类名 1.router-link-active 2.router-link-exact-active 三、声明式导航-自定义类名&#xff08;了解&#xff09; 1.问题 2.解决方案 3.代码演示 四…...

deepseek-r1模型本地win10部署

转载自大佬&#xff1a;高效快速教你deepseek如何进行本地部署并且可视化对话 deepseek 如果安装遇到这个问题 Error: Post “http://127.0.0.1:11434/api/show”: read tcp 127. 用管理员cmd打开 接着再去切换盘符d: cd 文件夹 重新下载模型&#xff1a;ollama run deepseek…...

自定义数据集 使用scikit-learn中SVM的包实现SVM分类

生成自定义数据集 生成一个简单的二维数据集&#xff0c;包含两类数据点&#xff0c;分别用不同的标签表示。 import numpy as np import matplotlib.pyplot as plt# 生成数据 np.random.seed(42) X np.r_[np.random.randn(100, 2) - [2, 2], np.random.randn(100, 2) [2, …...

pandas的melt方法使用

Pandas 的 melt 方法用于将宽格式&#xff08;wide format&#xff09;的 DataFrame 转换为长格式&#xff08;long format&#xff09;的 DataFrame。这种转换在数据处理和可视化中非常有用&#xff0c;尤其是在处理多列数据时。 宽格式 vs 长格式 宽格式&#xff08;Wide F…...

一文讲解Spring中应用的设计模式

我们都知道Spring 框架中用了蛮多设计模式的&#xff1a; 工厂模式呢&#xff0c;就是用来创建对象的&#xff0c;把对象的创建和使用分开&#xff0c;这样代码更灵活。代理模式呢&#xff0c;是用一个代理对象来控制对真实对象的访问&#xff0c;可以在访问前后做一些处理。单…...

Linux的基本指令(下)

1.find指令 Linux下find命令在⽬录结构中搜索⽂件&#xff0c;并执⾏指定的操作。 Linux下find命令提供了相当多的查找条件&#xff0c;功能很强⼤。由于find具有强⼤的功能&#xff0c;所以它的选项也很多&#xff0c;其中⼤部分选项都值得我们花时间来了解⼀下。 即使系统中含…...

HAO的Graham学习笔记

前置知识&#xff1a;凸包 摘录oiwiki 在平面上能包含所有给定点的最小凸多边形叫做凸包。 其定义为&#xff1a;对于给定集合 X&#xff0c;所有包含 X 的凸集的交集 S 被称为 X 的 凸包。 说人话就是用一个橡皮筋包含住所有给定点的形态 如图&#xff1a; 正题&#xff1a…...

Elasticsearch Queries

Elasticsearch Compound Queries Elasticsearch 的 Compound Queries 是一种强大的工具&#xff0c;用于组合多个查询子句&#xff0c;以实现更复杂的搜索逻辑。这些查询子句可以是叶查询&#xff08;Leaf Queries&#xff09;或复合查询&#xff08;Compound Queries&#xf…...

利用matlab寻找矩阵中最大值及其位置

目录 一、问题描述1.1 max函数用法1.2 MATLAB中 : : :的作用1.3 ind2sub函数用法 二、实现方法2.1 方法一&#xff1a;max和find2.2 方法二&#xff1a;max和ind2sub2.3 方法对比 三、参考文献 一、问题描述 matlab中求最大值可使用函数max&#xff0c;对于一维向量&#xff0…...

SQL入门到精通 理论+实战 -- 在 MySQL 中学习SQL语言

目录 一、环境准备 1、MySQL 8.0 和 Navicat 下载安装 2、准备好的表和数据文件&#xff1a; 二、SQL语言简述 1、数据库基础概念 2、什么是SQL 3、SQL的分类 4、SQL通用语法 三、DDL&#xff08;Data Definition Language&#xff09;&#xff1a;数据定义语言 1、操…...

【智力测试——二分、前缀和、乘法逆元、组合计数】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int mod 1e9 7; const int N 1e5 10; int r[N], c[N], f[2 * N]; int nr[N], nc[N], nn, nm; int cntr[N], cntc[N]; int n, m, t;void init(int n) {f[0] f[1] 1;for (int i …...

Spring Security(maven项目) 3.0.2.9版本 --- 改

前言&#xff1a; 通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往…...

并发编程中的常见问题

1 竞态条件 (Race Condition) 定义:竞态条件是指多个线程在访问共享资源时,由于执行顺序的不同导致结果不确定的情况。 示例: public class Counter {private int count = 0;public void increment() {count++;}public int getCount() {return count;} }在多线程环境下,…...

二维前缀和:高效求解矩阵区域和问题

在处理二维矩阵时&#xff0c;频繁计算某一子矩阵的和是一个常见的操作。传统的做法是直接遍历该子矩阵&#xff0c;时间复杂度较高。当矩阵非常大且有大量的查询时&#xff0c;直接计算将变得低效。为了提高效率&#xff0c;我们可以通过 二维前缀和 技巧在常数时间内解决这个…...

鸢尾花书《编程不难》02---学习书本里面的三个案例

文章目录 1.引言2.第一个例子---模拟硬币的投掷结果3.第二个例子---混合两个一元高斯分布的随机数4.第三个例子---线性回归的作图5.关于书中的问题的解决方案 1.引言 今天的这个文章主要是阅读学习鸢尾花书系列的第一本《编程不难》&#xff0c;今天主要是记录下书里面的两个例…...