# Oplossingen H12

## Prijzen met foreach

```java
var prijzen = new double[20];
for (int i = 0; i < prijzen.Length; i++)
{
    Console.WriteLine($"Geef prijs {i}:");
    prijzen[i] = double.Parse(Console.ReadLine());
}

double som = 0;
Console.WriteLine("Prijzen groter of gelijk aan 5:");
foreach (var prijs in prijzen)
{
    som += prijs;

    if(prijs>=5.00)
    {
        Console.WriteLine(prijs);
    }
}
Console.WriteLine($"Gemiddelde is {som/prijzen.Length}");
```

## Computer-winkel

Dank aan Jasper Van Meel voor deze oplossing! Ook dank aan de andere studenten die een oplossing instuurden. Doe zo voort!

```java
class ComputerOnderdeel
{
    private static Random rng = new Random();

    public int Prijs { get; set; }

    public int ID { get; set; }

    public bool InDoos { get; set; }

    public ComputerOnderdeel()
    {
        Prijs = rng.Next(0, 1001);
        ID = rng.Next(100, 1000);

        if (rng.Next() % 2 == 0)
        {
            InDoos = true;
        }
    }

    public void ToonInfo()
    {
        Console.WriteLine($"Prijs: {Prijs}, ID: {ID}, InDoos: {InDoos}");
    }
}
```

```java

static void Main(string[] args)
{
    //Console.WriteLine("Hello World!");

    List<ComputerOnderdeel> onderdelen = new List<ComputerOnderdeel>();

    //100 computeronderdelen aanmaken
    for (int i = 0; i < 100; i++)
    {
        onderdelen.Add(new ComputerOnderdeel());
    }

    //ToonInfo() voor alle onderdelen
    Console.WriteLine("ToonInfo() voor alle onderdelen in de lijst:");
    ToonInfo_Alle(onderdelen);

    //ToonInfo() voor onderdelen met prijs > 400
    ToonInfo_PrijsGroterDan400(onderdelen);

    //ToonInfo() voor onderdelen in een doos
    ToonInfo_OnderdelenInDoos(onderdelen);

    //ToonInfo() voor onderdelen met even ID & prijs < 200
    ToonInfo_EvenIDPrijsGroterDan200(onderdelen);


    //verwijder alle onderdelen waarvoor InDoos == true
    Verwijder_InDoos(onderdelen);

    //verwijder alle onderdelen waarvoor price < 100
    Verwijder_PrijsOnder100(onderdelen);


    //ToonInfo() van overgebleven onderdelen
    Console.WriteLine("\n\n\nInformatie van de overgebleven onderdelen:");
    ToonInfo_Alle(onderdelen);
}

static void ToonInfo_Alle(List<ComputerOnderdeel> onderdelen)
{
    foreach (var item in onderdelen) 
    { 
        item.ToonInfo(); 
    }
}

static void ToonInfo_PrijsGroterDan400(List<ComputerOnderdeel> onderdelen)
{
    Console.WriteLine("\n\n\nToonInfo() voor alle onderdelen met een prijs > 400:");
    foreach (var item in onderdelen)
    {
        if (item.Prijs > 400)
        {
            item.ToonInfo();
        }
    }
}

private static void ToonInfo_OnderdelenInDoos(List<ComputerOnderdeel> onderdelen)
{
    Console.WriteLine("\n\n\nToonInfo() voor alle onderdelen in een doos:");
    foreach (var item in onderdelen)
    {
        if (item.InDoos == true)
        {
            item.ToonInfo();
        }
    }
}

private static void ToonInfo_EvenIDPrijsGroterDan200(List<ComputerOnderdeel> onderdelen)
{
    Console.WriteLine("\n\n\nToonInfo() voor alle onderdelen met een even ID & prijs < 200");
    foreach (var item in onderdelen)
    {
        if (item.ID % 2 == 0 && item.Prijs < 200)
        {
            item.ToonInfo();
        }
    }
}

private static void Verwijder_InDoos(List<ComputerOnderdeel> onderdelen)
{
    string userInput = "";

    do
    {
        Console.WriteLine("\n\n\nWil je alle onderdelen die in een doos zitten verwijderen? (y/n)");
        userInput = Console.ReadLine();
    } while (userInput != "y" && userInput != "n" && userInput != "yes" && userInput != "no");

    if (userInput == "y" || userInput == "yes")
    {
        for (int i = onderdelen.Count - 1; i >= 0; i--)
        {
            if (onderdelen[i].InDoos)
            {
                onderdelen.Remove(onderdelen[i]);
            }
        }
        Console.WriteLine("Verwijderd.");
    }
}

private static void Verwijder_PrijsOnder100(List<ComputerOnderdeel> onderdelen)
{
    string userInput = "";

    do
    {
        Console.WriteLine("\n\n\nWil je alle onderdelen met een prijs lager dan 100 verwijderen? (y/n)");
        userInput = Console.ReadLine();
    } while (userInput != "y" && userInput != "n" && userInput != "yes" && userInput != "no");

    if (userInput == "y" || userInput == "yes")
    {
        for (int i = onderdelen.Count - 1; i >= 0; i--)
        {
            if (onderdelen[i].Prijs < 100)
            {
                onderdelen.Remove(onderdelen[i]);
            }
        }
        Console.WriteLine("Verwijderd");
    }
}
```

## Student Organizer

Dank aan Marouane Mairouche op wiens code volgende oplossing is gebaseerd.

```java
static void Main(string[] args)
{
    List<Student> Lijst = new List<Student>()
    {
        new Student(),
        new Student(),
        new Student(),
        new Student(),
        new Student()
    };
    
    string exit = "";

    do
    {
        ToonMenuOpties();
        exit = Console.ReadLine().ToUpper();
        switch (exit)
        {
            case "A":
                VoerNieuweStudentInLijstIn(Lijst);
                break;
            case "B":
                ToonAlleStudentenVanLijst(Lijst);
                break;
            case "C":
                ToonStudentVanLijst(Lijst);
                break;


            case "D":
                VerwijderStudentVanLijst(Lijst);
                break;
        }
    } while (exit != "Q");

}

private static void ToonMenuOpties()
{
    Console.WriteLine("Maak een keuze");
    Console.WriteLine("A) Student gegevens invoeren");
    Console.WriteLine("B) Student gegevens tonen");
    Console.WriteLine("C) Gebruik zoek functie");
    Console.WriteLine("D) Student gegevens verwijderen");
    Console.WriteLine("Q) Programma afsluiten");
}

private static void VoerNieuweStudentInLijstIn(List<Student> Lijst)
{
    Console.WriteLine("Welke studentnummer wil je invoeren?");
    int student = int.Parse(Console.ReadLine()) - 1;

    if (Lijst[student].Naam != "Onbekend")
    {
        Console.WriteLine("Wilt u de gegevens overschrijven?[Y/N]");
        string option = Console.ReadLine().ToUpper();

        if (option == "Y")
        {
            Lijst[student] = Student.MaakStudentViaReadLine();
        }
    }
    else
    {
        Lijst[student] = Student.MaakStudentViaReadLine();
    }
}

private static void ToonAlleStudentenVanLijst(List<Student> Lijst)
{
    foreach (var item in Lijst)
    {
        if (item.Naam != "Onbekend")
        {
            item.GeefOverzicht();
        }
    }
}

private static void ToonStudentVanLijst(List<Student> Lijst)
{
    Console.WriteLine("Geef de naam van de student");
    string name = Console.ReadLine();
    foreach (var item in Lijst)
    {
        if (item.Naam == name)
        {
            item.GeefOverzicht();
        }
    }
}

private static void VerwijderStudentVanLijst(List<Student> Lijst)
{
    Console.WriteLine("Welke studentnummer wil je invoeren?");
    int student = int.Parse(Console.ReadLine()) - 1;
    Lijst[student] = new Student();
}
}
```

