图书馆志愿者值班管理系统:Python 实现值班、换班、调班和请假功能

本系统使用 Python 语言构建,利用 MySQL 数据库存储值班信息,并使用 Pandas 库导入和处理值班表格。系统功能包括:

  1. 值班功能: 添加志愿者值班信息,可以指定日期和班次。
  2. 换班功能: 允许志愿者之间相互换班,需管理员审批。
  3. 调班功能: 允许志愿者调整自己的值班时间,需管理员审批。
  4. 请假功能: 允许志愿者请假,需管理员审批。

1. 环境配置

首先,我们需要安装 Python 数据库驱动程序,这里选择 PyMySQL。

pip install PyMySQL

接下来,安装 Pandas 库用于导入和处理值班表格。

pip install pandas

2. 代码实现

import pymysql
import pandas as pd
import datetime

# 连接数据库
host = 'localhost'  # 数据库主机地址
port = 3306  # 数据库端口号
user = 'root'  # 数据库用户名
password = 'password'  # 数据库密码
database = 'Library'  # 数据库名称

# 连接数据库
db = pymysql.connect(host=host, port=port, user=user, password=password, database=database)

# 创建游标
cursor = db.cursor()

# 读取 Excel 文件
df = pd.read_excel('DutySchedule.xlsx')

# 将 Excel 文件中的数据导入到 Volunteers 表格中
for index, row in df.iterrows():
    name = row['姓名']
    date = row['日期']
    shift = row['班次']
    query = f'INSERT INTO Volunteers (name, date, shift) VALUES ('{name}', '{date}', '{shift}')'
    cursor.execute(query)
    db.commit()

# 值班功能
def sign_up(name, date, shift):
    # 查询该日期该班次是否已经有人值班
    query = f'SELECT * FROM Volunteers WHERE date='{date}' AND shift='{shift}'' 
    cursor.execute(query)
    results = cursor.fetchall()
    if len(results) > 0:
        return '该日期该班次已经有人值班'
    
    # 将值班信息插入 Volunteers 表格中
    query = f'INSERT INTO Volunteers (name, date, shift) VALUES ('{name}', '{date}', '{shift}')'
    cursor.execute(query)
    db.commit()
    
    return '值班成功'

# 换班功能
def swap(name1, name2, date1, date2, shift):
    # 查询原来的值班信息
    query1 = f'SELECT * FROM Volunteers WHERE name='{name1}' AND date='{date1}' AND shift='{shift}'' 
    cursor.execute(query1)
    result1 = cursor.fetchone()
    if result1 is None:
        return '找不到原来的值班信息'
    
    # 查询新的值班信息
    query2 = f'SELECT * FROM Volunteers WHERE name='{name2}' AND date='{date2}' AND shift='{shift}'' 
    cursor.execute(query2)
    result2 = cursor.fetchone()
    if result2 is not None:
        return '新的值班信息已经存在'
    
    # 审批换班申请
    # TODO: 添加审批代码
    
    # 删除原来的值班信息
    query3 = f'DELETE FROM Volunteers WHERE name='{name1}' AND date='{date1}' AND shift='{shift}'' 
    cursor.execute(query3)
    db.commit()
    
    # 插入新的值班信息
    query4 = f'INSERT INTO Volunteers (name, date, shift) VALUES ('{name2}', '{date2}', '{shift}')'
    cursor.execute(query4)
    db.commit()
    
    return '换班成功'

# 调班功能
def change(name1, name2, date1, date2, shift1, shift2):
    # 查询原来的值班信息和新的值班信息
    query1 = f'SELECT * FROM Volunteers WHERE name='{name1}' AND date='{date1}' AND shift='{shift1}'' 
    cursor.execute(query1)
    result1 = cursor.fetchone()
    if result1 is None:
        return '找不到原来的值班信息'
    
    query2 = f'SELECT * FROM Volunteers WHERE name='{name2}' AND date='{date2}' AND shift='{shift2}'' 
    cursor.execute(query2)
    result2 = cursor.fetchone()
    if result2 is None:
        return '找不到新的值班信息'
    
    # 审批调班申请
    # TODO: 添加审批代码
    
    # 删除原来的值班信息和新的值班信息
    query3 = f'DELETE FROM Volunteers WHERE name='{name1}' AND date='{date1}' AND shift='{shift1}'' 
    cursor.execute(query3)
    db.commit()
    
    query4 = f'DELETE FROM Volunteers WHERE name='{name2}' AND date='{date2}' AND shift='{shift2}'' 
    cursor.execute(query4)
    db.commit()
    
    # 插入新的值班信息
    query5 = f'INSERT INTO Volunteers (name, date, shift) VALUES ('{name1}', '{date2}', '{shift2}')'
    cursor.execute(query5)
    db.commit()
    
    query6 = f'INSERT INTO Volunteers (name, date, shift) VALUES ('{name2}', '{date1}', '{shift1}')'
    cursor.execute(query6)
    db.commit()
    
    return '调班成功'

# 请假功能
def take_leave(name, date, shift):
    # 查询该日期该班次是否有人值班
    query = f'SELECT * FROM Volunteers WHERE name='{name}' AND date='{date}' AND shift='{shift}'' 
    cursor.execute(query)
    result = cursor.fetchone()
    if result is None:
        return '找不到该日期该班次的值班信息'
    
    # 审批请假申请
    # TODO: 添加审批代码
    
    # 删除值班信息
    query2 = f'DELETE FROM Volunteers WHERE name='{name}' AND date='{date}' AND shift='{shift}'' 
    cursor.execute(query2)
    db.commit()
    
    return '请假成功'

# 关闭数据库连接
cursor.close()
db.close()

3. 审批功能实现

系统中的换班、调班和请假功能都需要管理员审批。可以添加一个管理员账号,并使用 if 语句判断用户身份,只有管理员才能进行审批操作。例如:

def approve_swap(name1, name2, date1, date2, shift):
    # 判断当前用户是否为管理员
    if current_user.is_admin():
        # 审批通过
        # ...
    else:
        return '您没有权限审批'

4. 联网功能

可以使用 Flask 或 Django 等 Web 框架将代码部署到 Web 服务器上,并使用 HTML 和 JavaScript 创建用户界面,实现联网功能。

总结

本代码是一个简单的图书馆志愿者值班管理系统示例,可以根据实际需求进行扩展和完善,例如:

  • 添加用户角色管理,例如管理员、志愿者等。
  • 使用 Flask 或 Django 构建 Web 界面,实现更友好的用户交互。
  • 使用其他数据库或文件格式存储值班信息。
  • 添加其他功能,例如自动提醒值班人员等。

本系统可以帮助图书馆管理者更方便地管理志愿者值班,提高效率和管理水平。

图书馆志愿者值班管理系统:Python 实现值班、换班、调班和请假功能

原文地址: https://www.cveoy.top/t/topic/npvK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录