本帖最后由 popcfan 于 2025-8-13 09:05 编辑
会议室预约系统(MRS 1.6)项目及使用说明
项目简介
会议室预约系统(Meeting Room Scheduler, MRS)本人用AI开发的、基于 Python Flask 框架开发的轻量级会议室管理工具,采用 SQLite 数据库存储数据,无需复杂部署即可快速使用。系统致力于解决团队中会议室预约混乱、冲突等问题,通过直观的界面展示和便捷的操作流程,帮助用户高效管理会议室资源,提升协作效率。
功能特点核心功能
多角色权限管理:支持普通用户与管理员双角色,管理员拥有系统全权限
完整预约流程:用户可查看、创建、编辑、删除个人预约,实时检测时间冲突
可视化日程展示:以日历视图和列表视图两种形式展示未来 7 天预约情况,支持按日期 / 会议室分组查看
会议室管理:支持添加、编辑、删除会议室信息(名称、容量、位置、描述)
用户管理:管理员可创建、禁用用户账号,分配管理员权限
系统优势
轻量部署:单文件运行,无需复杂配置,支持无internet环境的局域网使用
数据安全:采用密码哈希存储,保护用户信息安全
响应式设计:界面适配不同设备屏幕,兼顾电脑与移动设备使用
操作简洁:直观的视觉布局,减少学习成本,用户上手即用
技术架构
开发语言:Python 3.x
Web 框架:Flask
数据库:SQLite(无需额外安装数据库服务)
前端技术:HTML5 + CSS3(原生实现,无额外依赖)
安全机制:密码哈希加密(werkzeug.security)
安装说明环境准备
1. 确保已安装 Python 3.6 及以上版本2. 安装依赖库:
| pip install flask flask-sqlalchemy werkzeug |
部署步骤
1. 下载项目文件 MRS1.6 吾爱发布.zip 并解压到本地目录
2. 进入解压后的文件夹,运行启动命令:
使用指南
1. 打开浏览器,访问本地服务地址(默认:http://本机IP地址:5001)
2. 系统首次运行会自动创建数据库文件 meeting_rooms.db 并初始化数据
初始账号
管理员账号:admin
初始密码:admin123
建议登录后立即修改管理员密码
登录系统
1. 访问系统首页会自动跳转至登录界面
2. 输入用户名和密码,点击 "登录" 按钮
3. 登录成功后进入系统主页,展示近七日会议室预约情况
普通用户操作查看预约
系统主页以日历表格形式展示所有会议室未来 7 天的预约安排
登录前可在登录页查看以日期分组的预约列表
个人预约以绿色背景标注,他人预约以橙色背景标注
预约会议室
1. 点击导航栏中的 "预约会议室"
2. 选择会议室、预约日期和时间段
3. 填写会议用途(可选)
4. 点击 "提交预约",系统会自动检测时间冲突并提示
管理个人预约
1. 点击导航栏中的 "我的预约" 查看所有个人预约记录
2. 可对未开始的预约进行编辑或删除操作
3. 已过期的预约仅支持查看,不支持修改
修改密码
1. 点击导航栏中的 "修改密码"
2. 输入原密码和新密码
3. 确认新密码后提交修改
管理员操作
管理员除拥有普通用户的所有权限外,还可进行以下操作:
管理会议室
1. 点击导航栏中的 "管理会议室"
2. 可查看所有会议室列表,支持添加新会议室
3. 对已有会议室可进行编辑(名称、容量、位置等)或删除操作
管理所有预约
1. 点击导航栏中的 "管理所有预约"
2. 可查看系统中所有预约记录,支持删除任意预约
3. 可按会议室或日期筛选预约记录
管理用户
1. 点击导航栏中的 "管理用户"
2. 可创建新用户账号,设置用户名和初始密码
3. 可编辑用户权限(设置为管理员或普通用户)
4. 支持删除用户账号(关联预约会一并删除)
界面说明登录页
顶部包含系统标题和登录表单
下方展示未来 7 天的预约列表,按日期分组
每条预约记录显示会议室名称、位置、时间段、用途和预约人
系统主页
顶部显示系统标题、当前登录用户和退出按钮
导航栏包含所有功能入口
主体区域以日历表格形式展示预约,左侧为会议室列表,顶部为日期导航
常见问题
1. 忘记密码怎么办?联系管理员重置密码管理员可在 "管理用户" 中修改任意用户的密码
2. 预约时提示冲突怎么办?查看该会议室的已有预约,选择其他时间段或更换其他会议室进行预约
3. 如何备份数据?数据库文件为 meeting_rooms.db,直接复制该文件即可备份恢复时将备份文件放回原目录覆盖即可
4. 能否多人同时使用?修改相关启动配置后,可运行于局域网内供局域网内任何人使用
5. 系统支持哪些浏览器?推荐使用 Chrome、Edge、Firefox 等现代浏览器不建议使用 IE 浏览器,可能存在兼容性问题
注意事项
请定期备份数据库文件以防数据丢失
管理员账号拥有最高权限,请妥善保管
请勿随意修改代码中的数据库路径和密钥配置如有其他问题或功能建议,欢迎在本帖留言交流!
以下是关键代码:
1. 用户认证模块(登录与权限验证)
[Python] 纯文本查看 复制代码 from flask import session, redirect, url_for
from werkzeug.security import check_password_hash
from models import User # 假设User为用户数据模型
def login_user(username, password):
"""用户登录验证函数"""
user = User.query.filter_by(username=username).first()
if not user:
return {"status": False, "msg": "用户不存在"}
# 验证密码(使用哈希值比对,不存储明文)
if check_password_hash(user.password_hash, password):
# 记录登录状态与权限
session['user_id'] = user.id
session['is_admin'] = user.is_admin # 区分普通用户与管理员
return {"status": True, "msg": "登录成功"}
return {"status": False, "msg": "密码错误"}
def check_admin_permission():
"""验证管理员权限装饰器"""
def decorator(func):
def wrapper(*args, **kwargs):
if not session.get('is_admin'):
return redirect(url_for('no_permission')) # 无权限跳转
return func(*args, **kwargs)
return wrapper
return decorator
功能说明:实现用户登录密码验证(基于哈希加密)和管理员权限控制,是系统安全的核心模块。
2. 会议室预约冲突检测
[Python] 纯文本查看 复制代码 from datetime import datetime
from models import Reservation, MeetingRoom # 预约与会议室数据模型
def check_reservation_conflict(room_id, start_time, end_time, date):
"""检测会议室预约时间冲突"""
# 将日期与时间拼接为完整datetime对象
start = datetime.strptime(f"{date} {start_time}", "%Y-%m-%d %H:%M")
end = datetime.strptime(f"{date} {end_time}", "%Y-%m-%d %H:%M")
# 查询同一会场的已有预约
existing = Reservation.query.filter_by(room_id=room_id, date=date).all()
for res in existing:
res_start = datetime.strptime(f"{date} {res.start_time}", "%Y-%m-%d %H:%M")
res_end = datetime.strptime(f"{date} {res.end_time}", "%Y-%m-%d %H:%M")
# 时间重叠检测逻辑
if not (end <= res_start or start >= res_end):
return True # 存在冲突
return False # 无冲突
def create_reservation(user_id, room_id, date, start_time, end_time, purpose):
"""创建预约(含冲突检测)"""
if check_reservation_conflict(room_id, start_time, end_time, date):
return {"status": False, "msg": "该时间段已被预约,请选择其他时间"}
# 无冲突则创建新预约
new_res = Reservation(
user_id=user_id,
room_id=room_id,
date=date,
start_time=start_time,
end_time=end_time,
purpose=purpose
)
db.session.add(new_res)
db.session.commit()
return {"status": True, "msg": "预约成功"}
功能说明:通过时间重叠算法检测预约冲突,是会议室资源管理的核心逻辑,直接影响系统可用性。
3. 预约数据查询与展示
[Python] 纯文本查看 复制代码 from flask import render_template
from datetime import datetime, timedelta
from models import Reservation, MeetingRoom
def get_weekly_reservations():
"""获取未来7天的所有预约数据"""
today = datetime.now().date()
# 生成未来7天日期列表
dates = [today + timedelta(days=i) for i in range(7)]
weekly_data = {}
for date in dates:
# 按日期查询预约,关联会议室信息
reservations = Reservation.query.filter_by(date=date).join(
MeetingRoom, Reservation.room_id == MeetingRoom.id
).with_entities(
MeetingRoom.name, MeetingRoom.location,
Reservation.start_time, Reservation.end_time,
Reservation.purpose, Reservation.user_id
).all()
# 格式化数据为前端可展示的结构
weekly_data[str(date)] = [
{
"room": res.name,
"location": res.location,
"time": f"{res.start_time}-{res.end_time}",
"purpose": res.purpose,
"user": res.user_id
} for res in reservations
]
return weekly_data
功能说明:实现未来 7 天预约数据的查询、关联与格式化,是前端展示预约信息的核心数据来源。
|