Struktur mit Feld in einer Klasse dynamisch reservieren



  • Mein Projekt besteht aus folgenden Dateien:

    unit1.cpp
    unit1.h
    adressen.cpp
    adressen.h

    Meine Fragen stehen als Kommentar im Text.

    adressen.h:

    struct person
    {
      char pvorname[25];
      char pzuname[25];
      char pstrasse[25];
      char port[25];
      int plz;
    };
    
    class TAdressen
    {
     private:
             int *anzahl;
             int wert;
             person daten[50];//Wie kann ich die 50 mit einer Variablen ersetzen?
     public:
             TAdressen();
             TAdressen(int soviel);
             ~TAdressen();
             void einlesen(void);
             int wieviel(int soviel);
             int nulloderwas(void);
             const person *Get_daten();
             void Setplz(int Newplz);
             int Get_plz();
             void Setpvorname(char *Newpvorname);
             void Setpzuname(char *Newpzuname);
             void Setpstrasse(char *Newpstrasse);
             void Setport(char *Newport);
             AnsiString Get_pvorname();
             AnsiString Get_pzuname();
             AnsiString Get_pstrasse();
             AnsiString Get_port();
             int Get_wieviel();
    };
    

    adressen.cpp:

    TAdressen::TAdressen()
    {
     anzahl = new int[25];
     wert = 20;
    }
    //***************************************************************************
    TAdressen::TAdressen(int soviel)
    {
     anzahl = new int[soviel];
     wert = 0;
     daten[soviel].plz = 99999;
     strcpy(daten[soviel].pvorname, "Vorname");
     strcpy(daten[soviel].pzuname, "Zuname");
     strcpy(daten[soviel].port, "Ort");
     strcpy(daten[soviel].pstrasse, "Straße");
    }
    //***************************************************************************
    TAdressen::~TAdressen()
    {
     delete anzahl;
    }
    //---------------------------------------------------------------------------
    void TAdressen::einlesen(void)
    {
     if (wert == 0)
     {
      Application->MessageBoxA("Datensätze sind 0", "Pech");
      return;
     }
    }
    //---------------------------------------------------------------------------
    int TAdressen::wieviel(int soviel)
    {
     wert = soviel;
     return(wert);
    }
    //---------------------------------------------------------------------------
    int TAdressen::nulloderwas(void)
    {
     return anzahl[wert];
    }
    //---------------------------------------------------------------------------
    void TAdressen::Setplz(int Newplz)
    {
     daten[wert].plz = Newplz;
    }
    //***************************************************************************
    int TAdressen::Get_plz()
    { 
     return(daten[wert].plz);
    }
    //---------------------------------------------------------------------------
    void TAdressen::Setpvorname(char *Newpvorname)
    {
     strcpy(daten[wert].pvorname, Newpvorname);
    }
    //***************************************************************************
    AnsiString TAdressen::Get_pvorname()
    {
     return(daten[wert].pvorname);
    }
    //---------------------------------------------------------------------------
    void TAdressen::Setpzuname(char *Newpzuname)
    {
     strcpy(daten[wert].pzuname, Newpzuname);
    }
    //***************************************************************************
    AnsiString TAdressen::Get_pzuname()
    {
     return(daten[wert].pzuname);
    }
    //---------------------------------------------------------------------------
    void TAdressen::Setpstrasse(char *Newpstrasse)
    {
     strcpy(daten[wert].pstrasse, Newpstrasse);
    }
    //***************************************************************************
    AnsiString TAdressen::Get_pstrasse()
    {
     return(daten[wert].pstrasse);
    }
    //---------------------------------------------------------------------------
    void TAdressen::Setport(char *Newport)
    {
     strcpy(daten[wert].port, Newport);
    }
    //***************************************************************************
    AnsiString TAdressen::Get_port()
    {
     return(daten[wert].port);
    }
    //---------------------------------------------------------------------------
    int TAdressen::Get_wieviel()
    {
     return(wert);
    }
    

    unit1.cpp:

    TAdressen *ObjektAdressen;
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
     ObjektAdressen = new TAdressen(0);
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ButtonDatSatzEinlesenClick(TObject *Sender)
    {
     int soundsoviel = 0, anzahl;
     if (EditDatSatzInput->Text.Length())
     soundsoviel = StrToInt(EditDatSatzInput->Text);
     ObjektAdressen = new TAdressen(soundsoviel = StrToInt(EditDatSatzInput->Text));
     anzahl = ObjektAdressen->wieviel(soundsoviel);
     EditDatSatzOutput->Text = ObjektAdressen->wieviel(anzahl);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ButtonDatenEinlesenClick(TObject *Sender)
    {
     ObjektAdressen->einlesen();
     if (int count = StrToInt(ListBoxDaten->Items->Count)
         == ObjektAdressen->Get_wieviel() && ObjektAdressen->Get_wieviel() != 0)
     {
      Application->MessageBoxA("Voll","Schluss");
      return;
     }
     char buf[150];
     for (int i=0; i<ObjektAdressen->Get_wieviel(); i++)
     {
      if (EditPLZ->Text.Length())
      ObjektAdressen->Setplz(StrToInt(EditPLZ->Text));
      if (EditOrt->Text.Length())
      ObjektAdressen->Setport(EditOrt->Text.c_str());
      if (EditStrasse->Text.Length())
      ObjektAdressen->Setpstrasse(EditStrasse->Text.c_str());
      if (EditVorname->Text.Length())
      ObjektAdressen->Setpvorname(EditVorname->Text.c_str());
      if (EditZuname->Text.Length())
      ObjektAdressen->Setpzuname(EditZuname->Text.c_str());
      sprintf(buf,"%i %s %s %s %i %s",ObjektAdressen->Get_wieviel(),
                                      ObjektAdressen->Get_pvorname(),
                                      ObjektAdressen->Get_pzuname(),
                                      ObjektAdressen->Get_pstrasse(),
                                      ObjektAdressen->Get_plz(),
                                      ObjektAdressen->Get_port());
      ListBoxDaten->Items->Add(buf);
      break;
     }
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ButtonWelcherDatensatzClick(TObject *Sender)
    {
     //Wie kann ich einen bestimmten Datensatz (zum Beispiel den 12.) an die
     //ListBox ausgeben? Ich meine wie sage ich welches Feld ich will?
    }
    //---------------------------------------------------------------------------
    


  • zu 1.)
    CPP: Siehe DynamicArray / std::vector.
    C: Siehe calloc / malloc.

    zu 2.)
    Entweder du definierst dir einen eigenen Operator für deine Klasse oder mittels Getter/Setter - Funktionen.


Anmelden zum Antworten