PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++-Aufgabe macht mich wahnsinnig...



REFLΞX
09.05.2010, 20:11
Hallo,

hab schon ein ganzes Stück geschafft, nur beim 4. case komm ich einfach nicht weiter. Könnte mir da jemand behilflich sein? Sonstige Fehler?

Download: Aufgabenstellung (http://rapidshare.com/files/385384782/Aufgabenstellung.doc)

#include <iostream>
#include <windows.h>
using namespace std;

/***************** Beginn: Klasse: Mitarbeiter *************************/

class Mitarbeiter {

protected:
int mitNr;
string name;
int zimmerNr;
int schluessel_nr;

public:
static int nr;
Mitarbeiter() {nr++;};
Mitarbeiter(int, string, int, int);
virtual void datenausgeben(); // Entscheidet während der Laufzeit des Programms, welche Methode ausgegeben wird
int getSchluessel_nr() {
return schluessel_nr;
}
int getMitNr() {
return mitNr;
}
void setSchluesselNr(int sch_nr) {
schluessel_nr = sch_nr;
}
};

/***************** Ende: Klasse: Mitarbeiter *************************/

Mitarbeiter::Mitarbeiter(int mit, string n, int zimmer, int schl_nr): mitNr(mit), name(n), zimmerNr(zimmer), schluessel_nr(schl_nr) { nr++; };

void Mitarbeiter::datenausgeben() {
cout << "Mitarbeiternummer: " << mitNr << endl;
cout << "Mitarbeitername: " << name << endl;
cout << "Zimmernummer: " << zimmerNr << endl;
if (schluessel_nr != 0) {
cout << "Schluesselnummer: " << schluessel_nr << endl;
}
};

int Mitarbeiter::nr = 0;

/***************** Beginn: Klasse: Abteilungsleiter *************************/

class Abteilungsleiter: public Mitarbeiter {

private:
string abtName;

public:
Abteilungsleiter() {};
Abteilungsleiter(int mitNr, string mitName, int schl_nr, int mitZimmer, string abt): Mitarbeiter(mitNr, mitName, mitZimmer, schl_nr), abtName(abt) {};
void datenausgeben() {
cout << "Mitarbeiternummer: " << mitNr << endl;
cout << "Mitarbeitername: " << name << endl;
cout << "Zimmernummer: " << zimmerNr << endl;
cout << "Abteilungsname: " << abtName << endl;
if (schluessel_nr != 0) {
cout << "Schluesselnummer: " << schluessel_nr << endl;
}
}
};

/***************** Ende: Klasse: Abteilungsleiter *************************/

/***************** Beginn: Klasse: Schlüssel *************************/

class Schluessel {

private:
bool normalerSchluessel;
int zimmerNr;
string abteilung;
int schluessel_nr;

public:
static int anzahl;
Schluessel() {anzahl++;};
// Elementinitialisierungskonstruktor - Abteilungsschlüssel
Schluessel(bool nS, int nr, string abt, int sch_nr): normalerSchluessel(nS), zimmerNr(nr), abteilung(abt), schluessel_nr(sch_nr) {anzahl++;};
// Elementinitialisierungskonstruktor - Normaler Schlüssel
Schluessel(bool nS, int nr, int sch_nr): normalerSchluessel(nS), zimmerNr(nr), schluessel_nr(sch_nr) {anzahl++;};

int getSchluessel_nr() {
return schluessel_nr;
}

void datenausgeben() {
cout << "--------------------------------SCHLUESSELDATEN--------------------------------" << endl << endl;
if (normalerSchluessel == true) {
cout << ">> Normaler Schluessel" << endl;
} else {
cout << ">> Abteilungsschluessel" << endl;
cout << "Abteilung: " << abteilung << endl;
}
cout << "Zimmernummer: " << zimmerNr << endl;
cout << "Schluesselnummer: " << schluessel_nr << endl;
}
};

/***************** Ende: Klasse: Schlüssel *************************/

int Schluessel::anzahl = 0;

int main(int argc, char *argv[])
{
Mitarbeiter *mitarbeiter[100];
Schluessel *schluessel[100];

int auswahl = 0, mit_nr = 0, sch_nr = 0;
int nr = 0;
char antwort = 'j';
string name = "", abtName = "";
int zimmerNr = 0;
int schluesselnr = 0, mitarbeiternr = 0;

do {
antwort = 'j';
zimmerNr = 0;
abtName = "";

cout << endl << " =========================== KEY MANAGEMENT SYSTEM ============================" << endl;
Sleep (500);
cout << endl << " . ";
Sleep (500);
cout << ". ";
Sleep (500);
cout << ". " << endl << endl;
Sleep (500);
cout << " [1] Mitarbeiter anlegen" << endl;
cout << " [2] Schluessel erfassen" << endl;
cout << " [3] Ausgabe eines Schluessels" << endl;
cout << " [4] Suchen eines Mitarbeiters" << endl;
cout << " [5] Ausgabe aller Mitarbeiter, die einen Schluessel erhalten haben" << endl;
cout << " [9] Programmende" << endl << endl;
cout << "Ihre Wahl bitte: ";
cin >> auswahl;

switch (auswahl) {
// Mitarbeiter anlegen
case 1: cout << endl << "Wollen Sie einen Abteilungsleiter anlegen (j/n)? ";
cin >> antwort;
cout << "Name: ";
cin >> name;
cout << "Zimmernummer: ";
cin >> zimmerNr;
nr = Mitarbeiter::nr;
if (antwort == 'j' || antwort == 'J') {
cout << "Abteilung (A, B, C): ";
cin >> abtName;
mitarbeiter[nr] = new Abteilungsleiter(++nr, name, 0, zimmerNr, abtName);
} else {
mitarbeiter[nr] = new Mitarbeiter(++nr, name, zimmerNr, 0);
}
break;
// Schlüssel erfassen
case 2: cout << endl << "Wollen Sie einen normalen Schluessel erfassen (j/n)? ";
cin >> antwort;
cout << "Schluessel fuer die Zimmernummer: ";
cin >> zimmerNr;
nr = Schluessel::anzahl;
if (antwort == 'n' || antwort == 'N') {
cout << "Schluessel fuer die Abteilung (A, B, C): ";
cin >> abtName;
schluessel[nr] = new Schluessel(false, zimmerNr, abtName, ++Schluessel::anzahl);
} else {
schluessel[nr] = new Schluessel(true, zimmerNr, ++nr);
}
break;
// Ausgabe eines Schlüssels an einen Mitarbeiter/Abteilungsleiter
case 3: nr = Schluessel::anzahl;
cin.clear();
if (nr == 0) {
cout << ">> Keine Schluessel vorhanden!" << endl;
} else {
cout << endl << "------------------ :: FOLGENDE SCHLUESSEL SIND VERFUEGBAR :: ------------------" << endl;
for (int s = 0; s < Schluessel::anzahl; s++) {
schluessel[s]->datenausgeben();
}
cout << endl << "Schluesselnummer auswaehlen: ";
cin >> schluesselnr;
cout << "Mitarbeiternummer eingeben: ";
cin >> mitarbeiternr;
for (int z = 0; z < Mitarbeiter::nr; z++) {
if (mitarbeiter[z]->getMitNr() == mitarbeiternr) {
mitarbeiter[z]->setSchluesselNr(schluesselnr);
}
}
}
break;
// Suchen eines Mitarbeiters nach Mitarbeiternummer mit Ausgabe seiner Daten und des an ihn ausgegebenen Schlüssels
case 4:
break;
// Ausgabe sämtlicher Mitarbeiter, die einen Schlüssel erhalten haben mit Angabe der Schlüsseldaten
case 5: nr = Mitarbeiter::nr;
for (int i = 0; i < nr; i++) {
if (mitarbeiter[i]->getSchluessel_nr() > 0) {
mitarbeiter[i]->datenausgeben();
for (int j = 0; j < Schluessel::anzahl; j++) {
if (mitarbeiter[i]->getSchluessel_nr() == schluessel[j]->getSchluessel_nr()) {
schluessel[j]->datenausgeben();
}
}
}
}
break;
// Programmende
case 9: cout << ">> Programm wird beendet..." << endl << endl;
break;
}
} while (auswahl != 9);

system("pause");
return 0;
}

c4pone
09.05.2010, 21:11
Hmm ich hab deinen Code mal kurz überflogen und würde es so machen
Pseudo Code:


for()
{
if(mitarbeiter[counter].getMitNr() == gesuchte MitNr)
{
Gebe Daten aus
}
}

REFLΞX
10.05.2010, 12:41
Weitere Vorschläge?

blackberry
10.05.2010, 19:12
Wenn das einen Mitarbeiter nach einer Nummer suchen soll ist die Aufgabe trivial, da du deine Mitarbeiter ja in einem Array ablegst, wobei Index = Mitarbeiternummer.

Folglich: Mitarbeiternummer einlesen, mitarbeiter[dieNummer].datenausgeben()
Um die Schlüsseldaten auszugeben sollte jedes Objekt der Klasse Mitarbeiter zusätzlich noch ein Referenzattribut auf ein Schlüsselobjekt haben. (also der Schlüssel, den der Mitarbeiter besitzt)