![]() Ласло Краус |
Објектно програмирање 2 - колоквијуми Други колоквијум 25. 1. 2012 |
---|
Написати на језику Java следећи пакет класа:
/
сума.
TextArea
.
Label
. У току евентуалног чекања на приспеће паре у банку, приказ треба да је црвене боје, иначе црне.
ispitx
(x
је број радне станице за којим се ради). Лозинка на свакој радној станици је student
.Z:
// Klijent.java package banka; public class Klijent { private static int posid = 0; private int id = ++posid; private double suma = 5000*(2*Math.random()-1); public double suma() { return suma; } public String toString() { return String.format("%d/%.2f", id, suma); } } // Ulaz.java package banka; import java.awt.TextArea; public class Ulaz extends Thread { private long tsr; private volatile boolean otv = false; private TextArea prikaz; public Ulaz(long ts, TextArea prik) { tsr = ts; prikaz = prik; start();} public void run() { try { while (!interrupted()) { synchronized (this) { if (!otv) wait(); } sleep((long)((0.8+0.4*Math.random())*tsr)); stavi(new Klijent()); } } catch (InterruptedException g) {} } public synchronized void otvori() { otv = true; notify(); } public void zatvori() { otv = false; } public void unisti() { interrupt(); } private static class Elem { Klijent kli; Elem sled = null; Elem(Klijent k) { kli = k; } } private Elem prvi = null, posl = null; private synchronized void stavi(Klijent k) { Elem novi = new Elem(k); if (prvi == null) prvi = novi; else posl.sled = novi; posl = novi; prikazi(); notifyAll(); } public synchronized Klijent uzmi() throws InterruptedException { while (prvi == null) wait(); Klijent k = prvi.kli; prvi = prvi.sled; if (prvi == null) posl = null; prikazi(); return k; } public synchronized String toString() { StringBuilder s = new StringBuilder(); for (Elem tek=prvi; tek!=null; tek=tek.sled)s.append(tek.kli).append("\n"); return s.toString(); } private void prikazi() { prikaz.setText(toString()); } } // Salter.java package banka; import java.awt.*; public class Salter extends Thread { private static int posId = 0; private int id = ++posId; private Banka banka; private long tsr; private Label prikaz; private Klijent kli = null; public Salter(Banka b, long ts, Label prik) { banka = b; tsr = ts; prikaz = prik; prikazi(); start(); } public void run() { try { while (!interrupted()) { kli = banka.ulaz().uzmi(); prikazi(); sleep((long)((0.8 + 0.4 * Math.random()) * tsr)); prikaz.setForeground(Color.RED); banka.uplati(kli.suma()); prikaz.setForeground(Color.BLACK); kli = null; prikazi(); } } catch (InterruptedException g) {} } public void unisti() { interrupt(); } public String toString() { String s = "Salt:" + id; if (kli != null) s += "(" + kli + ")"; return s; } private void prikazi() { prikaz.setText(toString()); } } // Banka.java package banka; import java.awt.*; import java.awt.event.*; public class Banka extends Frame { private static final int TUL = 100, NSAL = 4, TSAL = 400; private static final String SUMA = "100000"; private double stanje; private Ulaz ulaz; private Salter[] salt = new Salter [NSAL]; private Checkbox potRadi = new Checkbox("Radi"); private TextField tksStanje = new TextField(SUMA, 7); private Banka() { super("Banka"); setSize(250, 200); setResizable(false); sastavi(); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent d) { ulaz.unisti(); for (Salter s: salt) s.unisti(); dispose(); } }); } private void sastavi() { Panel plo = new Panel(); add (plo, "North"); plo.add(potRadi); potRadi.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent d) { if (potRadi.getState()) { tksStanje.setEditable(false); stanje = Double.parseDouble(tksStanje.getText()); ulaz.otvori(); } else { tksStanje.setEditable(true); ulaz.zatvori(); } } }); plo.add(new Label("Stanje:", Label.RIGHT)); plo.add(tksStanje); TextArea tks = new TextArea(1,12); tks.setEditable(false); add(tks, "West"); plo = new Panel(new GridLayout(0, 1)); add(plo, "Center"); ulaz = new Ulaz(TUL, tks); for (int i=0; i<NSAL; i++) { Label ntp = new Label(); plo. add(ntp); salt[i] = new Salter(this, TSAL, ntp); } setVisible(true); } public Ulaz ulaz() { return ulaz; } public synchronized void uplati(double suma) throws InterruptedException { while (stanje+suma < 0) wait(); stanje += suma; prikazi(); notifyAll(); } private void prikazi() { tksStanje.setText(String.format("%.2f",stanje)); } public static void main(String[] varg) { new Banka(); } }(садржај)
Copyright © 2012, Laslo Kraus
Последња ревизија: 24.11.2012.