Advertisement
Guest User

Untitled

a guest
Mar 1st, 2015
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. package lab1;
  2.  
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.ObjectInputStream;
  9. import java.io.ObjectOutputStream;
  10. import java.util.Scanner;
  11.  
  12. public class Main {
  13. public static String fileName = "studenci.bin";
  14. public static Student[] array = new Student[5];
  15. public static int count = 0;
  16.  
  17. public static void main(String[] args) {
  18. boolean exit = false;
  19.  
  20. // skanerow budowanych na strumieniach systemowych nigdy nie zamykamy
  21. // (zamykajac taki skaner, zamykamy rowniez strumien, na ktorym zostal
  22. // on zbudowany, kolejne skanery budowane na nim nie beda poprawnie dzialac)
  23. Scanner sc = new Scanner(System.in);
  24.  
  25. System.out.println("Podaj komende (exit, add, save, load, dest, print, help):");
  26.  
  27. // proste i eleganckie rozwiazanie do utworzenia petli programu konsolowego
  28. // jak chcemy wyjsc, to po prostu uzywamy komendy 'exit', ktory przestawi
  29. // zmienna exit na true
  30. while (!exit) {
  31. System.out.print("> "); // wizualnie pokazujemy, ze user ma cos wprowadzic, czysto kosmetyczne
  32. String input = sc.nextLine();
  33.  
  34. // interpretujemy input
  35. if (input.equals("exit")) {
  36. exit = true;
  37. } else if (input.equals("add")) {
  38. // jak obsluzymy przekroczenie zakresu tablicy, to kwestia preferencji
  39. // tutaj poszerzamy po prostu tablice o 5 dodatkowych miejsc
  40. if (count == array.length) {
  41. System.out.println("Osiagnieto maksymalny rozmiar tablicy, poszerzanie o 5 dodatkowych miejsc...");
  42. Student[] newArray = new Student[count + 5]; // count = array.length, wiec nie ma roznicy, ktora zmienna wykorzystamy
  43. for (int i = 0; i < count; i++)
  44. newArray[i] = array[i];
  45. array = newArray;
  46. }
  47.  
  48. // metoda createNewStudent() zwraca nam nowo utworzonego studenta, musimy go tylko
  49. // zlapac i zapisac w tablicy na odpowiednim indeksie
  50. array[count++] = createNewStudent();
  51. } else if (input.equals("save")) {
  52. save();
  53. } else if (input.equals("load")) {
  54. array = load();
  55. } else if (input.equals("dest")) {
  56. fileName = destination();
  57. } else if (input.equals("print")) {
  58. print();
  59. } else if (input.equals("help") || input.equals("?")) {
  60. help();
  61. } else {
  62. System.out.println("Nie rozpoznano komendy. Sprobuj ponownie.");
  63. }
  64. }
  65. }
  66.  
  67. public static void help() {
  68. System.out.println("exit -- wychodzi z aplikacji");
  69. System.out.println("add -- dodaje nowego studenta");
  70. System.out.println("save -- zapisuje obecnie otwarta liste do pliku");
  71. System.out.println("load -- wczytuje liste z pliku");
  72. System.out.println("dest -- ustawia nazwe pliku, w ktorym zapisywana jest lista studentow");
  73. System.out.println("print -- drukuje obecnie otwarta liste studentow");
  74. }
  75.  
  76. public static void print() {
  77. System.out.println("--------------------------------------------------------");
  78. System.out.printf("|%1$-20S|%2$-15S|%3$8S|%4$2S|%5$5S|%n", "nazwisko", "imie", "album", "r.", "sred");
  79. System.out.println("--------------------------------------------------------");
  80. for (int i = 0; i < count; i++)
  81. array[i].wyswietl();
  82. System.out.println("--------------------------------------------------------");
  83. }
  84.  
  85. public static Student createNewStudent() {
  86. Scanner sc = new Scanner(System.in);
  87.  
  88. System.out.println("Podaj imie studenta:");
  89. System.out.print("> ");
  90. String imie = sc.next();
  91.  
  92. System.out.println("Podaj nazwisko studenta:");
  93. System.out.print("> ");
  94. String nazw = sc.next();
  95.  
  96. System.out.println("Podaj numer albumu:");
  97. System.out.print("> ");
  98. long album = sc.nextLong();
  99.  
  100. System.out.println("Podaj rok studiow:");
  101. System.out.print("> ");
  102. int rok = sc.nextInt();
  103.  
  104. System.out.println("Podaj srednia ocen studenta (oddzielone przecinkiem):");
  105. System.out.print("> ");
  106. double sr = sc.nextDouble();
  107.  
  108. System.out.println("Pomyslnie dodano nowego studenta do systemu.");
  109. return new Student(nazw, imie, album, rok, sr);
  110. }
  111.  
  112. public static String destination() {
  113. Scanner sc = new Scanner(System.in);
  114.  
  115. System.out.println("Podaj nazwe pliku, w ktorym maja byc przechowywane dane (wraz z rozszerzeniem):");
  116. System.out.print("> ");
  117. return sc.nextLine();
  118. }
  119.  
  120. public static Student[] load() {
  121. File destFile = new File(fileName);
  122. ObjectInputStream ois = null;
  123. try {
  124. ois = new ObjectInputStream(new FileInputStream(destFile));
  125. count = ois.readInt(); // czytamy najpierw, ile studentow mamy zapisanych w pliku
  126. array = new Student[count]; // tworzymy tablice tymczasowa, do ktorej zapisujemy odczytywanych studentow
  127.  
  128. // krecimy petla tyle razy, ile sobie odczytalismy na poczatku
  129. for (int i = 0; i < count; i++)
  130. array[i] = (Student) ois.readObject();
  131.  
  132. // jezeli wyskonczy nam jakis wyjatek, to nie dojdziemy do tego miejsca
  133. System.out.println("Pomyslnie wczytano dane z " + fileName);
  134. } catch (FileNotFoundException e) {
  135. System.out.println("Nie znaleziono pliku: " + fileName);
  136. } catch (IOException e) {
  137. e.printStackTrace();
  138. } catch (ClassNotFoundException e) {
  139. System.out.println("Klasa nie istnieje.");
  140. } finally {
  141. // blok finally jest wykonywany zawsze, niezaleznie od tego czy w bloku
  142. // try wyskoczy nam wyjatek, czy nie
  143. // zapewnia to nam, ze zawsze zamkniemy strumien
  144. if (ois != null)
  145. try {
  146. ois.close(); // strumienie plikowe zawsze trzeba zamykac
  147. } catch (Exception e) {
  148. e.printStackTrace();
  149. }
  150. }
  151.  
  152. return array; // zwracamy tablice, ktora odczytalismy z pliku
  153. }
  154.  
  155. public static void save() {
  156. File destFile = new File(fileName);
  157. ObjectOutputStream oos = null;
  158. try {
  159. oos = new ObjectOutputStream(new FileOutputStream(destFile));
  160. oos.writeInt(count); // najpierw zapisujemy, ilu studentow bedziemy zapisywac w pliku
  161. for (int i = 0; i < count; i++)
  162. oos.writeObject(array[i]);
  163.  
  164. // jezeli wyskonczy nam jakis wyjatek, to nie dojdziemy do tego miejsca
  165. System.out.println("Pomyslnie zapisano dane do " + fileName);
  166. } catch (FileNotFoundException e) {
  167. e.printStackTrace();
  168. } catch (IOException e) {
  169. e.printStackTrace();
  170. } finally {
  171. // blok finally jest wykonywany zawsze, niezaleznie od tego czy w bloku
  172. // try wyskoczy nam wyjatek, czy nie
  173. // zapewnia to nam, ze zawsze zamkniemy strumien
  174. if (oos != null)
  175. try {
  176. oos.close(); // strumienie plikowe zawsze trzeba zamykac
  177. } catch (Exception e) {
  178. e.printStackTrace();
  179. }
  180. }
  181. }
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement