Avatar
davaj
Člen
Avatar
davaj:

Ahoj,
narazil jsem na problem pri uceni se OOP dedicnosti a nevim jak ho vyresit. Mam program kde mam tridy BankovniUcet, UrocenyUcet, UcetSPoplatkem. Chtel bych, aby se ve tride UcetSPoplatkem pricetl vzdy poplatek k vybrane castce co chci vybrat z uctu.

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

namespace bankovni_prevod
{
    class UcetSPoplatkem: bankovniUcet
    {
        public int poplatek;
        public UcetSPoplatkem(int pocatecniVklad)
            : base(pocatecniVklad)
        {
            poplatek = 5;
            vybrat(castka + poplatek);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace bankovni_prevod
{
    class UrocenyUcet: bankovniUcet
    {

        public UrocenyUcet(int pocatecniVklad): base(pocatecniVklad)
        {
            stavUctu = pocatecniVklad * 1.03F;
            //testing();
            Console.WriteLine("Urok cini: {0}", stavUctu - pocatecniVklad);
        }
        /*public void testing()
        {
            stavUctu -= 10;
        }*/
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace bankovni_prevod
{
    class bankovniUcet
    {
        private int pocatecniVklad;
        public float stavUctu = 0;
        public int castka;

        public bankovniUcet(int pocatecniVklad)
        {
            this.stavUctu = pocatecniVklad;
            Console.WriteLine("Byl zalozen ucet s pocatecnim stavem {0} Kc.", stavUctu);
        }
        public virtual void vlozit(int castka)
        {
            stavUctu = stavUctu + castka;
        }
        public void vybrat(int castka)
        {
            if (stavUctu >= castka)
                stavUctu -= castka;
            else
                Console.WriteLine("Litujeme. Na vasem uctu je pouze {0} Kc", stavUctu);
        }
        private void epilog()
        {
            Console.WriteLine("Dekujeme za pouziti nasi aplikace. Na shledanou. \n");
        }
        public void prevod()
        {
            bool volbaUkonci = true;
            do
            {
                char volba;
                Console.WriteLine("\n1)Vlozit\n2)Vybrat\n3)Odejit");
                Console.WriteLine("Stav uctu je {0}", stavUctu);
                /*Musim osetrit vstup*/
                volba = char.Parse(Console.ReadLine());
                switch (volba)
                {
                    case '1':
                        Console.WriteLine("Pridej penize na ucet: ");
                        castka = int.Parse(Console.ReadLine());
                        vlozit(castka);
                        break;
                    case '2':
                        Console.WriteLine("Vyber penize z uctu: ");
                        castka = int.Parse(Console.ReadLine());
                        vybrat(castka);
                        break;
                    case '3':
                        volbaUkonci = false;
                        break;
                    default:
                        Console.WriteLine("Spatna klavesa ! Zkuste znovu !");
                        break;
                }
            } while (volbaUkonci != false);

            epilog();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/*vybirani ukladani penez na bankovnim ucte*/
/**@author M.O*/

namespace bankovni_prevod
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Vloz penize na ucet: ");
            int vlozPenize = int.Parse(Console.ReadLine());
            //Normalni ucet bez poplatku
            bankovniUcet osoba = new bankovniUcet(vlozPenize);
            osoba.prevod();
            //Uroceny ucet
            UrocenyUcet osoba2 = new UrocenyUcet(vlozPenize);
            osoba2.prevod();
            //Ucet s poplatkem pri vybirani
            UcetSPoplatkem osoba3 = new UcetSPoplatkem(vlozPenize);
            osoba3.prevod();
            Console.ReadKey();
        }
    }
}

Ke stahnuti: http://leteckaposta.cz/612294613

 
Odpovědět 9.11.2014 17:06
Avatar
Odpovídá na davaj
sadlomaslox25:

v ramci oop se to dela tak ze v rodicovske tride musi byt metoda, jejiz chovani chces zmenit v potomkovi (odvozene tride) oznacena klicovym slovem virtual (virtual "jednoduse" znamena to ze dana metoda jde ve tride potomka prepsat). pak ve tride potomka nadefinujes stejnou metodu ale napises tam misto virtual slovo override (coz znamena ze budes menit zpusob jakym bude pracovat). v tele pak (v zavislosti na poradi) provedes ten svuj kod nejprve, a pak zavolas puvodni chovani te metody pres klicove slovo "base.NavezPu­vodniMetody(pu­vodniParametr1,2)"

Chapes?

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 9.11.2014 19:07
Avatar
davaj
Člen
Avatar
Odpovídá na sadlomaslox25
davaj:

Jo, diky. Uz mi to jde. :)

namespace bankovni_prevod
{
    class UcetSPoplatkem: bankovniUcet
    {
        public int poplatek;
        public UcetSPoplatkem(int pocatecniVklad) : base(pocatecniVklad)
        {
            poplatek = 3;
        }
        public override void vybrat(int castka)
        {
            castka += poplatek;
            base.vybrat(castka);
        }
    }
}

Jen nevim co si presne myslel s tou 2kou. "base.NavezPu­vodniMetody(pu­vodniParametr1,2)"

Editováno 9.11.2014 20:22
 
Nahoru Odpovědět 9.11.2014 20:21
Avatar
Odpovídá na davaj
sadlomaslox25:

ja to psal obecne chtel jsem napsat base.NavezPuvod­niMetody(puvod­niParametr1,pu­vodniParametr2,pa­ra...)

jinak bacha na logiku funkce. ted je napr. mozne dostat se i do minusu s tvym aktualnim kodem.

 
Nahoru Odpovědět 9.11.2014 20:35
Avatar
davaj
Člen
Avatar
davaj:

To mam osetrene tady.

public void vybrat(int castka)
         {
             if (stavUctu >= castka)
                 stavUctu -= castka;
             else
                 Console.WriteLine("Litujeme. Na vasem uctu je pouze {0} Kc", stavUctu);
         }

Jak jsem to zkousel, tak jsem v minusu nebyl.

 
Nahoru Odpovědět 9.11.2014 20:39
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na davaj
Jan Vargovský:

a co kdybych zavolal

instnace.vybrat(-5000);
 
Nahoru Odpovědět 9.11.2014 20:45
Avatar
davaj
Člen
Avatar
davaj:

Jasny :) Zaporne hodnoty jsou opraveny.
Tohle je muj 1. program v C#, tak se musim jeste podivat na osetreni vstupu v C#. :)

Editováno 9.11.2014 21:40
 
Nahoru Odpovědět 9.11.2014 21:39
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 7 zpráv z 7.