Skip to Content

Ein- / Ausgabe

Bei diesen Aufgaben müssen Informationen aus Dateien gelesen werden und in eine Datei geschrieben werden.

Gegeben sei ein Array von Mitarbeiter-Objekten, für die Verwaltung der Daten der Mitarbeiter, die in einem Unternehmen arbeiten. Jedes Mitarbeiter-Objekt hat eine nummerische ID, einen Namen, eine Abteilung und ein Gehalt. Beispiel:

Mitarbeiter mitarbeiter[] = { {12345, "Max Mustermann", "Vertrieb", 50000.0}, {23456, "Erika Musterfrau", "IT", 55000.0}, {34567, "Otto Normalverbraucher", "Marketing", 48000.0}, {45678, "Anna Normal", "Finanzen", 52000.0} }

Teilaufgaben

  1. Definieren Sie die Mitarbeiter-Klasse, so dass diese zu dem obigen Programmfragment kompatibel ist.
  2. Schreiben Sie eine C++ Funktion void storeMitarbeiterData(string filename, Mitarbeiter mitarbeiter[], int size), die den Datenpfad, ein Mitarbeiter-Array und dessen Größe als Argumente übergeben bekommt. Die Funktion soll die Mitarbeiterinformationen in eine Datei schreiben. Die einzelnen Werte sollen mittels Komma voneinander getrennt sein.

Beispiel für 2.:

12345,Max Mustermann,Vertrieb,50000.0 23456,Erika Musterfrau,IT,55000.0 34567,Otto Normalverbraucher,Marketing,48000.0 45678,Anna Normal,Finanzen,52000.0

Hinweis: Falls die Datei nicht geöffnet werden konnte, soll ein Hinweis in die Standardausgabe geschrieben werden. Geben Sie alle notwendigen Header an.Achten Sie ggf. auf die Formatierung der Ausgabe.

Teilaufgabe 1.

class Mitarbeiter { int id; string name; string abteilung; double gehalt; Mitarbeiter(int id, string name, string abteilung, double gehalt) : id(id), name(name), abteilung(abteilung), gehalt(gehalt) {} }

Teilaufgabe 2.

void storeMitarbeiterData(string filename, Mitarbeiter mitarbeiter[], int size) { ofstream file(filename); if (!file.is_open()) { cout << "Fehler beim Öffnen der Datei " << filename << endl; return; } for (int i = 0; i < size; i++) { file << mitarbeiter[i].id << "," << mitarbeiter[i].name << "," << mitarbeiter[i].abteilung << "," << mitarbeiter[i].gehalt << endl; } file.close(); }

Tipps

  • Typische Header: <iostream>, <fstream>, <sstream>, <vector>, <string>, <map>, <iomanip>

String Formatierung <iomanip>

Feldbreite und Füllzeichen

  • std::setw(n)
    Legt die minimale Feldbreite für die nächste Ausgabe fest.
    Beispiel:

    std::cout << std::setw(10) << 123 << std::endl; // Gibt " 123" aus (insgesamt 10 Zeichen, rechtsbündig)
  • std::setfill(ch)
    Legt das Füllzeichen fest, das benutzt wird, wenn die Ausgabe kürzer ist als die angegebene Feldbreite.
    Beispiel:

    std::cout << std::setfill('0') << std::setw(5) << 42 << std::endl; // Gibt "00042" aus
  • std::left und std::right
    Bestimmen die Ausrichtung (Links- bzw. Rechtsbündigkeit) innerhalb des Feldes.
    Beispiel:

    std::cout << std::setw(10) << std::left << "Hallo" << "Welt" << std::endl; // "Hallo Welt" std::cout << std::setw(10) << std::right << "Hallo" << "Welt" << std::endl; // " HalloWelt"

Zahlenformatierung

  • std::fixed
    Erzwingt, dass Gleitkommazahlen in der Festkommadarstellung (ohne Exponentialschreibweise) ausgegeben werden.
    Beispiel:

    std::cout << std::fixed << 3.14159 << std::endl; // Ausgabe: 3.141590
  • std::setprecision(n)
    Legt die Anzahl der Nachkommastellen (bei fixed) oder die Gesamtzahl der signifikanten Ziffern (bei nicht-fixed) fest.
    Beispiel:

    std::cout << std::fixed << std::setprecision(2) << 3.14159 << std::endl; // Ausgabe: 3.14
  • std::scientific
    Erzwingt die wissenschaftliche (exponentielle) Notation für Gleitkommazahlen.
    Beispiel:

    std::cout << std::scientific << 123456.789 << std::endl; // Ausgabe: 1.234568e+05 (je nach Implementierung)
  • std::hex, std::dec, std::oct
    Steuern die Ausgabe von Ganzzahlen in hexadezimaler, dezimaler oder oktaler Darstellung.
    Beispiel:

    std::cout << std::hex << 255 << std::endl; // Ausgabe: ff std::cout << std::dec << 255 << std::endl; // Ausgabe: 255 std::cout << std::oct << 255 << std::endl; // Ausgabe: 377

Boolesche Werte

  • std::boolalpha und std::noboolalpha
    Bestimmen, ob boolesche Werte als true/false (boolalpha) oder als 1/0 (noboolalpha) ausgegeben werden.
    Beispiel:
    std::cout << std::boolalpha << true << " " << false << std::endl; // Ausgabe: true false std::cout << std::noboolalpha << true << " " << false << std::endl; // Ausgabe: 1 0

Zeilenumbrüche und andere grundlegende Manipulatoren

  • std::endl
    Fügt einen Zeilenumbruch ein und leert (flusht) den Ausgabepuffer.
    Beispiel:

    std::cout << "Hallo" << std::endl;
  • std::flush
    Erzwingt das Leeren des Ausgabepuffers ohne einen Zeilenumbruch.
    Beispiel:

    std::cout << "Wird sofort ausgegeben" << std::flush;
Last updated on