# Oefeningen H18

## 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:

1. Een nieuw boek toevoegen
2. Een boek verwijderen
3. Alle boeken weergeven
4. 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
```

## IMDB Top 100 JSON

Op [deze site](https://github.com/hjorturlarsen/IMDB-top-100/blob/master/data/movies.json) 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:

1. Top 100 titels tonen.
2. Zoeken naar een titel (of deel ervan) en dan tonen op welke plek de titel staat.
3. Voor een nummer tussen 1 en 100 in en open vervolgens de browser (zoek zelf op hoe dit kan mbv `Process`) naar de bijhorende IMDB-pagina van die film. Je gebruikt hiervoor het id van de film, bv: "<https://www.imdb.com/title/tt0111161/>" indien je de pagina van The Shawnshank Redemption nodig hebt.

## 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 `ReadBytes` methode van een `BinaryReader` aanvaardt een `int` als parameter om aan te geven hoevel bytes je van het bestand wilt inlezen.
* De `BitConverter`-klasse kan eenvoudig bytes omzetten naar `int` met behulp van de `ToInt32` klasse.

## 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

1. Download het script [genereer\_bewijsmateriaal.bat](https://gist.github.com/timdams/b1eea362ad7b661e8edcda84c6a08792).
2. Plaats het in de map van je project (naast je `.sln` file of in `bin/Debug`).
3. Dubbelklik erop om de map `CorruptCorp` te genereren.

### Stap 1: The Scanner (Directory Traversal)

Schrijf een methode `ScanDirectories(string startPath, List<string> bewijsmateriaal)`:

* Deze methode doorzoekt de map `CorruptCorp` en 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 `AnalyzeFile` methode aan (zie stap 2).

### Stap 2: The Analyzer (File Reading)

Schrijf de methode `AnalyzeFile(string filePath, List<string> bewijsmateriaal)`:

* Opent het bestand en leest het **regel per regel** in.
* Zoekt naar sensitieve woorden: "SECRET", "BRIBE", "TOXIC" (ook in kleine letters).
* 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**. Per woord wordt er een entry gemaakt, ook als ze in dezelfde regel staan.

### Stap 3: The Report (File Writing)

Aan het einde van het programma:

* Als er bewijsmateriaal is gevonden, genereer dan automatisch een bestand `FINAL_REPORT.txt` in de hoofdmap van je project.
* Schrijf hierin:
  * De datum van vandaag.
  * Aantal doorzochte bestanden.
  * Een opsomming van alle gevonden verdachte regels en hun bronbestand.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://apwt.gitbook.io/ziescherp-oefeningen/oefeningen-h13-tot-en-met-h18/a_practica-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
