Oplossing opgave 7

Dank aan Wael Orraby.

Klassen:

internal class Vak: IComparable​
{
    public Vak()
    {
        vakLector = new Lector() { Naam = "Nog Toe te wijzen" };

    }
    public string Titel { get; set; } = "Onbekend";
    private Lector vakLector;

    public Lector VakLector
    {
        get { return vakLector; }
        set { vakLector = value; }
    }

    protected int duur;

    public virtual int Duur
    {
        get { return duur; }
        set
        {
            if (value > 0 && value < 3)
                duur = value;
        }
    }
    public override string ToString()
    {
        return $"{this.Titel} - {this.VakLector.Naam}";
    }

    public int CompareTo(object? obj)
    {
        Vak temp = obj as Vak;
        if(temp != null)
        {
            int stringC = this.Titel.CompareTo(temp.Titel);
            if (stringC == 0)
            {
                return this.Duur.CompareTo(temp.Duur);
            }
            else return stringC;

        }
        return 0;
    }
}

internal class LaboVak : Vak
{
    public LaboVak(Vak v)
    {
        this.Duur = v.Duur;
        this.VakLector = v.VakLector;
        this.Titel = v.Titel;
    }
    public override int Duur {
        get { return base.Duur; }
        set 
        { 
            if (value > 0 && value < 4) 
                this.duur = value; 
        } 
    }
    public override string ToString()
    {
        return "(labo) "+ base.ToString();
    }
}

internal class Lector
{
    public string Naam { get; set; } = "Nog toe te wijzen";

    public virtual int MaxUur
    {
        get { return 6; }
    }
}

internal class HalfTijdseLector : Lector
{
    public override int MaxUur
    {
        get 
        { 
            return base.MaxUur / 2; 
        }
    }
}

internal class RoosterException : Exception
{
    public RoosterException(string message) : base(message)
    {
    }
}

internal class Rooster
{
    private List<Vak> vakkenLijst = new List<Vak>();
    private int vrijeUren;

    public int VrijeUren
    {
        get
        {
            int result = 0;
            foreach (var item in vakkenLijst)
            {
                result += item.Duur;
            }
            return result;
        }
    }
    public void ToonRooster()
    {
        foreach (var item in vakkenLijst)
        {
            for (int i = 0; i < item.Duur; i++)
            {
                Console.WriteLine(item);
            }
        }
    }
    public void VoegVakToe(Vak niewVak)
    {
        if ((VrijeUren + niewVak.Duur) <= 8)
        {
            vakkenLijst.Add(niewVak);
        }
        else
            throw new RoosterException($"Kan niet togevoegd worden, omdat de rooster mag max 8 uur bevatten en de huidige duur in de rooster is {VrijeUren}");
    }
    public void VerbeterRooster()
    {
        vakkenLijst.Sort();
    }
    public void WijsLectorToe(int index, Lector l)
    {
        if (index >= 0 && index < vakkenLijst.Count)
            vakkenLijst[index].VakLector = l;
        else
            Console.WriteLine("Index id out of Range of the list!");
    }

    internal void ToonLabos()
    {
        foreach (var item in vakkenLijst)
        {
            if (item is LaboVak)
            {
                for (int i = 0; i < item.Duur; i++)
                {
                    Console.WriteLine(item);
                }
            }
        }
    }
}

internal class WeekRooster
{
    static Random r = new Random();

    List<Vak>[] weekLijsten = new List<Vak>[]{new List<Vak>(),new List<Vak>(),new List<Vak>(),new List<Vak>(),new List<Vak>()};

    public WeekRooster()
    {
        for (int j = 0; j < 5; j++)
        {
            for (int i = 0; i < 4; i++)
            {
                if (r.Next(1, 6) == 1)
                {
                    weekLijsten[j].Add(new LaboVak(new Vak()));        
                }
                else
                {
                    weekLijsten[j].Add(new Vak());
                }
            }
        }

    }
    public void ToonRooster()
    {
        for (int i = 0; i < weekLijsten.Length; i++)
        {
            if(i==0)
                Console.WriteLine("Maandag : ");
            else if (i == 1)
                Console.WriteLine("Dinsdag : ");
            else if (i == 2)
                Console.WriteLine("Woensdag : ");
            else if (i == 3)
                Console.WriteLine("Donderdag : ");
            else
                Console.WriteLine("Vrijdag : ");
            foreach (var item in weekLijsten[i])
            {
                Console.WriteLine(item);
            }
            Console.WriteLine();
        }
        
    }
}

Program.cs

Last updated

Was this helpful?