Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package lab1;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.util.Scanner;
- public class Main {
- public static String fileName = "studenci.bin";
- public static Student[] array = new Student[5];
- public static int count = 0;
- public static void main(String[] args) {
- boolean exit = false;
- // skanerow budowanych na strumieniach systemowych nigdy nie zamykamy
- // (zamykajac taki skaner, zamykamy rowniez strumien, na ktorym zostal
- // on zbudowany, kolejne skanery budowane na nim nie beda poprawnie dzialac)
- Scanner sc = new Scanner(System.in);
- System.out.println("Podaj komende (exit, add, save, load, dest, print, help):");
- // proste i eleganckie rozwiazanie do utworzenia petli programu konsolowego
- // jak chcemy wyjsc, to po prostu uzywamy komendy 'exit', ktory przestawi
- // zmienna exit na true
- while (!exit) {
- System.out.print("> "); // wizualnie pokazujemy, ze user ma cos wprowadzic, czysto kosmetyczne
- String input = sc.nextLine();
- // interpretujemy input
- if (input.equals("exit")) {
- exit = true;
- } else if (input.equals("add")) {
- // jak obsluzymy przekroczenie zakresu tablicy, to kwestia preferencji
- // tutaj poszerzamy po prostu tablice o 5 dodatkowych miejsc
- if (count == array.length) {
- System.out.println("Osiagnieto maksymalny rozmiar tablicy, poszerzanie o 5 dodatkowych miejsc...");
- Student[] newArray = new Student[count + 5]; // count = array.length, wiec nie ma roznicy, ktora zmienna wykorzystamy
- for (int i = 0; i < count; i++)
- newArray[i] = array[i];
- array = newArray;
- }
- // metoda createNewStudent() zwraca nam nowo utworzonego studenta, musimy go tylko
- // zlapac i zapisac w tablicy na odpowiednim indeksie
- array[count++] = createNewStudent();
- } else if (input.equals("save")) {
- save();
- } else if (input.equals("load")) {
- array = load();
- } else if (input.equals("dest")) {
- fileName = destination();
- } else if (input.equals("print")) {
- print();
- } else if (input.equals("help") || input.equals("?")) {
- help();
- } else {
- System.out.println("Nie rozpoznano komendy. Sprobuj ponownie.");
- }
- }
- }
- public static void help() {
- System.out.println("exit -- wychodzi z aplikacji");
- System.out.println("add -- dodaje nowego studenta");
- System.out.println("save -- zapisuje obecnie otwarta liste do pliku");
- System.out.println("load -- wczytuje liste z pliku");
- System.out.println("dest -- ustawia nazwe pliku, w ktorym zapisywana jest lista studentow");
- System.out.println("print -- drukuje obecnie otwarta liste studentow");
- }
- public static void print() {
- System.out.println("--------------------------------------------------------");
- System.out.printf("|%1$-20S|%2$-15S|%3$8S|%4$2S|%5$5S|%n", "nazwisko", "imie", "album", "r.", "sred");
- System.out.println("--------------------------------------------------------");
- for (int i = 0; i < count; i++)
- array[i].wyswietl();
- System.out.println("--------------------------------------------------------");
- }
- public static Student createNewStudent() {
- Scanner sc = new Scanner(System.in);
- System.out.println("Podaj imie studenta:");
- System.out.print("> ");
- String imie = sc.next();
- System.out.println("Podaj nazwisko studenta:");
- System.out.print("> ");
- String nazw = sc.next();
- System.out.println("Podaj numer albumu:");
- System.out.print("> ");
- long album = sc.nextLong();
- System.out.println("Podaj rok studiow:");
- System.out.print("> ");
- int rok = sc.nextInt();
- System.out.println("Podaj srednia ocen studenta (oddzielone przecinkiem):");
- System.out.print("> ");
- double sr = sc.nextDouble();
- System.out.println("Pomyslnie dodano nowego studenta do systemu.");
- return new Student(nazw, imie, album, rok, sr);
- }
- public static String destination() {
- Scanner sc = new Scanner(System.in);
- System.out.println("Podaj nazwe pliku, w ktorym maja byc przechowywane dane (wraz z rozszerzeniem):");
- System.out.print("> ");
- return sc.nextLine();
- }
- public static Student[] load() {
- File destFile = new File(fileName);
- ObjectInputStream ois = null;
- try {
- ois = new ObjectInputStream(new FileInputStream(destFile));
- count = ois.readInt(); // czytamy najpierw, ile studentow mamy zapisanych w pliku
- array = new Student[count]; // tworzymy tablice tymczasowa, do ktorej zapisujemy odczytywanych studentow
- // krecimy petla tyle razy, ile sobie odczytalismy na poczatku
- for (int i = 0; i < count; i++)
- array[i] = (Student) ois.readObject();
- // jezeli wyskonczy nam jakis wyjatek, to nie dojdziemy do tego miejsca
- System.out.println("Pomyslnie wczytano dane z " + fileName);
- } catch (FileNotFoundException e) {
- System.out.println("Nie znaleziono pliku: " + fileName);
- } catch (IOException e) {
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- System.out.println("Klasa nie istnieje.");
- } finally {
- // blok finally jest wykonywany zawsze, niezaleznie od tego czy w bloku
- // try wyskoczy nam wyjatek, czy nie
- // zapewnia to nam, ze zawsze zamkniemy strumien
- if (ois != null)
- try {
- ois.close(); // strumienie plikowe zawsze trzeba zamykac
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return array; // zwracamy tablice, ktora odczytalismy z pliku
- }
- public static void save() {
- File destFile = new File(fileName);
- ObjectOutputStream oos = null;
- try {
- oos = new ObjectOutputStream(new FileOutputStream(destFile));
- oos.writeInt(count); // najpierw zapisujemy, ilu studentow bedziemy zapisywac w pliku
- for (int i = 0; i < count; i++)
- oos.writeObject(array[i]);
- // jezeli wyskonczy nam jakis wyjatek, to nie dojdziemy do tego miejsca
- System.out.println("Pomyslnie zapisano dane do " + fileName);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- // blok finally jest wykonywany zawsze, niezaleznie od tego czy w bloku
- // try wyskoczy nam wyjatek, czy nie
- // zapewnia to nam, ze zawsze zamkniemy strumien
- if (oos != null)
- try {
- oos.close(); // strumienie plikowe zawsze trzeba zamykac
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement