Adressbuch schreiben in Verbund und Methode



  • Hallo liebe Gemeinde,

    ich bin in C++ ein Neuling und muss im Sinne eines Miniprojektes ein Adressbuch mit C++ schreiben.

    Dieses Programm soll können:
    - Nach Vor-, Nachnamen und Telefonnummer fragen
    - Dieses in eine csv-Datei schreiben
    - Aus der Datei auslesen und ausgeben

    Soviel erstmal zum Hintergrundwissen. Ich habe nun Probleme die Daten auszulesen und diese auszugeben. Vielleicht könnt Ihr mir den nötigen Hinweis geben woran es liegt. Ich komme einfach nicht durch googlen oder sonstiges dahinter was es sein könnte.
    Anscheinend habe ich hier Probleme mit meinen Arrays, die ich zum erstellen meiner einzelnen Adresszeilen verwende (fett markiert).
    Ich hoffe ihr könnt mir helfen.

    Gruß
    Zenko

    Hier mein Programm-Code:

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    #include <fstream>
    
    using namespace std;
    
    struct Adress
    {
    	string n;
    	string v;
    	string t;
    
    	void init();
    	string ausgeben();
    
    	void schreiben(ofstream &tabelle);
    	void lesen(ifstream &tabelle);
    };
    
    string Adress::ausgeben()
    {
    	string ausgabe = n + " " + v + " " + t;
    	return ausgabe;
    }
    
    void Adress::init()
    {
    		cout << "Name:" << endl;
    		cin >> n;
    
    		cout << "Vorname:" << endl;
    		cin >> v;
    
    		cout << "Telefonnummer:" << endl;
    		cin >> t;
    }
    
    void Adress::schreiben(ofstream &tabelle)
    {	
    		tabelle << n + ";" + v + ";" + t << endl;
    }
    
    void Adress::lesen(ifstream &tabelle)
    {
    	getline(tabelle, n, ';');
    	getline(tabelle, v, ';');
    	getline(tabelle, t, '\n');
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	int adressenzaehler = 0;
    	Adress adressen[20];
    
    	//Schreiben in Datei
    	//VON
    	ofstream tabelle;
    	tabelle.open("lesen.csv");
    	cout << "Wie viele Adressen sollen angelegt werden? Maximal 20" << endl;
    	cin >> adressenzaehler;
    
    	for (int i = 0; i < adressenzaehler; i++)
    	{
    		adressen[i].init();
    		adressen[i].schreiben(tabelle);
    
    	tabelle.close();
    	//BIS
    
    	//lesen
    	//VON
    	ifstream csvread("lesen.csv");
    	if (!csvread.is_open())
    		cerr << "Fehler beim Oeffnen der Datei!" << endl;
    	else {
    
    			; // tue was mit 'person'
    			cout << person.n << endl;
    			cout << person.v << endl;
    			cout << person.t << endl;
    			getchar();
    		}
    
    	system("pause");
    	return 0;
    }
    


  • Bitte editier Deinen Beitrag nochmal und entfern die Tags für die fette-Schrift im Quelltext. Dann funktionieren auch die code-Tags.

    Du brauchst doch noch eine Instanz der Klasse Adress, in die Du einliest, und die Du ausgibst. Hier z.B. Z. 7ff.

    //lesen
      //VON
      ifstream csvread("lesen.csv");
      if (!csvread.is_open())
        cerr << "Fehler beim Oeffnen der Datei!" << endl;
      else {
        Adress person;
        for(int i=0; i<adressenzaehler; ++i){
          person.lesen(csvread);
          std::cout << person.ausgeben() << '\n';
        }
      }
    


  • Achso, ja stimmt. Danke für den Hinweis. Jetzt klappt's auch 🙂
    Danke 👍



  • Wie wärs mit operator overloading für lesen/schreiben?


Anmelden zum Antworten