Avatar
Srnecek Bambi:

Ahojte,
neviem sa pohnúť so svojou semestrálkou z inf :/

Zatiaľ mám vytvorené tieto triedy:

Kniha:

public class Kniha
{
    private String nazovKnihy = "Kniha";
    private String menoAutora = "Autor";
    private int pocetStran;

    public Kniha(int pocetStran)
    {
        this.pocetStran=pocetStran;
    }

    public void nastavNazovKnihy(String nazov)
    {
        nazovKnihy=nazov;
    }

    public void nastavMenoAutora(String autor)
    {
        menoAutora=autor;
    }

    public void nastavPocetStran(int strany)
    {
        pocetStran = strany;
    }


    public String dajNazovKnihy()
    {
        return nazovKnihy;
    }

    public String dajMenoAutora()
    {
        return menoAutora;
    }

    public int dajPocetStran()
    {
        return pocetStran;
    }


    public String toString()
    {
        return("Knihu " + nazovKnihy + " napísal " + menoAutora +  " a má " + pocetStran + " strán. ");
    }
}

z nej zdedené:
Encyklopedia

import java.io.*;

public class Encyklopedia extends Kniha implements  Serializable
{
    private String tema;

    public Encyklopedia(int strany, String tema)
    {
        super(strany);

        nastavNazovKnihy("Encyklopedia");

        this.tema = tema;

    }
    public String dajTemu()
    {
        return tema;
    }

    public void zadajTemu (String tema)
    {
        this.tema = tema;
    }


    @Override
    public String toString()
    {
        String pom =(super.toString() + " Na tému: " + tema + "\n " );

        return pom;
    }

}

Slovník

import java.io.*;

public class Slovnik extends Kniha implements  Serializable
{
    private String jazyky;


    public Slovnik(int strany, String jazyky)
    {
        super(strany);

        nastavNazovKnihy("Slovnik");

        this.jazyky = jazyky;

    }

    public String dajJazyky()
    {
        return jazyky;
    }

    public void zadajJazyky (String jazyky)
    {
        this.jazyky = jazyky;
    }

    public String toString()
    {
        String pom =(super.toString() + " Pouzite jazyky: " + jazyky);

        return pom;
    }



}

Proza

import java.io.*;

public class Proza extends Kniha implements  Serializable
{
    private String zaner;


    public Proza(int strany, String zaner)
    {
        super(strany);

        nastavNazovKnihy("Proza");

        this.zaner = zaner;

    }

    public String dajZaner()
    {
        return zaner;
    }

    public void zadajZaner (String zaner)
    {
        this.zaner = zaner;
    }

    public String toString()
    {
        String pom =(super.toString() + " Zaner knihy: " + zaner);

        return pom;
    }



}

ďalej kontajner čo sú vlastne police do ktorých sa knihy vkladajú

import java.io.*;
import java.util.*;
public class Police implements Serializable
{
     private ArrayList <Kniha> police;
     private int kapacitaPolice;

     public Police (int kapacitaPolice)
     {
         this.kapacitaPolice = kapacitaPolice;

         police = new ArrayList<Kniha> ();
     }

     @Override
     public String toString ()
     {
         /*
         String pom = "";
         for (int i = 0; i < police.size(); i++)
         {
             pom = pom+police.get (i);
         }
         return pom; */

         String pom="";

         for(Kniha kniha : police)
         {
             pom = pom+kniha.toString()+"\n";    //polymorfyzmus...rovnaký pokyn(príkaz) a priradí sa zakaždým iná kniha
         }

         return pom;
     }

     public int  akaJeKapacitaPolice ()
     {
         return kapacitaPolice;
     }

     public boolean vlozKnihu (Kniha kniha)
     {
         if (kapacitaPolice > police.size())
         {
             police.add (kniha);
             return true;
         }
         else
         {
             return false;
         }
     }

     public Kniha dajItuKnihu (int k)
     {
         if (k>=0 && k<kapacitaPolice)
         {
             return police.get (k);
         }
         else
         {
             return null;
         }

     }

     public Kniha vyberItuKnihu (int k)
     {
          if (k>=0 && k<police.size())
         {
             return police.remove(k);
         }
         else
         {
             return null;
         }

     }

