import java.io.*; import java.lang.*; import java.awt.*; import java.awt.Font.*; import java.applet.Applet; import java.awt.event.*; import java.util.*; // see on siis see klass, mis tekitab raami, menüü ja siin // pannakse paika ka see mis toimub menüü valikute peale // (CardLayout) class viking extends Applet implements ActionListener{ // loon uue menüü riba static MenuBar menyyRiba = new MenuBar(); // loon kõik menüü elemendid. Väljaspool kontruktorit, et neid saaks // kasutada ka teistes meetodites (actionPerformed) MenuItem logo = new MenuItem("Viking Lotto logo"); MenuItem exit = new MenuItem("Välju"); MenuItem uued = new MenuItem("Osta piletid"); MenuItem kontrolli = new MenuItem("Kontrolli pileteid"); MenuItem vaata = new MenuItem("Vaata pileteid"); MenuItem loosi = new MenuItem("Loosi"); // määran ära kasutatavate failide nimed String piletite_fail = "piletid.vl"; String logo_fail = "logo.png"; String v6idu_nr_fail = "v6idu_nr.vl"; // loon uue paneeli ekraan Panel ekraan = new Panel(new CardLayout()); // tekitan ekraanile CardLayout'i CardLayout kaardid = (CardLayout)ekraan.getLayout(); // konstruktori algus public viking() { // loon vajalikud menüüd ja lisan menüüle vastavad menüü elemendid // ja actionListenerid Menu fail_menyy = new Menu("Fail"); logo.addActionListener(this); fail_menyy.add(logo); exit.addActionListener(this); fail_menyy.add(exit); Menu piletid_menyy = new Menu("Piletid"); uued.addActionListener(this); piletid_menyy.add(uued); kontrolli.addActionListener(this); piletid_menyy.add(kontrolli); vaata.addActionListener(this); piletid_menyy.add(vaata); Menu loosimine_menyy = new Menu("Loosimine"); loosi.addActionListener(this); loosimine_menyy.add(loosi); // lisan menüüribale menüüd. Menüüdele on juba eespool vajalikud // asjad lisatud menyyRiba.add(fail_menyy); menyyRiba.add(piletid_menyy); menyyRiba.add(loosimine_menyy); // lisan ekraanile, millel on CardLayout, kaardid, kusjuures need kaardid tekitan // siin samas ja nendeks on uued isendid all pool tehtud klassidest. ekraan.add("logo_kaart", new logo(logo_fail)); ekraan.add("pileti_ost_kaart", new pileti_ost(piletite_fail)); ekraan.add("loosimine_kaart", new loosimine(v6idu_nr_fail)); ekraan.add("pileti_kontrolli_kaart", new piletite_kontroll(piletite_fail, v6idu_nr_fail)); ekraan.add("piletite_vaatamise_kaart", new piletite_vaatamine(piletite_fail, v6idu_nr_fail)); // lisan raamile paneeli ekraan add(ekraan); } public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); // vastavalt menyyst valitule, kuvatakse vastav kaart CardLayout'ist if(e.getSource() == logo) { kaardid.show(ekraan, "logo_kaart"); } if(e.getSource() == exit) { System.exit(0); } if (e.getSource() == uued) { kaardid.show(ekraan, "pileti_ost_kaart"); } if (e.getSource() == loosi) { kaardid.show(ekraan, "loosimine_kaart"); } if (e.getSource() == kontrolli) { kaardid.show(ekraan, "pileti_kontrolli_kaart"); } if (e.getSource() == vaata) { kaardid.show(ekraan, "piletite_vaatamise_kaart"); } } // siin siis tekitan selle raami ja samuti on siia lisatud // ristist sulgemine public static void main(String argumendid[]) { Frame f=new Frame("VIKING Lotto"); f.setSize(500, 400); f.setLocation(50, 50); f.setBackground(new Color(0,102,255)); f.setMenuBar(menyyRiba); f.add(new viking()); f.setVisible(true); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.out.println("X-st kinni"); System.exit(0); } }); } } // piletite ostmise klass. Kui menüüst valitakse piletite ostmine // siis näidatakse seda kaarti, millel on see sama pileti_ost // class lisatud (õigem oleks tegelt öelda, et kuvatakse kaart, mis // on uus isend klassist pileti_ost, või vähemalt kuidagi nii see on) class pileti_ost extends Applet implements ActionListener{ // loon vajalikud paneelid layout'i jaoks ja määran neile ühtlasi ka // layout'i ära. // pileti paneelis on checkboxid, kus ma saan numbreid valida Panel pilet = new Panel(new GridLayout(8,6,5,5)); // loon alumise paneeli, millel on 3 realine gridlayout Panel alumine_menyy = new Panel(new GridLayout(3,1,1,1)); // loon paneelid alumise menyy ridadele panemiseks vajalike layout'idega Panel alumine_menyy_yl = new Panel(new BorderLayout()); Panel alumine_menyy_kesk = new Panel(new GridLayout(1,2)); Panel alumine_menyy_al = new Panel(new BorderLayout()); // loob label'id Label staatus = new Label("staatus bar", Label.CENTER); Label pileti_nr_label = new Label("Pileti nr: ", Label.LEFT); // loon nupud Button pliks_plaks = new Button("Pliks-Plaks"); Button puhasta = new Button("Puhasta"); Button salvesta = new Button("Salvesta"); String faili_nimi; int pileti_nr; int i; int j; // loon checkboxide massiivi Checkbox numbrid[] = new Checkbox[48]; // selle klassi konstruktor saab parameetriks faili nime // konstruktor ... public pileti_ost(String fnimi) { faili_nimi=fnimi; setForeground(Color.white); pliks_plaks.setForeground(Color.black); puhasta.setForeground(Color.black); staatus.setBackground(Color.black); salvesta.setForeground(Color.black); // siin panen paika üldise layout'i sellel kaardil (mäletatavasti // võime me seda klassi vaadelda kui kaarti) setLayout(new BorderLayout()); // lisan paneelidele vastavad elemendid (nupud, label'id) alumine_menyy_yl.add(pliks_plaks, BorderLayout.NORTH); alumine_menyy_kesk.add(puhasta); alumine_menyy_kesk.add(salvesta); alumine_menyy_al.add(staatus, BorderLayout.NORTH); // siin lisan alumise menüü ridadele vastavad paneelid alumine_menyy.add(alumine_menyy_yl); alumine_menyy.add(alumine_menyy_kesk); alumine_menyy.add(alumine_menyy_al); // panen pileti paneelile checkboxid ära for (int i=0; i<48; i++) { numbrid[i] = new Checkbox((i+1)+""); pilet.add(numbrid[i]); } // siin lisan paneelid kaardile, eespool ma lihtsalt nagu konstrueerisin // vähe keerukamad paneelid kokku add(pileti_nr_label, BorderLayout.NORTH); add(alumine_menyy, BorderLayout.SOUTH); add(pilet, BorderLayout.CENTER); pliks_plaks.addActionListener(this); puhasta.addActionListener(this); salvesta.addActionListener(this); try { // Garanteerin selle, et fail eksisteeriks järgnevaks lugemiseks PrintWriter kirjuta_faili = new PrintWriter(new FileWriter(faili_nimi, true)); kirjuta_faili.close(); // Järgnevas ketran faili läbi ja leian ostetava pileti numbri (viimane failist + 1) BufferedReader failist_lugemine = new BufferedReader(new FileReader(faili_nimi)); String eelmine_rida="0 "; String rida = failist_lugemine.readLine(); while (rida != null) { eelmine_rida=rida; rida=failist_lugemine.readLine(); pileti_nr = Integer.parseInt(eelmine_rida.substring(0,eelmine_rida.indexOf(" "))) + 1; pileti_nr_label.setText("Pileti number: "+pileti_nr); } failist_lugemine.close(); pileti_nr = Integer.parseInt(eelmine_rida.substring(0,eelmine_rida.indexOf(" "))) + 1; pileti_nr_label.setText("Pileti number: "+pileti_nr); } catch (IOException faili_viga) { System.out.println("Viga failiga: "+faili_nimi+" "+faili_viga.getMessage()); set_staatus("Viga failiga: "+faili_nimi+" ["+faili_viga.getMessage()+"]", Color.red); } } public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); if (e.getSource() == pliks_plaks) { for (i=0; i 1) { kirjuta_faili.println(""); } // Tühiku panen lõppu et oleks hea selle järgi pärast rida lammutada kirjuta_faili.print(pileti_nr+" "); for (i=0; i 1) { tempfail.println(""); } tempfail.print(rida + tulemused); rida = loe_pileteid.readLine(); } while (rida != null) { tempfail.println(""); tempfail.print(rida); staatus.setText(rida.substring(0,rida.indexOf(" "))+" piletit kopeeritud."); rida = loe_pileteid.readLine(); } tempfail.close(); loe_pileteid.close(); F.delete(); G.renameTo(F); if (kontrolli_veel) { staatus.setText("Kõik piletid kontrollitud!"); } else { staatus.setText("Kõik piletid kopeeritud!"); } PrintWriter kirjuta_faili = new PrintWriter(new FileWriter(v6idu_nr_fail, false)); kirjuta_faili.println(v6idu_numbrid); kirjuta_faili.println(kuup2ev); kirjuta_faili.print(pileti_numbrite_massiiv[0]+""); kirjuta_faili.close(); } else { staatus.setText("Viga võidunumbrite failiga!"); } //Kas võidunumbrite failis oli esimesel real 7 numbrit või mitte? } else { staatus.setText("Loosimist ei ole veel toimunud!"); } //Kas võidunumbrite failis ei olnudki esimest rida? } catch (IOException faili_viga) { System.out.println("Viga failiga: "+faili_viga.getMessage()); staatus.setText("Viga failiga: "+faili_viga.getMessage()); } catch (Exception fatal_error) { System.out.println("F A T A L E R R O R - "+fatal_error.getMessage()); staatus.setText("F A T A L E R R O R - "+fatal_error.getMessage()); } alusta.setEnabled(true); } } class piletite_vaatamine extends Applet implements ActionListener, Runnable{ Label pealkiri = new Label("Piletite vaatamine", Label.CENTER); Label staatus = new Label("Piletite vaatamiseks vajuta nuppu 'Näita pileteid'", Label.CENTER); TextArea piletid = new TextArea("",5,60); Button alusta = new Button("Näita pileteid"); Button peata = new Button("Peata näitamine"); Panel alumine_menyy = new Panel(new GridLayout(2,1,1,1)); Panel alumine_menyy_yl = new Panel(new GridLayout(1,2)); Panel alumine_menyy_al = new Panel(new BorderLayout()); String piletite_fail, numbrite_fail, tekst, rida; String kuup2ev, kontrollitud_pileteid; int pileti_numbrite_massiiv[] = new int[100]; int v6idud[]=new int[5]; // v6idud[0] - 6+0 [1] - 5+1 [2] - 5+0 [3] - 4+0 [4] - 3+0 int i, j, loendur, p6hinr, lisanr; boolean n2ita_veel; public piletite_vaatamine(String piletite_f, String numbrite_f){ piletite_fail=piletite_f; numbrite_fail=numbrite_f; pealkiri.setBackground(Color.black); pealkiri.setForeground(Color.white); staatus.setBackground(Color.black); staatus.setForeground(Color.white); // piletid.setFont(new Font("",Font.PLAIN,12)); piletid.setEditable(false); setLayout(new BorderLayout()); alumine_menyy_yl.add(alusta); alumine_menyy_yl.add(peata); alumine_menyy_al.add(staatus, BorderLayout.NORTH); alumine_menyy.add(alumine_menyy_yl); alumine_menyy.add(alumine_menyy_al); add(pealkiri, BorderLayout.NORTH); add(piletid, BorderLayout.CENTER); add(alumine_menyy, BorderLayout.SOUTH); alusta.addActionListener(this); peata.addActionListener(this); } public void actionPerformed(ActionEvent e){ System.out.println(e.getActionCommand()); if (e.getSource() == alusta) { n2ita_veel=true; new Thread(this).start(); } if (e.getSource() == peata) { n2ita_veel=false; } } public void run() { alusta.setEnabled(false); try{ for (i=0; i<5; i++) { v6idud[i] = 0; } PrintWriter kirjuta_faili = new PrintWriter(new FileWriter(piletite_fail, true)); kirjuta_faili.close(); BufferedReader loe_numbrid = new BufferedReader(new FileReader(numbrite_fail)); String v6idu_numbrid = loe_numbrid.readLine(); if (v6idu_numbrid != null) { kuup2ev = loe_numbrid.readLine(); kontrollitud_pileteid = loe_numbrid.readLine(); } if (kontrollitud_pileteid == null) { kontrollitud_pileteid = "0"; } BufferedReader loe_pileteid = new BufferedReader(new FileReader(piletite_fail)); rida = loe_pileteid.readLine(); piletid.setText(""); while(n2ita_veel && (rida != null)) { loendur = -1; StringTokenizer pileti_st=new StringTokenizer(rida); while (pileti_st.hasMoreTokens()) { loendur++; pileti_numbrite_massiiv[loendur]=Integer.parseInt(pileti_st.nextToken()); } tekst = "Pileti nr: "; // Järgnevad 5 rida on piletinumbri joondamiseks paremale. 1 numbrikoht on umbes-täpselt 2 " "-t for (i=1; i<5; i++) { if (pileti_numbrite_massiiv[0] < Math.pow(10,i)) { tekst += " "; } } tekst += pileti_numbrite_massiiv[0]+" - ["; for (i=1; i<7; i++) { if (pileti_numbrite_massiiv[i] < 10) { tekst += " "; } tekst += pileti_numbrite_massiiv[i]; if (i < 6) { tekst += " | "; } } tekst += "] - Pihtas: "; if (Integer.parseInt(kontrollitud_pileteid) < pileti_numbrite_massiiv[0]) { // Kui piletid on kontrollimata, siis tuleb piletite failist loetud number, mis näitab, // kas pilet on kontrollitud või mitte, muuta 0-ks, mis tähistab, et pole kontrollitud. // Seda 0-i ei hakka faili ümber kirjutama, kuna see kulutaks asjatult aega. pileti_numbrite_massiiv[7] = 0; } if (pileti_numbrite_massiiv[7] == 0) { tekst += "pilet kontrollimata!"; } else { p6hinr = 0; lisanr = 0; for (i=8; i<14; i++) { if (pileti_numbrite_massiiv[i] == 1) { p6hinr++; } else { if (pileti_numbrite_massiiv[i] == 2) { lisanr++; } } } tekst += p6hinr+"+"+lisanr; if ((p6hinr+"+"+lisanr).equals("6+0")) { v6idud[0]++; } if ((p6hinr+"+"+lisanr).equals("5+1")) { v6idud[1]++; } if ((p6hinr+"+"+lisanr).equals("5+0")) { v6idud[2]++; } if ((p6hinr+"+"+lisanr).equals("4+0")) { v6idud[3]++; } if ((p6hinr+"+"+lisanr).equals("3+0")) { v6idud[4]++; } } piletid.append(tekst+"\n"); staatus.setText(pileti_numbrite_massiiv[0]+" piletit näidatud!"); rida = loe_pileteid.readLine(); } piletid.append("--------------------------\nVõidud: \n------------\n"); piletid.append("6+0 - "+v6idud[0]+"\n"); piletid.append("5+1 - "+v6idud[1]+"\n"); piletid.append("5+0 - "+v6idud[2]+"\n"); piletid.append("4+0 - "+v6idud[3]+"\n"); piletid.append("3+0 - "+v6idud[4]); loe_pileteid.close(); } catch (IOException faili_viga) { staatus.setText("Viga failiga: "+faili_viga.getMessage()); } alusta.setEnabled(true); } } class logo extends Applet{ Image logo; public logo(String pildi_faili_nimi) { logo = Toolkit.getDefaultToolkit().getImage(pildi_faili_nimi); } public void paint(Graphics g) { g.drawImage(logo, 100, 100, this); } }