Kontrola prográmku v JAVE a odstranění začátečnických chyb – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Kontrola prográmku v JAVE a odstranění začátečnických chyb – Java – Fórum – Programujte.comKontrola prográmku v JAVE a odstranění začátečnických chyb – Java – Fórum – Programujte.com

 

Kaktus410
~ Anonymní uživatel
4 příspěvky
18. 7. 2014   #1
-
0
-

Ahoj,

snažín se naučit JAVU dle článků uvedených zde na ITNETWORK a rozhodl jsem se, že si jen tak pro sebe vytvořím program, který bude simulovat klasické bankovní operace, abych se naučil programovat v JAVE.
Potřeboval bych vědět, jestli jsem začal dobře nebo špatně, na co si mám dávat pozor a případně mi poradit s odstranění chyb, které jsem si do toho prográmku již zavedl.
Snažím se vytvořit něco, co nenajdu na internetu. Jinak ten můj prográmek je propojen s databází Oracle. Jak mám vytvořené propojení s db, tak sem zatím dávat nebudu, teda pokud nebudu o to požádán.
Tak jak mám ten program vytvořený, tam mi i funguje, ale potřebuji aspoň tyto dvě třídy zkontrolovat od zkušených javystů.
Předem moc děkuji.

třída Banka s metodou main:

package banka;

 import java.sql.SQLException;
 import java.text.ParseException;
 import java.util.Scanner;

 public class Banka {

     public static void main(String[] args) throws SQLException, ParseException {
         Scanner sc = new Scanner(System.in, "UTF-8");

         System.out.println("Vitejte v bance Kaktus Banka.");
         System.out.println("Jste klient nebo bankéř? 1 - klient, 2 - bankéř:");
         int volba = Integer.parseInt(sc.nextLine());
         switch (volba)
         {
             case 1:
                 Klient klienti = new Klient();
                 klienti.Klienti();
                 break;
             case 2:
                 Banker banker = new Banker();
                 banker.operaceBankere();
                 break;
             default:
                 System.out.println("Nebyla zadána správná volba!");
                 break;
         }
     }//end main
 }//end Banka

třída Banker:

package banka;

 import java.sql.SQLException;
 import java.util.Scanner;
 import java.util.logging.Level;
 import java.util.logging.Logger;

 
 public class Banker {
     private String jmeno;
     private String prijmeni;
     private String login;
     private String heslo;
     private String osloveni;
     private String datumZalozeni;
     private String sporiciUcet;
     private String debet;
     private int castkaDebetu;
     private int cisloBUctu;
     private int opak = 0;
     private Scanner sc = new Scanner(System.in, "UTF-8");


     public void operaceBankere() throws SQLException {
         Scanner sc = new Scanner(System.in, "UTF-8");

         System.out.println("Zadej operaci, kterou chcete provést:");
         System.out.println("1 - Aktivace nového klienta");
         System.out.println("2 - Založit nový účet");
         System.out.println("3 - Založit nový spořící účet");
         System.out.println("4 - Zrušit klienta");
         System.out.println("5 - Zrušit běžný účet");
         System.out.println("6 - Zrušit spořící účet");
         int volba = Integer.parseInt(sc.nextLine());
         switch (volba)
         {
             case 1:
                 Banker novyKlient = new Banker();
                 novyKlient.zalozitNovehoKlienta();
                 break;
             case 2:
                 Banker novyBUcet = new Banker();
                 novyBUcet.zalozitNovyBeznyUcet();
                 break;
             case 3:
                 Banker novySUcet = new Banker();
                 novySUcet.zalozitNovySporiciUcet();
                 break;
             case 4:
                 System.out.println("Zrušit klienta");
                 break;
             case 5:
                 System.out.println("Zrušit účet");
                 break;
             case 6:
                 System.out.println("Zrušit spořící účet");
                 break;
             default:
                 System.out.println("Nebyla zadána správná volba!");
                 break;
         }
     }

     public void zalozitNovehoKlienta() throws SQLException {
         System.out.println("Aktivace nového klienta");
         System.out.println("Zadejte Jméno: ");
         jmeno = sc.nextLine();
         System.out.println("Zadejte Přijmení: ");
         prijmeni = sc.nextLine();

         do
             {
                 System.out.println("Zadejte Login: ");
                 login = sc.nextLine();

                 Connect_to_DB kontrolaLogin = new Connect_to_DB();
                 kontrolaLogin.kontrolaLogin(login);

                 if (kontrolaLogin.getLoginExist() != null)
                 {
                     System.out.println("Login je již registrován, zadejte jej znovu.");
                     opak = 1;
                 }
                 else
                 {
                     System.out.println("Zadejte Heslo: ");
                     heslo = sc.nextLine();
                     System.out.println("Zadejte Oslovení: ");
                     osloveni = sc.nextLine();

                     Connect_to_DB novyKlient = new Connect_to_DB();
                     novyKlient.InsertKlient(jmeno,prijmeni,login,heslo,osloveni);

                     Connect_to_DB kontrolaKlienta = new Connect_to_DB();
                     kontrolaKlienta.existenceKlienta(login, heslo);

                     if (kontrolaKlienta.getExistenceKlienta() == null)
                     {
                         System.out.println("Klient neexistuje, zadejte login a heslo znovu.");
                     }
                     else
                     {
                         System.out.println("Aktivovat debet? [ano/ne]");
                         debet = sc.nextLine();

                         Debet aktivaceDebetu = new Debet();
                         if ("Ano".equals(debet))
                         {
                             castkaDebetu = aktivaceDebetu.aktivaceDebetu();
                         }
                         else
                         {
                             castkaDebetu = 0;
                         }

                         Connect_to_DB novyBUcet = new Connect_to_DB();
                         novyBUcet.InsertBUcet(kontrolaKlienta.getExistenceKlienta(), debet, castkaDebetu, null);

                     }
                     opak = 2;
                 }
             }
         while (opak == 1);
     }
 }
Nahlásit jako SPAM
IP: 80.90.135.–
Kit+15
Guru
18. 7. 2014   #2
-
0
-

#1 Kaktus410
Tady nejsi na ITnetworku.

Zkus to přepsat do OOP, pár věcí se ti ujasní. V Javě by se mělo programovat především objektově.

Abych nebyl tak zlý. Co mají znamenat řádky 

Banker novyKlient = new Banker();
:
Banker novyBUcet = new Banker();
:
Banker novySUcet = new Banker();

?

To jako že nový klient se stává bankéřem a nové účty jsou také bankéři?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
p3can
~ Anonymní uživatel
312 příspěvků
18. 7. 2014   #3
-
0
-

nvm jak dlouho programujes nebo jake mas skusenosti. na zacatecnika je to podle me relativne dobre. ale chyb je tam docela dost.

1. podle me by ty parsovacky (int.parse) mely byt osetrene tak aby neshodili program (sam to tam mas naznacene pomoci toho default ze bys chtel pri nekorektni volbe zobrazit hlasku "nebyla spravna volba..."

2. ty parsovacky + switche si chtel dat asi do cyklu protoze pokud nekdo provede "konkretni operaci" tak se program ukonci a neni mozne ho pouzit "2x" po sobe

3. celkove si asi moc nepochopil ty objekty protoze tam nejak zmatene pouzivas operator new a vytvariz zbytecne 2x ty same objekty viz jako


Connect_to_DB novyKlient = new Connect_to_DB();

novyKlient.InsertKlient(jmeno,prijmeni,login,heslo,osloveni);

Connect_to_DB kontrolaKlienta = new Connect_to_DB();

kontrolaKlienta.existenceKlienta(login, heslo);
 

u normalnich objektu to "moc" nevadi ale u napr u tridy ktera se stara o databazi je to uz problem. taky nikde neuzaviras to spojeni do databaze.

4. misto lokalnich promenych v metodach pouzivas privatni promene tridy a obcas dokonce prekryjes tu privatni -> lokalni.

5.


if (kontrolaKlienta.getExistenceKlienta() == null)
 

ty tu pouze porovnavas jestli je null a vysledek metody te nezajima, takze te zajimaji 2 stavy true a false, takze metoda by mela vracet bool a nvm jake jsou v jave konvence ale asi by se to melo pak jmenovat getIsClientExist (ten prefix Is pro bool typy)

6.


if ("Ano".equals(debet))
 

tady porovnavas "Ano" s odpovedi na otazku kdyz o vypis vis si napsal ze pripustne hodnoty jsou "[ano/ne]" takze teoreticky nikdy nedostanes true :). navic vyvaruj se primeho porovnani ale vzdy string preved bud na male nebo na velke a porovnavej to tak (metoda .toLowerCase()).

Nahlásit jako SPAM
IP: 77.92.213.–
Kaktus410
~ Anonymní uživatel
4 příspěvky
18. 7. 2014   #4
-
0
-

#2 Kit
Chybička se vloudila. Dotaz jsem vložil i do diskuze na itnetworku odkud jsem čerpal informace k jave.

Řádky:

Banker novyKlient = new Banker();

tady jsem chtěl volat další třídu, kde mám metody jako vytvořit nového klienta nebo založit nový účet atd...

 

Nahlásit jako SPAM
IP: 80.90.135.–
Kaktus410
~ Anonymní uživatel
4 příspěvky
18. 7. 2014   #5
-
0
-

#3 p3can
Ahoj, díky za rozebrání prográmku, hned jak budu mít chvilku, tak připomínky zapracuji a odstraním chyby, které jsem neviděl. JAVU se teprve učím asi +/- 3 měsíce, ale asi jsem jí ještě moc dostatečně nepochopil.

Nahlásit jako SPAM
IP: 80.90.135.–
Kit+15
Guru
18. 7. 2014   #6
-
0
-

#4 Kaktus410
Takže každý nový klient se stává bankéřem?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kaktus410
~ Anonymní uživatel
4 příspěvky
21. 7. 2014   #7
-
0
-

#6 Kit
Tak jsem to nezamýšlel, ale jak nad tím přemýšlím, tak jsem to tak naprogramoval :-( což je nejspíš chyba.

Sem to předělal a pod metodu main jsem přidal metodu operaceBankere():

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "UTF-8");
        
        System.out.println("Vitejte v bance Kaktus Banka.");
        System.out.println("Jste klient nebo bankéř? 1 - klient, 2 - bankéř:");
        try
        {
          int volba =sc.nextInt();
          switch (volba)
            {
                case 1:
                    operaceKlienta();
                    break;
                case 2:
                    operaceBankere();
                    break;
                default:
                    System.out.println("Nebyla zadána správná volba!");
                    break;
            }
        }
        catch(InputMismatchException ex)
        {
          System.out.println("Nebyla zadána správná volba!");
        }
    }//end main
    
    public static void operaceBankere() {
        int volba;
        String pokracovat = "ano";
        
        Banker aktivaceDeaktivace = new Banker();
        
        Scanner sc = new Scanner(System.in, "UTF-8");
        
        while (pokracovat.equals("ano"))
        {        
            System.out.println("Zadej operaci, kterou chcete provést:");
            System.out.println("1 - Aktivace nového klienta");
            System.out.println("2 - Založit nový účet");
            System.out.println("3 - Založit nový spořící účet");
            System.out.println("4 - Zrušit klienta");
            System.out.println("5 - Zrušit běžný účet");
            System.out.println("6 - Zrušit spořící účet");
            try
            {
                volba = Integer.parseInt(sc.nextLine());
                switch (volba)
                {
                    case 1:
                        aktivaceDeaktivace.zalozitNovehoKlienta();
                        break;
                    case 2:
                        aktivaceDeaktivace.zalozitNovyBeznyUcet();
                        break;
                    case 3:
                        aktivaceDeaktivace.zalozitNovySporiciUcet();
                        break;    
                    case 4:
                        System.out.println("Zrušit klienta");
                        break;
                    case 5:
                        System.out.println("Zrušit účet");
                        break;
                    case 6:
                        System.out.println("Zrušit spořící účet");
                        break;    
                    default:
                        System.out.println("Nebyla zadána správná volba!");
                        break;
                }
            }
            catch(NumberFormatException ex)
            {
               System.out.println("Nebyla zadána správná volba!");
            }
            System.out.println("");
            System.out.println("Přejete si pokračovat v dalších operacích aktivace/deaktivace bankovního účtu nebo klienta? [ano/ne]");
            pokracovat = sc.nextLine();
            pokracovat = pokracovat.toLowerCase();
        }
    }//end operaceBankere
    
    public static void operaceKlienta() {
        
    }// end operaceKlienta


Je volání metod již správně nebo ne?

Nahlásit jako SPAM
IP: 81.19.4.–
miHan0
Návštěvník
21. 7. 2014   #8
-
0
-

#7 Kaktus410
Ahoj, přiznám se, že jsem to tady celé nečetl. Ale neměla by metoda 

public static void operaceBankere()

být metodou objektu Banker? Zamysli se nad tím.

A popravdě mi ani pojmenováni instance objektu Banker "aktivaceDeaktivace" nepřijde úplně vhodné.

Popravdě si myslím, že jsi celou tu "architekturu" nějako pokomolil. Nebylo by vhodnější mít objekty Banker a Klient rozdělené (v případě že mají [a věřím že mají] něco společného, tak je podědit od nějakého vhodného předka [např. Uzivatel], který by tyto společné prvky a práci s nimi definoval). A volat metody těchto objektů na těchto objektech než si to takto (podle mého nepřehledně) rozvětvit a pak tam cosi někde dělat v rámci jedné třídy.

Nahlásit jako SPAM
IP: 46.13.193.–
Kit+15
Guru
21. 7. 2014   #9
-
+1
-
Zajímavé

#7 Kaktus410
V OOP bych spíš očekával řádky typu 

Banker banker = new Banker();
Klient klient = new Klient();
klient.addUcet(new BeznyUcet());
Nahlásit jako SPAM
IP: 46.174.37.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
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, 31 hostů

Podobná vlákna

Obsluha chyb — založil Koudis

Oprava chyb — založil zdenek72

Ošetřování chyb — založil _Radek_

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ý