python实战项目 基于python的高校实验室管理系统

大家可以帮忙点赞、收藏、关注、评论啦

精彩专栏推荐订阅:在 下方专栏

JAVA实战项目

一、项目介绍

随着高校规模的不断扩大和实验室设备的不断增加,实验室管理面临着越来越多的挑战。传统的手工管理模式存在着工作效率低、数据不准确等问题,因此开发一款基于计算机技术的高校实验室管理系统变得至关重要。本文旨在设计并实现一款基于Python的高校实验室管理系统,以提高实验室的管理效率和管理质量。

二、功能介绍:

一、个人中心

个人中心模块为系统用户(学生、教师)提供了个性化的信息管理界面。用户可以在此模块查看和编辑自己的信息,例如姓名、学号、密码等。同时,还可以管理自己的预约和设备申请。

二、学生管理

学生管理模块包含了学生信息的全面管理,包括学生基本信息、选课情况、成绩查询等功能。通过这个模块,学生可以查看自己的选课情况,了解已选课程的的教学计划、教师信息等。

三、教师管理

教师管理模块为管理员提供了教师信息的全面管理功能,包括教师的基本信息、授课信息等。管理员还可以在该模块进行教师账号的创建与权限管理。

四、规章制度管理

规章制度管理模块允许管理员添加、编辑和删除实验室的规章制度。这些规章制度可以帮助学生和教师更好地了解实验室的运作规则,提升实验室的使用效率和管理质量。

五、实验任务管理

实验任务管理模块用于管理实验任务的相关信息,如任务名称、任务描述、任务时间等。此模块能够帮助学生和教师更好地了解实验任务,提升实验教学的效果。

六、实验室类型管理

实验室类型管理模块允许管理员定义实验室的类型,例如计算机实验室、物理实验室等。并且可以为此类型相关的实验室添加和管理相关信息。

七、实验室信息管理

实验室信息管理模块包含了实验室相关信息的全面管理,包括实验室的名称、地址、设备清单等。管理员可以通过该模块添加、编辑和删除实验室的相关信息。

八、学生预约管理

学生预约管理模块允许学生预约实验室的使用时间,并可以查看预约的状态。管理员可以在此模块管理学生的预约申请,调整实验室的使用计划。

九、教师预约管理

教师预约管理模块允许教师预约实验室的使用时间,并可以查看预约的状态。管理员可以在此模块管理教师的预约申请,根据教学需求调整实验室的使用计划。

十、设备信息管理

设备信息管理模块允许管理员添加、编辑和删除实验室设备的相关信息,如设备名称、设备型号、设备编号等。此外,还可以为设备添加备注和照片,方便用户了解设备的相关信息。

十一、设备申请管理

设备申请管理模块允许用户(学生、教师)申请使用实验室设备。管理员可以在此模块查看设备的申请情况,并处理申请,对设备进行借还管理。

十二、设备报修管理

设备报修管理模块允许用户(学生、教师)报修实验室设备。管理员可以在此模块接收设备的报修申请,并进行维修处理。维修完成后,可以对此进行记录,方便对设备的维护进行追踪。

十三、系统管理

系统管理模块是管理员的后台管理界面,包含了对用户、角色、权限等系统设置的管理功能。此外,还可以在此模块进行系统的备份与恢复,确保系统的稳定运行。同时,提供了数据统计功能,帮助管理员了解实验室的使用情况,以便做出更好的决策。

三、开发环境

  • 开发语言:Python
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:Django
  • 前端:Vue+HTML+CSS+JavaScript+jQuery
  • 工具:PyCharm

四、项目展示

登录页面:
在这里插入图片描述首页模块:
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述管理员模块:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
老师模块:
在这里插入图片描述
学生模块:
在这里插入图片描述

五、代码展示

import xlrd
import openpyxl
from xlutils.copy import copy
import os
from decimal import Decimal

class XLSHelper:
    def __init__(self, fpath=None):
        self.read_fpath = fpath
        self.read_book = None
        self.read_sheet = None
        self.write_path = fpath
        self.write_book = None
        self.write_sheet = None
    
    def __del__(self):
        del self.read_book
        del self.read_sheet
        del self.write_book
        del self.write_sheet
    
    def load_excel(self, fpath):
        self.read_fpath = fpath
        self.read_book = xlrd.open_workbook(self.read_fpath, formatting_info=True)
        self.write_book = copy(self.read_book)
        return self

    def load_sheet(self, index):
        if not self.read_book:
            raise ValueError("先调用load_excel")
        self.read_sheet = self.read_book.sheets()[index]
        self.write_sheet = self.write_book.get_sheet(index)
        return self
    
    def get_sheet_count(self):
        return len(self.read_book.sheets())
    
    def set_write_path(self, fpath):
        self.write_path = fpath
        return self
    
    def get_cell_value(self, row, column):
        if not self.read_sheet:
            raise ValueError('先调用load_sheet')
        return self.read_sheet.cell_value(row, column)

    #如果小数位只有1位 则把第二位小数的0删除, etc: 0.10 --> 0.1
    # thanks to: https://www.cnblogs.com/feifeifeisir/p/15246080.html
    def _remove_exponent(self, num):
        return num.to_integral() if num == num.to_integral() else num.normalize()
    
    def get_rows_values(self):
        row_count = self.read_sheet.nrows
        col_count = self.read_sheet.ncols
        rows_data = []
        for row in range(row_count):
            row_data = []
            for col in range(col_count):
                cell = self.read_sheet.cell(row, col)
                value = cell.value
                ctype = cell.ctype
                # 针对number特殊处理
                if ctype == xlrd.XL_CELL_NUMBER:
                    # print(type(value), value, str(value))
                    value = str(self._remove_exponent(Decimal(value).quantize(Decimal('.01'), rounding = 'ROUND_HALF_UP')))
                    # print(value)
                row_data.append(value)
            rows_data.append(row_data)
        return rows_data
        # rows_data = []
        # for i in range(row_count):
        #     row_data = self.read_sheet.row_values(i)
        #     rows_data.append(row_data)
        # return rows_data
    
    def write_cell_value(self, row, col, value):
        if not self.write_sheet:
            raise ValueError('请先逐次调用load_excel,load_sheet')
        self.write_sheet.write(row, col, value)
        self.write_book.save(self.write_path)
        return self


