karl wrote:
> ich benutzt c++.
> bin noch zimlicherneuling welche struktur ich verwende ist egal kannst
> du mir eine empfehlen. die daten speicher ich in einem ordner bei der
> .exe in einer txt datei.
Vergiss mal die Datei. Die ist dein geringstes (oder größtes) Problem
und zur Zeit völlig unwichtig.
Da das ein Schulbeispiel ist, ist es völlig ausreichend, wenn
du zunächst mal die Daten im Speicher hältst und darauf operieren
kannst.
Da das ein Schulbeispiel ist gehe ich auch mal davon aus, daß
das keine Hyper-Duper-Super-Ultra-Anwendung werden muss und das
simpelste und einfachste gerade gut genug ist.
Nimm also ein Array und speichere dort deine Daten.
Also fängst du mal damit an, dir eine Klasse zu schreiben,
die ein Bauteil beschreibt.
Was macht ein Bauteil aus. Ich mach mal einen Vorschlag:
Bauteilnummer, Hersteller, Beschreibung
All das werden wohl Strings sein. Der Datentyp std::string ist
dafür ideal
1 | class Bauteil
|
2 | {
|
3 | public:
|
4 | // Konstruktoren
|
5 | Bauteil();
|
6 | Bauteil( const std::string& Nummer,
|
7 | const std::string& Hersteller,
|
8 | const std::string& Beschreibung );
|
9 |
|
10 | void Nummer( const std::string& Arg ) { Nummer_ = Arg; }
|
11 | void Hersteller( const std::string& Arg ) { Hersteller_ = Arg; }
|
12 | void Beschreibung( const std::string& Arg ) { Beschreibung_ = Arg; }
|
13 |
|
14 | std::string Nummer() { return Nummer_; }
|
15 | std::string Hersteller() { return Hersteller_; }
|
16 | std::string Beschreibung() { return Beschreibung_; }
|
17 |
|
18 | private:
|
19 | std::string Nummer_;
|
20 | std::string Hersteller_;
|
21 | std::string Beschreibung_;
|
22 | };
|
Super, ein einziges Bauteil lässt sich schon mal beschreiben
(die Konstruktoren musst du noch fertig schreiben)
Da ist doch gleich mal ein Testprogramm angesagt:
1 | int main()
|
2 | {
|
3 | Bauteil Test;
|
4 | std::string In;
|
5 |
|
6 | std::cout << "Enter Nummer: ";
|
7 | std::getline( std::cin, In );
|
8 | Test.Nummer( In );
|
9 |
|
10 | std::cout << "Enter Producer: ";
|
11 | std::getline( std::cin, In );
|
12 | Test.Hersteller( In );
|
13 |
|
14 | std::cout << "Enter Description: ";
|
15 | std::getline( std::cin, In );
|
16 | Test.Beschreibung( In );
|
17 |
|
18 | std::cout << std::endl;
|
19 | std::cout << "Bauteil:\n";
|
20 | std::cout << " Nummer: " << Test.Nummer() << "\n";
|
21 | std::cout << " Producer: " << Test.Hersteller() << "\n";
|
22 | std::cout << " Description: " << Test.Beschreibung() << "\n";
|
23 | }
|
Damit kann man schon mal die Daten für einen Bauteil eingeben.
Die Daten werden in dem Bauteil Objekt Test gespeichert und
zur Kontrolle wieder ausgegeben.
So weit, so gut.
Jetzt will man aber nicht nur 1 Bauteil, sondern viele davon.
Diese müssen irgendwo gespeichert werden. Dafür erfinden wir
gleich mal eine Klasse:
Die Klasse braucht eine Speicherfläche. Irgendeine Datenstruktur
die es ermöglicht mehrere Bauteile darin zu speichern. Der Einfach-
heit halber, nehmen wir mal ein Array dafür her. Da wir in
C++ arbeiten, nehmen wir gleich mal was vernünftiges: einen std::vector
Der kümmert sich selber um die Speicherverwaltung sodaß wir hier
nicht viel Arbeit damit haben:
1 | class Database
|
2 | {
|
3 |
|
4 | private:
|
5 | std::vector<Bauteil> Data_;
|
6 | };
|
Ein paar Funktionen für so eine Datenbasis wären nicht schlecht.
Was muss so eine Datenbasis den alles können. Na zb. hinzufügen,
bzw. ihren Inhalt ausgeben.
1 | class Database
|
2 | {
|
3 | public:
|
4 |
|
5 | void Add( Bauteil Neu ) { Data_.push_back( Neu ); }
|
6 | void Dump();
|
7 |
|
8 | private:
|
9 | std::vector<Bauteil> Data_;
|
10 | };
|
11 |
|
12 | void Database::Dump()
|
13 | {
|
14 | for( size_t i = 0; i < Data_.size(); ++i ) {
|
15 | std::cout << " Nummer: " << Data_[i].Nummer() << "\n";
|
16 | std::cout << " Producer: " << Data_[i].Hersteller() << "\n";
|
17 | std::cout << " Description: " << Data_[i].Beschreibung() << "\n";
|
18 | std::cout << "*****************************************\n";
|
19 | }
|
20 | }
|
(Eigentlich sollte das Ausgeben eines Bauteils die Bauteilklasse
selbst machen. Schliesslich geht es ja die Datenbasis nichts an,
woraus so ein Bauteil besteht)
Dazu brauchen wir gleich wieder mal ein Testprogramm.
Das soll schon sowas wie ein kleiner Menü haben.
2 Menüpunkt: Hinzufügen und Ausgeben. Wird die Funktion
Hinzuügen ausgewählt, dann werden die Daten abgefragt und
ein neues Bauteil zur Datenbasis hinzugefügt.
Beim Menüpunkt Ausgeben, wir die Datenbasis einfach nur
aufgefordert ihren Inhalt auszugeben.
1 | void Add( Database& db )
|
2 | {
|
3 | Bauteil Neues;
|
4 | std::string In;
|
5 |
|
6 | std::cout << "Enter Nummer: ";
|
7 | std::getline( std::cin, In );
|
8 | Neues.Nummer( In );
|
9 |
|
10 | std::cout << "Enter Producer: ";
|
11 | std::getline( std::cin, In );
|
12 | Neues.Hersteller( In );
|
13 |
|
14 | std::cout << "Enter Description: ";
|
15 | std::getline( std::cin, In );
|
16 | Neues.Beschreibung( In );
|
17 |
|
18 | db.Add( Neues );
|
19 | }
|
20 |
|
21 | int main()
|
22 | {
|
23 | std::string tmp;
|
24 | int Auswahl;
|
25 | Database Data;
|
26 |
|
27 | do {
|
28 | std::cout << "\n";
|
29 | std::cout << "1) Hinzufügen\n";
|
30 | std::cout << "2) Ausgeben\n";
|
31 | std::cout << "9) Exit\n\n";
|
32 |
|
33 | std::cout << "Ihre Wahl: ";
|
34 | std::cin >> Auswahl;
|
35 | std::getline( std::cin, tmp ); // um den \n wegzukriegen
|
36 |
|
37 | if( Auswahl == 1 )
|
38 | Add( Data );
|
39 |
|
40 | else if( Auswahl == 2 )
|
41 | Data.Dump();
|
42 |
|
43 | } while( Auswahl != 9 );
|
44 | }
|
Ich gebe jetzt an dich ab. Ab hier müsst ihr weitermachen.
Denn schliesslich ist es eure Hausaufgabe und nicht meine.