這個(gè)簡(jiǎn)單。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到萍鄉(xiāng)網(wǎng)站設(shè)計(jì)與萍鄉(xiāng)網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋萍鄉(xiāng)地區(qū)。
先做幾個(gè)實(shí)體
客戶,售貨員,
客戶包括到達(dá)時(shí)間,完成目標(biāo)需要的時(shí)間,開(kāi)始操作的時(shí)間,結(jié)束的時(shí)間。
售貨員包括當(dāng)前正在服務(wù)的客戶,
開(kāi)2個(gè)線程。一個(gè)是客戶產(chǎn)生線程。
一個(gè)是售貨員消費(fèi)線程
中間用個(gè)公共寄存體queue。
客戶產(chǎn)生線程每次產(chǎn)生一個(gè)帶到達(dá)時(shí)間,完成目標(biāo)時(shí)間的客戶。
放倒隊(duì)列里,并提醒售貨員線程接收。
售貨員線程空置則從隊(duì)列里拿一個(gè)客戶,當(dāng)前時(shí)間=當(dāng)前時(shí)間和客戶到達(dá)的時(shí)間最大的一個(gè)。客戶的開(kāi)始操作時(shí)間=當(dāng)前時(shí)間
結(jié)束時(shí)間=當(dāng)前時(shí)間+需要時(shí)間。
處理完以后當(dāng)前時(shí)間=結(jié)束時(shí)間。
如果隊(duì)列空,售貨員線程等待。
不為空就繼續(xù)取。
注意所有處理過(guò)的客戶都需要放到一個(gè)List里。
然后這一天結(jié)束了,就把整個(gè)List里的客戶全部取出來(lái),就算平均等待時(shí)間,各種時(shí)間。。。。這個(gè)會(huì)統(tǒng)計(jì)的吧。
要求追分
經(jīng)典的生產(chǎn)者消費(fèi)者模式,網(wǎng)上百度一堆,兩種方式,一種blockingqueue阻塞隊(duì)列,一種邏輯實(shí)現(xiàn)
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class BankWaiting extends JFrame implements ActionListener {
int total = 0, now = 0;
boolean is1Ready = false, is2Ready = false, is3Ready = false;
int call1, call2, call3;
JFrame 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("銀行叫號(hào)程序");// 窗體
jr = new JLabel("請(qǐng)**號(hào)到*號(hào)窗口辦理業(yè)務(wù)");
jr.setBounds(300, 10, 800, 50);
jr.setForeground(Color.red);
j1 = new JButton("取號(hào)");
j1.addActionListener(this);
jr4 = new JTextField("歡迎");
jr4.setEditable(false);
ButtonGroup bg = new ButtonGroup();
bg.add(j1);
jp = new JPanel();
jl = new JLabel("一號(hào)窗口");
jl1 = new JLabel("一號(hào)窗口,歡迎你!");
jb = new JButton("下一位");
workBut1 = new JButton("開(kāi)始辦理");
workBut1.addActionListener(this);
jb.addActionListener(this);
jp.setBackground(Color.pink);
jp.setSize(200, 80);// 大小
jp.setLocation(20, 120); // 位置
jf.setLayout(null);
jp1 = new JPanel();
j2 = new JLabel("二號(hào)窗口");
jl2 = new JLabel("二號(hào)窗口,歡迎你!");
jb1 = new JButton("下一位");
workBut2 = new JButton("開(kāi)始辦理");
jb1.addActionListener(this);
workBut2.addActionListener(this);
jp1.setBackground(Color.pink);
jp1.setSize(200, 80);// 大小
jp1.setLocation(250, 120); // 位置
jf.setLayout(null);
jp2 = new JPanel();
j3 = new JLabel("三號(hào)窗口");
jl3 = new JLabel("三號(hào)窗口,歡迎你!");
jb2 = new JButton("下一位");
workBut3 = new JButton("開(kāi)始辦理");
workBut3.addActionListener(this);
jb2.addActionListener(this);
jp2.setBackground(Color.pink);
jp2.setSize(200, 80);// 大小
jp2.setLocation(500, 120); // 位置
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) + "號(hào),前面還有" + (total - now - 1) + "位顧客!";
jr4.setText(s);
}
if (e.getSource() == jb) {
if (this.hasCustomers()) {
s = "請(qǐng)" + (++now) + "號(hào)顧客到一號(hào)窗口辦理";
call1 = now;
jl1.setText(s);
jr.setText(s);
is1Ready = true;
} else {
s = "當(dāng)前已經(jīng)沒(méi)有顧客了";
jl1.setText(s);
is1Ready = false;
}
} else if (e.getSource() == jb1) {
if (this.hasCustomers()) {
s = "請(qǐng)" + (++now) + "號(hào)顧客到二號(hào)窗口辦理";
call2 = now;
jl2.setText(s);
jr.setText(s);
is2Ready = true;
} else {
s = "當(dāng)前已經(jīng)沒(méi)有顧客了";
jl2.setText(s);
is2Ready = false;
}
} else if (e.getSource() == jb2) {
if (this.hasCustomers()) {
s = "請(qǐng)" + (++now) + "號(hào)顧客到三號(hào)窗口辦理";
call3 = now;
jl3.setText(s);
jr.setText(s);
is3Ready = true;
} else {
s = "當(dāng)前已經(jīng)沒(méi)有顧客了";
jl3.setText(s);
is3Ready = false;
}
}
if (e.getSource() == workBut1) {
if (is1Ready) {
s = call1 + "號(hào)顧客正在辦理業(yè)務(wù)。。。";
jl1.setText(s);
is1Ready = false;
}
} else if (e.getSource() == workBut2) {
if (is2Ready) {
s = call2 + "號(hào)顧客正在辦理業(yè)務(wù)。。。";
jl2.setText(s);
is2Ready = false;
}
} else if (e.getSource() == workBut3) {
if (is3Ready) {
s = call3 + "號(hào)顧客正在辦理業(yè)務(wù)。。。";
jl3.setText(s);
is3Ready = false;
}
}
}
public boolean hasCustomers() {
if (now total) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
new BankWaiting();
}
}