## IF.03.22 POSEPR (C) [English](./Readme.md) Siehe auch [./html/index.html](./html/index.html) # Aufgabe: Kundenliste ## Einführung Die Aufgabe besteht darin, eine Kundenliste zu implementieren. Der Fokus liegt auf Verwaltungsfunktionen (Initialisieren, Hinzufügen von Kunden zur Liste) und einfachen Überblicksfunktionen (z. B. Länge der Liste, Auflisten von Kunden basierend auf Umsatzgrenzen). ## Datenstrukturen Dieser Abschnitt bietet eine kurze Einführung in die erforderlichen Datenstrukturen. ### CustomerList Die `CustomerList` kann maximal **13** Einträge enthalten. Sie ist eine Struktur mit den folgenden Feldern: - **`length` (int):** Gibt die Anzahl der Einträge in der Liste an. - **`customers` (Array von Zeigern auf `CustomerListEntry`-Strukturen):** Enthält die Kundeneinträge (siehe unten). ### CustomerListEntry Ein `CustomerListEntry` enthält alle Daten, die zu einem Kunden gehören, einschließlich: - **`id` (int):** Die eindeutige Kundennummer. - **`customer_name` (const char*):** Ein Zeiger auf den Namen des Kunden. - **`revenue` (int):** Der Umsatz, der dem Kunden zugeordnet ist, gemessen in €1000. ## Funktionen Die folgenden Funktionen sollen implementiert werden. Rückgabewerte und Parameter werden in dieser Liste nicht beschrieben. Eine detailliertere Beschreibung jeder Funktion findet sich in der API-Dokumentation über den Funktionsprototypen. - **`init_customer_list()`**: Initialisiert die Liste, indem die Anzahl der Einträge auf 0 gesetzt wird. - **`get_length()`**: Gibt die Anzahl der Einträge in der Liste zurück. - **`add_entry()`**: Fügt der Liste einen einzelnen Eintrag hinzu. - **`add_entries()`**: Fügt der Liste mehrere Einträge hinzu. - **`get_customer_with_id()`**: Sucht einen Kunden mit einer bestimmten ID. - **`get_customers_with_revenue()`**: Sucht Kunden innerhalb eines angegebenen Umsatzbereichs. - **`get_customer_with_highest_revenue()`**: Sucht den Kunden mit dem höchsten Umsatz. - **`get_customer_with_lowest_revenue()`**: Sucht den Kunden mit dem niedrigsten Umsatz. - **`get_top_n_customers_revenue()`**: Sucht die `n` Kunden mit dem höchsten Umsatz. - **`get_bottom_n_customers_revenue()`**: Sucht die `n` Kunden mit dem niedrigsten Umsatz. ## Aufgaben Implementieren Sie eine Kundenliste gemäß der oben gegebenen Spezifikation. Verwenden Sie ein ADT (Abstract Data Type) als Implementierungsmuster. 1. Tragen Sie Ihren Namen in den Dateikopf (innerhalb eines Kommentars) ein. 1. Implementieren Sie die TODOs in der Datei `customer_list.h`. 1. Ersetzen Sie alle Rückgabetypen, die mit <type> markiert sind, durch den korrekten Rückgabetyp. 1. Füllen Sie alle Parameterlisten, die mit <param> markiert sind, mit den zutreffenden Parametern aus. Beachten Sie, dass die Parameterliste leer sein kann. 1. Implementieren Sie die erforderlichen Datentypen in der C-Datei. 1. Implementieren Sie ein leeres Grundgerüst für jede Funktion. 1. Kompilieren und führen Sie die Anwendung aus. Alle Unit-Tests sollten laufen, aber fehlschlagen. 1. Implementieren Sie eine Funktion nach der anderen, bis alle Unit-Tests bestanden sind. Beachten Sie, dass einige Tests von mehreren Funktionen abhängen.