## Fastfood Restaurant

```java
using System;
using System.Collections.Generic;
using System.Linq;

class Bestelling
{
    public List<string> Gerechten { get; set; }

    public Bestelling(List<string> gerechten)
    {
        Gerechten = gerechten;
    }

}

class Program
{


    static void Main()
    {
		     Queue<Bestelling> bestellingen = new Queue<Bestelling>();
     Dictionary<string, int> populariteit = new Dictionary<string, int>();
     List<Bestelling> geschiedenis = new List<Bestelling>();

		string keuze="";
        do
        {
            Console.WriteLine("\nMenu:");
            Console.WriteLine("1. Bestelling plaatsen");
            Console.WriteLine("2. Bestellingen verwerken");
            Console.WriteLine("3. Geschiedenis van bestellingen tonen");
            Console.WriteLine("4. Stoppen");
            Console.Write("Kies een optie: ");
            
            keuze = Console.ReadLine();
            Console.WriteLine();

            switch (keuze)
            {
                case "1":
                    PlaatsBestelling(bestellingen);
                    break;
                case "2":
                    VerwerkBestelling(bestellingen, geschiedenis, populariteit);
                    break;
                case "3":
                    ToonGeschiedenis(geschiedenis, populariteit);
                    break;
                case "4":
                    Console.WriteLine("Programma wordt afgesloten...");
                    break;
                default:
                    Console.WriteLine("Ongeldige keuze, probeer opnieuw.");
                    break;
            }
        }while(keuze!="4");
    }

    static void PlaatsBestelling(Queue<Bestelling> bestellingen)
    {
        List<string> gerechten = new List<string>();
        Console.WriteLine("Voer de gerechten in (typ 'stop' om te stoppen):");
		string gerecht="";
       do
        {
            Console.Write("Gerecht: ");
            gerecht = Console.ReadLine();

            if (gerecht.ToLower() != "stop")
                gerechten.Add(gerecht);

           
        }while(gerecht!="stop");

        if (gerechten.Count > 0)
        {
            Bestelling nieuweBestelling = new Bestelling(gerechten);
            bestellingen.Enqueue(nieuweBestelling);
            Console.WriteLine($"Bestelling toegevoegd: {nieuweBestelling}");
        }
        else
        {
            Console.WriteLine("Geen gerechten ingevoerd. Bestelling geannuleerd.");
        }
    }

    static void VerwerkBestelling( Queue<Bestelling> bestellingen,List<Bestelling> geschiedenis,Dictionary<string, int> populariteit)
    {
        if (bestellingen.Count == 0)
        {
            Console.WriteLine("Geen bestellingen in de wachtrij.");
            return;
        }

        Bestelling bestelling = bestellingen.Dequeue();
        geschiedenis.Add(bestelling);

        Console.WriteLine($"Bestelling verwerkt: {bestelling}");

        foreach (string gerecht in bestelling.Gerechten)
        {
            if (populariteit.ContainsKey(gerecht))
                populariteit[gerecht]++;
            else
                populariteit[gerecht] = 1;
        }
    }

    static void ToonGeschiedenis(  List<Bestelling> geschiedenis,Dictionary<string, int> populariteit  )
    {
        if (geschiedenis.Count == 0)
        {
            Console.WriteLine("Geen bestellingen in de geschiedenis.");
            return;
        }

        Console.WriteLine("\nGeschiedenis van bestellingen:");
        foreach (Bestelling bestelling in geschiedenis)
        {
            Console.WriteLine(bestelling);
        }

        Console.WriteLine("\nPopulaire gerechten:");
        foreach (var item in populariteit)
        {
            Console.WriteLine($"{item.Key}: {item.Value} keer besteld");
        }
    }
}
```

## Speelkaarten

Main:

