大家可以帮忙点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在 下方专栏
随着高校规模的不断扩大和实验室设备的不断增加,实验室管理面临着越来越多的挑战。传统的手工管理模式存在着工作效率低、数据不准确等问题,因此开发一款基于计算机技术的高校实验室管理系统变得至关重要。本文旨在设计并实现一款基于Python的高校实验室管理系统,以提高实验室的管理效率和管理质量。
一、个人中心
个人中心模块为系统用户(学生、教师)提供了个性化的信息管理界面。用户可以在此模块查看和编辑自己的信息,例如姓名、学号、密码等。同时,还可以管理自己的预约和设备申请。
二、学生管理
学生管理模块包含了学生信息的全面管理,包括学生基本信息、选课情况、成绩查询等功能。通过这个模块,学生可以查看自己的选课情况,了解已选课程的的教学计划、教师信息等。
三、教师管理
教师管理模块为管理员提供了教师信息的全面管理功能,包括教师的基本信息、授课信息等。管理员还可以在该模块进行教师账号的创建与权限管理。
四、规章制度管理
规章制度管理模块允许管理员添加、编辑和删除实验室的规章制度。这些规章制度可以帮助学生和教师更好地了解实验室的运作规则,提升实验室的使用效率和管理质量。
五、实验任务管理
实验任务管理模块用于管理实验任务的相关信息,如任务名称、任务描述、任务时间等。此模块能够帮助学生和教师更好地了解实验任务,提升实验教学的效果。
六、实验室类型管理
实验室类型管理模块允许管理员定义实验室的类型,例如计算机实验室、物理实验室等。并且可以为此类型相关的实验室添加和管理相关信息。
七、实验室信息管理
实验室信息管理模块包含了实验室相关信息的全面管理,包括实验室的名称、地址、设备清单等。管理员可以通过该模块添加、编辑和删除实验室的相关信息。
八、学生预约管理
学生预约管理模块允许学生预约实验室的使用时间,并可以查看预约的状态。管理员可以在此模块管理学生的预约申请,调整实验室的使用计划。
九、教师预约管理
教师预约管理模块允许教师预约实验室的使用时间,并可以查看预约的状态。管理员可以在此模块管理教师的预约申请,根据教学需求调整实验室的使用计划。
十、设备信息管理
设备信息管理模块允许管理员添加、编辑和删除实验室设备的相关信息,如设备名称、设备型号、设备编号等。此外,还可以为设备添加备注和照片,方便用户了解设备的相关信息。
十一、设备申请管理
设备申请管理模块允许用户(学生、教师)申请使用实验室设备。管理员可以在此模块查看设备的申请情况,并处理申请,对设备进行借还管理。
十二、设备报修管理
设备报修管理模块允许用户(学生、教师)报修实验室设备。管理员可以在此模块接收设备的报修申请,并进行维修处理。维修完成后,可以对此进行记录,方便对设备的维护进行追踪。
十三、系统管理
系统管理模块是管理员的后台管理界面,包含了对用户、角色、权限等系统设置的管理功能。此外,还可以在此模块进行系统的备份与恢复,确保系统的稳定运行。同时,提供了数据统计功能,帮助管理员了解实验室的使用情况,以便做出更好的决策。
登录页面:
首页模块:
管理员模块:
老师模块:
学生模块:
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
随着计算机技术的不断发展,计算机视觉领域中的图像分割技术已成为研究的热点之一。本文主要研究了计算机视觉中的图像分割技术,旨在提高图像分割的准确性和效率,为实际应用提供更好的支持。
在本文中,我们首先介绍了图像分割的基本概念和相关技术,包括基于区域的图像分割、基于边缘的图像分割、基于阈值的图像分割等。然后,我们提出了一种基于区域生长的图像分割算法,通过设定种子点,按照相似性准则进行区域生长,实现图像分割。该算法具有较强的自适应性,能够根据不同的图像自动调整分割结果。同时,我们还提出了一种基于边缘和阈值的混合图像分割算法,综合利用了两种技术的优点,提高了图像分割的准确性和效率。