求银行排队叫号系统价格 java代码~使用多线程,队列~

1984人阅读
java(54)
关于队列,使用的地方非常的多。现实中有很多的例子。比如医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等。市场上又这样的排队取号的设备。他们的功能基本如下:1、系统可联网联机统一发号;2、系统可无线对接,也可有线连接;3、系统支持100种业务以上;4、系统支持多个等候区提示等候信息,各等候区语音及显示可独立;5、个性化语音可呼叫客户所办理的业务名称(医院版可呼叫病人姓名)等信息;6、号码可在不同服务类别的柜台窗口之间相互转移,顾客不必重复排队;7、具备登录操作功能和退出操作功能:工作开始前,输入员工登陆号进行登录,工作结束后,退出排队系统,这对统计非常准确;8、发号机界面的图片客户完全可以按个性化自主设计更换;9、各项业务的按键客户完全可以按个性化自主设计更换;10、支持通过读卡器读取客户相关信息后,自动区分VIP客户和普通客户,自动区分对公客户和对私客户,并按营业机构自定的排队规则自动编组排队;11、号票上和发号机上的显示屏会显示每个顾客前面的等待人数;12、各项业务队列客户完全可以自主按需任意增减;13、各项业务的等待人数客户完全可以自主设定在界面上显示并可任意排版;14、各项业务的工作时段及暂停时段客户完全可以自主设定;15、操作员工的增减及登陆账号客户完全可以自主更改;16、语音呼叫的信息客户完全可以自主按个性化更改;17、显示屏的任何显示信息客户完全可以自主按个性化更改;18、顾客办理各项业务的序号客户完全可以自主设置,如:贵宾业务或理财金业务可设为1-200号内、外币业务可设为201-500号内、人民币业务设501-9999号内;19、工作员工所办理的业务队列客户完全可以自主任意设置优先级;20、号票上的文字内容、图案、业务名称、时间格式、更改字体及大小、纸张长短等客户完全可以自主按个性化设置;21、系统支持播放背景音乐,音乐曲目完全由客户自主选择;22、系统支持在值班经理处增设监控软件,处理各种特殊状况;23、系统支持高清晰度等离子显示器、大屏幕、电视墙等多种显示设备,显示丰富的排队信息;24、系统支持连接互联网络,可实现远程监控;25、系统设有扩展功能,当需要有关统计和管理数据时,可热键激活管理软件并打印;26、系统可根据需要配置客户评价器及排队信息(短信)提示功能。OK,了解了这些后,我们来实现一个简单的例子吧!先看看效果图:废话不多说了,看代码:CallNum.javapackage com.
import java.util.concurrent.ExecutorS
import java.util.concurrent.E
import java.util.concurrent.TimeU
* @see 模拟银行叫号系统
* @author Herman.Xiong
* @date 日 14:48:48
* @version V1.0
public class CallNum {
public static void main(String[] args) throws InterruptedException {
//创建服务中心,如一个银行的营业厅
Center center = new Center();
ExecutorService exec = Executors.newCachedThreadPool();
//模拟产生服务人员
Producer producer = new Producer(center);
//模拟产生N多客户
Consumer consumer = new Consumer(center);
exec.execute(producer);
//模拟10名客户
for (int i = 0; i & 10; i++) {
exec.execute(consumer);
TimeUnit.SECONDS.sleep(10);
exec.shutdown();
//如有疑问,请加QQ群:共同学习!
Center.javapackage com.
import java.util.R
import java.util.concurrent.BlockingQ
import java.util.concurrent.LinkedBlockingQ
import java.util.concurrent.TimeU
* @see 服务中心
* @author Herman.Xiong
* @date 日 14:41:28
* @version V1.0
public class Center extends Thread {
private final static int MAXCOUNT = 10;
private BlockingQueue&Waiter&
private BlockingQueue&Customer&
private Random rand = new Random(47);
private final static int PRODUCERSLEEPSEED = 100;
private final static int CONSUMERSLEEPSEED = 10000;
public Center() {
//创建10名提供服务的工作人员
this.waiters = new LinkedBlockingQueue&Waiter&(MAXCOUNT);
for (int i = 0; i & MAXCOUNT; i++) {
waiters.add(new Waiter());
//10名工作人员工作就绪,创建客户队列
this.customers = new LinkedBlockingQueue&Customer&();
public void produce() {
TimeUnit.MILLISECONDS.sleep(rand.nextInt(PRODUCERSLEEPSEED));
} catch (InterruptedException e) {
e.printStackTrace();
this.customers.add(new Customer());
public void consume() {
// 服务窗口可用
Waiter waiter = this.waiters.take();
this.waiters.remove(waiter);
// 客户可用
Customer customer = this.customers.take();
this.customers.remove(customer);
// 窗口显示
System.out.println(waiter + &正在为& + customer + &服务...&);
TimeUnit.MILLISECONDS.sleep(rand.nextInt(CONSUMERSLEEPSEED));
this.waiters.add(waiter);
} catch (InterruptedException e) {
System.err.println(&---& + e.getMessage());
} Producer.javapackage com.
* @see 生产者线程,模拟银行工作人员服务完成一位客户后开始准备服务下一位客户
* @author Herman.Xiong
* @date 日 14:55:43
* @version V1.0
public class Producer implements Runnable {
public Producer(Center center) {
this.center =
public void run() {
while (!Thread.interrupted()) {
//产生客户
center.produce();
Consumer.javapackage com.
* @see 模拟客户完成业务需求后,服务人员空闲就绪
* @author Herman.Xiong
* @date 日 14:57:11
* @version V1.0
public class Consumer implements Runnable {
public Consumer(Center center) {
this.center =
public void run() {
while (!Thread.interrupted()) {
center.consume();
:http://download.csdn.net/download/xmt/8167619关于大家关注我的博客!如有疑问,请加QQ群:共同学习!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:369039次
积分:7340
积分:7340
排名:第1912名
原创:126篇
评论:243条
阅读:23778
阅读:13362
阅读:22288
文章:17篇
阅读:78256
文章:34篇
阅读:62971
(1)(3)(2)(1)(3)(1)(3)(4)(3)(1)(4)(4)(5)(5)(4)(4)(4)(3)(1)(3)(5)(3)(3)(6)(14)(10)(11)(8)(6)(1)(1)排队叫号系统的排队流程_百度知道
排队叫号系统的排队流程
我有更好的答案
//e。系统结构图系统接线图<img class="ikqb_img" src="http,上面有号码.com/zhidao/wh%3D450%2C600/sign=ec6b7aa768fd3f/14ce36d3d539b600d352ac75cb76e:顾客取一张号票吗://e、前去办理.jpg" esrc="http、取票./zhidao/wh%3D600%2C800/sign=75e1d4d45bb087fb2d3d539b600d352ac75cb76e、等候人数.baidu、办理的业务类型等2:工作人员办完一笔业务后按下叫号器上的下一位按钮4://e、按键叫号、休息等待.com/zhidao/pic/item/14ce36d3d539b600d352ac75cb76e:持号票在休息区休息并留意显示屏音箱叫号3、时间
其他类似问题
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁用java实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号_百度知道
用java实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号
import java.awt.Cimport java.awt.event.ActionEimport java.awt.event.ActionLimport java.awt.event.WindowAimport java.awt.event.WindowEimport javax.swing.ButtonGimport javax.swing.JBimport javax.swing.JFimport javax.swing.JLimport javax.swing.JPimport javax.swing.JTextFpublic class BankWaiting extends JFrame implements ActionListener { int total = 0, now = 0; boolean is1Ready = false, is2Ready = false, is3Ready = int call1, call2, call3; JF JLabel jr, jl, jl1, j2, jl2, j3, jl3; JTextField jr4; JButton jb, jb1, jb2, j1; JButton workBut1, workBut2, workBut3; JPanel jp, jp1, jp2; public BankWaiting() {
setLayout(null);
jf = new JFrame(&银行叫号程序&);&#47;&#47; 窗体
jr = new JLabel(&请**号到*号窗口办理业务&);
jr.setBounds(300, 10, 800, 50);
jr.setForeground(Color.red);
j1 = new JButton(&取号&);
j1.addActionListener(this);
jr4 = new JTextField(&欢迎&);
jr4.setEditable(false);
ButtonGroup bg = new ButtonGroup();
bg.add(j1);
jp = new JPanel();
jl = new JLabel(&一号窗口&);
jl1 = new JLabel(&一号窗口,欢迎你!&);
jb = new JButton(&下一位&);
workBut1 = new JButton(&开始办理&);
workBut1.addActionListener(this);
jb.addActionListener(this);
jp.setBackground(Color.pink);
jp.setSize(200, 80);&#47;&#47; 大小
jp.setLocation(20, 120); &#47;&#47; 位置
jf.setLayout(null);
jp1 = new JPanel();
j2 = new JLabel(&二号窗口&);
jl2 = new JLabel(&二号窗口,欢迎你!&);
jb1 = new JButton(&下一位&);
workBut2 = new JButton(&开始办理&);
jb1.addActionListener(this);
workBut2.addActionListener(this);
jp1.setBackground(Color.pink);
jp1.setSize(200, 80);&#47;&#47; 大小
jp1.setLocation(250, 120); &#47;&#47; 位置
jf.setLayout(null);
jp2 = new JPanel();
j3 = new JLabel(&三号窗口&);
jl3 = new JLabel(&三号窗口,欢迎你!&);
jb2 = new JButton(&下一位&);
workBut3 = new JButton(&开始办理&);
workBut3.addActionListener(this);
jb2.addActionListener(this);
jp2.setBackground(Color.pink);
jp2.setSize(200, 80);&#47;&#47; 大小
jp2.setLocation(500, 120); &#47;&#47; 位置
jf.setLayout(null);
jf.add(jp);
jf.add(jp1);
jf.add(jp2);
jf.add(jr);
jp.add(jl);
jp.add(jl1);
jp.add(jb);
jp.add(workBut1);
jp1.add(j2);
jp1.add(jl2);
jp1.add(jb1);
jp1.add(workBut2);
jp2.add(j3);
jp2.add(jl3);
jp2.add(jb2);
jp2.add(workBut3);
jf.add(j1);
jf.add(jr4);
j1.setBounds(550, 300, 60, 30);
jr4.setBounds(300, 300, 200, 40);
jf.setSize(800, 600);
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}); } public void actionPerformed(ActionEvent e) {
String s = &&;
if (e.getSource() == j1) {
s = &第& + (++total) + &号,前面还有& + (total - now - 1) + &位顾客!&;
jr4.setText(s);
if (e.getSource() == jb) {
if (this.hasCustomers()) {
s = &请& + (++now) + &号顾客到一号窗口办理&;
jl1.setText(s);
jr.setText(s);
is1Ready =
s = &当前已经没有顾客了&;
jl1.setText(s);
is1Ready =
} else if (e.getSource() == jb1) {
if (this.hasCustomers()) {
s = &请& + (++now) + &号顾客到二号窗口办理&;
jl2.setText(s);
jr.setText(s);
is2Ready =
s = &当前已经没有顾客了&;
jl2.setText(s);
is2Ready =
} else if (e.getSource() == jb2) {
if (this.hasCustomers()) {
s = &请& + (++now) + &号顾客到三号窗口办理&;
jl3.setText(s);
jr.setText(s);
is3Ready =
s = &当前已经没有顾客了&;
jl3.setText(s);
is3Ready =
if (e.getSource() == workBut1) {
if (is1Ready) {
s = call1 + &号顾客正在办理业务。。。&;
jl1.setText(s);
is1Ready =
} else if (e.getSource() == workBut2) {
if (is2Ready) {
s = call2 + &号顾客正在办理业务。。。&;
jl2.setText(s);
is2Ready =
} else if (e.getSource() == workBut3) {
if (is3Ready) {
s = call3 + &号顾客正在办理业务。。。&;
jl3.setText(s);
is3Ready =
} } public boolean hasCustomers() {
if (now & total) {
} } public static void main(String[] args) {
new BankWaiting(); }}
其他类似问题
为您推荐:
您可能关注的推广
排队系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&&&银行排队系统(队列)
银行排队系统(队列)
运用队列,模拟银行排队叫号系统。需要实时显示各个窗口的信息以及目前等待人数,最后还需要输出统计信息。里面有完整的代码和实验报告,可参考。
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
课程资源下载排行有三种对应类型的客户:VIP客户,普通客户,快速客户 ,异步随机生成各种类型的客户,各类型客户在其对应窗口按顺序依次办理业务 。
本系统一共要产生三个号码管理器对象,各自管理一类用户的排队号码。这三个号码管理器对象统一由一个号码机器进行管理,这个号码机器在整个系统中始终只能有一个,所以,它要被设计成单例。
各类型客户在其对应窗口按顺序依次办理业务 ,准确地说,应该是窗口依次叫号。
各个窗口怎么知道该叫哪一个号了呢?它一定是问的相应的号码管理器,即服务窗口每次找号码管理器获取当前要被服务的号码。
NumberManager和NumberMachine类
l& NumberManager类
定义一个用于存储上一个客户号码的成员变量和用于存储所有等待服务的客户号码的队列集合。
定义一个产生新号码的方法和获取马上要为之服务的号码的方法,这两个方法被不同的线程操作了相同的数据,所以,要进行同步。
l& NumberMachine类
定义三个成员变量分别指向三个NumberManager对象,分别表示普通、快速和VIP客户的号码管理器,定义三个对应的方法来返回这三个NumberManager对象。
将NumberMachine类设计成单例。
private NumberMachine(){}
public static NumberMachine getInstance(){
private static NumberMachine instance=new Numbermachine();//设计成静态是因为静态方法不//能直接访问非静态成员变量
public static NumberMachine getInstance(){
ServiceWindow与CustomerType枚举类
l& CustomerType枚举类
系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。
l& ServiceWindow类
定义一个start方法,内部启动一个线程,根据服务窗口的类别分别循环调用三个不同的方法。
定义三个方法分别对三种客户进行服务,为了观察运行效果,应详细打印出其中的细节信息。
Java中switch条件可以是int或枚举,不能是long可以用枚举
&&&&&&&& private void expressService(){
&&&&&&&&&&&&&&&&&& Integer serviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();
&&&&&&&&&&&&&&&&&& String windowName = "第" + number + "号" + type + "窗口";&&&&&&
&&&&&&&&&&&&&&&&&& System.out.println(windowName + "开始获取快速任务!");&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& if(serviceNumber !=null){
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(windowName + "开始为第" + serviceNumber + "号快速客户服务");&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& int serviceTime = Constants.MIN_SERVICE_TIME;
&&&&&&&&&&&&&&&&&&&&&&&&&&& try {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Thread.sleep(serviceTime);
&&&&&&&&&&&&&&&&&&&&&&&&&&& } catch (InterruptedException e) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& e.printStackTrace();
&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(windowName + "完成为第" + serviceNumber + "号快速客户服务,总共耗时" + serviceTime/1000 + "秒");&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& }else{
&&&&&&&&&&&&&&&&&&&&&&&&&&& System.out.println(windowName + "没有取到快速任务!");&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& commonService();
&&&&&&&&&&&&&&&&&& }
&&&&&&&& }
MainClass类与Constants类
l& MainClass类
用for循环创建出4个普通窗口,再创建出1个快速窗口和一个VIP窗口。
接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、新的VIP客户号码。
l& Constants类
定义三个常量:MAX_SERVICE_TIME、MIN_SERVICE_TIME、COMMON_CUSTOMER_INTERVAL_TIME
阅读(...) 评论()

我要回帖

更多关于 排队叫号系统价格 的文章

 

随机推荐