当前位置:首页 > JavaScript

js怎么实现叫号

2026-04-07 09:49:21JavaScript

实现叫号功能的方法

在JavaScript中实现叫号功能,可以通过队列(Queue)数据结构来管理号码的顺序。以下是一个简单的实现方法:

class Queue {
  constructor() {
    this.items = [];
  }

  enqueue(element) {
    this.items.push(element);
  }

  dequeue() {
    if (this.isEmpty()) {
      return "Queue is empty";
    }
    return this.items.shift();
  }

  isEmpty() {
    return this.items.length === 0;
  }

  size() {
    return this.items.length;
  }
}

const ticketQueue = new Queue();

// 生成号码
function generateTicket() {
  const ticketNumber = Math.floor(Math.random() * 1000) + 1;
  ticketQueue.enqueue(ticketNumber);
  return ticketNumber;
}

// 叫号
function callNext() {
  return ticketQueue.dequeue();
}

前端界面实现

结合HTML和CSS创建一个简单的叫号系统界面:

<div class="ticket-system">
  <h3>排队叫号系统</h3>
  <button id="generateBtn">取号</button>
  <button id="callBtn">叫号</button>
  <div id="currentNumber">当前号码: 无</div>
  <div id="waitingList">等待人数: 0</div>
</div>

<script>
  const generateBtn = document.getElementById('generateBtn');
  const callBtn = document.getElementById('callBtn');
  const currentNumber = document.getElementById('currentNumber');
  const waitingList = document.getElementById('waitingList');

  generateBtn.addEventListener('click', () => {
    const ticket = generateTicket();
    alert(`您的号码是: ${ticket}`);
    waitingList.textContent = `等待人数: ${ticketQueue.size()}`;
  });

  callBtn.addEventListener('click', () => {
    const nextNumber = callNext();
    if (nextNumber !== "Queue is empty") {
      currentNumber.textContent = `当前号码: ${nextNumber}`;
      waitingList.textContent = `等待人数: ${ticketQueue.size()}`;
    } else {
      alert("没有等待的号码");
    }
  });
</script>

数据库集成方案

对于需要持久化存储的场景,可以结合数据库实现:

// 使用MongoDB示例
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/ticket_system');

const ticketSchema = new mongoose.Schema({
  number: Number,
  createdAt: { type: Date, default: Date.now },
  called: { type: Boolean, default: false }
});

const Ticket = mongoose.model('Ticket', ticketSchema);

async function generateTicket() {
  const lastTicket = await Ticket.findOne().sort({ number: -1 });
  const newNumber = lastTicket ? lastTicket.number + 1 : 1;
  const ticket = new Ticket({ number: newNumber });
  await ticket.save();
  return newNumber;
}

async function callNext() {
  const ticket = await Ticket.findOneAndUpdate(
    { called: false },
    { $set: { called: true } },
    { sort: { createdAt: 1 }, new: true }
  );
  return ticket ? ticket.number : null;
}

高级功能扩展

  1. 多窗口叫号: 可以扩展为多个服务窗口同时叫号,每个窗口维护自己的队列。

  2. 优先级队列: 实现VIP优先叫号功能,可以创建两个队列分别处理普通和VIP号码。

  3. WebSocket实时更新: 使用Socket.io实现实时叫号更新,所有客户端都能即时看到最新叫号信息。

  4. 历史记录: 存储叫号历史记录,方便后续查询和分析。

  5. 声音提示: 在叫号时添加语音播报功能,提升用户体验。

    js怎么实现叫号

// 语音播报示例
function speak(text) {
  const utterance = new SpeechSynthesisUtterance(text);
  speechSynthesis.speak(utterance);
}

// 在callNext函数中添加
speak(`请${nextNumber}号到窗口办理业务`);

标签: js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…