class XLSXHelper:
    def __init__(self, fpath=None):
        self.read_fpath = fpath
        self.read_book = None
        self.read_sheet = None
        self.write_fpath = fpath
    
    def __del__(self):
        del self.read_book
        del self.read_sheet
    
    def load_excel(self, fpath):
        self.read_fpath = fpath
        self.read_book = openpyxl.load_workbook(self.read_fpath)
        return self

    def load_sheet(self, index):
        if not self.read_book:
            raise ValueError("先调用load_excel")
        self.read_sheet = self.read_book.worksheets[index]
        return self
    
    def get_sheet_count(self):
        return len(self.read_book.worksheets)

    def set_write_path(self, fpath):
        self.write_fpath = fpath
        return self
    
    def get_cell_value(self, row, column):
        if not self.read_sheet:
            raise ValueError('先调用load_sheet')
        return self.read_sheet.cell(row=row+1, column=column+1).value
    
    def get_rows_values(self):
        rows = [row for row in self.read_sheet.rows]
        rows_raw = []
        for row in rows:
            row_raw = []
            for cell in row:
                value = cell.value
                row_raw.append(value)
            rows_raw.append(row_raw)
        return rows_raw

    def write_cell_value(self, row, col, value):
        self.read_sheet.cell(row+1, col+1).value = value
        self.read_book.save(self.write_fpath)
        return self



class ExcelHelper:
    def __init__(self):
        self.instance = None
        
    def load_excel(self, fpath):
        """根据文件格式初始化excel instance
        """
        if not os.path.exists(fpath):
            raise ValueError('excel文件不存在')
        if fpath.endswith('.xls'):
            self.instance = XLSHelper(fpath)
        elif fpath.endswith('.xlsx'):
            self.instance = XLSXHelper(fpath)
        else:
            raise ValueError('文件格式不正确')
        self.instance.load_excel(fpath)
        return self
    
    def load_sheet(self, index):
        """载入sheet
        """
        if not self.instance:
            raise ValueError('先调用load_excel')
        self.instance.load_sheet(index)
        return self
    
    def get_sheet_count(self):
        """ 计算表格有多少个sheet
        """
        if not self.instance:
            raise ValueError('先调用load_excel')
        return self.instance.get_sheet_count()

    def set_write_path(self, fpath):
        """ 设定输出excel文件路径,如果不设置,则追加在读取的excel文件内
        """
        self.instance.set_write_path(fpath)
        return self
    
    def get_cell_value(self, row, column):
        """ 获取某个单元格的值
        """
        if not self.instance:
            raise ValueError('先调用load_excel')
        return self.instance.get_cell_value(row, column)
    
    def get_rows_values(self):
        """ 获取整个sheet的内容,格式为二维数据
        example:
        [[1, 2, 3],
         [1, 2, 3],
         [1, 2, 3],
         ...
        ]
        """
        return self.instance.get_rows_values()
    
    def write_cell_value(self, row, col, value):
        """ 往某个单元格写入内容
        """
        self.instance.write_cell_value(row, col, value)
        return self

六、项目总结

随着计算机技术的不断发展,计算机视觉领域中的图像分割技术已成为研究的热点之一。本文主要研究了计算机视觉中的图像分割技术,旨在提高图像分割的准确性和效率,为实际应用提供更好的支持。

在本文中,我们首先介绍了图像分割的基本概念和相关技术,包括基于区域的图像分割、基于边缘的图像分割、基于阈值的图像分割等。然后,我们提出了一种基于区域生长的图像分割算法,通过设定种子点,按照相似性准则进行区域生长,实现图像分割。该算法具有较强的自适应性,能够根据不同的图像自动调整分割结果。同时,我们还提出了一种基于边缘和阈值的混合图像分割算法,综合利用了两种技术的优点,提高了图像分割的准确性和效率。

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 02:20:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 02:20:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 02:20:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 02:20:01       20 阅读

热门阅读

  1. 鸿蒙软考题目总结

    2023-12-25 02:20:01       39 阅读
  2. 数据库(多对多表关系及关联查询)

    2023-12-25 02:20:01       39 阅读
  3. springboot 监听redis key过期

    2023-12-25 02:20:01       43 阅读
  4. 原理图中VCC、VDD、VEE、VSS、VBAT各表示什么意思

    2023-12-25 02:20:01       39 阅读
  5. uni-app附件预览

    2023-12-25 02:20:01       42 阅读
  6. 【MyBatis-Plus】分页查询

    2023-12-25 02:20:01       45 阅读
  7. COST231-Hata模型信道仿真MATLAB编程源码程序

    2023-12-25 02:20:01       37 阅读
  8. QT之QML布局相关总结

    2023-12-25 02:20:01       44 阅读