Witam
Ucze sie javy, jestem poczatkujacy. Ambicje mam spore i zapał również jest. Postanowilem napisac mini-aplikacje zeby co-nieco nauczyc sie skladni jezyka, czytania z pliku, dziedziczenia itp.
Stworzyłem mini-pseudo baze danych uczniow operujacą na plikach .txt Nie jest to wersja okienkowa, wstępnie pisalem pod konsole i dopiero ucze sie Swinga ;)
Oto kod: (nizej krotki opis)
Klasa: Listy
package Paczka;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class Listy
{
ArrayList<Integer> id = new ArrayList<Integer>();
ArrayList<String> imie = new ArrayList<String>();
ArrayList<String> nazwisko = new ArrayList<String>();
ArrayList<String> klasa = new ArrayList<String>();
ArrayList<String> listaUwag = new ArrayList<String>();
ArrayList<String> listaOcen = new ArrayList<String>();
ArrayList<String> listaUczniow = new ArrayList<String>();
public int getRozmiarID()
{
return id.size();
}
public int getNextID()
{
int max=0;
for(int i=0; i<id.size(); i++)
{
if(id.get(i) > max)
max = id.get(i);
}
return max+1;
}
public void czytajUczniowDoList()
{
try{
Scanner in = new Scanner(new File("uczniowie.txt"));
while(in.hasNext())
{
id.add(in.nextInt());
imie.add(in.next());
nazwisko.add(in.next());
klasa.add(in.next());
}
in.close();
}catch(FileNotFoundException e)
{
System.err.println("Nie znaleziono pliku!");
}
}
public boolean czyIstnieje(String imie, String nazwisko)
{
czytajUczniowDoList();
int licznik = 0;
boolean spr = false;
for(int i = 0; i<getRozmiarID(); i++)
{
if(this.imie.get(i).equals(imie))
{
licznik++;
if(this.nazwisko.get(i).equals(nazwisko))
{
licznik++;
i = getRozmiarID();
}
else
licznik = 0;
}
}
if(licznik>=2)
spr = true;
else if(licznik<2)
spr = false;
return spr;
}
}
Klasa: Uczniowie
package Paczka;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Uczniowie extends Listy
{
public void czytajUczniow()
{
super.czytajUczniowDoList();
for(int i=0; i<=super.getRozmiarID()-1; i++)
{
System.out.println(super.id.get(i) + " " + super.imie.get(i) + " " + super.nazwisko.get(i) + " " + super.klasa.get(i) + " " );
}
}
public void dodajUczniow(String imie, String nazwisko, String klasa)
{
if(super.czyIstnieje(imie,nazwisko))
{
System.out.println("Jest juz taki uczen w bazie");
}
else
{
try{
FileWriter uczniowie = new FileWriter("uczniowie.txt", true);
int nastepneID = super.getNextID();
uczniowie.write(nastepneID + " " + imie + " " + nazwisko + " " + klasa + "\r\n");
uczniowie.close();
}catch(IOException e)
{
System.err.println("Nie znaleziono pliku!");
}
}
}
public void szukajUcznia(int id)
{
super.czytajUczniowDoList();
int licznik = 0;
for(int i=0; i<super.getRozmiarID(); i++)
{
if(super.id.get(i) == id)
{
System.out.println(super.id.get(i) + " " + super.imie.get(i) + " " + super.nazwisko.get(i) + " " + super.klasa.get(i) + " " );
licznik++;
}
}
if(licznik==0)
System.out.println("Nie ma ucznia z tym ID w bazie");
}
public void szukajUcznia(String imie)
{
super.czytajUczniowDoList();
int licznik = 0;
for(int i=0; i<super.getRozmiarID(); i++)
{
if(super.imie.get(i).equals(imie))
{
System.out.println(super.id.get(i) + " " + super.imie.get(i) + " " + super.nazwisko.get(i) + " " + super.klasa.get(i) + " " );
licznik++;
}
}
if(licznik==0)
System.out.println("Nie ma takiego ucznia w bazie");
}
public void szukajUcznia(String imie, String nazwisko)
{
super.czytajUczniowDoList();
int licznik = 0;
for(int i=0; i<super.getRozmiarID(); i++)
{
if(super.imie.get(i).equals(imie) && super.nazwisko.get(i).equals(nazwisko))
{
System.out.println(super.id.get(i) + " " + super.imie.get(i) + " " + super.nazwisko.get(i) + " " + super.klasa.get(i) + " " );
licznik++;
}
}
if(licznik==0)
System.out.println("Nie ma takiego ucznia w bazie");
}
public void dodajeBrakujacegoUcznia(String imie, String nazwisko, String komunikatKoncowy)
{
System.out.println("Nie ma takiego ucznia w bazie, dodaj by utworzyc uwage.");
Scanner in = new Scanner(System.in);
System.out.println("Czy chcesz dodac tego ucznia? tak/nie");
String odp = in.next();
if(odp.equals("tak"))
{
System.out.println("Podaj klase:");
String klasa = in.next();
dodajUczniow(imie, nazwisko, klasa);
System.out.println(komunikatKoncowy);
}
in.close();
}
public void usunUcznia(String imie, String nazwisko)
{
try{
Scanner in = new Scanner(new File("uczniowie.txt"));
while(in.hasNextLine())
{
String linia = in.nextLine();
if(linia.contains(imie) && linia.contains(nazwisko))
{
System.out.println("Usunieto!");
}
else
{
listaUczniow.add(linia);
}
}
FileWriter uczn = new FileWriter("uczniowie.txt");
uczn.write("");
uczn.close();
FileWriter uczn1 = new FileWriter("uczniowie.txt",true);
for(int i=0; i<listaUczniow.size(); i++)
{
uczn1.write(listaUczniow.get(i) + "\r\n");
}
uczn1.close();
in.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
}
Klasa: Uwagi
package Paczka;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Uwagi extends Listy
{
public void czytajUwage()
{
try{
Scanner in = new Scanner(new File("uwagi.txt"));
while(in.hasNextLine())
{
System.out.println(in.nextLine());
}
in.close();
}catch(FileNotFoundException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
public void czytajUwage(String imie, String nazwisko)
{
try{
Scanner in = new Scanner(new File("uwagi.txt"));
while(in.hasNextLine())
{
String im = in.next();
String naz = in.next();
String uwa = in.nextLine();
if(im.equals(imie) && naz.equals(nazwisko))
{
System.out.println(im + " " + naz + " " + uwa);
}
}
in.close();
}catch(FileNotFoundException e)
{
System.out.println("Nie odnaleziono pliku!");
}
}
public void dodajUwage(String imie, String nazwisko, String trescUwagi)
{
super.czytajUczniowDoList();
if(super.czyIstnieje(imie, nazwisko))
{
try{
FileWriter uwagi = new FileWriter("uwagi.txt",true);
uwagi.write(imie + " " + nazwisko + " " + trescUwagi + "\r\n");
uwagi.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
else
{
Uczniowie uczn = new Uczniowie();
uczn.dodajeBrakujacegoUcznia(imie, nazwisko, "Uczen dodany, mozesz teraz dodac uwage.");
}
}
public void usunUwagi(String imie, String nazwisko)
{
if(super.czyIstnieje(imie, nazwisko))
{
try{
Scanner in = new Scanner(new File("uwagi.txt"));
while(in.hasNextLine())
{
String ciag = in.nextLine();
if(ciag.contains(imie) && ciag.contains(nazwisko))
{
System.out.print("|");
}
else
{
super.listaUwag.add(ciag);
}
}
FileWriter uwagi = new FileWriter("uwagi.txt");
uwagi.write("");
uwagi.close();
FileWriter uwagi1 = new FileWriter("uwagi.txt",true);
for(int i=0; i<super.listaUwag.size(); i++)
{
uwagi1.write(super.listaUwag.get(i) + "\r\n");
}
in.close();
uwagi1.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
else if(!super.czyIstnieje(imie, nazwisko))
{
Uczniowie uczn = new Uczniowie();
uczn.dodajeBrakujacegoUcznia(imie, nazwisko,"Uczen dodany, mozesz teraz dodac mu uwage i je usuwac.");
}
}
}
Klasa: Oceny
package Paczka;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
public class Oceny extends Listy
{
public void czytajOcene()
{
try{
Scanner in = new Scanner(new File("oceny.txt"));
while(in.hasNextLine())
{
System.out.println(in.nextLine());
}
in.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
public void dodajOcene(String imie, String nazwisko, String przedmiot, int ocena)
{
if(czyIstnieje(imie, nazwisko))
{
try{
FileWriter oceny = new FileWriter("oceny.txt",true);
oceny.write(imie + " " + nazwisko + " " + przedmiot + " " + ocena + "\r\n");
oceny.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
else if(!czyIstnieje(imie, nazwisko))
{
Uczniowie uczn = new Uczniowie();
uczn.dodajeBrakujacegoUcznia(imie, nazwisko, "Uczeń został dodany, mozesz teraz dodac mu ocene.");
}
}
public void czytajOcene(String imie, String nazwisko)
{
try{
Scanner in = new Scanner(new File("oceny.txt"));
int licznik=0;
while(in.hasNextLine())
{
String imie1 = in.next();
String nazwisko1 = in.next();
String przedmiot = in.next();
String ocena = in.nextLine();
if(imie1.equals(imie) && nazwisko1.equals(nazwisko))
{
System.out.println(imie1 + " " + nazwisko1 + " " + przedmiot + ocena);
licznik++;
}
}
if(licznik==0)
{
System.err.println("Ten uczen nie ma jeszcze oceny.");
}
in.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku!");
}
}
public void usunOcene(String imie, String nazwisko)
{
try{
Scanner in = new Scanner(new File("oceny.txt"));
while(in.hasNextLine())
{
String linia = in.nextLine();
if(linia.contains(imie) && linia.contains(nazwisko))
{
System.out.print("|");
}
else
{
listaOcen.add(linia);
}
FileWriter oceny = new FileWriter("oceny.txt");
oceny.write("");
oceny.close();
FileWriter oceny1 = new FileWriter("oceny.txt");
for(int i=0; i<listaOcen.size(); i++)
{
oceny1.write(listaOcen.get(i) + "\r\n");
}
oceny1.close();
}
in.close();
}catch(IOException e)
{
System.err.println("Nie odnaleziono pliku.");
}
}
}
KLASA: Main - TESTOWA
package Paczka;
public class Main
{
public static void main(String[] args)
{
Uczniowie uczn = new Uczniowie();
// uczn.czytajUczniow();
// uczn.dodajUczniow("Erewan","Nulko","kl3");
// uczn.szukajUcznia("Maciej");
// uczn.usunUcznia("Daniel", "Bulka");
Uwagi uwagi = new Uwagi();
// uwagi.czytajUwage();
// uwagi.czytajUwage("Bartosz","Wodek");
// uwagi.dodajUwage("Stanislaw", "Wrona", "Nie reaguje na przestrogi nauczyciela");
// uwagi.usunUwagi("Maciej", "Tulaza");
Oceny oceny = new Oceny();
// oceny.czytajOcene();
// oceny.dodajOcene("Eugeniusz", "Tulaza", "religia", 5);
// oceny.czytajOcene("Maciej", "Anyz");
// oceny.usunOcene("Maciej", "Anyz");
}
}
W klasie Main - jak widac tylko testowałem jak to wszystko działa ;) moznaby tu stworzyc mini-menu na switch-case
Klasa Listy - zawiera pola z ArrayList'ami, w ktore wprowadzam dane celem czytania z pliku, dodawania, dopisywania itp.
1)Od razu odosnie tej klasy mam pytanie: czy dobrze zrobilem, ze tą klase rozszerzam w klasach potomnych(uczniowie, uwagi, oceny)? W koncu z tego co slyszalem, mozna powiedziec, ze słówko "extends" przedstawiamy jako "jest" czyli.. "listy są uczniami"? Troche to prawde powiedziawszy nie logiczne, a moze jednak?
Powiedzcie no jak to jest z tym, czy zastosowalem odpowiednia metode? czy lepiej bylo stworzyc prosta klase publiczna i jej obiekt i tym sposobem dodawac do pól i wywolywac metody tej klasy(Listy)?
2) I tak sobie myśle: czy powinienem zastosować enkapsulacje? dla kazdej listy dać setter i getter? bo niby z zewnatrz maja dostep inne klasy do pól, ale z drugiej strony czemu miałyby nie miec, w koncu od tego są, hmm? TO WAZNE
Klasa Uczniowie - jak wiadomo, czyta, dopisuje uczniow, szuka uczniow po id, imieniu nazwisku itp
Klasa Uwagi - czyta uwagi, dodaje, usuwa
Klasa Oceny - dodaje, usuwa oceny, jak pozostałe dwie tylko inna rola ;)
Pytanie moje - czy dobrze pisałem kod?
Znaczy sie - wszystko działa fajnie jak chciałem, tylko czy pewnego rodzaju "sposoby pisania" czy też tworzenie "czytelnego kodu" (chociaz w miare) zostały spełnione?
Czy dobrze zachowałem elementy dziedziczenia i ogolnie elementów jezyka obiektowego?
Wystawiam kod na krytykę i ewentualne, choć myśle wątpliwe - pochwały :)
Prosze o wyrozumiałość - jak widać poziom szału nie robi
Pozdrawiam!