| Rahanvaihto.java |
1 package demo11;
2
3 import java.io.BufferedReader;
4 import java.io.IOException;
5 import java.util.Iterator;
6 import java.util.Map;
7 import java.util.Set;
8 import java.util.TreeMap;
9
10 import fi.jyu.mit.ohj2.Mjonot;
11 import fi.jyu.mit.ohj2.Syotto;
12 import fi.jyu.mit.ohj2.Tiedosto;
13
14 /**
15 * Tulostaa k?ytt?j?n antaman rahasumman ja vaaluutan perusteella kurssin mukaisen
16 * uuden raham??r?n.
17 *
18 * @author Antti My?h?nen
19 * @version 0.1
20 *
21 */
22 public class Rahanvaihto {
23
24 private Map<String, Double> kurssit = new TreeMap<String, Double>();
25
26 /**
27 * Oletuskonstruktori
28 */
29 public Rahanvaihto() {
30
31 }
32 /**
33 * Asettaa valuuttakurssit
34 *
35 * @example
36 * <pre name="test">
37 * #CLASSIMPORT
38 *
39 * Rahanvaihto raha = new Rahanvaihto();
40 * raha.getKurssitSize() === 0;
41 * raha.lueKurssit();
42 * raha.getKurssitSize() === 4;
43 * raha.getKurssi("mk") ~~~ 1;
44 * raha.getKurssi("yeni") ~~~ 0;
45 *
46 * </pre>
47 *
48 */
49 public void lueKurssit() {
50 kurssit.put("mk", 1.0);
51 kurssit.put("$", 5.7);
52 kurssit.put("EUROA", 5.94573);
53 kurssit.put("SKr", 0.6);
54
55 }
56
57
58 /**
59 * Palauttaa valuuttatietojen lukum??r?n
60 * @return valuuttatietojen lukum??r?
61 */
62 public int getKurssitSize() {
63 return kurssit.size();
64 }
65
66
67 /**
68 * Palauttaa parametrina saadun yksik?n kurssin
69 *
70 * @param avain valuutan nimi
71 * @return valuuttakurssi
72 */
73 public double getKurssi(String avain) {
74 if (kurssit.get(avain) == null) return 0;
75 return kurssit.get(avain);
76 }
77
78 /**
79 * Lukee valuuttakurssit tiedostosta. Testattu edellisiss? demoissa.
80 *
81 * @param nimi Tiedoston nimi, josta kurssit luetaan
82 * @return true jos onnistui
83 *
84 */
85 public boolean lueKurssitTiedostosta(String nimi) {
86 BufferedReader f = Tiedosto.avaa_lukemista_varten(nimi);
87
88 if (f == null) {
89 System.out.println("Tiedosto " + nimi + " ei aukea!");
90 return false;
91 }
92
93 String rivi;
94 try {
95 try {
96 while ((rivi = f.readLine()) != null && ("".equals(rivi.trim()) == false)) {
97
98 parsi(rivi);
99
100 }
101 } catch (IOException e) {
102 System.out.println("Tiedoston " + nimi + " kanssa ongelmia!");
103 }
104 } finally {
105 try {
106 f.close();
107 } catch (IOException e) {
108 System.out.println("Tiedosto " + nimi + " ei sulkeudu!");
109 }
110 }
111 return true;
112 }
113
114 /**
115 * Parsii ja lis?? tietorakenteeseen valuutan tiedot
116 *
117 * @param rivi yhden valuutan tiedot
118 *
119 * @example
120 * <pre name="test">
121 *
122 * </pre>
123 */
124 private void parsi(String rivi) {
125 StringBuffer sb = new StringBuffer(rivi.trim());
126
127 String nimi = Mjonot.erota(sb, '|');
128 double kurssi = Mjonot.erotaDouble(sb, 0);
129
130 kurssit.put(nimi, kurssi);
131
132 }
133
134 /**
135 * Aliohjelma, jossa ikuinen silmukka, joka hoitaa k?ytt?j?lt? kysymisen
136 * ja tulostamisen.
137 */
138 public void vaihdaRahat() {
139 double rahasumma;
140 String valuutta;
141
142
143 while (true) {
144
145 String s = Syotto.kysy("M??r? ja valuutta");
146 StringBuffer sb = new StringBuffer(s);
147
148 if ("".equals(sb.toString().trim())) {
149 System.out.println("Kiitos!");
150 return;
151 }
152
153 rahasumma = Mjonot.erotaDouble(sb, ' ');
154 valuutta = sb.toString().trim();
155
156 if ("".equals(valuutta) != true && rahasumma > 0
157 && (kurssit.get(valuutta) != null)) {
158
159 double vaihdettuSumma = laskeUusiYksikko(rahasumma, valuutta);
160
161 System.out.println(rahasumma + " " + valuutta + " on "
162 + vaihdettuSumma + " mk");
163
164 }
165
166 }
167 }
168
169 /**
170 * Laskee kurssin mukaisen rahasumman
171 *
172 * @param summa vaihdettava summa
173 * @param valuutta valuutta, joksi vaihdetaan
174 * @return uusi rahasumma vaihdettu raham??r?
175 *
176 * @example
177 * <pre name="test">
178 * Rahanvaihto raha = new Rahanvaihto();
179 * raha.lueKurssit();
180 *
181 * raha.laskeUusiYksikko(10, "mk") ~~~ 10;
182 * raha.laskeUusiYksikko(100000, "en") ~~~ 0;
183 *
184 * </pre>
185 *
186 */
187 public double laskeUusiYksikko(double summa, String valuutta) {
188 double kurssi = getKurssi(valuutta);
189 return summa * kurssi;
190 }
191
192
193
194 /**
195 * Tulostaa infoa ohjelman tuntemista valuutoista
196 */
197 @SuppressWarnings("unchecked")
198 public void tulostaInfo() {
199
200 StringBuffer sb = new StringBuffer();
201 sb.append("Ohjelma tuntee seuraavat valuutat: ");
202
203 Set entrySet = kurssit.entrySet();
204 Iterator iteraattori = entrySet.iterator();
205 while (iteraattori.hasNext()) {
206 Map.Entry<String, Double> e = (Map.Entry<String, Double>)iteraattori.next();
207 sb.append(e.getKey());
208 sb.append(" ");
209 }
210 System.out.println(sb.toString());
211 }
212
213
214 /**
215 * P??ohjelma
216 *
217 * @param args ei k?yt?ss?
218 */
219 public static void main(String args[]) {
220 Rahanvaihto rahaa = new Rahanvaihto();
221 //lueKurssit();
222 rahaa.lueKurssitTiedostosta("valuuttakurssit.txt");
223 rahaa.tulostaInfo();
224 rahaa.vaihdaRahat();
225 }
226 }
227