Terve vaa kaikille..olis tarkoituksena saada aikaan ohjelman jonka kautta voidaan lisätä/poistaa/printata seuraavat henkilöt(lääkärit/huoltajat/sairaanhoitajat) ja olen rakentanu jonkun verran mutta esim en saa kun yksi nimi näytölle!!
Sairaala.cpp #include "StdAfx.h" #include "Sairaala.h" void Sairaala::initTables() { // taulukon nollaaminen memset(laakarit,'\0',laakarit_size * sizeof(Laakari*)); memset(sairaanhoitajat,'\0',sairaanhoitajat_size * sizeof(Shoitaja*)); memset(huoltajat,'\0',huoltajat_size * sizeof(Huoltaja*)); } Sairaala::Sairaala(void) { Laakari* laakarit[100]={0}; Shoitaja* sairaanhoitajat[100]={0}; Huoltaja* huoltajat[100]={0}; } Sairaala::~Sairaala(void) { } void Sairaala::run() { char choice; do { printf("Enter your choice\n" "(A)Lisaa uusi laakari\n" "(S)Lisaa uusi sairaanhoitaja\n" "(H)Lisaa uusi huoltaja\n" "(P)Tulosta laakarin tiedot \n" "(F)Tulosta Sairaanhoitajan tiedot \n" "(T)Tulosta huoltajan tiedot \n" "(R)emove \n" "e(X)it\n"); choice = getchar(); choice=tolower(choice); fflush(stdin); switch(choice) { case 'a': addlaakari(); break; case 's': adds(); break; case 'h': addh(); break; case 'r': remove(); break; case 'p': printlaakari(); break; case 'f': prints(); break; case 't': printh(); break; case 'x': break; default: printf("Illegal choice!\n"); break; } }while(choice != 'x'); } int Sairaala::addlaakari() { for (int ind=0;ind < 100 &&laakarit[ind] != NULL;ind++) { if (ind < 100) { laakarit[ind] = new Laakari ; laakarit[ind]->kysy(); cout<<"\nLisatty laakari: "; cout<<laakarit[ind]->sukunimi<< endl; return 1; } else return 0; } } int Sairaala::adds() { for (int i=0;i < 100 && sairaanhoitajat[i] != NULL;i++) { if (i < 100) { sairaanhoitajat[i] = new Shoitaja ; sairaanhoitajat[i]->kysy(); cout<<"\nLisatty sairaanhoitaja: "; cout<<sairaanhoitajat[i]->sukunimi<< endl; return 1; } else return 0; } } int Sairaala:: addh() { for (int i=0;i < 100 && huoltajat[i] != NULL;i++) { if (i < 100) { huoltajat[i] = new Huoltaja ; huoltajat[i]->kysy(); cout<<"\nLisatty huoltaja: "; cout<<huoltajat[i]->sukunimi<< endl; return 1; } else return 0; } } void Sairaala::printlaakari() { int ind=0; //for(ind=0;ind<100;ind++) //{ if(laakarit[ind]!= NULL) { laakarit[ind]->nayta(); ind++; } //} } void Sairaala::prints() { for (int ind=0;sairaanhoitajat[ind] != NULL;ind++) { sairaanhoitajat[ind]->nayta(); } } void Sairaala::printh() { for (int ind=0;huoltajat[ind] != NULL;ind++) { huoltajat[ind]->nayta(); } } void Sairaala::remove() { } =================Hkunat.cpp=============== #include "StdAfx.h" #include "Hkunta.h" Hkunta::Hkunta(void) { } Hkunta::~Hkunta(void) { } void Laakari::nayta() { cout<<"\n****LAAKARIN TIEDOT****\n"; cout<<"\nEtunimi: " <<this->getEtunimi()<< "\nSukunimi: \n" <<this->getSukunimi()<<"\nId: \n" <<this->getId(); } void Shoitaja::nayta() { cout<<"\n****SAIRAANHOITAJAN TIEDOT****\n"; cout<<"\nEtunimi: " <<this->getEtunimi()<< "\nSukunimi: \n" <<this->getSukunimi()<<"\nId: \n" <<this->getId(); } void Huoltaja::nayta() { cout<<"\n****HUOLTAJAN TIEDOT****\n"; cout<<"\nEtunimi: " <<this->getEtunimi()<< "\nSukunimi: " <<this->getSukunimi()<<"\nId: " <<this->getId(); } void Laakari::kysy() { int ind=0; if (ind < 100) { cout<<"\nSyota Laakarin tiedot\n"; cout<<"\nEtunimi:"; getline(cin,etunimi); cout<<"Sukunimi:"; getline(cin,sukunimi); cout<<"Id:"; cin>>id; } } void Shoitaja::kysy() { int ind=0; if (ind < 100) { cout<<"\nSyota Sairaanhoitajan tiedot\n"; cout<<"\nEtunimi:"; getline(cin,etunimi); cout<<"Sukunimi:"; getline(cin,sukunimi); cout<<"Id:"; cin>>id; } } void Huoltaja::kysy() { int ind=0; if (ind < 100) { cout<<"\nSyota Huoltajan tiedot\n"; cout<<"\nEtunimi:"; getline(cin,etunimi); cout<<"Sukunimi:"; getline(cin,sukunimi); cout<<"Id:"; cin>>id; } } Laakari::Laakari() { } Shoitaja::Shoitaja() { } Huoltaja::Huoltaja() { } =================harjoitustyo1.cpp======================== #include "stdafx.h" #include"Sairaala.h" int _tmain(int argc, _TCHAR* argv[]) { Sairaala app; app.run(); return 0; } ================Sairaala.h================== #pragma once #include"Hkunta.h" class Sairaala { public: static const int laakarit_size=100; static const int sairaanhoitajat_size=100; static const int huoltajat_size=100; Sairaala(void); ~Sairaala(void); void run(); void initTables(); private: Laakari *laakarit[laakarit_size]; Shoitaja *sairaanhoitajat[sairaanhoitajat_size]; Huoltaja *huoltajat[huoltajat_size]; int addlaakari(); int adds(); int addh(); void printlaakari(); void prints(); void printh(); void remove(); }; ===============Hkunta.h======================== #pragma once class Hkunta { public: Hkunta(void); ~Hkunta(void); virtual void nayta() = 0; virtual void kysy() =0; }; class Laakari: // lääkärit public Hkunta { private: public: string etunimi; //osoitin jolle tila varataan dynaamisesti string sukunimi; //osoitin jolle tila varataan dynaamisesti int id; string getEtunimi(){return etunimi;} bool setEtunimi(string etunimi); string getSukunimi(){return sukunimi;} bool setSukunimi(string sukunimi); int getId(){return id;} void setId(int id){this->id=id;} Laakari(void); ~Laakari(void); void nayta(); void kysy(); }; class Shoitaja: //sairaanhoitajat public Hkunta { private: public: string etunimi; //osoitin jolle tila varataan dynaamisesti string sukunimi; //osoitin jolle tila varataan dynaamisesti int id; string getEtunimi(){return etunimi;} bool setEtunimi(string etunimi); string getSukunimi(){return sukunimi;} bool setSukunimi(string sukunimi); int getId(){return id;} void setId(int id){this->id=id;} Shoitaja(void); ~Shoitaja(void); void nayta(); void kysy(); }; class Huoltaja: public Hkunta { private: public: string etunimi; //osoitin jolle tila varataan dynaamisesti string sukunimi; //osoitin jolle tila varataan dynaamisesti int id; string getEtunimi(){return etunimi;} bool setEtunimi(string etunimi); string getSukunimi(){return sukunimi;} bool setSukunimi(string sukunimi); int getId(){return id;} void setId(int id){this->id=id;} Huoltaja(void); ~Huoltaja(void); void nayta(); void kysy(); };
Mod. lisäsi kooditagit
Ymmärtääkseni sizeof(mitä_tahansa*) kertoo pointterin koon, eli neljä. Tarvitset siis tähän kohtaan sizeof(mitä_tahansa). Koska käytät C++:aa, voisit kuitenkin siirtyä std::vectorin käyttöön.
Voisitko vielä kertoa enemmän ongelmastasi?
siis esim kun painan A(lisaa laakaria)eli pari lääkäriä lisään muistiin, niin se ei näytä kun viimeisen lisätyn kääkärin tiedot kun painan p(print laakaria) ihan kun se ei tallentaisi kaikki nimet :(
kiitos.
Alla on ainakin yksi ihan selkeä virhe, jonka vuoksi tulostuu aina indeksin 0 mukainen lääkäri. Keksit ehkä itsekin miksi...
hajtsu kirjoitti:
void Sairaala::printlaakari(){ int ind=0; //for(ind=0;ind<100;ind++) //{ if(laakarit[ind]!= NULL) { laakarit[ind]->nayta(); ind++; } //}
Olet ehkä kommentoinut tuon for-lauseen pois, koska kääntäjä kiukuttelee uudelleen määritellystä ind muuttujasta, jonka ole juuri edellisellä rivillä määritellyt.
EDIT:
etpäs olekaan eihän tuolla olekaan määrittelyä, vaan ainoastaan sijoitus.
Samalla kannattaa miettiä voisiko periytyminen olla avain koodin lyhentymiseen tähän tapaan.
class Henkilosto{ protected: std::string etunimi; std::string sukunimi; int id; int osasto; Henkilosto( std::string en, std::string sn, int id, int os ){ this -> etunimi = en; this -> sukunimi = sn; this -> id = id; this -> osasto = os; } public: std::string annaEtunimi(){ return this -> etunimi; } }; class Laakari : public Henkilosto{ private: std::string tyohuone; public: Laakari( std::string th, std::string en, std::string sn, int id, int os ) : Henkilosto( en, sn, id, os ){ this -> tyohuone = th; } }; class Sairaanhoitaja : public Henkilosto{ public: Sairaanhoitaja( std::string en, std::string sn, int id, int os ) : Henkilosto( en, sn, id, os ){ } };
Aihe on jo aika vanha, joten et voi enää vastata siihen.