Dynamischen Speicher mit Funktionen (Datenbank-Anfänger)



  • Hallo, momentan erstellen wir in der Schule eine Art Datenbank für ein ausgewähltes Thema. Ohne dymanischen Speicher funktionieren meine 2 Funktionen auch, allerdings möchte ich dies in einen dynamischen Speicher verpacken. Ich habs versuchst indem ich ihn global anlege und in der Dateneinlesen Funktion initialisiere. Es speichert auch dann in dem dynamischen Speicher ein, allerdings kann ich ihn dann nicht ausgeben lassen, da der Wert nur in der Daten einlesen Funktion bleibt. Ich hab es auch mit int Funktionen versucht, aber das hat mir auch nichts gebracht.

    Kann mir jemand Tipps geben, was ich da eventuell machen könnte,damit das ganze dynamisch angelegt wird?
    Währenddessen versuche ich das weiterhin zu lösen 👍

    #include <iostream>
    using namespace std;
    /*
    COLOR
    Legt die Hinter- und Vordergrundfarben für die Konsole fest.

    COLOR [attr]
    attr Gibt die Farbattribute für die Konsolenausgabe an.
    Beispiel: "COLOR fc" erzeugt Rot auf weissem Hintergrund.

    Farbattribute werden durch ZWEI hexadezimale Ziffern angegeben - die erste
    bezieht sich auf den Hintergrund, die zweite auf den Vordergrund. Jede Ziffer
    kann einen der folgenden Werte annehmen:

    0 = Schwarz        8 = Dunkelgrau
    1 = Dunkelblau     9 = Blau
    2 = Dunkelgrün     A = Grün
    3 = Blaugrün       B = Zyan
    4 = Dunkelrot      C = Rot
    5 = Violett        D = Magenta
    6 = Ocker          E = Gelb
    7 = Hellgrau       F = Weiss
    

    /
    void Dateneinlesen(struct Daten[]);
    void Datenauslesen(struct Daten[],struct Daten
    Katze);
    struct Daten
    {
    struct infos {
    char Rasse[20] = { "Unbekannt" };
    char Vorname[20] = { "Unbekannt" };
    char Nachname[20] = { "Unbekannt" };
    int chipnr=0;
    };
    infos infos;
    struct Aussehen{
    int Koerperlaengeganz=0;
    char FellFarbe[20] = { "Unbekannt" };
    char Augenfarbe[20] = { "Unbekannt" };
    };
    Aussehen Look;
    };
    Daten Katzen;
    Daten* Katze = new Daten;

    int main(){

    system("title Datenbank"); //Überschirft "Datenbank" im Konsolenfenster
    
    int auswahl;
    
    while (1)
    {
    	system("color f0"); //Hintergrundfarbe
    	system("mode 78,18"); //Größe des Konsolenfensters
    	system("cls"); //löscht die bisherigen Ein- und Ausgaben des Konsolenfensters
    
    	cout << "\n\n\t\xDA";      //Rahmen                      
    	for (int i = 1;i <= 60;i++)
    	{
    		cout << "\xc4";
    	}
    	cout << "\xbf";
    	cout << "\n\t\xb3\t\t\t\t\t\t\t     \xb3";
    
    
    	cout << "\n\t\xb3\tDatens\x84tze aufnehmen\t\t\t\x1A [1]\t     \xb3" << endl;
    	cout << "\t\xb3\tDatens\x84tze anzeigen\t\t\t\x1A [2]\t     \xb3" << endl;
    	cout << "\t\xb3\tDatens\x84tze abspeichern (txt)\t\t\x1A [3]\t     \xb3" << endl;
    	cout << "\t\xb3\tDatens\x84tze abspeichern (bin)\t\t\x1A [4]\t     \xb3" << endl;
    	cout << "\t\xb3\tDatens\x84tze einlesen (txt)\t\t\x1A [5]\t     \xb3" << endl;
    	cout << "\t\xb3\tDatens\x84tze einlesen (bin)\t\t\x1A [6]\t     \xb3" << endl;
    	cout << "\t\xb3\tEnde\t\t\t\t\t\x1A [0]\t     \xb3" << endl;
    
    
    	cout << "\t\xb3\t\t\t\t\t\t\t     \xb3" << endl;
    	cout << "\t\xc0";
    
    	for (int j = 1;j <= 60;j++)
    	{
    		cout << "\xc4";
    	}
    	cout << "\xd9\n\n\tBitte Auswahl eingeben \x1A ";
    
    	cin >> auswahl;
    
    	switch (auswahl)
    	{
    	case 1:
    		system("cls");
    		system("color F1");
    		cout << "\t\tDatens\x84tze aufnehmen" << endl;
    		Dateneinlesen(&Katzen);
    	
    		break;
    
    	case 2:
    		system("cls");
    		system("color f2");
    		cout << "\t\tDatens\x84tze anzeigen" << endl;
    		Datenauslesen(&Katzen,&Katze);
    		
    		break;
    
    	case 3:
    		system("cls");
    		system("color 3b");
    		cout << "\t\tDatens\x84tzen abspeichern(txt)" << endl;
    		
    		break;
    
    	case 4:
    		system("cls");
    		system("color 3b");
    		cout << "\t\tDatens\x84tzen abspeichern(bin)" << endl;
    		
    		break;
    
    	case 5:
    		system("cls");
    		system("color 4a");
    		cout << "\t\tDatei oeffnen und einlesen (txt)" << endl;
    		
    		break;
    
    	case 6:
    		system("cls");
    		system("color 4a");
    		cout << "\t\tDatei oeffnen und einlesen (bin)" << endl;
    		
    		
    	case 0:exit(0);
    
    	default:cout << "Fehler" << endl;
    		
    	}
    
    }
    delete[]Katze;
    Katze = 0;
    
    return 0;
    

    }

    void Dateneinlesen(struct Daten* Katzen) {
    int anzahl;
    cout << "\tWie viele Daten moechten Sie einlesen?" << endl;
    cin >> anzahl;
    Katze = new Daten[anzahl];

    for (int i = 0;i < anzahl;i++) {
    	cout << "Vorname:\t";
    	cin >> Katze[i].infos.Vorname;
    	cout << endl;
    	cout << "Nachname:\t";
    	cin >> Katze[i].infos.Nachname;
    	cout << endl;
    	cout << "Rasse:\t";
    	cin >> Katze[i].infos.Rasse;
    	cout << endl;
    	cout << "Chip Nummer:\t";
    	cin >> Katze[i].infos.chipnr;
    	cout << endl;
    	cout << "Aussehen:\t" << endl;
    	cout << "Koerperlaenge von Schwanzspitze bis Kopf:\t";
    	cin >> Katze[i].Look.Koerperlaengeganz;
    	cout << endl;
    	cout << "Augenfarbe:\t";
    	cin >> Katze[i].Look.Augenfarbe;
    	cout << endl;
    	cout << "Fellfarbe:\t";
    	cin >> Katze[i].Look.FellFarbe;
    	cout << endl;
    	system("cls");
    }
    

    }
    void Datenauslesen(Daten* Katzen, Daten* Katze)
    {
    int a = 0;
    char frage;

    do {
    	cout << "\tWelchen Datensatz moechten Sie ausgeben?" << endl;
    	cin >> a;
    	system("cls");
    	cout << "Vorname:      \t" << Katze[a - 1].infos.Vorname << endl;
    	cout << "Nachname:     \t" << Katze[a - 1].infos.Nachname << endl;
    	cout << "Rasse:        \t" << Katze[a - 1].infos.Rasse << endl;
    	cout << "Gechipt unter:\t" << Katze[a - 1].infos.chipnr << endl;
    	cout << "Augenfarbe:    \t" << Katze[a - 1].Look.Augenfarbe << endl;
    	cout << "Fellfarbe:     \t" << Katze[a - 1].Look.FellFarbe << endl;
    	cout << "Koerperlaenge:\t" << Katze[a - 1].Look.Koerperlaengeganz << endl;
    	cout << endl;
    	cout << "\tMoechten Sie noch einen Datensatz ausgeben?(J/N)" << endl;
    	cin >> frage;
    	frage = toupper(frage);
    	system("cls");
    } while (frage == 'J');
    

    }


  • Mod

    Keine Lust, unformatierten Code zu lesen, aber: Du machst doch C++. Nicht C oder Java. Also vergiss alles über new, char-Arrays, und Zeiger. Schau dir stattdessen std::vector, std::string, und Referenzen an. Das ist essentieller C++-Stoff. Wenn in deinem Programm alles durch die genannten Techniken ersetzt wird, wir sich dein Problem zu 99% ganz von alleine lösen.


Log in to reply