1 package kerho;
2 import java.io.*;
3 import fi.jyu.mit.ohj2.*;
4
13 public class Kentta {
14 private String kysymys = "???";
15 protected Tarkistaja tarkistaja = null;
16
17 public Kentta(String kysymys) { this.kysymys = kysymys; }
18 public Kentta(String kysymys,Tarkistaja tarkistaja) {
19 this.kysymys = kysymys;
20 this.tarkistaja = tarkistaja;
21 }
22
23 public String toString() { return ""; }
24 public String getAvain() { return toString().toUpperCase(); }
25 public String getKysymys() { return kysymys; }
26 public String aseta(String jono) { return null; }
27
28
32 public static void main(String args[]) {
33 }
34
35 }
36
37 class JonoKentta extends Kentta {
38 String jono = "";
39
40 public JonoKentta(String kysymys) { super(kysymys); }
41
42 public JonoKentta(String kysymys,Tarkistaja tarkistaja) {
43 super(kysymys,tarkistaja);
44 }
45
46 public String toString() { return jono; }
47
48 public String aseta(String jono) {
49 if ( tarkistaja == null ) {
50 this.jono = jono; return null;
51 }
52 String virhe = tarkistaja.tarkista(jono);
53 if ( virhe == null ) {
54 this.jono = jono; return null;
55 }
56 return virhe;
57 }
58
59 }
60
61 class HetuKentta extends JonoKentta {
62 public HetuKentta(String kysymys) { super(kysymys); }
63
64 public HetuKentta(String kysymys,Tarkistaja tarkistaja) {
65 super(kysymys,tarkistaja);
66 }
67 public String getAvain() {
68 StringBuffer sb = new StringBuffer(jono);
69 char c = sb.charAt(4);
70 sb.setCharAt(4,sb.charAt(0));
71 sb.setCharAt(0,c);
72 c = sb.charAt(5);
73 sb.setCharAt(5,sb.charAt(1));
74 sb.setCharAt(1,c);
75 return sb.toString(); }
78 }
79
80 class IntKentta extends Kentta {
81 int arvo;
82 public IntKentta(String kysymys) { super(kysymys); }
83
84 public int getValue() { return arvo; }
85 public void setValue(int value) { arvo = value; }
86
87 public String toString() { return ""+arvo; }
88 public String aseta(String jono) {
89 StringBuffer sb = new StringBuffer(jono);
90 try {
91 this.arvo = Mjonot.erotaEx(sb,' ',0);
92 return null;
93 }
94 catch (NumberFormatException ex) {
95 return "Virhe: " + ex.getMessage(); }
96 }
97 public String getAvain() {
98 return Mjonot.fmt(arvo,11,'0'); }
100 }
101
102 class DoubleKentta extends Kentta {
103 double arvo;
104
105 public DoubleKentta(String kysymys) { super(kysymys); }
106
107 public double getValue() { return arvo; }
108 public void setValue(int value) { arvo = value; }
109
110 public String toString() { return ""+arvo; }
111 public String aseta(String jono) {
112 this.arvo = Mjonot.erotaDouble(jono,0.0);
113
114
117 return null;
118 }
119 public String getAvain() {
120 return Mjonot.fmt(arvo,11,'0');
121 }
122
123 }
124
125 class RahaKentta extends DoubleKentta {
126 public RahaKentta(String kysymys) { super(kysymys); }
127 public String toString() { return Mjonot.fmt(getValue(),4,2); }
128 }
129
130
131 interface Tarkistaja {
132 public String tarkista(String jono);
133 }
134
135 class HetuTarkistus implements Tarkistaja {
136
137 public String tarkista(String jono) {
138 if ( jono == null || jono.length() < 1 ) return "Hetu liian lyhyt";
139 if ( !Character.isDigit(jono.charAt(0)) ) return "Ei ala numerolla";
140 return null;
141 }
142
143 }
144