gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
dodati primeri programa za rad sa klasama sa teorijskih vezbi
[spa1-materijali.git] / kodovi / klase / RadniciSpisakId.java
diff --git a/kodovi/klase/RadniciSpisakId.java b/kodovi/klase/RadniciSpisakId.java
new file mode 100644 (file)
index 0000000..f83211c
--- /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;
+  }
+  
+}
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner