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);
}
}