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
authorDoni Pracner <quinnuendo@gmail.com>
Thu, 12 Mar 2015 17:13:03 +0000 (18:13 +0100)
committerDoni Pracner <quinnuendo@gmail.com>
Thu, 12 Mar 2015 17:13:09 +0000 (18:13 +0100)
kodovi/klase/Radnici.java [new file with mode: 0644]
kodovi/klase/RadniciSpisak.java [new file with mode: 0644]
kodovi/klase/RadniciSpisakId.java [new file with mode: 0644]
kodovi/klase/radnici.txt [new file with mode: 0644]
kodovi/klase/radnici2.txt [new file with mode: 0644]

diff --git a/kodovi/klase/Radnici.java b/kodovi/klase/Radnici.java
new file mode 100644 (file)
index 0000000..e04b541
--- /dev/null
@@ -0,0 +1,101 @@
+/**
+ * Program koji radi sa spiskom radnika, predstavljenim kao niz Objekata tipa Radnik. Klasa Radnika je definisana
+ * u klasi ispod. U programu ne znamo koliko ima radnika u fajlu, pa predpostavljamo da nece biti vise od 100.
+ */
+public class Radnici {
+  final static int MAX_RADNIKA = 100;
+  
+  static Radnik[] spisak = null;
+  // brojac predstavlja koliko radnika zapravo ima u nizu
+  static int brojac = 0;
+  
+  /** Ucitava radnike iz datog fajla. Niz radnika ce nakon ovog metoda sadrzati 
+    * sve podatke iz fajla i samo njih, tj ako je nesto postojalo u nizu pre,
+    * bice zanemareno.
+    */
+  public static void ucitajRadnike(String imef){
+    // novi niz radnika
+    spisak = new Radnik[MAX_RADNIKA];
+    // resetujemo brojac
+    brojac = 0;
+    
+    //citamo iz fajla dokle god ima jos redova i dok ne premasimo 
+    // kapacitet naseg niza
+    while (!Svetovid.in(imef).isEmpty() && brojac < MAX_RADNIKA) {
+      int id = Svetovid.in(imef).readInt();
+      String prezime = Svetovid.in(imef).readString();
+      String ime = Svetovid.in(imef).readString();
+      int kanc = Svetovid.in(imef).readInt();
+      
+      spisak[brojac] = new Radnik(id, prezime, ime, kanc);
+      brojac++;
+    }
+    
+    // ako ima jos redova, znaci da smo prestali zbog punog niza
+    if (!Svetovid.in(imef).isEmpty()){
+      Svetovid.err.println("Previse radnika u fajlu! Ucitano prvih "+MAX_RADNIKA);
+    }
+    
+    // zatvaramo fajl jer smo ga celog procitali
+    // i oslobodjamo resurs
+    Svetovid.in(imef).close();
+  }
+  
+  public static void sviUKancelariji(int kanc){
+    for (int i=0;i<brojac;i++) {
+      if (spisak[i].kancelarija == kanc) {
+        Svetovid.out.println(spisak[i]);
+      }
+    }
+  }
+  
+  public static void main(String[] args){
+    ucitajRadnike("radnici.txt");
+    sviUKancelariji(1);
+  }
+}
+
+/** Radnik predstavljen prezimenom, imenom, svojim id-om i 
+  * brojem kancelarije u kojoj je. Ima dodatne metode koji izdvajaju neke od
+  * informacija vezane za radnika.
+  */
+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; 
+  }
+}
\ No newline at end of file
diff --git a/kodovi/klase/RadniciSpisak.java b/kodovi/klase/RadniciSpisak.java
new file mode 100644 (file)
index 0000000..51c7040
--- /dev/null
@@ -0,0 +1,108 @@
+/** Program prosiruje prethodni Radnici koji je radio sa nizom objekata u 
+  * klasu koja predstavlja taj spisak i ima metode vezane za njega */
+public class RadniciSpisak {
+  static SpisakRadnika spisak = null, spisak2 = null;
+  
+   public static void main(String[] args){
+    spisak = new SpisakRadnika();
+    spisak.ucitajRadnike("radnici.txt");
+    spisak.sviUKancelariji(1);
+    
+    spisak2 = new SpisakRadnika();
+    spisak2.ucitajRadnike("radnici2.txt");
+    spisak2.sviUKancelariji(1);
+   }
+}
+
+/** Klasa predstavlja spisak radnika u nekoj firmi. */
+class SpisakRadnika{
+
+  /** Klasa predstavlja jednog radnika. Ovde je postavljena kao unutrasnja klasa
+    * u klasi SpisakRadnika, ali mogla je biti postavljena i ispod kao odvojena u istom
+    * fajlu ili cak u sopstvenom fajlu u istom folderu. */
+  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 SpisakRadnika() {
+    spisak = new Radnik[MAX_RADNIKA];
+    brojac = 0;
+  }
+  
+  /** ucitava radnike iz datog fajla i dodaje u trenutni spisak. */
+  public void ucitajRadnike(String imef){
+    while (!Svetovid.in(imef).isEmpty() && brojac < MAX_RADNIKA) {
+      int id = Svetovid.in(imef).readInt();
+      String prezime = Svetovid.in(imef).readString();
+      String ime = Svetovid.in(imef).readString();
+      int kanc = Svetovid.in(imef).readInt();
+      spisak[brojac] = new Radnik(id, prezime, ime, kanc);
+      brojac++;
+    }
+    
+    if (!Svetovid.in(imef).isEmpty()){
+      Svetovid.out.println("Previse radnika u fajlu! Ucitano prvih "+MAX_RADNIKA);
+    }
+    
+    // zatvaramo fajl jer smo ga celog procitali
+    // i oslobodjamo resurs
+    Svetovid.in(imef).close();
+  }
+  
+  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]);
+      }
+    }
+  }
+  
+}
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;
+  }
+  
+}
diff --git a/kodovi/klase/radnici.txt b/kodovi/klase/radnici.txt
new file mode 100644 (file)
index 0000000..037a92a
--- /dev/null
@@ -0,0 +1,4 @@
+1 Patak Paja 1
+2 Patak Baja 1
+3 Mis Miki 2
+4 Ratak Raja 15
diff --git a/kodovi/klase/radnici2.txt b/kodovi/klase/radnici2.txt
new file mode 100644 (file)
index 0000000..83842bd
--- /dev/null
@@ -0,0 +1,3 @@
+11 Patak Paja 1
+13 Patak Baja 1
+11 Mis Miki 2
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner