php实现叫号系统
实现叫号系统的核心功能
叫号系统通常用于医院、银行等场所,主要功能包括取号、叫号、显示当前号码等。以下是一个基于PHP和MySQL的简单实现方案。
数据库设计
创建名为queue_system的数据库,包含两个表:
CREATE TABLE `tickets` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ticket_number` varchar(20) NOT NULL,
`status` enum('waiting','called','completed') DEFAULT 'waiting',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
CREATE TABLE `counters` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`current_ticket` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
);
取号功能实现
创建get_ticket.php文件:

<?php
$conn = new mysqli('localhost', 'username', 'password', 'queue_system');
$prefix = date('Ymd');
$lastTicket = $conn->query("SELECT MAX(ticket_number) as last FROM tickets WHERE ticket_number LIKE '$prefix%'")->fetch_assoc();
$nextNum = $lastTicket['last'] ? intval(substr($lastTicket['last'], 8)) + 1 : 1;
$ticketNumber = $prefix . str_pad($nextNum, 3, '0', STR_PAD_LEFT);
$conn->query("INSERT INTO tickets (ticket_number) VALUES ('$ticketNumber')");
echo json_encode(['ticket_number' => $ticketNumber]);
?>
叫号功能实现
创建call_ticket.php文件:
<?php
$conn = new mysqli('localhost', 'username', 'password', 'queue_system');
$counterId = $_POST['counter_id'] ?? 1;
$ticket = $conn->query("SELECT * FROM tickets WHERE status='waiting' ORDER BY created_at ASC LIMIT 1")->fetch_assoc();
if ($ticket) {
$conn->query("UPDATE tickets SET status='called' WHERE id={$ticket['id']}");
$conn->query("UPDATE counters SET current_ticket='{$ticket['ticket_number']}' WHERE id=$counterId");
echo json_encode(['success' => true, 'ticket' => $ticket]);
} else {
echo json_encode(['success' => false]);
}
?>
显示当前号码
创建display.php文件:

<?php
$conn = new mysqli('localhost', 'username', 'password', 'queue_system');
$current = $conn->query("SELECT c.name, t.ticket_number FROM counters c LEFT JOIN tickets t ON t.ticket_number = c.current_ticket")->fetch_all(MYSQLI_ASSOC);
$waitingCount = $conn->query("SELECT COUNT(*) as cnt FROM tickets WHERE status='waiting'")->fetch_assoc();
header('Content-Type: application/json');
echo json_encode([
'counters' => $current,
'waiting_count' => $waitingCount['cnt']
]);
?>
前端界面实现
创建简单的HTML界面:
<!DOCTYPE html>
<html>
<head>
<title>叫号系统</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
.display { font-size: 2em; margin: 20px; }
.counter { border: 1px solid #ccc; padding: 10px; margin: 10px; }
</style>
</head>
<body>
<div>
<button id="getTicket">取号</button>
<div id="ticketNumber"></div>
</div>
<div id="countersDisplay"></div>
<script>
function updateDisplay() {
$.get('display.php', function(data) {
let html = `<div>等待人数: ${data.waiting_count}</div>`;
data.counters.forEach(c => {
html += `<div class="counter">${c.name}: ${c.ticket_number || '空闲'}</div>`;
});
$('#countersDisplay').html(html);
});
}
$('#getTicket').click(function() {
$.get('get_ticket.php', function(data) {
$('#ticketNumber').text('您的号码: ' + data.ticket_number);
updateDisplay();
});
});
setInterval(updateDisplay, 5000);
updateDisplay();
</script>
</body>
</html>
管理员界面
创建admin.php用于叫号操作:
<!DOCTYPE html>
<html>
<head>
<title>叫号管理</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
<div>
<button onclick="callTicket(1)">柜台1叫号</button>
<button onclick="callTicket(2)">柜台2叫号</button>
</div>
<script>
function callTicket(counterId) {
$.post('call_ticket.php', {counter_id: counterId}, function(data) {
if(data.success) {
alert('已叫号: ' + data.ticket.ticket_number);
} else {
alert('没有等待的号码');
}
});
}
</script>
</body>
</html>
系统扩展建议
- 添加用户类型分类(如普通、VIP)
- 实现多队列管理
- 增加声音提示功能
- 添加数据统计和分析功能
- 实现过号重新排队逻辑
该系统使用PHP和MySQL实现基本叫号功能,前端使用jQuery进行简单交互。实际部署时需要根据具体需求进行调整和完善。






