/* kerhohar.cpp */ /* Kerho-ohjelman runko ja alustavat luokat. ** Muutettu 11.03.1996/vl ** Mit„ muutettu: lis„tty harrasteet ** Seuraavassa listattu vain suurimmat muutokset: */ ... //---------------------------------------------------------------------------- // Jasenen m„„rittely: //---------------------------------------------------------------------------- class cJasen { // J„senluokka, jolle tulee viel„ paljon ominaisuuksia int jasen_nro; string nimi; ... string lisatietoja; static int seuraava_nro; public: ... int rekisteroi() { jasen_nro = seuraava_nro; seuraava_nro++; return jasen_nro;} int Jasen_nro() const { return jasen_nro; } }; //---------------------------------------------------------------------------- // Jasenen k„sittely: //---------------------------------------------------------------------------- int cJasen::seuraava_nro = 1; void cJasen::alusta() { jasen_nro = 0; nimi = ""; ... lisatietoja = ""; } //---------------------------------------------------------------------------- // Harrastuksen m„„rittely: //---------------------------------------------------------------------------- class cHarrastus { int jasen_nro; string ala; int aloitusvuosi; public: cHarrastus() { jasen_nro = 0; ala=""; aloitusvuosi=0; } void tulosta(ostream &os) const { os << " " << aloitusvuosi << ": " << ala << endl; } void vastaa_pitsin_nyplays(int nro) { jasen_nro = nro; ala = "Pitsin nypl„ys"; aloitusvuosi = rand()%100+1900; } int Jasen_nro() { return jasen_nro; } }; //---------------------------------------------------------------------------- // Harrastusten m„„rittely: (vrt. alkup. cKerho) //---------------------------------------------------------------------------- class cHarrastukset { int max_harrastuksia; int harrastuksia; int muutettu; string tiedoston_nimi; int kohdalla; cHarrastus **harrastukset; void poista_harrastukset() { poista_harrasteet(); poista_harrastustaulukko(); } void poista_harrasteet(); void poista_harrastustaulukko(); const char *luo_harrastustaulukko(int koko=MAX_HARRASTUKSIA); void alusta_harrasteet() { tiedoston_nimi = ""; max_harrastuksia = 0; harrastuksia = 0; muutettu = 0; } int rajoihin(int i) const { if ( i<0 || max_harrastuksia <= i ) i = 0; return i;} public: cHarrastukset(int koko=0) { alusta_harrasteet(); luo_harrastustaulukko(koko); } ~cHarrastukset() { if ( muutettu ) talleta(); poista_harrastukset(); } const char *lisaa(const cHarrastus &harrastus); const cHarrastus &anna(int i) const { return *harrastukset[rajoihin(i)]; } const char *lue_tiedostosta(const char *tied); const char *talleta(); int Harrastuksia() const { return harrastuksia; } const string &Tiedoston_nimi() const { return tiedoston_nimi; } const cHarrastus *eka(int nro); const cHarrastus *seuraava(int nro); }; //---------------------------------------------------------------------------- // Harrastusten toteutus: (vrt. alkup. cKerho) //---------------------------------------------------------------------------- const char *EI_VOI_LUODA_H = "Harrastuksille ei saada varattua tilaa muistista!"; const char *LIIKAA_HARRASTUKSIA = "Liikaa harrastuksia, ei voi lis„t„!"; const char *EI_SAA_HARRASTUSTA = "Ei saada tilaa uudelle harrastukselle!"; ... const cHarrastus *cHarrastukset::seuraava(int nro) { int i; for (i=kohdalla+1; iJasen_nro() == nro ) { kohdalla = i; return harrastukset[i]; } } return NULL; } const cHarrastus *cHarrastukset::eka(int nro) { kohdalla = -1; return seuraava(nro); } ... const char *cHarrastukset::lue_tiedostosta(const char *tied) { // Pahasti kesken tiedoston_nimi = tied; return luo_harrastustaulukko(); } //---------------------------------------------------------------------------- // J„senist”n m„„rittely: (vrt. alkup. cKerho) //---------------------------------------------------------------------------- class cJasenet { int max_jasenia; int jasenia; int muutettu; string tiedoston_nimi; string kerhon_nimi; cJasen **jasenet; void poista_jasenisto() { poista_jasenet(); poista_jasentaulukko(); } void poista_jasenet(); void poista_jasentaulukko(); const char *luo_jasentaulukko(int koko=MAX_JASENIA); void alusta_jasenisto() { kerhon_nimi = ""; tiedoston_nimi = ""; max_jasenia = 0; jasenia = 0; muutettu = 0; } int rajoihin(int i) const { if ( i<0 || max_jasenia <= i ) i = 0; return i;} public: cJasenet(int koko=0) { alusta_jasenisto(); luo_jasentaulukko(koko); } ~cJasenet() { if ( muutettu ) talleta(); poista_jasenisto(); } const char *lisaa(const cJasen &jasen); const cJasen &anna(int i) const { return *jasenet[rajoihin(i)]; } const char *lue_tiedostosta(const char *tied); const char *talleta(); const string &Kerhon_nimi() const { return kerhon_nimi; } int Jasenia() const { return jasenia; } const string &Tiedoston_nimi() const { return tiedoston_nimi; } }; //---------------------------------------------------------------------------- // J„senist”n toteutus: (vrt. alkup. cKerho) //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- // Kerhon m„„rittely: //---------------------------------------------------------------------------- class cNaytto; // Eteenp„in m„„rittely class cKerho { friend cNaytto; // Byrokratian v„hent„miseksi yst„v„! Huono ratkaisu! string kerhon_nimi; cJasenet jasenet; cHarrastukset harrastukset; void alusta() { kerhon_nimi = ""; } public: cKerho(int koko=0):jasenet(),harrastukset() { alusta(); } ~cKerho() { talleta(); } const char *lue_tiedostosta(const char *tied); const char *talleta() { jasenet.talleta(); return harrastukset.talleta(); } const string &Kerhon_nimi() const { return kerhon_nimi; } int Jasenia() const { return jasenet.Jasenia(); } // poista poistaa j„senist”st„ ja harrasteista ne joilla on nro - tee int poista(int nro) { return 0; } }; const char *cKerho::lue_tiedostosta(const char *tied) { // Pahasti kesken kerhon_nimi = tied; const char *virhe = jasenet.lue_tiedostosta(tied); if ( virhe ) return virhe; return harrastukset.lue_tiedostosta(tied); } //---------------------------------------------------------------------------- // N„yt”n m„„rittely //---------------------------------------------------------------------------- class cNaytto { cKerho *kerho; // Osoitin kerhoon => voi olla sama kerho monessa n„yt”ss„ void logo(void); ... void tulosta(ostream &os,const cJasen &jasen); void kysy_tiedot(cJasen &jasen); public: ... }; ... int cNaytto::talleta() { ... cout << "Tiedot talletettu tiedostoon " << kerho->jasenet.Tiedoston_nimi() ... return 0; } void cNaytto::tulosta(ostream &os,const cJasen &jasen) { const cHarrastus *har; int nro = jasen.Jasen_nro(); jasen.tulosta(os); har = kerho->harrastukset.eka(nro); while ( har ) { har->tulosta(os); har = kerho->harrastukset.seuraava(nro); } } void cNaytto::kysy_tiedot(cJasen &jasen) { cHarrastus har; int nro = jasen.Jasen_nro(); cout << "Toistaiseksi osaan lis„t„ vain Aku Ankan" << endl; jasen.vastaa_aku_ankka(); int lkm = rand()%5; for (int i=0; iharrastukset.lisaa(har)) ) break; } } void cNaytto::lisaa_uusi_jasen(char valinta) { cJasen jasen; otsikko(valinta,"Uuden j„senen lis„ys"); jasen.rekisteroi(); kysy_tiedot(jasen); cout << "Lis„t„„nk”" << endl; tulosta(cout,jasen); cout << ":"; int pois = 1; if ( kylla_vastaus() ) pois = ilmoitus(kerho->jasenet.lisaa(jasen)); if ( pois ) kerho->poista(jasen.Jasen_nro()); } void cNaytto::tulosteet(char valinta) { ... const cJasen &jasen = kerho->jasenet.anna(i); tulosta(cout,jasen); ... } ... int main(void) ...