当前位置:首页 > PHP

php实现叫号系统

2026-02-15 06:26:23PHP

实现叫号系统的核心功能

叫号系统通常用于医院、银行等场所,主要功能包括取号、叫号、显示当前号码等。以下是一个基于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用于叫号操作:

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>

系统扩展建议

  1. 添加用户类型分类(如普通、VIP)
  2. 实现多队列管理
  3. 增加声音提示功能
  4. 添加数据统计和分析功能
  5. 实现过号重新排队逻辑

该系统使用PHP和MySQL实现基本叫号功能,前端使用jQuery进行简单交互。实际部署时需要根据具体需求进行调整和完善。

标签: 系统php
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 // 创建…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…

php mvc 实现

php mvc 实现

PHP MVC 实现方法 MVC(Model-View-Controller)是一种设计模式,用于分离应用程序的逻辑、数据和界面。以下是实现PHP MVC框架的关键步骤。 目录结构 创建以下目录结构…