gitweb on Svarog

projekti pod git sistemom za održavanje verzija -- projects under the git version control system
Primer implementacije binarnih stabala sa opstim tipom podataka
[spa2-materijali.git] / sortiranje / knjige / Biblioteka.java
1 /**
2 * Resenje zadatka sort1 sa vezbi
3 */
4 import java.util.Arrays;
6 import org.svetovid.io.SvetovidReader;
7 import org.svetovid.io.SvetovidWriter;
9 // Klasa koja opisuje jednu knjigu
10 class Knjiga implements Comparable<Knjiga> {
12 private final int id;
13 private final String naslov;
14 private final String autor;
16 public Knjiga(int id, String naslov, String autor) {
17 this.id = id;
18 this.naslov = naslov;
19 this.autor = autor;
20 }
22 public String toString() {
23 return id + " " + autor + ": " + naslov;
24 }
26 public int compareTo(Knjiga that) {
27 // najjednostavnija verzija: knjige uredjene po "id" broju
28 //return this.id - that.id;
30 // autor-naslov
31 int rez = this.autor.compareTo(that.autor);
32 if (rez == 0) {
33 rez = this.naslov.compareTo(that.naslov);
34 }
35 return rez;
36 }
38 public String getNaslov(){
39 return naslov;
40 }
42 public String getAutor() {
43 return autor;
44 }
46 public int getId() {
47 return id;
48 }
49 }
51 // Glavni program
52 public class Biblioteka {
54 public static void main(String[] arguments) {
56 // Ucitavanje knjiga iz fajla
57 String fajl = Svetovid.in.readLine("Unesite ime fajla sa knjigama:");
58 Knjiga[] niz = ucitajKnjige(fajl);
60 if (niz != null) {
61 // Stampanje ucitanog niza
62 Svetovid.out.println();
63 Svetovid.out.println("Nesortirani niz:");
64 Svetovid.out.println();
65 stampajNiz(niz);
67 // Sortiranje niza
68 Arrays.sort(niz);
70 // Stampanje sortiranog niza
71 Svetovid.out.println();
72 Svetovid.out.println("Sortirani niz:");
73 Svetovid.out.println();
74 stampajNiz(niz);
76 // Ispis knjiga u fajl
77 String izlazni = Svetovid.in.readLine("Unesite ime fajla za ispis:");
78 snimiKnjige(niz,izlazni);
80 } else {
81 System.err.println("Greska pri ucitavanju niza, kraj rada");
82 }
84 }
86 public static Knjiga[] ucitajKnjige(String fajl) {
88 // Ako ne mozemo da otvorimo fajl, ne ucitavamo knjige
89 if (!Svetovid.testIn(fajl)) {
90 return null;
91 }
93 // Ako mozemo, napravimo precicu 'in' da ne bi morali da
94 // svaki put kuvamo 'Svetovid.in(fajl)'
95 SvetovidReader in = Svetovid.in(fajl);
97 // Koliko ima knjiga u fajlu?
98 int br = Svetovid.in(fajl).readInt();
100 // Napravimo niz odgovarajuce velicine
101 Knjiga[] rez = new Knjiga[br];
103 // Ucitamo knjige
104 for (int i = 0; i < br; i++) {
106 // Ucitamo podatke o knjizi
107 int id = in.readInt();
108 String naslov = in.readLine();
109 String autor = in.readLine();
111 // Napravimo knjigu
112 Knjiga knjiga = new Knjiga(id, naslov, autor);
114 // Dodamo knjigu u niz
115 rez[i] = knjiga;
119 // Vratimo ucitani niz
120 return rez;
124 public static void stampajNiz(Knjiga[] niz) {
125 for (Knjiga knjiga : niz) {
126 System.out.println(knjiga);
130 public static void snimiKnjige(Knjiga[] niz, String ime) {
131 if (!Svetovid.testOut(ime)) {
132 // ne mozemo da snimimo, vracamo se
133 System.err.println("Nemoguce snimanje u fajl");
134 return;
137 // napravimo precicu 'out' da ne bi morali da
138 // svaki put pisemo 'Svetovid.out(ime)'
139 SvetovidWriter out = Svetovid.out(ime);
141 // pisemo broj knjiga, kao u originalu
142 out.println(niz.length);
144 // za svaku knjigu ispisujemo podatke
145 for (Knjiga knjiga : niz) {
146 out.println(knjiga.getId());
147 out.println(knjiga.getNaslov());
148 out.println(knjiga.getAutor());
151 // zatvorimo izlaz
152 out.close();
Svarog.pmf.uns.ac.rs/gitweb maintanance Doni Pracner