Zadanie C#

0

Witam, nie daję rady z poniższym zadaniem, szególnie problem powstaje po punkcie nr3, macie może pomysły, z góry dzięki.

  1. Zdefiniuj klasę abstrakcyjną Konto (konto bankowe) z danymi składowymi: NrKonta typu String, oraz Saldo typu Double i abstrakcyjnymi metodami: Wplac() i Wyplac().
  2. Zdefiniuj następnie dwie klasy konkretne KontoOsobiste i KontoLokata dziedziczące z klasy abstrakcyjnej Konto.
  3. Klasa KontoLokata implementować będzie klasę interfejsową Zysk z abstrakcyjną metodą ObliczZysk(). Zadaniem implementacji tej metody w klasie KontoLokata będzie policzenie zysku z aktualnej wysokości lokaty (salda) wg. stopy procentowej przekazanej przez parametr metody, a następnie dodanie zysku do salda.
  4. W części wykonawczej aplikacji utwórz kolejkę generyczną przechowującą obiekty klasy Konto. Następnie twórz obiekty klasy KontoOsobiste i KontoLokata wstawiając je do kolejki.
  5. Pokaż działanie polimorfizmu wywołując na rzecz obiektów klas pobranych z czoła kolejki metody Wplac(), Wyplac(), oraz ObliczZysk(). Po każdej operacji wyświetlaj stan konta używając formatowania, po czym wstawiając je na koniec kolejki.
0

4: https://docs.microsoft.com/pl-pl/dotnet/api/system.collections.generic.queue-1?view=netframework-4.8

ale aby wkładać tam dwa różne typy, to musi je coś łączyć :) np. interfejs lub typ z którego dziedziczą, a to już masz.

0

Cześć,

Poniżej kod, który przedstawia twoje zadanie. Nie zrobiłem metody ObliczZysk() ponieważ tylko KontoLokata ją implementuje. Nie wiem czy to wynika z złej treści zadania czy z z tego powodu że ja to źle zrozumiałem. Działanie polimorfizmu masz zaznaczone w komentarzu. Nie rozumiem też dlaczego metody Wplac i Wyplac maja byc abstrakcyjne, ponieważ wystepuje tu nie potrzebne powielenie kodu.

Rozpocząłem przygodę z programowaniem 3 miesiące temu, więc fajnie jakby ktoś to zweryfikował xD Tym bardziej że to mój pierwszy w[is na forum :)

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

namespace ConsoleApp26
{
    class Program
    {
        static void Main(string[] args)
        {
            // tworzymy kolejke - typu KontoBankowe
            Queue<KontoBankowe> kolejka = new Queue<KontoBankowe>();

            //Dodajemy do kolejki nowe konta
            kolejka.Enqueue(new KontoOsobiste("111111111111", 1000.10));
            kolejka.Enqueue(new KontoOsobiste("222222222222", 2000.20));
            kolejka.Enqueue(new KontoLokata("333333333333", 3000.3));
            kolejka.Enqueue(new KontoLokata("444444444444", 4000.4));


            //Zeby nie wpisywac - z gory narzucone jakies wartosci
            double kwotaWyplacana = 100.5, kwotaWplacana = 5.5;

            //nieskonczona petla
            do
            {
                // Pokazanie polimorfizmu. Jedna metoda - inne zachowania
                foreach (var item in kolejka)
                {
                    item.Wplac(kwotaWplacana);
                    item.Wyplac(kwotaWyplacana);
                    Console.WriteLine("Stan konta: " + item.Saldo);

                    Console.ReadLine();
                }

                KontoBankowe kontoTymczasowe = kolejka.Dequeue(); // pobiera do zmiennej kontoTymczasowe pierwszy elemnt z kolejki i go usuwa

                kolejka.Enqueue(kontoTymczasowe); // przypisuje na koniec kolejki wczesniej usuniety element.

            } while (true);


        }
    }

    abstract class KontoBankowe
    {
        protected string ID;
        public string NumerKonta { get; protected set; }
        public double Saldo { get; protected set; }
        public abstract void Wyplac(double kwota);
        public abstract void Wplac(double kwota);

        public KontoBankowe(string numerKontaBankowego, double saldoPoczatkowe)
        {
            NumerKonta = numerKontaBankowego;
            Saldo = saldoPoczatkowe;
        }

    }

    class KontoOsobiste : KontoBankowe
    {
        public KontoOsobiste(string numerKontaBankowego, double saldoPoczatkowe) : base(numerKontaBankowego, saldoPoczatkowe)
        {
            ID = "Konto Osobiste";
        }
        public override void Wplac(double kwota)
        {
            Saldo +=kwota;
            Console.WriteLine("Wypłacono: " + kwota + " na konto: " + ID);

        }

        public override void Wyplac(double kwota)
        {
            if (Saldo > kwota)
            {
                Saldo -= kwota;
                Console.WriteLine("Wypłacono: " + kwota + " z konta: " + ID);
            }
            else
                Console.WriteLine("Zbyt małe saldo! ");
        }
    }

    class KontoLokata : KontoBankowe, IZysk
    {
        public KontoLokata(string numerKontaBankowego, double saldoPoczatkowe) : base(numerKontaBankowego, saldoPoczatkowe)
        {
            ID = "Konto Lokata";
        }
        public void ObliczZysk(double stopaprocentowa)
        {
            Saldo += Saldo * stopaprocentowa;
        }

        public override void Wplac(double kwota)
        {
            Saldo +=kwota;
            Console.WriteLine("Wypłacono: " + kwota + " na konto: " + ID);
        }

        public override void Wyplac(double kwota)
        {
            if (Saldo > kwota)
            {
                Saldo -= kwota;
                Console.WriteLine("Wypłacono: " + kwota + " z konta: " + ID);
            }
            else
                Console.WriteLine("Zbyt małe saldo! ");
        }


    }

    internal interface IZysk
    {
        void ObliczZysk(double stopaprocentowa);
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1