Aufgabe 21
Schwierigkeitsgrad: Mittel
Themen: STL-Datenstrukturen Kontrollstrukturen Funktionen
- Aufgabenstellung
- Lösung
Sie sollen ein einfaches Telefonbuchprogramm schreiben, das Namen und Telefonnummern speichert. Verwenden Sie dazu die STL-Datenstruktur std::map. Das Telefonbuch soll über ein Menü gesteuert werden und folgende Funktionen bereitstellen:
Anforderungen an das Programm:
- Verwenden Sie einen
std::map<std::string, std::string>, um Namen (als Schlüssel) und Telefonnummern (als Werte) zu speichern. - Das Programm soll dem Benutzer über ein Konsolenmenü folgende Optionen anbieten:
- Eintrag hinzufügen: Benutzer gibt Name und Telefonnummer ein.
- Eintrag suchen: Benutzer gibt Name ein, die zugehörige Telefonnummer wird angezeigt, falls vorhanden.
- Eintrag löschen: Benutzer gibt Name ein, Eintrag wird gelöscht, falls vorhanden.
- Alle Einträge anzeigen: Das gesamte Telefonbuch wird alphabetisch nach Namen ausgegeben.
- Programm beenden
- Alle Einträge sollen automatisch alphabetisch nach Namen sortiert sein (dies erledigt
std::mapautomatisch). - Das Menü soll in einer Schleife angezeigt werden, bis der Benutzer das Programm beendet.
Beispielhaftes Interface
--- Telefonbuch ---
1. Eintrag hinzufügen
2. Nummer suchen
3. Eintrag löschen
4. Alle Einträge anzeigen
5. Beenden
Ihre Wahl:
Hinweise
- Achten Sie auf saubere Trennung der Funktionen (z. B. separate Funktionen zum Hinzufügen, Suchen, Löschen, Anzeigen).
- Nutzen Sie
map::find, um zu prüfen, ob ein Name existiert. - Nutzen Sie den Header
<string>zur Textverarbeitung.
#include <iostream>
#include <map>
#include <string>
void eintragHinzufuegen(std::map<std::string, std::string>& telefonbuch) {
std::string name, nummer;
std::cout << "Name: ";
std::cin >> name;
std::cout << "Telefonnummer: ";
std::cin >> nummer;
telefonbuch[name] = nummer;
std::cout << "Eintrag hinzugefügt.\n";
}
void nummerSuchen(const std::map<std::string, std::string>& telefonbuch) {
std::string name;
std::cout << "Name suchen: ";
std::cin >> name;
auto it = telefonbuch.find(name);
if (it != telefonbuch.end()) {
std::cout << "Nummer von " << name << ": " << it->second << "\n";
} else {
std::cout << "Eintrag nicht gefunden.\n";
}
}
void eintragLoeschen(std::map<std::string, std::string>& telefonbuch) {
std::string name;
std::cout << "Name zum Löschen: ";
std::cin >> name;
if (telefonbuch.erase(name)) {
std::cout << "Eintrag gelöscht.\n";
} else {
std::cout << "Eintrag nicht gefunden.\n";
}
}
void alleEintraegeAnzeigen(const std::map<std::string, std::string>& telefonbuch) {
if (telefonbuch.empty()) {
std::cout << "Telefonbuch ist leer.\n";
return;
}
std::cout << "--- Telefonbucheinträge ---\n";
for (const auto& eintrag : telefonbuch) {
std::cout << eintrag.first << " : " << eintrag.second << "\n";
}
}
int main() {
std::map<std::string, std::string> telefonbuch;
int wahl = 0;
while (true) {
std::cout << "\n--- Telefonbuch ---\n";
std::cout << "1. Eintrag hinzufügen\n";
std::cout << "2. Nummer suchen\n";
std::cout << "3. Eintrag löschen\n";
std::cout << "4. Alle Einträge anzeigen\n";
std::cout << "5. Beenden\n";
std::cout << "Ihre Wahl: ";
std::cin >> wahl;
switch (wahl) {
case 1:
eintragHinzufuegen(telefonbuch);
break;
case 2:
nummerSuchen(telefonbuch);
break;
case 3:
eintragLoeschen(telefonbuch);
break;
case 4:
alleEintraegeAnzeigen(telefonbuch);
break;
case 5:
std::cout << "Programm beendet.\n";
return 0;
default:
std::cout << "Ungültige Eingabe. Bitte erneut versuchen.\n";
}
}
return 0;
}