gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Sortiranje, zadatak knjige
[spa2-materijali.git] / sortiranje / knjige / Biblioteka.java
diff --git a/sortiranje/knjige/Biblioteka.java b/sortiranje/knjige/Biblioteka.java
new file mode 100644 (file)
index 0000000..b057472
--- /dev/null
@@ -0,0 +1,155 @@
+/**
+ * Resenje zadatka sort1 sa vezbi
+ */
+import java.util.Arrays;
+
+import org.svetovid.io.SvetovidReader;
+import org.svetovid.io.SvetovidWriter;
+
+// Klasa koja opisuje jednu knjigu
+class Knjiga implements Comparable<Knjiga> {
+
+    private final int id;
+    private final String naslov;
+    private final String autor;
+
+    public Knjiga(int id, String naslov, String autor) {
+        this.id = id;
+        this.naslov = naslov;
+        this.autor = autor;
+    }
+
+    public String toString() {
+        return id + " " + autor + ": " + naslov;
+    }
+
+    public int compareTo(Knjiga that) {
+        // najjednostavnija verzija: knjige uredjene po "id" broju
+        //return this.id - that.id;
+
+        // autor-naslov
+        int rez = this.autor.compareTo(that.autor);
+        if (rez == 0) {
+            rez = this.naslov.compareTo(that.naslov);
+        }
+        return rez;
+    }
+
+    public String getNaslov(){
+        return naslov;
+    }
+
+    public String getAutor() {
+        return autor;
+    }
+
+    public int getId() {
+        return id;
+    }
+}
+
+// Glavni program
+public class Biblioteka {
+
+    public static void main(String[] arguments) {
+
+        // Ucitavanje knjiga iz fajla
+        String fajl = Svetovid.in.readLine("Unesite ime fajla sa knjigama:");
+        Knjiga[] niz = ucitajKnjige(fajl);
+
+        if (niz != null) {
+            // Stampanje ucitanog niza
+            Svetovid.out.println();
+            Svetovid.out.println("Nesortirani niz:");
+            Svetovid.out.println();
+            stampajNiz(niz);
+
+            // Sortiranje niza
+            Arrays.sort(niz);
+
+            // Stampanje sortiranog niza
+            Svetovid.out.println();
+            Svetovid.out.println("Sortirani niz:");
+            Svetovid.out.println();
+            stampajNiz(niz);
+
+            // Ispis knjiga u fajl
+            String izlazni = Svetovid.in.readLine("Unesite ime fajla za ispis:");
+            snimiKnjige(niz,izlazni);
+
+        } else {
+            System.err.println("Greska pri ucitavanju niza, kraj rada");
+        }
+
+    }
+
+    public static Knjiga[] ucitajKnjige(String fajl) {
+
+        // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige
+        if (!Svetovid.testIn(fajl)) {
+            return null;
+        }
+
+        // Ako mozemo, napravimo precicu 'in' da ne bi morali da
+        // svaki put kuvamo 'Svetovid.in(fajl)'
+        SvetovidReader in = Svetovid.in(fajl);
+
+        // Koliko ima knjiga u fajlu?
+        int br = Svetovid.in(fajl).readInt();
+
+        // Napravimo niz odgovarajuce velicine
+        Knjiga[] rez = new Knjiga[br];
+
+        // Ucitamo knjige
+        for (int i = 0; i < br; i++) {
+
+            // Ucitamo podatke o knjizi
+            int id = in.readInt();
+            String naslov = in.readLine();
+            String autor = in.readLine();
+
+            // Napravimo knjigu
+            Knjiga knjiga = new Knjiga(id, naslov, autor);
+
+            // Dodamo knjigu u niz
+            rez[i] = knjiga;
+
+        }
+
+        // Vratimo ucitani niz
+        return rez;
+
+    }
+
+    public static void stampajNiz(Knjiga[] niz) {
+        for (Knjiga knjiga : niz) {
+            System.out.println(knjiga);
+        }
+    }
+
+    public static void snimiKnjige(Knjiga[] niz, String ime) {
+        if (!Svetovid.testOut(ime)) {
+            // ne mozemo da snimimo, vracamo se
+            System.err.println("Nemoguce snimanje u fajl");
+            return;
+        }
+
+        // napravimo precicu 'out' da ne bi morali da
+        // svaki put pisemo 'Svetovid.out(ime)'
+        SvetovidWriter out = Svetovid.out(ime);
+
+        // pisemo broj knjiga, kao u originalu
+        out.println(niz.length);
+
+        // za svaku knjigu ispisujemo podatke
+        for (Knjiga knjiga : niz) {
+            out.println(knjiga.getId());
+            out.println(knjiga.getNaslov());
+            out.println(knjiga.getAutor());
+        }
+
+        // zatvorimo izlaz
+        out.close();
+
+    }
+}
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner