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

namespace OOPModelAndUI
{
    class Model
    {
    }

    class Konto
    {
        private int etKontonr;
        private double enPrimoSaldo;
        private long enDato;
        private int antalTransaktioner;
        private Transaktion[] t = new Transaktion[100];

        public Konto() // Default constructor
        {
            etKontonr = 0;
            enPrimoSaldo = 0.0;
            enDato = DateTime.Today.Year * 10000 + DateTime.Today.Month * 100 +
                DateTime.Today.Day;
            antalTransaktioner = 0;
        }

        public Konto(int nyKontonr, double nySaldo, long nyDato)
        {
            etKontonr = nyKontonr;
            enPrimoSaldo = nySaldo;
            enDato = nyDato;
            antalTransaktioner = 0;
        }

        public int getKontonr()
        {
            return etKontonr;
        }

        public double getPrimoSaldo()
        {
            return enPrimoSaldo;
        }

        public long getDato()
        {
            return enDato;
        }

        public double getSaldo()
        {
            double sum = getPrimoSaldo();
            foreach (Transaktion trans in t)
            {
                if (trans != null)
                    sum = sum + trans.getBeloeb();
            }
            return sum;
        }

        public Transaktion[] getTransaktioner()
        {
            return t;
        }

        public void setKontonr(int nyKontonr)
        {
            etKontonr = nyKontonr;
        }

        public void setPrimoSaldo(double nySaldo)
        {
            enPrimoSaldo = nySaldo;
        }

        public void setDato(long nyDato)
        {
            enDato = nyDato;
        }

        public void indsaet(long nyDato, string nyTekst, double nyBeloeb)
        {
            Transaktion temp = new Transaktion();
            temp.setDato(nyDato);
            temp.setTekst(nyTekst);
            temp.setBeloeb(nyBeloeb);
            t[antalTransaktioner++] = temp;
        }

        public void haev(long nyDato, string nyTekst, double nyBeloeb)
        {
            Transaktion temp = new Transaktion();
            temp.setDato(nyDato);
            temp.setTekst(nyTekst);
            temp.setBeloeb(-nyBeloeb);
            t[antalTransaktioner++] = temp;
        }

    }

    class Transaktion
    {
        private long enDato; // YYYYMMDD
        private string enTekst;
        private double etBeloeb;

        public Transaktion()
        {
            enDato = DateTime.Today.Year * 10000 + DateTime.Today.Month * 100 +
                DateTime.Today.Day;
            enTekst = "";
            etBeloeb = 0.0;
        }

        public long getDato()
        {
            return enDato;
        }

        public string getTekst()
        {
            return enTekst;
        }

        public double getBeloeb()
        {
            return etBeloeb;
        }

        public void setDato(long nyDato)
        {
            enDato = nyDato;
        }

        public void setTekst(string nyTekst)
        {
            enTekst = nyTekst;
        }

        public void setBeloeb(double nyBeloeb)
        {
            etBeloeb = nyBeloeb;
        }

    }

    class Person
    {
        private string etNavn;
        private string enAdresse;
        private int etPostnr;
        private string etDistrikt;
        private string etTelefonnr;

        public Person()
        {
            etNavn = "";
            enAdresse = "";
            etPostnr = 0;
            etDistrikt = "";
            etTelefonnr = "";
        }

        public Person(string nyNavn, string nyAdresse, int nyPostnr, string nyDistrikt, string nyTelefonnr)
        {
            etNavn = nyNavn;
            enAdresse = nyAdresse;
            etPostnr = nyPostnr;
            etDistrikt = nyDistrikt;
            etTelefonnr = nyTelefonnr;
        }

        public string Navn
        {
            get
            { return etNavn; }
            set
            { etNavn = value; }
        }

        public string Adresse
        {
            get
            { return enAdresse; }
            set
            { enAdresse = value; }
        }

        public int Postnr
        {
            get
            { return etPostnr; }
            set
            { etPostnr = value; }
        }

        public string Distrikt
        {
            get
            { return etDistrikt; }
            set
            { etDistrikt = value; }
        }

        public string Telefonnr
        {
            get
            { return etTelefonnr; }
            set
            { etTelefonnr = value; }
        }

    }

    class Kunde : Person
    {
        private int etKundenr;
        private string etCPRnr;
        private int antalKonti;
        Konto[] k = new Konto[20];

        public Kunde()
        {
            etKundenr = 0;
            etCPRnr = "";
            antalKonti = 0;
        }

        public Kunde(int nyKundenr, string nyNavn, string nyAdresse, int nyPostnr, string nyDistrikt,
            string nyTelefonnr, string nyCPRnr) : base(nyNavn, nyAdresse, nyPostnr, nyDistrikt, nyTelefonnr)
        {
            etKundenr = nyKundenr;
            etCPRnr = nyCPRnr;
            antalKonti = 0;
        }

        public void addKonto(Konto nyKonto)
        {
            k[antalKonti++] = nyKonto;
        }

        public int Kundenr
        {
            get
            { return etKundenr; }
            set
            { etKundenr = value; }
        }

        public string CPRnr
        {
            get
            { return etCPRnr; }
            set
            { etCPRnr = value; }
        }

        public Konto[] getKonti()
        {
            return k;
        }

    }

    class Kunder
    {
        private int antal;
        private int aktuel;
        Kunde[] k = new Kunde[100];

        public Kunder()
        {
            antal = 0;
        }

        public Kunde findKunde(int etKundenr)
        {
            Kunde fundet = null;
            for (int i = 0; i < antal; i++)
            {
                if (k[i].Kundenr == etKundenr)
                {
                    fundet = k[i];
                    aktuel = i;
                }
            }
            return fundet;
        }

        public void firstKunde()
        {
            aktuel = 0;
        }

        public void nextKunde()
        {
            aktuel++;
        }

        public bool endOfKunde()
        {
            if (antal == aktuel)
                return true;
            else
                return false;
        }

        public Kunde getKunde()
        {
            return k[aktuel];
        }

        public void addKunde(Kunde enKunde)
        {
            k[antal] = enKunde;
            antal++;
        }

    }

}
