用C或java编写排队服务程序

用C或java编写排队服务程序,第1张

这个简单。

先做几个实体

客户,售货员,

客户包括到达时间,完成目标需要的时间,开始 *** 作的时间,结束的时间。

售货员包括当前正在服务的客户

开2个线程。一个是客户产生线程。

一个是镇隐售汪好货员消费线程

中间用个公共寄存体queue。

客户产生线程每次产生一个带到达时间,完成目标时间的客户。

放倒队列里,并提醒售货员线程接收。

售货员线程空置则从队列里拿一个客户,当前时间=当前时间和客户到御陵厅达的时间最大的一个。客户的开始 *** 作时间=当前时间

结束时间=当前时间+需要时间。

处理完以后当前时间=结束时间。

如果队列空,售货员线程等待。

不为空就继续取。

注意所有处理过的客户都需要放到一个List里。

然后这一天结束了,就把整个List里的客户全部取出来,就算平均等待时间,各种时间。。。。这个会统计的吧。

要求追分

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("银行叫号程序")// 窗体

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)// 大小

jp.setLocation(20, 120)// 位置

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)// 大小

jp1.setLocation(250, 120)// 位置

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)// 大小

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) + "号,前面还有" + (total - now - 1) + "位顾客!"

jr4.setText(s)

}

if (e.getSource() == jb) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到一号窗口办理"

call1 = now

jl1.setText(s)

jr.setText(s)

is1Ready = true

} else {

s = "当前已经没有顾客了"

jl1.setText(s)

is1Ready = false

}

} else if (e.getSource() == jb1) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到二号窗口办理"

call2 = now

jl2.setText(s)

jr.setText(s)

is2Ready = true

} else {

s = "当前已经没有顾客了"

jl2.setText(s)

is2Ready = false

}

} else if (e.getSource() == jb2) {

if (this.hasCustomers()) {

s = "请" + (++now) + "号顾客到三号窗口办理"

call3 = now

jl3.setText(s)

jr.setText(s)

is3Ready = true

} else {

s = "当前已经没有顾客了"

jl3.setText(s)

is3Ready = false

}

}

if (e.getSource() == workBut1) {

if (is1Ready) {

s = call1 + "号顾客正在办理业务。。。"

jl1.setText(s)

is1Ready = false

}

} else if (e.getSource() == workBut2) {

if (is2Ready) {

s = call2 + "号顾客正在办理业务。。。"

jl2.setText(s)

is2Ready = false

}

} else if (e.getSource() == workBut3) {

if (is3Ready) {

s = call3 + "号顾客正在办理业务。。。"

jl3.setText(s)

is3Ready = false

}

}

}

public boolean hasCustomers() {

if (now <total) {

return true

} else {

return false

}

}

public static void main(String[] args) {

new BankWaiting()

}

}

排序就排序呗。

数据量不大,排序花不了多少时间的。

其实既然你要求的“要求服务时间”是固定的,那么优先级就等于1+等待时间/要求服务时间。也就是优先级和顷凳等待时间是线性关系。而且,刚服务的那人等待时间被清0了,一定是最小的,所雀启旅以这样:每处理一个业务,检查他时间到没,到了出队列,没到排队尾,因为他的等待时间是0,必然最小,而刚才没有做业务的旁弯,等待时间都同等增加的,所以他们的优先级次序没变,直接把下个拿过来办就行了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12376616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存