Java program Studentská knihovna (S textovým rozhraním) – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java program Studentská knihovna (S textovým rozhraním) – Java – Fórum – Programujte.comJava program Studentská knihovna (S textovým rozhraním) – Java – Fórum – Programujte.com

 

hrdinj070
Duch
28. 6. 2021   #1
-
0
-

Dobrý den,

Dělám menší prográmek (Studentská knihovna s textovým rozhraním)

Potřeboval bych pomoc. Jsou to takový blbosti, ale když nad tim koumákuju už měsíc a furt to předělávám, tak už mi tak trošlu došla mozková šťáva a všechny příkazy teď vypadaji jak rozsypaný čaj.

Je to vlastně program, ve ,kterém uživatel může přidat knihy, které mají (Sériové číslo ,Název a Jméno autora)

a také může registrovat studenty ,kteří maji(Registrační číslo a Jméno) , kteří si movou vypůjčovat a vracet knihy.

Javu se učím skoro 4 měsícem, ale spousta věcí ohledně OP mi furt uniká.

V programu je zdá se chyba ,kdy při druhém vrácení knihy se vyskytne chyba:

java.lang.NullPointerException
                             at Studenti.vratitKnihu(Studenti.java:129)
                             at Knihovna.main(Knihovna.java:69)

a měkdy to popokusu o vrácení knihy nevypůjčené studentem hlásí, že student se musí registrovat, přestože je registrován.

Toto jsou hlavní problémy ,které mám. A byl bych nesmírně vděčný ,kdyby mi to někdo opravil a ukázal jak to udělal.

Zde je odkaz na projekt. Je dělaný v BlueJ:

https://drive.google.com/drive/folders/1IZMz5EVZBT4UCONcCGvcnUzOjmKxcG2_?usp=sharing

A pokud by bylo možné. 

Jestli by šlo a nebylo lepší se zbavit tříd Studenti a Knihy a přesunout pole s metodami do třídy knihovny.

Děkuji za případné odpovědi

Nahlásit jako SPAM
IP: 89.24.42.–
peter
~ Anonymní uživatel
4014 příspěvků
29. 6. 2021   #2
-
0
-

Proc nepouzijes databazi? Nebo si vytvor class, ktera se chova jako databaze.
Javu nepouzivam, ale pseudo kod by mohl vypadat nejak takto: 

class classDb {
private db;
private structure;

function construct(&db, structure) // pointer vnejsiho pole
{
this->db = db; // predej pointer pole
this->structure = structure; // predej pointer pole
}

function createTableIfNotExist (table_name)
{
if (!isExist(this->db[table_name]))
    {this->db[table_name] = array()}
}

function formatRowToStructure (new_row)
{
}

function selectByIndex (table_name, index_name, value, limit)
{
table = this->db[table_name]
out = array()
foreach(table as index=>row) // prohledej pole
    {
    if (row[index_name]==value)
        {
        out[] = row; // pridej odpovidajici radek do vystupu
        if (count(out)==limit) {break;} // zastav, pokud jsi splnil limit, treba 1 radek
        }
    }
return out
}

function insert (table_name, new_row)
{
new_row = this->formatRowToStructure(new_row) // tady bys mel mit neco, co veme data z pole new_row a preformatuje je na strukturu tabulky
this->createTableIfNotExist(table_name)
this->db[table_name] = new_row
}

function updateByIndex (table_name, index, new_row)
{
}

function deleteByIndex (table_name, index, new_row)
{
}

}


db = array();
structure = array( 'osoby': array('jmeno':'', 'prijmeni':'') )
db = new classDb(db, structure);
db->insert('osoba', array('jmeno': 'tonda'))
founded = db->selectByIndex('osoba', 'jmeno', 'tonda')

Jakoze, pak uz te pocet tabulek trapit nemusi, kdyz budes mit funkcni mechanizmus, ktery ti bude prohledavat jakousi alternativu databaze.
A nebo pouzit primo databazi a sql prikazy, ta je na to urcena. Nevim, proc se uchylujes k jinym praktikam. 

