当前位置:   article > 正文

python实战项目 基于python的高校实验室管理系统_用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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198

六、项目总结

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/371296
推荐阅读
相关标签
  

闽ICP备14008679号