     public int kolkoObsahujeKnih ()
     {
         return police.size();
     }


}

a triedu Kniznica

public class Kniznica implements Serializable
{
    private Police police;

    public Kniznica (int kapacitaPolice)
    {
        police = new Police(kapacitaPolice);
    }

    @Override
    public String toString()
    {
        return  police.toString();
    }

    public boolean vlozKnihudoPolice  (Kniha kniha)
    {
        return police.vlozKnihu(kniha);
    }

    public Kniha vyberItuKnihuZpolice(int k)
    {
        return police.vyberItuKnihu(k);
    }

    public Kniha dajItuKnihuZPolice(int k)
    {
        return police.dajItuKnihu(k);
    }

    public int akaJeKapacitaPolice()
    {
        return police.akaJeKapacitaPolice();
    }

    public int akaJeKapacitaKniznice()
    {
        return police.akaJeKapacitaPolice();
    }

    public int kolkoJeKnihVKniznici()
    {
        return police.kolkoObsahujeKnih();
    }


}

A potrebujem vytvoriť hlavnú triedu, ktorá bude mať tieto možnosti

System.out.prin­tln("Menu kniznice: ");
System.out.prin­tln("1. Vypis obsah kniznice");
System.out.prin­tln("2. Pridaj knihu do kniznice");
System.out.prin­tln("3. Odstran knihu z kniznice");
System.out.prin­tln("4. Vyber knihu z police");
System.out.prin­tln("5. Vrat knihu do police");
System.out.prin­tln("6. Uloz program do suboru");
System.out.prin­tln("0. Koniec");

Vedel by mi s tým niekto pomôcť? :-?

 
Odpovědět 6. května 12:48
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Srnecek Bambi
Jindřich Máca:

Ahoj,

měl jsem jednou zase dobrosrdečnou náladu, tak jsem to dal nějak do kupy a tady je odkaz ke stažení - https://drive.google.com/…dE5QeG8/view?…. :)

Mám k tomu ale několik poznámek, jak k Tvému kódu, tak k mému kódu, tak k projektu jako takovému.

Nejdříve poznámky k projektu:

  • Rozhodně neručím za bezchybnost řešení. Splácal jsem to poměrně v rychlosti tak, aby to fungovalo podle zadání. Samozřejmě jsem to testoval, ale mohl jsem něco přehlédnout nebo jsem to zadání někde špatně pochopil. Taky jsem tam narazil na věci, co nebyli nikde specifikované, tak jsem si to prostě vymyslel podle svého... :-P
  • Úmyslně jsem v celém projektu nic nekomentoval, takže Tvým úkolem by teď mělo být si to pořádně projít a zdokumentovat. Tím si zároveň ověříš, že víš, co ten kód dělá. Pokud k tomu budeš mít nějaké dotazy, tak se samozřejmě můžeš ptát. ;)

Teď poznámky k Tvému kódu. I když jsem se snažil co nejvíce dodržet Tvůj předepsaný kód, tak jsem ho stejně musel měnit. Takže tady je seznam podstatných změn:

  • Je sice hezké mít všude gettery a settery, ale tady to ve většině případů nedává smysl. Představ si, že si pořídíš knihu, dáš si jí do poličky a pak tu samou knihu přejmenuješ. To je nesmysl, pokud by se kniha přejmenovávala, tak musí vyjít nové vydání, které si musíš znovu pořídit a to už přeci bude úplně jiná kniha. Z toho plyne, že ty settery tam vůbec nepatří a název knihy, spolu s jejím autorem by se měl nastavovat v konstruktoru. Podle toho jsem to náležitě předělal.
  • Druhý bod s tím souvisí. Sice můžeš psát svůj program ve slovenštině, ale i tak by jsi měla dodržovat nějaké konvence. Tzn. že gettery by měli začínat klíčovým slovem get a ne daj. Takže jsem je prostě přegeneroval.
  • Také knihovna může z principu mít více polic. Kdyby totiž mohla mít jen jednu, tak by jsi vůbec nemusela zvlášť psát třídu pro tu polici. Když se podíváš na ten kód třídy Kniznica, tak v podstatě jen deleguješ na třídu Police a nic nového nepřidáváš tzn. že by to klidně mohla být jedna třída. Takže jsem to tedy udělal tak, že knihovna může mít i více polic, ale pokud není nikde specifikováno kolik, tak má jen tu jednu a můžeš se tak k ní i chovat. :)
  • Na druhou stranu pochvala, třeba dědičnost je vyřešená relativně pěkně. ;)

