[Hilfe] Datensätze Abspeichern
-
Moin moin!
Ich bin noch Anfänger in sachen Programmieren und hoffe das mir jemand weiter helfen kann. Ich möchte ein Programm schreiben.
In dem Programm sollen die Anzahl der Plätze einzelner Klassenräumen (in der Schule) geschrieben und wieder aufgerufen werden.
Bsp.: Raumnummer B203; Anzahl der Plätze 30
Mein Problem ist jetzt, dass ich jeweils nur einen Raum abspeichern und wieder aufrufen kann. Wie stell ich das an, dass ich mehrere Räume eintragen kann (z.B. Raum: A208 á 30 Plätze; B303 á 25 Plätze)
und diese einzeln wieder aufrufen kann. (z.B.: Wie viele Plätze hat Raum B208? → 30)Hauptblatt.cpp
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "klassenraum.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TKlassenraum Klasse; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Beenden1Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Speichern1Click(TObject *Sender) { AnsiString raumnr; int pltz; raumnr=Edit1->Text; pltz=StrToInt(Edit2->Text); Klasse.setEigenschaften(raumnr, pltz); } //--------------------------------------------------------------------------- void __fastcall TForm1::Ausgeben1Click(TObject *Sender) { int x = Klasse.getPlaetze(); Edit2->Text = IntToStr(x); Edit1->Text = AnsiString(Klasse.getRaumnummer()); } //---------------------------------------------------------------------------
hauptblatt.h
#include <Menus.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TMainMenu *MainMenu1; TMenuItem *Datei1; TMenuItem *Speichern1; TMenuItem *Beenden1; TLabel *Label1; TLabel *Label2; TEdit *Edit1; TEdit *Edit2; TMenuItem *Ausgeben1; void __fastcall Beenden1Click(TObject *Sender); void __fastcall Speichern1Click(TObject *Sender); void __fastcall Ausgeben1Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- class TKlassenraum { private: AnsiString raumnummer; int plaetze; public: void setEigenschaften(AnsiString, int); int getPlaetze(); AnsiString getRaumnummer(); }; //--------------------------------------------------------------------------- void TKlassenraum::setEigenschaften(AnsiString raumnr, int pltz) { raumnummer=raumnr; plaetze=pltz; } //--------------------------------------------------------------------------- int TKlassenraum::getPlaetze() { return plaetze; } //--------------------------------------------------------------------------- AnsiString TKlassenraum::getRaumnummer() { return raumnummer; } //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1;
-
Da gibt es einige Möglichkeiten; z.B. alles in eine Textdatei speichern und dann beim auslesen parsen, oder eine Ini-Datei, oder oder oder
-
okay das scheint mir ein bischen zu kompliziert zu sein
Hab jetzt bischen rumprobiert mit BDE aber zu keinem Ergebnis gekommen.
Hab mal in der SuFu parser eingegeben...war ein bischen zu viel Information auf einmal. Hat jemand vielleicht ein Tutorial der mir weiter helfen könnte? Würd gerne verstehen wie parsen funktioniert.
-
parsen heisst primitiv formuliert so viel, dass du dir dein eigenes format für die speicherung überlegst und dass dann entsprechend einlädt, bearbeitest und auswertest:
z.B.
Raum001=30
Raum002=20
etc.Das ist aber nicht unbedingt unkompliziert, da Du Dich dann näher mit Strings auseinander setzten musst;
Ich glaub für Anfänger ist das Ini-Format am besten zu händeln. Schau Dir einfach mal in der BCB Hilfe TIniFile an. Da sind auch einige Beispiele.
-
Vielen Dank! Das hilft mir schon sehr
. Hat jetzt zwar noch nicht auf anhieb geklappt, aber ich denke ich bekomm das die Tage hin
-
Schön zu hören; Wenn noch etwas unklar ist, dann frag einfach nach.
-
Rostfrei[] schrieb:
z.B.
Raum001=30
Raum002=20
etc.Also hierbei drängt sich doch geradezu TStringList auf: Kann Dateien lesen und schreiben und mit den Eigenschaften Names und Values kann man auf die Werte zugreifen. Wenn es also bei der Form Bezeichner=Wert bleibt und keine weiteren Informationen zu verwalten sind...
Gruß KK
-
Juhu hab es hinbekommen
danke für eure Hilfe
Hier mein fertiges Programm:
hauptblatt.cpp//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <IniFiles.hpp> #include "hauptblatt.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TKlassenraum Klasse; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Beenden1Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString raumnr; int pltz; raumnr=Edit1->Text; pltz=StrToInt(Edit2->Text); Klasse.setEigenschaften(raumnr, pltz); TIniFile *ini; ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" ) ); ini->WriteInteger( "raeume", raumnr, pltz ); ini->WriteBool ( "raeume", "InitMax", WindowState == wsMaximized ); delete ini; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { AnsiString raumnr; int pltz; raumnr=Edit1->Text; TIniFile *ini; ini = new TIniFile( ChangeFileExt( Application->ExeName, ".INI" ) ); pltz = ini->ReadInteger( "raeume", raumnr, 0 ); ini->ReadBool( "raeume", "InitMax", false ) ? WindowState = wsMaximized : WindowState = wsNormal; delete ini; Edit2->Text = IntToStr(pltz); } //---------------------------------------------------------------------------
hauptblatt.h
//--------------------------------------------------------------------------- #ifndef hauptblattH #define hauptblattH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <Menus.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TMainMenu *MainMenu1; TMenuItem *Beenden1; TLabel *Label1; TLabel *Label2; TLabel *Label3; TEdit *Edit1; TEdit *Edit2; TButton *Button1; TButton *Button2; void __fastcall Beenden1Click(TObject *Sender); void __fastcall Button1Click(TObject *Sender); void __fastcall Button2Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- class TKlassenraum { private: AnsiString raumnummer; int plaetze; public: void setEigenschaften(AnsiString, int); }; //--------------------------------------------------------------------------- void TKlassenraum::setEigenschaften(AnsiString raumnr, int pltz) { raumnummer=raumnr; plaetze=pltz; } //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
-
Eine frage hab ich noch. Wie kann ich alle Werte der einzelnen Räume auslesen?
Also mein Vorhaben ist mit einer Schleife die anzahl der Plätze in jedem Raum mit der Anzahl der Schüler zu vergleichen und später alle geeigneten Räume ausgibt.
-
Schau Dir mal TIniFile::ReadSection[s] und ::ReadSectionValues an.