1 import java.io.*;
2 import fi.jyu.mit.ohj2.*;
3
26 public class LueTRek {
27
28
29
32 static public class Tuote {
33 private String nimike = "";
34 private double hinta = 0.0;
35 private int kpl = 0;
36
37 public Tuote() {}
38 public Tuote(String rivi) {
39 try {
40 parse(rivi);
41 } catch (NumberFormatException ex) {
42 }
43 }
44
45 public void parse(String s) throws NumberFormatException {
46 StringBuffer sb = new StringBuffer(s);
47 nimike = Mjonot.erotaEx(sb,'|',nimike);
48 hinta = Mjonot.erotaEx(sb,'|',hinta);
49 kpl = Mjonot.erotaEx(sb,'|',kpl);
50 }
51
52 public String toPrintString() {
53 return Mjonot.fmt(nimike,-20) + " " + Mjonot.fmt(hinta,7,0) +
54 Mjonot.fmt(kpl,4);
55 }
56
57 public void ynnaa(Tuote tuote) {
58 hinta += tuote.hinta * tuote.kpl;
59 kpl += tuote.kpl;
60 }
61
62 public String getNimike() { return nimike; }
63 public void setNimike(String nimike) { this.nimike = nimike; }
64
65 }
66
67
68
72 static public class Tuotteet {
73 private String nimi = "";
74 private int lkm;
75 private Tuote alkiot[];
76 private Tuote yhteensa = new Tuote("Yhteensä");
77
78 public Tuotteet(String nimi) {
79 this.nimi = nimi;
80 alkiot = new Tuote[10];
81 }
82
83 public int etsi(String tnimi) {
84 for (int i=0; i<lkm; i++)
85 if ( alkiot[i].getNimike().equalsIgnoreCase(tnimi) ) return i;
86 return -1;
87 }
88
89 public int lisaa(String tnimi) {
90 if ( alkiot.length <= lkm ) return -1;
91 alkiot[lkm] = new Tuote(tnimi);
92 return lkm++;
93 }
94
95 public boolean ynnaa(Tuote tuote) {
96 if ( tuote.getNimike().equals("") ) return false;
97 int i = etsi(tuote.getNimike());
98 if ( i < 0 ) i = lisaa(tuote.getNimike());
99 if ( i < 0 ) return false;
100
101 alkiot[i].ynnaa(tuote);
102 yhteensa.ynnaa(tuote);
103 return true;
104 }
105
106
107 public boolean lue() {
108 BufferedReader fi = Tiedosto.avaa_lukemista_varten("tuotteet.dat");
109 if ( fi == null ) return false;
110
111 try {
112 String rivi; Tuote tuote = new Tuote();
113 while ( ( rivi = fi.readLine() ) != null ) {
114 try {
115 tuote.parse(rivi);
116 ynnaa(tuote);
117 } catch (NumberFormatException ex) {
118 System.err.println("Rivillä jotakin pielessä " + rivi + " " +
119 ex.getMessage());
120 continue;
121 }
122 }
123 } catch (IOException ex) {
124 System.err.println("Vikaa tiedostoa luettaessa");
125 } finally {
126 try {
127 fi.close();
128 } catch (IOException ex) {
129 System.err.println("Ongelmia tiedoston sulkemisessa");
130 }
131 }
132
133 return true;
134 }
135
136 public void tulosta(OutputStream os) {
137 PrintStream out = Tiedosto.getPrintStream(os);
138
139 out.println(); out.println(); out.println();
140 out.println("-------------------------------------------");
141
142 for (int i=0; i<lkm; i++)
143 out.println(alkiot[i].toPrintString());
144
145 out.println("-------------------------------------------");
146 out.println(yhteensa.toPrintString());
147 out.println("-------------------------------------------");
148 out.println(); System.out.println(); System.out.println();
149 }
150
151 }
152
153
154 public static void main(String[] args) {
155 Tuotteet varasto = new Tuotteet("tuotteet.dat");
156 if ( !varasto.lue() ) {
157 System.err.println("Tuotteita ei saada luetuksi");
158 return;
159 }
160 varasto.tulosta(System.out);
161 }
162 }
163
164