php实现叫号系统
实现叫号系统的基本思路
叫号系统通常用于医院、银行、政务大厅等场所,核心功能包括取号、叫号、显示当前号码和排队情况。PHP作为后端语言,可结合MySQL数据库和前端技术实现。
数据库设计
创建基本表结构存储号码信息:
CREATE TABLE queue_numbers (
id INT AUTO_INCREMENT PRIMARY KEY,
number VARCHAR(20) NOT NULL,
status ENUM('waiting', 'called', 'completed') DEFAULT 'waiting',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
called_at TIMESTAMP NULL
);
取号功能实现
创建取号接口(take_number.php):
<?php
header('Content-Type: application/json');
require 'db_connection.php';
$prefix = 'A'; // 可根据业务类型设置不同前缀
$lastNumber = $db->query("SELECT MAX(number) FROM queue_numbers WHERE number LIKE '$prefix%'")->fetchColumn();
$newNum = $prefix . str_pad((int)substr($lastNumber, 1) + 1, 3, '0', STR_PAD_LEFT);
$stmt = $db->prepare("INSERT INTO queue_numbers (number) VALUES (?)");
$stmt->execute([$newNum]);
echo json_encode(['number' => $newNum]);
?>
叫号功能实现
创建叫号接口(call_number.php):
<?php
header('Content-Type: application/json');
require 'db_connection.php';
// 获取最早等待的号码
$stmt = $db->prepare("SELECT id, number FROM queue_numbers WHERE status = 'waiting' ORDER BY created_at ASC LIMIT 1");
$stmt->execute();
$number = $stmt->fetch(PDO::FETCH_ASSOC);
if ($number) {
$update = $db->prepare("UPDATE queue_numbers SET status = 'called', called_at = NOW() WHERE id = ?");
$update->execute([$number['id']]);
echo json_encode($number);
} else {
echo json_encode(['error' => 'No numbers in queue']);
}
?>
显示排队信息
创建查询接口(queue_status.php):

<?php
header('Content-Type: application/json');
require 'db_connection.php';
$waiting = $db->query("SELECT COUNT(*) FROM queue_numbers WHERE status = 'waiting'")->fetchColumn();
$called = $db->query("SELECT number FROM queue_numbers WHERE status = 'called' ORDER BY called_at DESC LIMIT 1")->fetchColumn();
echo json_encode([
'current' => $called ?: '--',
'waiting_count' => $waiting
]);
?>
前端显示实现
基本HTML显示页面(display.html):
<!DOCTYPE html>
<html>
<head>
<title>叫号系统显示屏</title>
<style>
.display {
font-size: 5em;
text-align: center;
}
.queue {
font-size: 2em;
margin-top: 50px;
}
</style>
</head>
<body>
<div class="display" id="currentNumber">--</div>
<div class="queue">等待人数: <span id="waitingCount">0</span></div>
<script>
function updateDisplay() {
fetch('queue_status.php')
.then(response => response.json())
.then(data => {
document.getElementById('currentNumber').textContent = data.current;
document.getElementById('waitingCount').textContent = data.waiting_count;
});
}
setInterval(updateDisplay, 3000);
updateDisplay();
</script>
</body>
</html>
叫号终端实现
管理员叫号界面(caller.html):
<!DOCTYPE html>
<html>
<head>
<title>叫号终端</title>
</head>
<body>
<button id="callNext">叫号</button>
<div id="message"></div>
<script>
document.getElementById('callNext').addEventListener('click', () => {
fetch('call_number.php')
.then(response => response.json())
.then(data => {
document.getElementById('message').textContent =
data.error ? data.error : `已叫号: ${data.number}`;
});
});
</script>
</body>
</html>
扩展功能建议
-
多队列支持:修改数据库结构,添加queue_type字段区分不同业务类型

-
语音播报:使用Web Speech API实现浏览器端语音提示
function speak(text) { const utterance = new SpeechSynthesisUtterance(text); speechSynthesis.speak(utterance); } -
数据统计:添加报表功能,统计每日叫号量和服务时长
-
过号处理:添加超时逻辑,长时间未处理的号码自动返回队列
-
权限控制:叫号终端添加登录验证,防止未授权操作
该系统可通过浏览器、大屏显示器和取号终端配合使用,根据实际需求调整界面样式和功能细节。






