gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Doterani primeri sortiranja
[spa2-materijali.git] / sortiranje / knjige / Biblioteka.java
1 import java.util.Arrays;
3 import org.svetovid.Svetovid;
4 import org.svetovid.io.SvetovidReader;
5 import org.svetovid.io.SvetovidWriter;
7 // Klasa koja opisuje jednu knjigu
8 class Knjiga implements Comparable<Knjiga> {
10 // Osobine jednom kreirane knjige se ne mogu menjati
11 private final int id;
12 private final String naslov;
13 private final String autor;
15 public Knjiga(int id, String naslov, String autor) {
16 this.id = id;
17 this.naslov = naslov;
18 this.autor = autor;
19 }
21 public String getNaslov() {
22 return naslov;
23 }
25 public String getAutor() {
26 return autor;
27 }
29 public int getId() {
30 return id;
31 }
33 public String toString() {
35 // Tekstualna reprezentacija knjige oblika:
36 // 9785 J.R.R. Tolkien: The Lord of the Rings
37 return id + " " + autor + ": " + naslov;
39 }
41 public int compareTo(Knjiga that) {
43 // Najjednostavnije poredjenje je po "id" broju
44 // return this.id - that.id;
46 // No mi ovde poredimo prvo po autoru
47 int rezultat = this.autor.compareTo(that.autor);
49 // A potom po naslovu, ako je sutor isti
50 if (rezultat == 0) {
51 rezultat = this.naslov.compareTo(that.naslov);
52 }
54 // Vracamo rezultat poredjenja
55 return rezultat;
57 }
58 }
60 // Glavni program
61 public class Biblioteka {
63 public static void main(String[] arguments) {
65 // Ucitavanje knjiga iz fajla
66 String fajl = Svetovid.in.readLine("Unesite ime fajla sa knjigama:");
67 Knjiga[] niz = ucitajKnjige(fajl);
69 // Dalje radimo samo ako smo uspeli da ucitamo knjige
70 if (niz != null) {
72 // Stampanje ucitanog niza
73 Svetovid.out.println();
74 Svetovid.out.println("Nesortirani niz:");
75 Svetovid.out.println();
76 stampajNiz(niz);
78 // Sortiranje niza
79 Arrays.sort(niz);
81 // Stampanje sortiranog niza
82 Svetovid.out.println();
83 Svetovid.out.println("Sortirani niz:");
84 Svetovid.out.println();
85 stampajNiz(niz);
87 // Ispis knjiga u fajl
88 String izlazni = Svetovid.in.readLine("Unesite ime fajla za ispis:");
89 snimiKnjige(niz, izlazni);
91 // Prijavljujemo gresku ako nismo uspeli da ucitamo niz
92 } else {
93 System.err.println("Greska pri ucitavanju niza, kraj rada");
94 }
96 }
98 public static Knjiga[] ucitajKnjige(String fajl) {
100 // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige
101 if (!Svetovid.testIn(fajl)) {
102 return null;
105 // Ako mozemo, napravimo precicu 'in' da ne bismo morali
106 // svaki put da kucamo 'Svetovid.in(fajl)'
107 SvetovidReader in = Svetovid.in(fajl);
109 // Koliko ima knjiga u fajlu?
110 int br = Svetovid.in(fajl).readInt();
112 // Napravimo niz odgovarajuce velicine
113 Knjiga[] rez = new Knjiga[br];
115 // Ucitamo knjige
116 for (int i = 0; i < br; i++) {
118 // Ucitamo podatke o knjizi
119 int id = in.readInt();
120 String naslov = in.readLine();
121 String autor = in.readLine();
123 // Napravimo knjigu
124 Knjiga knjiga = new Knjiga(id, naslov, autor);
126 // Dodamo knjigu u niz
127 rez[i] = knjiga;
131 // Zatvorimo fajl
132 Svetovid.closeIn(fajl);
134 // Vratimo ucitani niz
135 return rez;
139 public static void stampajNiz(Knjiga[] niz) {
140 for (Knjiga knjiga : niz) {
141 System.out.println(knjiga);
145 public static void snimiKnjige(Knjiga[] niz, String ime) {
147 // Ako ne mozemo da otvorimo fajl, vracamo se u glavni program
148 if (!Svetovid.testOut(ime)) {
149 System.err.println("Snimanje u fajl nije moguce!");
150 return;
153 // Napravimo precicu 'out' da ne bismo morali
154 // svaki put da kucamo 'Svetovid.out(ime)'
155 SvetovidWriter out = Svetovid.out(ime);
157 // Upisemo ukupan broj knjiga, kao u originalnom fajlu
158 out.println(niz.length);
160 // Za svaku knjigu upisemo redom sve podatke
161 for (Knjiga knjiga : niz) {
162 out.println(knjiga.getId());
163 out.println(knjiga.getNaslov());
164 out.println(knjiga.getAutor());
167 // Zatvorimo izlaz
168 out.close();
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner