gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Primeri za klase doterani i prilagodjeni za Svetovid-lib 0.4.0
[spa1-materijali.git] / kodovi / klase / RadniciSpisakId.java
1 /**
2 * Prosirujemo program iz RadniciSpisak tako da ima jedinstvene id-ove za
3 * radnike. Dodajemo i operaciju za izbacivanje radnika.
4 */
5 public class RadniciSpisakId {
6 static SpisakJedinstvenihRadnika spisak = null, spisak2 = null;
8 public static void main(String[] args) {
9 spisak = new SpisakJedinstvenihRadnika();
10 spisak.ucitajRadnike("radnici.txt");
11 Svetovid.out.println(spisak);
12 if (spisak.izbaciRadnika(111)) {
13 Svetovid.out.println("posle izbacivanja:");
14 Svetovid.out.println(spisak);
15 } else {
16 Svetovid.out.println("nije nadjen radnik za izbacivanje");
17 }
19 spisak2 = new SpisakJedinstvenihRadnika();
20 spisak2.ucitajRadnike("radnici2.txt");
21 spisak2.sviUKancelariji(1);
22 }
23 }
25 /** Spisak radnika u kome svi imaju razlicite id brojeve. */
26 class SpisakJedinstvenihRadnika {
28 /** Radnik sa svojim podacima: id, prezime, ime, kancelarija */
29 class Radnik {
30 String prezime, ime;
31 int id;
32 int kancelarija;
34 // Konstruktor klase - neophodno je proslediti sve podatke odjednom da
35 // se napravi instanca
36 public Radnik(int id, String prezime, String ime, int kancelarija) {
37 this.id = id;
38 this.prezime = prezime;
39 this.ime = ime;
40 this.kancelarija = kancelarija;
41 }
43 public String prezimeIme() {
44 return prezime + " " + ime;
45 }
47 public String inicijali() {
48 String p = "";
49 if (prezime != null && !prezime.isEmpty()) {
50 p = prezime.charAt(0) + ".";
51 }
52 String i = "";
53 if (ime != null && !ime.isEmpty()) {
54 i = ime.charAt(0) + ".";
55 }
56 return i + p;
57 }
59 public String sviPodaci() {
60 return "Radnik " + id + ":" + prezime + " " + ime
61 + ", kancelarija:" + kancelarija;
62 }
64 /**
65 * toString metod se koristi kad je potrebno predstaviti instancu kao
66 * String, tipicno pri pozivu ispisa na ekran. Ocekuje se da da kratku
67 * informaciju koja je razumljiva coveku.
68 */
69 public String toString() {
70 return prezime + " " + ime;
71 }
73 } // klasa Radnik
75 final static int MAX_RADNIKA = 100;
77 Radnik[] spisak;
78 int brojac;
80 /**
81 * Kreira novu instancu klase i inicijalizuje niz i brojac na adekvatne
82 * vrednosti.
83 */
84 public SpisakJedinstvenihRadnika() {
85 spisak = new Radnik[MAX_RADNIKA];
86 brojac = 0;
87 }
89 /**
90 * Dodaje novog radnika sa datim podacima. Vraca da li je operacija uspesno
91 * obavljena, odnosno vratice false ako je radnik takvim id-om vec postojao
92 */
93 public boolean dodajRadnika(int id, String prezime, String ime, int kanc) {
95 // proverimo jel ima mesta
96 if (brojac >= MAX_RADNIKA) {
97 Svetovid.err.println("Greska! vec ima " + MAX_RADNIKA
98 + " novi se ne mogu dodati");
99 }
101 // proverimo jel vec postoji neko sa tim id-om
102 boolean postoji = false;
103 for (int i = 0; i < brojac && !postoji; i++) {
104 if (spisak[i].id == id) {
105 postoji = true;
109 if (postoji) {
110 Svetovid.err.println("Greska! radnik sa idom:" + id
111 + " vec postoji");
112 return false;
113 } else {
114 spisak[brojac] = new Radnik(id, prezime, ime, kanc);
115 brojac++;
116 return true;
120 /** Ucitava sve radnike iz datog fajla i dodaje ih u trenutni spisak. */
121 public void ucitajRadnike(String imef) {
122 while (!Svetovid.in(imef).isEmpty()) {
123 int id = Svetovid.in(imef).readInt();
124 String prezime = Svetovid.in(imef).readToken();
125 String ime = Svetovid.in(imef).readToken();
126 int kanc = Svetovid.in(imef).readInt();
127 dodajRadnika(id, prezime, ime, kanc);
129 Svetovid.in(imef).close();
132 public void snimiRadnike(String imef) {
133 for (int i = 0; i < brojac; i++) {
134 Radnik rad = spisak[i];
135 Svetovid.out(imef).print(rad.id);
136 Svetovid.out(imef).print(" ");
137 Svetovid.out(imef).print(rad.prezime);
138 Svetovid.out(imef).print(" ");
139 Svetovid.out(imef).print(rad.ime);
140 Svetovid.out(imef).print(" ");
141 Svetovid.out(imef).print(rad.kancelarija);
142 Svetovid.out(imef).println();
144 Svetovid.out(imef).close();
147 public boolean izbaciRadnika(int id) {
148 int pos = 0;
149 while (pos < brojac && spisak[pos].id != id)
150 pos++;
152 if (pos < brojac) {
153 brojac--;
155 // zapravo treba da pomerimo sve iza ovog radnika
156 for (int j = pos; j < brojac; j++)
157 spisak[j] = spisak[j + 1];
158 return true;
159 } else {
160 return false;
164 public int brRadnika() {
165 return brojac;
168 public void sviUKancelariji(int kanc) {
169 for (int i = 0; i < brojac; i++) {
170 if (spisak[i].kancelarija == kanc) {
171 Svetovid.out.println(spisak[i]);
176 /**
177 * Ispisuje sve radnike u nizu razdvojene razmacima. Posebna paznja je
178 * obracena na to da se ne ispisuje zarez nakon poslednjeg radnika.
179 */
180 public String toString() {
181 String res = "Radnici [";
182 if (brojac > 0) {
183 res += spisak[0];
185 for (int i = 1; i < brojac; i++) {
186 res += ", " + spisak[i];
188 res += "]";
189 return res;
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner