Avatar
nosekt
Člen
Avatar
nosekt:

Ahoj, prošel jsem prvních pár lekcí k C# a rozhodl jsem se si předtím, než se dám na dědičnost a pod. zopakovat. Vytvořil jsem proto následující program, simulující "bankomat". Chtěl bych se zeptat, jestli se v tomto případě dá vůbec mluvit o OOP programování, popřípadě co bych měl zlepšít apod...Díky

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bankomat
{
    class Program
    {
        static void Main(string[] args)
        {
            SpravaUctu ucet = new SpravaUctu("Tomas Nosek", 1233, 7457547, 25000);


            Console.WriteLine("Welcome to the GE AMT Mr. {0}.", ucet.GetAccountOwner());
            Console.WriteLine("----------------------------------------------------------------");
            Console.Write("Your account number is: {0}. Please insert your password: ",  ucet.GetAccountNumber());

            int password = int.Parse(Console.ReadLine());

                if (ucet.Verificate(password))
                {
                    //metoda vrátila pravdu, sdělíme to uživateli
                    Console.Clear();
                    Console.WriteLine("The password verification was successful. You can manage your account now.");
                }
                else
                {
                    do
                    {
                        //metoda vrátila lež, sdělíme to tedy uživateli
                        Console.Write("The password you inserted is incorrect. Try it again: ");
                        password = int.Parse(Console.ReadLine());

                    }
                    while (ucet.Verificate(password) == false);


                }

                Console.Clear();
                Console.WriteLine("The password verification was successful. You can manage your account now.");
                Console.Write("Option: 1 - Account status, 2 - Withdraw money: ");

                int option;
                switch(option = int.Parse(Console.ReadLine()))
                {
                    case 1:
                        {
                            Console.WriteLine();
                            Console.WriteLine(ucet.CheckAccount(ucet.balance));
                            Console.WriteLine();
                            break;
                        }

                    case 2:
                        {
                            Console.WriteLine();
                            Console.Write("Write the amount of money you want to withdraw: ");
                            ucet.amount = int.Parse(Console.ReadLine());
                            Console.WriteLine(ucet.Withdraw());
                            break;
                        }

                }


            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bankomat
{
    class SpravaUctu
    {
        private string account_owner;
        public int password;
        private int account_number;
        public bool verified;
        public int balance;
        public int amount;

        public SpravaUctu(string account_owner, int password, int account_number, int balance)
        {
            this.account_number = account_number;
            this.password = password;
            this.account_owner = account_owner;
            this.balance = balance;
        }


        public bool Verificate(int pass)
        {

            if (pass == password)
            {
                verified = true;
                return true;
            }
            else
            {
                verified = false;
                return false;
            }
        }

        public string CheckAccount(int balance)
        {
            return string.Format("Money balance: {0}", balance);
        }

        public string Withdraw()
        {
            balance -= amount;

            if (amount < balance)
            return string.Format("You have successfully withdrawed: {0}", amount);

            else
            return string.Format("You don't have enough money on your account.", amount);


        }

        public int GetAccountNumber()
        {
            return account_number;
        }

        public string GetAccountOwner()
        {
            return account_owner;
        }

    }
}
 
Odpovědět 10.5.2014 1:54
Avatar
Michal Žůrek (misaz):

To že máš jeden objekt neznamená že je to objektové. Main by mělo být skoro prázdné. Navíc v něm děláš páté přes deváté. V první polovině tam zjišťuješ heslo, pokud zadá heslo dobře hned na poprvé, vypisuješ mu hlášku 2×. V druhé polovině už používáš switch. Ten by měl být v objektové aplikaci minimálně. Dá se ho jednoduše zbavit, pomocí rozhraní a reflexe.

Uč se dál.

Nahoru Odpovědět  +1 10.5.2014 10:18
Nesnáším {}, proto se jim vyhýbám.
Avatar
Denis Homolík (Alfonz):

V objektu by neměli nikdy být veřejné proměné, vždy by měli být dostupné přes metody nebo vlastnosti.

Nahoru Odpovědět 10.5.2014 10:45
Vše je možné, dokud si to myslíte!
Avatar
mnauik
Člen
Avatar
mnauik:

nosekt: doporucuji, aby sis zopakoval zapouzdreni (zbav se public promennych): http://www.itnetwork.cz/…programovani

Hodne stesti :)

Nahoru Odpovědět 10.5.2014 11:07
minusuj mě, ale zdůvodni to ;)
Avatar
nosekt
Člen
Avatar
nosekt:

Samozřejmě, že nečekám, že by to bylo úplně správně. Prošel jsem si prvních 6 lekcí OOP tady na devbooku, takže např. vlastnosti, reflexe atd. pochopitelně používat ještě neumím. Hlášku 2x nevypisuju, to nevím, kde jsi na to přišel. Každopádně jsem čekal spíše odpověď typu: nahraď switch "něčím", než: "switch tam nemá co dělat, uč se dál." Radši bych od vás viděl nějaké rady, které mi v něčem opravdu pomůžou :-D

 
Nahoru Odpovědět 10.5.2014 14:45
Avatar
nosekt
Člen
Avatar
nosekt:

Každopádně, na zapouzdření se ještě podívám, díky :)

 
Nahoru Odpovědět 10.5.2014 14:46
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na nosekt
Jan Vargovský:

Chyb tam je plno, ale je zbytečné je opravovat, prostě probírej dál a za týden se koukni na tenhle zdroják a uvidíš, jestli je najdeš :)

 
Nahoru Odpovědět 10.5.2014 15:16
Avatar
Odpovídá na nosekt
Michal Žůrek (misaz):

v podmínce

if (ucet.Verificate(password))
                {
                    //metoda vrátila pravdu, sdělíme to uživateli
                    Console.Clear();
                    Console.WriteLine("The password verification was successful. You can manage your account now.");
                }

vypisuješ poprvé, pak hned za podmínkou vypisuješ totéž.

Switche se zbavíš tak, že si vytvoříš rozhraní (třeba IBankovniOperace) a třídy, které budou toto rozhraní implementovat (např. Vyber, Vloz). Pak uživatele necháš zadat co chce udělat, on zadá název te třídy a pomocí reflexe vytvoříš instanci te třídy a zavoláš na ni nějakou metodu, kterou má to rozhraní. Na začátek to možná zní složitě.

Nahoru Odpovědět  +1 10.5.2014 18:13
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Jakub Šárník:

Myslím si, že je lepší v menších projektech používat jednodušší řešení. Kromě toho se nosekt zřejmě učí základy OOP a reflexe k nim zrovna nepatří.

 
Nahoru Odpovědět 10.5.2014 18:30
Avatar
Odpovídá na Jakub Šárník
Michal Žůrek (misaz):

jasně souhlasím, ale

1.) Jeho malý bankovní systém může brzy a rychle nabobtnat.
2.) přijde mi lepší naučit se to praxi (hned si to vyzkouší) než si načíst miliony dokumentů, ale stejně protože jsi to zatím nikdy nepoužil tak ti to bude k ničemu. Toto jsem si říkal o samotném OOP, databázích, LINQ, WPF a mnoho dalších. O každém z nich jsem něco věděl měl přečtené, ale dokud jsem to v praxi nepoužil tak mi to jako bylo celkem k ničemu. proto si myslím, že by se to mohl naučit už teď když s tím pracuje.

Nahoru Odpovědět 10.5.2014 18:41
Nesnáším {}, proto se jim vyhýbám.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Petr Nymsa:

Blbost. Nemůžeš nutit začátečníka učit se vše hned správně. Když se "naučí" něco maličko špatně resp. sám si t ošpatně napíše a časem se naučí lepší způsob - jemu samotnému dojde co dělal špatně a díky tomu se naučí víc přemýšlet a navrhovat. Jeho řešení až tak špatné není. V dobách začátků bych to dělal podobně :)

Nahoru Odpovědět  +5 10.5.2014 18:53
Pokrok nezastavíš, neusni a jdi s ním vpřed
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 11 zpráv z 11.