|
import
java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.lang.*;
public
class Client extends Frame {
MyList lstProizvod;
String ImeServera;
String order;
int total;
static
String MOJ_ID;
static String Ime_Servera_Banke,Ime_Servera_Trgovine;
String strIzbor[] = {"CD Normal $1","CD Trax
$1","CD RW $1","BNC $2","DVD
$100","HDD 10.5 $110",
"HDD 15 $120","HDD 20.5 $130","HDD
30 $135","HDD 50 $150","PC A1 $500","PC
server $1500","Win NT $40","zvucnici 20W
$8",
"LAN adapter $7","MS mouse $5","S/N
monitor $220","Visual Studio 6 $999","Corel
8 $99","RedHat 6.2 $10"
};
TextField
linija;
TextArea txtUk,txtStatus;
Label lblProizvod;
Label lblCijena;
Button
Kupi;
Button Ponisti;
komunikacija objBanka,objTrgovac;
public
static void main(String args[]) {
if ( args.length!=3 ) {
System.out.println("? Upotreba: java Client MOJ_ID Ime_Servera_Banke
Ime_Servera_Trgovine");
System.exit(1);
}
MOJ_ID = new String(args[0]);
Ime_Servera_Banke=new String(args[1]);
Ime_Servera_Trgovine=new String(args[2]);
Client
app = new Client();
}
public
Client() {
super("Seminar:OS2, Modul KUPAC");
setSize(260,470);
addWindowListener(new Client.WindowEventHandler());
setLayout(null);
setupList();
// Objekti
za komunikaciju
objBanka = new komunikacija(Ime_Servera_Banke,9811);
objTrgovac = new komunikacija(Ime_Servera_Trgovine,9822);
// User
Interface
Kupi = new Button("Kupi");
Ponisti = new Button("Ponisti");
lblProizvod = new Label("Obabir proizvoda");
lblCijena = new Label("Kosarica");
txtUk = new TextArea();
linija = new TextField();
txtStatus = new TextArea();
lblProizvod.setBounds
(10,20,100,35);
lblCijena.setBounds (120,20,200,35);
lstProizvod.setBounds (10,60,100,200);
txtUk.setBounds (120,60,120,200);
txtStatus.setBounds(10,350,240,100);
Kupi.setBounds (10,270,100,30);
Ponisti.setBounds (120,270,100,30);
Kupi.addActionListener(new ButtonHandler());
Ponisti.addActionListener(new ButtonHandler());
txtUk.setEditable(false);
linija.setBounds(10,310,220,20);
add(lblProizvod);
add(lstProizvod);
add(lblCijena);
add(txtStatus);
add(txtUk);
add(Kupi);
add(Ponisti);
add(linija);
show();
Write(txtStatus,"BANKA\n");
Write(txtStatus,"Ime: "+objBanka.ime+"\n");
Write(txtStatus," IP: "+objBanka.IP_adr+"\n");
Write(txtStatus,"TRGOVAC\n");
Write(txtStatus,"Ime: "+objTrgovac.ime+"\n");
Write(txtStatus," IP: "+objTrgovac.IP_adr+"\n");
total=0;
}
// Pretvara
Integer u String i vraca ga
public String DajTotal() {
Integer priv = new Integer(total);
return priv.toString();
}
// podesava
Listu
void setupList() {
lstProizvod
= new MyList(10,true,strIzbor);
ListHandler
lh = new ListHandler();
lstProizvod.addItemListener(lh);
}
// Ispisuje
na neko podrucje teksta unutar GUI-a
void Write(TextArea pr,String strPod) {
String strTemp;
strTemp=pr.getText()+strPod;
pr.setText(strTemp);
}
// Brise
ekran
void ClrScr(TextArea pr) {
pr.setText("");
}
void
Kupi() {
String dignov = new String();
ClrScr(txtStatus);
Write(txtStatus,"Kupovina u tijeku:\n");
Write(txtStatus,"Salje se zahtjev banci...\n");
objBanka.zahtjev("Daj pare"); // ??? daj
// Zahtjev(cifra)
Write(txtStatus,"Zahtjev odboren...\n na racunu :");
Write(txtStatus, objBanka.Stanje+"\n");
Write(txtStatus,"Novcanica:");
dignov=objBanka.strNovcanica;
Write(txtStatus, dignov+"\n");
/* Realizirati komunikaciju sa trgovcem (Koraci 3 i4) */
// Salji
trgovcu pare i listu proizvoda(Redni broj)
objTrgovac.zahtjevtrg(dignov);
Write(txtStatus,"Stanje kupovine :");
Write(txtStatus,objTrgovac.Stanje+"\n");
//odgovor trgovca
}
String
Ukupno() {
String cifra = new String();
cifra.valueOf(total);
return cifra;
}
class ListHandler implements ItemListener {
public
void itemStateChanged(ItemEvent e) {
String order=new String();
String items[] = lstProizvod.getSelectedItems();
total = 0;
for ( int i=0;i<items.length;++i ) {
// gleda gdje pocinje cijena
int pocetak = items[i].indexOf('$')+1;
int kraj = items[i].length();
Integer yy = new Integer(total);
String temp = items[i].substring(pocetak,kraj);
total+= yy.parseInt(temp);
order+=(items[i]+"\n");
}
txtUk.setText("");
Write(txtUk,order);
linija.setText("Ukupno: $"+total);
}
}
class
komunikacija {
private
InetAddress host;
private String strZahtjev;
private int intPort;
public String ime,IP_adr;
public String Stanje;
public String strNovcanica;
public komunikacija(String strURL,int Prt) {
Stanje= new String();
strNovcanica = new String ();
intPort=Prt;
try {
host = InetAddress.getByName(strURL);
ime = host.getHostName();
IP_adr = host.getHostAddress();
} catch ( UnknownHostException ex ) {
ime="? Unknown host";
IP_adr="xxx.xxx.xxx.xxx";
}
}
public
void getPage(Socket clientSocket) {
try {
// Pribavlja ulazne i izlazne tokove
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );
// Zahtjev
za odredjenom kolicinom novca - KORAK 1
String moram = new String();
String temp1 = new String();
moram=DajTotal();
temp1="";
if ( moram.length()<6 ) {
for ( int h=1;h<=6-moram.length();h++ ) {
temp1+="0";
}
}
temp1+=moram;
trazi_novac upit = new trazi_novac(MOJ_ID,temp1);
outbound.writeBytes(upit.Paket()+"\r\n");
/////////////////////////////////////////////////////////////////////////////////
// Odgovor
banke - KORAK 2
String responseLine = new String();
responseLine ="";
while ( (responseLine = inbound.readLine()) != null ) {
if (
responseLine.startsWith("$") ) {
Stanje=responseLine;
} else if ( responseLine.startsWith("!") ) {
strNovcanica=responseLine;
}
}
outbound.close();
inbound.close();
clientSocket.close();
///////////////////////////////////////////////
} catch
( IOException ioe ) {
System.out.println("IOException: " + ioe);
}
}
public void getPageTr(Socket clientSocket) {
try {
// Pribavlja ulazne i izlazne tokove
DataOutputStream outbound = new DataOutputStream(
clientSocket.getOutputStream() );
DataInputStream inbound = new DataInputStream(
clientSocket.getInputStream() );
// Salje
zahtjev (novcanicu) trgovcu - KORAK 3
outbound.writeBytes(strZahtjev+"\r\n");
System.out.print("Zahtjev trgovcu :"+strZahtjev+"\n");
/////////////////////////////////////////////////////////////////////////////////
// Odgovor
trgovca - KORAK 6
String responseLine = new String();
responseLine
="";
while ( (responseLine = inbound.readLine()) != null ) Stanje
= responseLine;
outbound.close();
inbound.close();
clientSocket.close();
///////////////////////////////////////////////
} catch
( IOException ioe ) {
System.out.println("IOException: " + ioe);
}
}
public void zahtjev(String sto) {
String novac = new String();
try {
// Otvara klijentov socket za vezu
Socket clientSocket1 = new Socket(IP_adr, intPort);
Write(txtStatus,
clientSocket1+"\n");
strZahtjev=sto;
getPage(clientSocket1);
} catch ( UnknownHostException uhe ) {
Write(txtStatus,"UnknownHostException: " + uhe +"\n");
} catch ( IOException ioe ) {
Write(txtStatus,"IOException: " + ioe+"\n");
}
}
public
void zahtjevtrg(String sto) {
String novac = new String();
try {
// Otvara klijentov socket za vezu
Socket clientSocket1 = new Socket(IP_adr, intPort);
Write(txtStatus, clientSocket1+"\n");
strZahtjev=sto;
getPageTr(clientSocket1);
} catch ( UnknownHostException uhe ) {
Write(txtStatus,"UnknownHostException: " + uhe +"\n");
} catch ( IOException ioe ) {
Write(txtStatus,"IOException: " + ioe+"\n");
}
}
}
/** Klasa
za Komunikaciju izmedju kupca i banke u modulu KUPAC
Konstruktor: trazi_novac(ID_kupca,trazena_svota);
posalji_upit() - prijenos novca iz banke kupcu
provjera() - je li novcanica prava
*/
class
trazi_novac {
private String strPaket;
private String strNovac;
public
trazi_novac (String strID,String strKolicina) {
String strKontrola = "";
int intChkSum = 0;
strPaket="";
strPaket=strID+strKolicina;
for ( int i=0;i<strPaket.length();i++ ) {
intChkSum+=strPaket.charAt(i);
}
intChkSum%=100;
strKontrola=Integer.toString(intChkSum);
// strID 6 znamenki,strKolicina 6 znamenki,strKontrola 2 znamenke
strPaket+=strKontrola;
}
public String DajNovac() {
return strNovac;
}
public
String Paket() {
return strPaket;
}
public
boolean provjera() {
// Kontrolna
je jednaka zbroju SVIH prethodnih
int intChk1, intChk2, intChk3, Sum=0;
boolean boolUspio = true;
// Kontrolne
znamenke
intChk1=(int)strNovac.charAt(7)-48;
intChk2=(int)strNovac.charAt(14)-48;
intChk3=(int)strNovac.charAt(18)-48;
// Petlja
provjere
for ( short i=0;i<strNovac.length();i++ ) {
if ( (i==7)&&(Sum%8!=intChk1) ) boolUspio=false;
if ( (i==14)&&(Sum%8!=intChk2) ) boolUspio=false;
if ( (i==18)&&(Sum%8!=intChk3) ) boolUspio=false;
Sum+=strNovac.charAt(i)-48;
}
return
boolUspio;
}
}
class ButtonHandler implements ActionListener {
public
void actionPerformed(ActionEvent e) {
String txtKupovine;
String s = e.getActionCommand();
if (
"Kupi".equals(s) ) {
Kupi();
}
if (
"Ponisti".equals(s) ) {
txtUk.setText("");
}
}
}
class WindowEventHandler extends WindowAdapter {
public
void windowClosing(WindowEvent e) {
System.exit(0);
}
}
}
class
novcic {
static public String Novcanica;
public novcic() {
Novcanica= new String();
}
}
|