Personendatenbank
-
Ich bin grade dabei eine (sehr einfache) Personendatenbank zu schreiben. Diese sieht bisher wie folgt aus:
class Person
{public:
Person(char*n,char*m, int p): art(p) {strncpy(name,n,39); strncpy(datum,m,30);} //Konstruktor
~Person() {} //Destruktor
void zeigePerson();
private:
char name[40];
char datum[30];
int art;
};void Person::zeigePerson()
{
cout << "\nName: " << name
<< "\nGeburtsdatum: " << datum
<< "\nTyp(0=Student,1=Mitarbeiter):" << art;
}class Student: public Person
{private:
int matnr;
public:
Student(char*n,char*m,int p, int a)
:Person(n,m,p),matnr(a) {}; //Konstruktor
~Student() {} //Destruktor
void zeigeStudent();
};void Student::zeigeStudent()
{
Person::zeigePerson();
cout << "\nMatrikelnummer:" << matnr;
}class Mitarbeiter: public Person
{private:
int persnr;
public:
Mitarbeiter(char*n,char*m,int p, int b)
:Person(n,m,p),persnr(b) {}; //Konstruktor
~Mitarbeiter() {};
void zeigeMitarbeiter();
};void Mitarbeiter::zeigeMitarbeiter()
{
Person::zeigePerson();
cout << "\nPersonalnummer:" << persnr;
}wobei int p (0 oder 1) für Student oder Mitarbeiter steht.
Nun möchte ich die Personen,Studenten und Mitarbeiter in Vektoren speichern, weiß jedoch nicht wie ich dies machen soll/kann. Desweiteren möchte ich Methoden schreiben, welche Filterungen vornehmen, z.B. Methoden, welche alle Studenten, oder alle Mitarbeiter ausgeben, auch hier harpert es. Und dann möchte ich noch Operatoren einfügen >,<,==, ebenfalls für alle drei Klassen, mit welchen ich Geburtsdatum bzw Matrikelnummer/Personalnummer vergleiche. Wenn mir irgendjemand in einem Punkt davon helfen könnte, wäre ich sehr dankebar.
-
Nja ... am einfachsten legst du ein Interface an und nimmst das dann als Ausgangstype bei der std::vector Deklarierung.
-
Th3-DuKe schrieb:
Person(char*n,char*m, int p): art(p) {strncpy(name,n,39); strncpy(datum,m,30);} //Konstruktor
~Person() {} //DestruktorWarum schreibst du schwachsinnige Kommentare für Konstruktor und Destruktor, aber über die Parameter n, m und p verlierst du kein Wort? In zwei Wochen wirst du immer noch wissen dass das Konstruktor und Destruktor sind, aber n, m und p sind so sinnlos benannt, dass du keine Ahnung haben wirst was die bedeuten sollen.
char name[40];
char datum[30];Wenn du schon in C++ programmierst, verwende std::string statt antiquierter C-Relikte wie char[] und strncpy.
int art;
wobei int p (0 oder 1) für Student oder Mitarbeiter steht.
enum Klassifizierung { STUDENT, MITARBEITER };Verwende diesen Typ statt int und du musst nichts mehr erklären und dir keine kontextfreien Zahlen mehr merken.
Nun möchte ich die Personen,Studenten und Mitarbeiter in Vektoren speichern, weiß jedoch nicht wie ich dies machen soll/kann.
Im wesentlichen so:
std::vector<Person> personenVector; personenVector.push_back(einePerson);
-
class IPerson { public: IPerson(const type& type) : m_type(type) {} virtual IPerson() = 0; public: type get_type() const { return m_type; } public: virtual void show() { std::cout << m_name << "\n" << "Geburtsdatum: " << m_bday << "\nType: " << m_type << std::endl; } protected: std::string m_name; std::time_t m_bday; enum type { T_STUDENT, T_EMPLOYEE, T_UNKNOWN } m_type; };sowas z.B. als Ausgangspunkt ...
std::vector<IPerson*> m_database;...
class Student : public IPerson { Student() : IPerson(T_STUDENT) {} }; Student obj_one; m_database.push_back(&obj_one);
-
Hmm mal schaun ob ich das hinbekomme. Bin halt nicht grad der Programiercrack. Aber ich versuch mich mal daran. Danke schonmal dafür. Und falls ihr noch weitere Idden habt, immer her damit.