🗣 Wd提问: PHP源码排班系统
🤖 Ai回答: 以下是一个简单的 基于 PHP 的排班系统源码示例,适合初学者或小型团队使用。该系统支持:
用户管理(员工)
班次设置(如早班、晚班、休息等)
月度排班表生成
排班查看与编辑
基础权限控制
✅ 本系统使用:`PHP + MySQL + HTML + CSS + JavaScript`
📁 项目结构清晰,可直接运行在本地环境(如 XAMPP / WAMP / LAMP)
🗂️ 项目目录结构
schedule_system/
│
├── config.php 数据库配置
├── index.php 首页(登录/跳转)
├── login.php 登录页面
├── logout.php 登出
├── dashboard.php 管理员首页
├── users.php 员工管理
├── shifts.php 班次管理
├── schedule.php 排班管理(核心功能)
├── assets/
│ ├── css/
│ │ └── style.css
│ └── js/
│ └── script.js
└── db/
└── schema.sql 数据库建表语句
🛠️ 1、数据库建表(`db/schema.sql`)
sql
创建数据库
CREATE DATABASE IF NOT EXISTS schedule_db;
USE schedule_db;
员工表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
role ENUM('admin', 'staff') DEFAULT 'staff',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
班次表
CREATE TABLE shifts (
id INT AUTO_INCREMENT PRIMARY KEY,
shift_name VARCHAR(30) NOT NULL,
start_time TIME NOT NULL,
end_time TIME NOT NULL
);
排班表(按月存储)
CREATE TABLE schedules (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
shift_id INT NOT NULL,
date DATE NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (shift_id) REFERENCES shifts(id) ON DELETE CASCADE,
UNIQUE KEY unique_date_user (date, user_id)
);
💡 执行此文件创建数据库和表。
🔐 2、`config.php`(数据库连接)
php
<?php
$host = 'localhost';
$dbname = 'schedule_db';
$username = 'root'; // 根据你的数据库账号修改
$password = ''; // 根据你的数据库密码修改
try {
$pdo = new PDO(mysql:host=$host;dbname=$dbname, $username, $password);
$pdo-setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die(数据库连接失败: 、$e-getMessage());
}
?
📝 3、`login.php`(登录页面)
php
<?php
session_start();
require_once 'config.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// 简单验证(实际应加密密码)
if ($username === 'admin' && $password === '123456') {
$_SESSION['user'] = ['id' = 1, 'role' = 'admin', 'name' = '管理员'];
header('Location: dashboard.php');
exit;
} else {
$error = 用户名或密码错误;
}
}
?
<!DOCTYPE html
<html lang=zh
<head
<meta charset=UTF-8
<title登录 排班系统</title
<link rel=stylesheet href=assets/css/style.css
</head
<body class=login-page
<div class=form-container
<h2管理员登录</h2
<?php if (isset($error)): ?
<p class=error<?= htmlspecialchars($error) ?</p
<?php endif; ?
<form method=POST
<input type=text name=username placeholder=用户名 required<br
<input type=password name=password placeholder=密码 required<br
<button type=submit登录</button
</form
</div
</body
</html
📊 4、`dashboard.php`(管理员主页)
php
<?php
session_start();
if (!isset($_SESSION['user']) $_SESSION['user']['role'] !== 'admin') {
header('Location: login.php');
exit;
}
require_once 'config.php';
// 获取统计信息
$stmt = $pdo-query(SELECT COUNT(*) FROM users);
$total_users = $stmt-fetchColumn();
$stmt = $pdo-query(SELECT COUNT(*) FROM shifts);
$total_shifts = $stmt-fetchColumn();
$stmt = $pdo-query(SELECT COUNT(*) FROM schedules WHERE date = CURDATE() INTERVAL 7 DAY);
$recent_schedules = $stmt-fetchColumn();
?
<!DOCTYPE html
<html lang=zh
<head
<meta charset=UTF-8
<title管理后台</title
<link rel=stylesheet href=assets/css/style.css
</head
<body
<div class=container
<h1排班管理系统</h1
<p欢迎,<?= htmlspecialchars($_SESSION['user']['name']) ?!</p
<div class=stats
<div class=stat-card员工总数: <?= $total_users ?</div
<div class=stat-card班次数量: <?= $total_shifts ?</div
<div class=stat-card最近7天排班: <?= $recent_schedules ?</div
</div
<div class=nav-links
<a href=users.php👥 员工管理</a
<a href=shifts.php⏰ 班次管理</a
<a href=schedule.php📅 月度排班</a
<a href=logout.php🚪 退出登录</a
</div
</div
</body
</html
👥 5、`users.php`(员工管理)
php
<?php
session_start();
if (!isset($_SESSION['user']) $_SESSION['user']['role'] !== 'admin') {
header('Location: login.php');
exit;
}
require_once 'config.php';
// 添加员工
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_user'])) {
$name = trim($_POST['name']);
if (!empty($name)) {
$stmt = $pdo-prepare(INSERT INTO users (name, role) VALUES (?, 'staff'));
$stmt-execute([$name]);
$msg = 员工添加成功;
}
}
// 删除员工
if (isset($_GET['delete'])) {
$id = (int)$_GET['delete'];
$stmt = $pdo-prepare(DELETE FROM users WHERE id = ?);
$stmt-execute([$id]);
$msg = 员工删除成功;
}
// 查询所有员工
$stmt = $pdo-query(SELECT id, name FROM users ORDER BY name);
$users = $stmt-fetchAll();
?
<!DOCTYPE html
<html lang=zh
<head
<meta charset=UTF-8
<title员工管理</title
<link rel=stylesheet href=assets/css/style.css
</head
<body
<div class=container
<h2员工管理</h2
<?php if (isset($msg)): ?
<p class=success<?= htmlspecialchars($msg) ?</p
<?php endif; ?
<! 添加员工表单
<form method=POST class=form-inline
<input type=text name=name placeholder=员工姓名 required
<button type=submit name=add_user添加员工</button
</form
<! 员工列表
<table
<thead
<tr
<thID</th
<th姓名</th
<th操作</th
</tr
</thead
<tbody
<?php foreach ($users as $u): ?
<tr
<td<?= $u['id'] ?</td
<td<?= htmlspecialchars($u['name']) ?</td
<td
<a href=?delete=<?= $u['id'] ? onclick=return confirm('确定删除?')删除</a
</td
</tr
<?php endforeach; ?
</tbody
</table
</div
</body
</html
⏰ 6、`shifts.php`(班次管理)
php
<?php
session_start();
if (!isset($_SESSION['user']) $_SESSION['user']['role'] !== 'admin') {
header('Location: login.php');
exit;
}
require_once 'config.php';
// 添加班次
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_shift'])) {
$name = trim($_POST['name']);
$start = $_POST['
📣 商家广告 :
👍
0
👎
IP地址: 228.43.41.76
搜索次数: 0
提问时间: 2025-11-05 22:37:27
🛒 域名购买 :
ltkj.net souhuai.com hc.gs chemen.com.cn ndgj.cn rq.gs wosou.com.cn 23.gold lifeisacharm.com 02.gs
❓️ 热门提问 :
robots.txt SEO 关闭vps 家用电脑主机多少钱 vps优惠促销 hgx h100服务器 站群SEO网站日志性能监控工具性能测试性能监控 云计算公司 linux安装dhcp服务器 外贸服务器 机柜控制柜 豌豆Ai站群搜索引擎系统
🌐 域名评估 :
ff.hn.cn g.fj.cn s.qh.cn iveh.cn ogau.cn xphone.uno su7.autos app.ln.cn rt.chat su7.jl.cn
⛏ 最新挖掘 :
凯里酸汤鱼 贵阳烤脑花 都匀毛尖茶 花溪牛肉粉 贵阳烤生蚝 贵阳烤豆腐 贵阳纸包鱼 贵阳特色菜
🖌 热门作画 :
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊 :
🔗 友情链接 :
软件开发公司
过关考典
ai提问
🧰 站长工具 :Ai工具 whois查询 搜索
📢 温馨提示 :本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持 :本站由豌豆Ai 提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。