```java
List<Speelkaart> boekKaarten = new List<Speelkaart>();
for (int i = 0; i < 4; i++)
{
    for (int j = 1; j < 14; j++)
    {
        Speelkaart toAdd = new Speelkaart() { Getal=j, Suite=(Suit)i  };
        boekKaarten.Add(toAdd);
    }
}
Random r = new Random();
while (boekKaarten.Count > 0)
{
    Speelkaart getrokken = boekKaarten[r.Next(0, boekKaarten.Count)];
    Console.WriteLine("Getrokken kaart=");
    Console.WriteLine($"{getrokken.Suite}  {getrokken.Getal}");
    boekKaarten.Remove(getrokken);
    Console.ReadKey();
}
```

Speelkaart klasse:

```java
public enum Suit {Schoppen, Harten, Klaveren, Ruiten}

public class Speelkaart
{
    public int Getal { get; set; }
    public Suit Suite { get; set; }

}
```

## Bookmark Manager

Merk het (her)gebruik van methoden op, alsook het gebruik van enum om de leesbaarheid van de code te verbeteren in de `ToonHoofdMenu` switch

```java
public enum Keuzes { List,Show,Edit,Delete}

static void Main(string[] args)
{
    List<BookMark> sites = VraagEnVulBookmarkList();
    Console.Clear();
    ToonHoofdMenu(sites);
}

private static void ToonHoofdMenu(List<BookMark> sites)
{
    while (true)
    {
        Console.WriteLine("Wat wil je doen? 0=list,1=show, 2=edit, 3=remove");
        Keuzes inp = (Keuzes)Convert.ToInt32(Console.ReadLine());
        switch (inp)
        {
            case Keuzes.List:
                ShowAll(sites);
                break;
            case Keuzes.Show:
                OpenSite(sites);
                break;
            case Keuzes.Edit:
                EditSite(sites);
                break;
            case Keuzes.Delete:
                RemoveSite(sites);
                break;
            default:
                break;
        }
        Console.WriteLine("Druk op een toets om verder te gaan.");
        Console.ReadKey();
        Console.Clear();
    }
}

private static List<BookMark> VraagEnVulBookmarkList()
{
    Console.WriteLine("Geef je favoriete sites:");
    List<BookMark> sites = new List<BookMark>();
    for (int i = 0; i < 2; i++)
    {
        Console.WriteLine($"Geef site {i} in:");
        Console.WriteLine("Naam?");
        string naam = Console.ReadLine();
        Console.WriteLine("URL?");
        string url = Console.ReadLine();

        BookMark siteToAdd = new BookMark()
        {
            Naam = naam,
            URL = url
        };
        sites.Add(siteToAdd);
    }

    return sites;
}

private static void RemoveSite(List<BookMark> sites)
{
    int keuze = AskAction(sites, "verwijderen");
    sites.RemoveAt(keuze);
}

private static void EditSite(List<BookMark> sites)
{
    int keuze = AskAction(sites,"editeren");
    Console.WriteLine("Geef nieuwe naam [leeglaten= niet veranderen]");
    string newna = Console.ReadLine();
    if (newna != "")
        sites[keuze].Naam = newna;

    Console.WriteLine("Geef nieuwe url [leeglaten= niet veranderen]");
    string newurl = Console.ReadLine();
    if (newurl != "")
        sites[keuze].URL = newurl;

}

private static void OpenSite(List<BookMark> sites)
{
    int keuze=AskAction(sites, "openen");
    sites[keuze].ToonSite();
}

private static void ShowAll(List<BookMark> sites)
{
    for (int i = 0; i < sites.Count; i++)
    {
        Console.WriteLine($"{i}.{sites[i].Naam} ({sites[i].URL})");
    }
}

private static int AskAction(List<BookMark> sites, string action)
{
    Console.WriteLine($"Welke wil je {action}?");
    ShowAll(sites);
    int keuze = Convert.ToInt32(Console.ReadLine());
    return keuze;
}

```