SELECT * FROM table_name WHERE jmeno='tonda' // podobne memu db->selectByIndex
Nahlásit jako SPAM
IP: 2001:718:2601:258:20e7:2cf4:986a:60e0...–
peter
~ Anonymní uživatel
4014 příspěvků
29. 6. 2021   #3
-
0
-

   

dbData = array(); // oprava nazvu
structure = array( 'osoby': array('jmeno':'', 'prijmeni':'') )
db = new classDb(dbData, structure); // oprava nazvu
db->insert('osoba', array('jmeno': 'tonda'))
founded = db->selectByIndex('osoba', 'jmeno', 'tonda')

jinak, to je jakoze takovy php/js kod, ten zapis nemusi byt jave podobny. Ale, s tim si asi poradis.

Nahlásit jako SPAM
IP: 2001:718:2601:258:20e7:2cf4:986a:60e0...–
peter
~ Anonymní uživatel
4014 příspěvků
29. 6. 2021   #4
-
0
-

Jinak, v tom tvem kodu, to bych asi cele resil uplne jinak, kdyz uz data chces tlacit mermomoci do class, asi zadani ucitele.

public class Autor
{
    public int autor_id;
    public String jmeno;
    
    public Autor(int autor_id, String autor_jmeno){
        this.autor_id= autor_id;
        this.autor_jmeno = autor_jmeno;
    }
}

public class Kniha
{
    public int id;
    public int sn;
    public String jmeno;
    public int autor_id;
    
    public Kniha(int id, int kniha_sn, String kniha_jmeno, String autor_id){
        this.id = kniha_id;
        this.sn = kniha_sn;
        this.kniha_jmeno = kniha_jmeno;
        this.autor_id = autor_id;
    }
}

public class PolozkaSkladu
{
    public int kniha_id;
    public int mnozstvi;
    
    public PolozkaSkladu(int kniha_id, String mnozstvi){
        this.kniha_id= kniha_id;
        this.mnozstvi= mnozstvi;
    }
}

public class Sklad
{
    public (pole) sklad;
    public (pole) knihy;
    public (pole) autori;

public insert (kniha_sn, kniha_jmeno, kniha_autor, mnozstvi)
{
autor_id = autorInsertifNotExist(autor jmeno) // this->autori
kniha_id = knihaInsertifNotExist(kniha_sn, kniha_jmeno, autor_id) // this->knihy, new kniha
sklad_id = skladInsertifNotExist(kniha_id, mnozstvi) // this->sklad, new polozkaSkladu
}
}

A pak si tam dopis funkce, ktere kontroluji existenci v tom poli sklad, knihy, jmena....  ale, muzou tam byt chyby, javu neznam. Ta sklad->insert by mela byt obdova tvoji kniha prazdny a kniha neprazdna, to bude treba tam jeste ssikovne doplnit.

Nahlásit jako SPAM
IP: 2001:718:2601:258:20e7:2cf4:986a:60e0...–
peter
~ Anonymní uživatel
4014 příspěvků
30. 6. 2021   #5
-
0
-

 Kniha, Autor, Sklad polozka bych mozna prejmenoval na AutorItem, KnihaItem, SkladItem

Nahlásit jako SPAM
IP: 2001:718:2601:258:b0b1:4bf1:8e45:17d1...–
MilanL+1
Grafoman
2. 7. 2021   #6
-
0
-

#1 hrdinj07
Chybu vidím v tom, že v poli půjčených knih u studenta při vrácení nastavíš Null, na řádce 129 vypisuješ zapůjčené knihy, a po prvním vrácení je na daném indexu null takže to není schopno identifikovat knihu

V podstatě by se to mělo řešit bud hodnoutou vráceno a ve výpisu dát podmínku , nebo při výpisu můžeš dát podmínku na null aby to daný index nevypisovalo, případně se to dělá tak že se pole zredukuje, zn vše co je za indexem vrácené knihy se posune a upraví se počet.

Nahlásit jako SPAM
IP: 185.112.167.–
4. 7. 2021   #7
-
0
-

Děkuji za případné odpovědi

Nahlásit jako SPAM
IP: 27.73.104.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 12 hostů

Podobná vlákna

FTP s grafickým rozhraním — založil Vendell

Java program — založil Dusty

Java program — založil davidklimek

Java program — založil Nepovim

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý