当前位置:首页 > 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实现叫号系统

<?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实现叫号系统

<?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>

系统扩展建议

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

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

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

相关文章

vue实现一个插件系统

vue实现一个插件系统

实现插件系统的核心思路 Vue的插件系统允许通过Vue.use()注册全局功能,通常包含以下要素: 暴露install方法供Vue调用 添加全局资源(指令/过滤器/组件等) 注入组件选项 添加实例…

php实现递归

php实现递归

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

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="uploa…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $imag…