Boekencollectie (Essential)
Maak een applicatie die een gebruiker in staat stelt om zijn/haar boekencollectie te beheren. De boekengegevens worden opgeslagen in een tekstbestand op de computer. De gebruiker moet boeken kunnen toevoegen, verwijderen, en de volledige lijst van boeken kunnen bekijken.

De applicatie moet de volgende menu-opties bieden:
- Een nieuw boek toevoegen
- Een boek verwijderen
- Alle boeken weergeven
- Programma afsluiten
Elke regel in het tekstbestand (boeken.txt) representeert een boek in het volgende formaat: Titel;Auteur;Jaar
Bijvoorbeeld:
De Hobbit;J.R.R. Tolkien;1937
Harry Potter en de Steen der Wijzen;J.K. Rowling;1997
Het Leven van Pi;Yann Martel;2001
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
Stevens stille fouten (Essential)
Stagiair Steven kreeg drie kleine opdrachten met bestanden. Hij liet ze alle drie door een A.I. schrijven en keek niets na: het compileerde, en er crashte niets. Toch klopt er in geen van de drie iets van.
Zet elk fragment in de Main van een nieuw project. De bestanden krijgen enkel een naam en geen pad, zodat ze naast je programma terechtkomen, op Windows en op Mac. Vind je een bestand niet terug, laat dan bijvoorbeeld Path.GetFullPath("logboek.txt") afdrukken.
Voorspel telkens eerst wat er gebeurt, en voer het fragment pas daarna uit.
Deel 1. Steven houdt een logboek bij van wie zijn programma gebruikt:
StreamWriter writer = new StreamWriter("logboek.txt", true);
writer.WriteLine("Programma gestart");
Console.WriteLine("Hoe heet je?");
string naam = Console.ReadLine();
writer.WriteLine($"Gebruiker: {naam}");
Console.WriteLine($"Welkom, {naam}!");Voer het twee keer uit, met twee verschillende namen. Hoe groot is logboek.txt daarna, wat staat erin, en waarom?
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
Deel 2. Steven bewaart de instellingen van zijn spel in een binair bestand: de naam van de speler, het aantal levens en of het geluid aan staat. Het inlezen vroeg hij een dag later aan de A.I., in een nieuw gesprek:
// bewaren
FileStream fsSchrijven = File.Open("instellingen.dat", FileMode.Create);
using (BinaryWriter writer = new BinaryWriter(fsSchrijven))
{
writer.Write("Steven");
writer.Write(3);
writer.Write(false);
}
// later: terug inlezen
FileStream fsLezen = File.Open("instellingen.dat", FileMode.Open);
using (BinaryReader reader = new BinaryReader(fsLezen))
{
string speler = reader.ReadString();
bool geluidAan = reader.ReadBoolean();
int levens = reader.ReadInt32();
Console.WriteLine($"{speler} heeft {levens} levens. Geluid aan = {geluidAan}");
}Wat verschijnt er op het scherm? En waarom crasht het programma niet?
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
Deel 3. Steven wil zijn huisdier bewaren als JSON. De A.I. maakte een klasse in een eigen bestand, Huisdier.cs:
public class Huisdier
{
private string naam;
private int leeftijd;
public Huisdier(string naam, int leeftijd)
{
this.naam = naam;
this.leeftijd = leeftijd;
}
public override string ToString()
{
return $"{naam} ({leeftijd} jaar)";
}
}In Main, met using System.Text.Json; bovenaan Program.cs:
Huisdier kat = new Huisdier("Mimi", 4);
Console.WriteLine(kat);
string json = JsonSerializer.Serialize(kat);
File.WriteAllText("huisdier.json", json);
Console.WriteLine("Huisdier bewaard.");Op het scherm staat Mimi (4 jaar) en Huisdier bewaard.. Wat staat er in huisdier.json, en waarom? Pas de klasse aan zodat de naam en de leeftijd wél in het bestand komen.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
- Geen van de drie fouten geeft een foutmelding of een crash. Bij deel 1 en 3 ziet wie enkel naar het scherm kijkt zelfs niets verdachts. Open na het uitvoeren dus ook het bestand zelf.
- Een
StreamWriterzet je altijd in eenusing-blok. Zieusingalternatief. - Een binair bestand onthoudt geen datatypes. Lees in exact dezelfde volgorde als je schreef. Zie BinaryReader.
- Enkel publieke properties komen in de JSON, tenzij je
JsonIncludegebruikt. Zie Serialiseren in C# naar JSON en JsonInclude.
IMDB Top 100 JSON
Op deze site vind je de top 100 films ooit volgens IMDB. Download het bestand en gebruik het om een applicatie rond te ontwikkelen. De applicatie toont een menu’tje met volgende functionaliteiten:
- Top 100 titels tonen.
- Zoeken naar een titel (of deel ervan) en dan tonen op welke plek de titel staat.
- Een nummer tussen 1 en 100 ingeven en vervolgens in de browser de IMDB-pagina openen van de film die op die plek staat (zoek zelf op hoe dit kan mbv
Process). Je gebruikt hiervoor het id van de film, bv: “https://www.imdb.com/title/tt0111161/” indien je de pagina van The Shawshank Redemption nodig hebt.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
Bitmap header analyzer
Maak een applicatie die de headerinformatie van een bitmap-afbeelding binair inleest en de basisinformatie ervan toont. Je gaat de hoogte, breedte en bitdiepte van de afbeelding tonen aan de gebruiker. De gebruiker kan zelf ingeven welk bitmap (.bmp)-bestand moet ingelezen worden.
Een BMP-header bevat veel details, maar voor deze opdracht richten we ons op de volgende informatie:
- Breedte van de afbeelding: bytes 18-21 (4 bytes, Little Endian)
- Hoogte van de afbeelding: bytes 22-25 (4 bytes, Little Endian)
- Bitdiepte van de afbeelding: bytes 28-29 (2 bytes, Little Endian)
Ter info de volledige structuur van de BMP header (eerste 54 bytes):
- BMP Signature: bytes 0-1 (2 bytes)
- File Size: bytes 2-5 (4 bytes)
- Reserved: bytes 6-9 (4 bytes)
- Data Offset: bytes 10-13 (4 bytes)
- DIB Header Size: bytes 14-17 (4 bytes)
- Width: bytes 18-21 (4 bytes)
- Height: bytes 22-25 (4 bytes)
- Planes: bytes 26-27 (2 bytes)
- Bit Depth: bytes 28-29 (2 bytes)
Tips:
- De
ReadBytesmethode van eenBinaryReaderaanvaardt eenintals parameter om aan te geven hoevel bytes je van het bestand wilt inlezen. - De
BitConverter-klasse kan eenvoudig bytes omzetten naarintmet behulp van deToInt32klasse.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
Schijfinformatie
Met de klasse DriveInfo vraag je informatie op over de schijven van je computer. DriveInfo.GetDrives() geeft een array met alle schijven. Van elke schijf ken je onder andere:
Name: de naam, bv.C:\;TotalSize: de totale grootte, in bytes;AvailableFreeSpace: de vrije ruimte, in bytes;IsReady: of je de schijf op dit moment kan uitlezen.
DriveInfo zit in de namespace System.IO, net als File en Directory.
Toon een genummerde lijst van alle schijven, te beginnen bij 1. Vraag de gebruiker over welke schijf hij meer wil weten, en toon van die schijf de vrije ruimte en de totale grootte in gigabytes, met twee cijfers na de komma.
1. C:\
2. Z:\
Over welke schijf wil je meer weten?
>1
Schijf C:\: 659,66 GB vrij van 951,65 GB
De gebruiker typt 1 voor de eerste schijf, maar in de array heeft die index 0.
Een schijf die niet klaar is, zoals een kaartlezer zonder kaart, geeft een IOException als je TotalSize opvraagt. Kijk dus eerst naar IsReady.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.
De Digitale Klokkenluider (Final Essentials, GPT)
Een klokkenluider heeft je een USB-stick gegeven. De stick zit vol met mappen, submappen, en ergens daartussen verstopt zitten de bewijsstukken. Aan jou om de chaos in kaart te brengen en de belastende bestanden te vinden.
De Voorbereiding
- Download het script genereer_bewijsmateriaal.bat.
- Plaats het in de map van je project (naast je
.slnfile of inbin/Debug). - Dubbelklik erop om de map
CorruptCorpte genereren.
Stap 1: The Scanner (Directory Traversal)
Schrijf een methode ScanDirectories(string startPath):
- Deze methode doorzoekt recursief de map
CorruptCorpen al zijn submappen. - Voor elk bestand dat hij tegenkomt:
- Print het volledige pad.
- Print de bestandsgrootte.
- Als de bestandsnaam het woord “log” of “csv” bevat, roep je de
AnalyzeFilemethode aan (zie stap 2).
Stap 2: The Analyzer (File Reading)
Schrijf de methode AnalyzeFile(string filePath):
- Opent het bestand en leest het regel per regel in.
- Zoekt naar sensitieve woorden: “SECRET”, “BRIBE”, “TOXIC”.
- Als een verdacht woord gevonden wordt:
- Print: “🚨 CRITICAL EVIDENCE FOUND IN [Bestandsnaam]: [Regelnummer] -> [De verdachte regel]”
- Voegt deze regel toe aan een Lijst van Bewijsmateriaal.
Stap 3: The Report (File Writing)
Aan het einde van het programma:
- Als er bewijsmateriaal is gevonden, genereer dan automatisch een bestand
FINAL_REPORT.txtin de hoofdmap van je project. - Schrijf hierin:
- De datum van vandaag.
- Aantal doorzochte bestanden.
- Een opsomming van alle gevonden verdachte regels en hun bronbestand.
Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel
gebruikt, dan verschijnt de oplossing hier vanzelf.