No a na závěr poznámky k mému kódu:

  • Jak už jsem uváděl, psal jsem to docela v rychlosti a snažil se držet předlohy, takže celková architektura programu asi není úplně optimální, ale měla by být dostačující.
  • Jelikož jsem docela líný, tak jsem prostě použil Javu 8 s jejímy lamda výrazy a to v celém kódu tj. v nižší verzi to nepustíš, takže na to upozorňuji.
  • Dále nevím, na jaké úrovni se to v té škole učíte. Ten můj kód je odhadem tak od středně pokročilého programátora, tak aby s tím nebyly nějaké problémy. Například že ani učitel nebude vědět, co jsem tam vlastně napsal... :D

Víc už mě k tomu asi nenapadá, takže když tak budu čekat nějaké ty dotazy. 8)

 
Nahoru Odpovědět  +2 7. května 16:18
Avatar
Odpovídá na Jindřich Máca
Srnecek Bambi:

Ahoj,

veľmi pekne ďakujem za ochotu ale my sa učíme len na základnej úrovni, takže toto by mi neuveril :-)

 
Nahoru Odpovědět 7. května 18:16
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Srnecek Bambi
Jindřich Máca:

Chápu, tak alespoň se můžeš inspirovat. :-)

 
Nahoru Odpovědět 7. května 19:23
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na Jindřich Máca
Lubor Pešek:

chlape Ty si drak:D zkoušel jsem to prvně vyřešit sám a z hrůzou jsem zjistil, že máme vcelku podobný kód:) ale mě se osobně nezdá, že by tento příklad byl pro úplné začátečníky. Ale mám spíš i za to:) že se slečna chvilku flákala a nenechala si nic poradit:) ale to je jen moje doměnka.
Protože si osobně myslím, že je to krásný příklad na postupné školeníčko - od jednotlivé třídy Kniha, kde se naučí volat metody, rozdíl mezi konstruktorem a metodou, proměnné, atributy a prostě doopravdy ty základy.
Potom to rozšířit, že x knih může být v poličce no a postupně se dopracovat k tomu, že je nějaká dědičnost - z knihovny na poličku:)
Takže na místě slečny bych jen poupravil kód, protože se dá skutečně osekat (bez urážky, ale pochybuji, že by se na výšce někdo babral s tryc-catchem:D takové nepodstatné metody přece nemusí umět:D.D:D) ale jinak ten kód až tak moc změnit nejde nebo spíš jde, ale mnohem složitější metodykami. Když porovnám oba kódy, tak bych být slečnou, končil max. switchem. Enum je už fakt hodně specifické a dle mého názoru by se to lidi měli učit až po polymorfismu:D ale jinak škoda, že Ti můžu dát jen jeden palec.D já mám osobně 4 na těle, 5 v mobilu a 19 na displeji a ty bych ti všechny nejraději zvedl nahoru:D

Nahoru Odpovědět  +1 12. května 16:27
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Lubor Pešek
Jindřich Máca:

Hele, díky moc! :D Jako zase taková sláva to není, protože jsem to psal asi hodinku a něco, takže jsem to úplně nedomýšlel... :)

P.S.: Na školení základů programování v Javě to jedeme hezky postupně, přibližně tak, jak jsi to popsal. ;)

Editováno 12. května 16:41
 
Nahoru Odpovědět 12. května 16:39
Avatar
Srnecek Bambi:

Síce som to celé nepoužila ale určite si mi veľmi pomohol :) niektorými vecami som sa inšpirovala a nakoniec som to dobojovala a semestralka uznaná takže ešte raz moc ďakujem ;-)

 
Nahoru Odpovědět  +1 12. května 22:53
Avatar
Jindřich Máca
Tým ITnetwork
Avatar
Odpovídá na Srnecek Bambi
Jindřich Máca:

Tak to jsem moc rád, že jsem mohl pomoct a že ta moje práce k něčemu byla. :)

 
Nahoru Odpovědět 13. května 14:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.