gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/kodovi/klase/RadniciSpisakId.java b/kodovi/klase/RadniciSpisakId.java
--- /dev/null
@@ -0,0 +1,180 @@
+/**
+ * Prosirujemo program iz RadniciSpisak tako da ima jedinstvene id-ove za radnike. Dodajemo
+ * i operaciju za izbacivanje radnika.
+ */
+public class RadniciSpisakId {
+ static SpisakJedinstvenihRadnika spisak = null, spisak2 = null;
+
+ public static void main(String[] args){
+ spisak = new SpisakJedinstvenihRadnika();
+ spisak.ucitajRadnike("radnici.txt");
+ Svetovid.out.println(spisak);
+ if (spisak.izbaciRadnika(111)) {
+ Svetovid.out.println("posle izbacivanja:");
+ Svetovid.out.println(spisak);
+ } else {
+ Svetovid.out.println("nije nadjen radnik za izbacivanje");
+ }
+
+ spisak2 = new SpisakJedinstvenihRadnika();
+ spisak2.ucitajRadnike("radnici2.txt");
+ spisak2.sviUKancelariji(1);
+ }
+}
+
+/** Spisak radnika u kome svi imaju razlicite id brojeve. */
+class SpisakJedinstvenihRadnika {
+
+ /** Radnik sa svojim podacima: id, prezime, ime, kancelarija */
+ class Radnik {
+ String prezime, ime;
+ int id;
+ int kancelarija;
+
+ // Konstruktor klase - neophodno je proslediti sve podatke odjednom da se napravi instanca
+ public Radnik(int id, String prezime, String ime, int kancelarija) {
+ this.id = id;
+ this.prezime = prezime;
+ this.ime = ime;
+ this.kancelarija = kancelarija;
+ }
+
+ public String prezimeIme() {
+ return prezime+" "+ime;
+ }
+
+ public String inicijali() {
+ String p = "";
+ if (prezime != null && !prezime.isEmpty()) {
+ p = prezime.charAt(0)+".";
+ }
+ String i = "";
+ if (ime != null && !ime.isEmpty()) {
+ i = ime.charAt(0)+".";
+ }
+ return i+p;
+ }
+
+ public String sviPodaci() {
+ return "Radnik "+id+":"+prezime+" "+ime+", kancelarija:"+kancelarija;
+ }
+
+ // toString metod se koristi kad je potrebno predstaviti instancu kao String,
+ // tipicno pri pozivu ispisa na ekran. Ocekuje se da da kratku informaciju
+ // koja je razumljiva coveku.
+ public String toString() {
+ return prezime+" "+ime;
+ }
+
+ } // klasa Radnik
+
+ final static int MAX_RADNIKA = 100;
+
+ Radnik[] spisak;
+ int brojac;
+
+ /** Kreira novu instancu klase i inicijalizuje niz i brojac na adekvatne vrednosti. */
+ public SpisakJedinstvenihRadnika() {
+ spisak = new Radnik[MAX_RADNIKA];
+ brojac = 0;
+ }
+
+ /** Dodaje novog radnika sa datim podacima. Vraca da li je
+ * operacija uspesno obavljena, odnosno vratice false ako
+ * je radnik takvim id-om vec postojao */
+ public boolean dodajRadnika(int id, String prezime, String ime, int kanc) {
+
+ //proverimo jel ima mesta
+ if (brojac >= MAX_RADNIKA) {
+ Svetovid.err.println("Greska! vec ima "+MAX_RADNIKA+" novi se ne mogu dodati");
+ }
+
+ //proverimo jel vec postoji neko sa tim id-om
+ boolean postoji = false;
+ for (int i=0;i<brojac && !postoji;i++) {
+ if (spisak[i].id == id) {
+ postoji = true;
+ }
+ }
+
+ if (postoji) {
+ Svetovid.err.println("Greska! radnik sa idom:"+id+" vec postoji");
+ return false;
+ } else {
+ spisak[brojac] = new Radnik(id, prezime, ime, kanc);
+ brojac++;
+ return true;
+ }
+ }
+
+ /** ucitava sve radnike iz datog fajla i dodaje ih u trenutni spisak. */
+ public void ucitajRadnike(String imef) {
+ while (!Svetovid.in(imef).isEmpty()) {
+ int id = Svetovid.in(imef).readInt();
+ String prezime = Svetovid.in(imef).readString();
+ String ime = Svetovid.in(imef).readString();
+ int kanc = Svetovid.in(imef).readInt();
+ dodajRadnika(id, prezime, ime, kanc);
+ }
+ Svetovid.in(imef).close();
+ }
+
+ public void snimiRadnike(String imef){
+ for (int i=0;i<brojac;i++){
+ Radnik rad = spisak[i];
+ Svetovid.out(imef).print(rad.id);
+ Svetovid.out(imef).print(" ");
+ Svetovid.out(imef).print(rad.prezime);
+ Svetovid.out(imef).print(" ");
+ Svetovid.out(imef).print(rad.ime);
+ Svetovid.out(imef).print(" ");
+ Svetovid.out(imef).print(rad.kancelarija);
+ Svetovid.out(imef).println();
+ }
+ Svetovid.out(imef).close();
+ }
+
+ public boolean izbaciRadnika(int id) {
+ int pos = 0;
+ while (pos<brojac && spisak[pos].id != id)
+ pos++;
+
+ if (pos<brojac) {
+ brojac--;
+
+ //zapravo treba da pomerimo sve iza ovog radnika
+ for (int j=pos;j<brojac; j++)
+ spisak[j] = spisak[j+1];
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public int brRadnika() {
+ return brojac;
+ }
+
+ public void sviUKancelariji(int kanc) {
+ for (int i=0;i<brojac;i++) {
+ if (spisak[i].kancelarija == kanc) {
+ Svetovid.out.println(spisak[i]);
+ }
+ }
+ }
+
+ // ispisuje sve radnike u nizu razdvojene razmacima. Posebna paznja je obracena
+ // na to da se ne ispisuje zarez nakon poslednjeg radnika.
+ public String toString() {
+ String res = "Radnici [";
+ if (brojac>0) {
+ res += spisak[0];
+ }
+ for (int i=1;i<brojac;i++) {
+ res += ", "+spisak[i];
+ }
+ res += "]";
+ return res;
+ }
+
+}