## 1 Luokan toteuttaminen: Asiakastili **Tehtävä:** Tämän luvun ensimmäisessä ohjelmointitehtävässä tehtävänäsi on laatia luokka "Asiakastili". Luokan palveluita käytetään hyväksi alkeellisessa pankkiohjelmassa, jolla ohjelman käyttäjä voi selata asiakastietoja ja muuttaa asiakkaiden saldoja annetun tilinumeron perusteella. Pankkiohjelma on toteutettu pääohjelmassa, jonka toiminnasta sinun ei tarvitse välittää vaan riittää, että ohjelma saa tarvitsemansa palvelut alla esitettyjen määritelmien mukaan. Tehtävästä suoriutuminen vaatii huolellisuutta, kuten aina ohjelmoitaessa luokkia annetun toimeksiannon / määrittelyn mukaan. Luokka "Asiakastili" sisältää kolme jäsenmuuttujaa: kokonaislukutyypin muuttujat asiakkaan tilinumerolle ja saldolle, sekä string-tyypin muuttujan asiakkaan nimelle. Jäsenmuuttujat ovat luokan sisäisiä, joten voit nimetä ne haluamallasi tavalla. Luokan kaikki jäsenfunktiot ovat julkisia ja niistä ensimmäinen, "LisaaAsiakas" saa parametrinä asiakkaan tilinumeron, saldon ja nimen sijoittaen nämä olion jäsenmuuttujiin. Parametrit välitetään jäsenfunktiolle esitetyssä järjestyksessä. "LisaaAsiakas" ei palauta arvoa sitä kutsuvalle ohjelman osalle. Toinen jäsenfunktio, "NaytaTiedot" ei ota vastaan parametrejä, eikä palauta mitään arvoa. Funktion tehtävävänä on tulostaa näytölle kolme riviä, jotka sisältävät olion jäsenmuuttujien arvot esimerkkitulosteen mukaisella tavalla. Kolmas jäsenfunktio, "MuutaSaldoa" ottaa vastaan kokonaislukuparametrin, jonka se sijoittaa olion saldoa kuvaavaan jäsenmuuttujaan. Funktio ei palauta arvoa. Luokan viimeinen jäsenfunktio, "VertaaTiliNro" saa parametrinä kokonaislukuarvon, jota verrataan olion tilinumeroon. Mikäli parametrinä välitetty tilinumero on sama kuin olion tiedoissa sijaitseva, palauttaa jäsenfunktio kokonaislukuarvon 1. Jos taas annettu ja olion tilinumero eivät täsmää, palauttaa jäsenfunktio kokonaislukuarvon 0. Luokan palveluita hyödyntävän pankkiohjelman toiminta perustuu luokasta muodostettavaan automaattiseen oliotaulukkoon, jonka avulla eri asiakkaiden tietoja käsitellään. Ohjelmisto toimii kokonaisuutena, kun sinun vastuulla oleva luokka tarjoaa siltä pyydetyt palvelut. Example output: ``` 1: Näytä asiakkaan tiedot. 2: Muuta asiakkaan saldoa. Lopetus negatiivisella luvulla. Valitse toiminto: 1 Anna tilinumero: 45678 Tilinumero: 45678 Asiakkaan nimi: Riku Rikas Tilin saldo: 99834 1: Näytä asiakkaan tiedot. 2: Muuta asiakkaan saldoa. Lopetus negatiivisella luvulla. Valitse toiminto: 2 Anna tilinumero: 89892 Anna uusi saldo: 234 Antamaasi tilinumeroa ei löytynyt. 1: Näytä asiakkaan tiedot. 2: Muuta asiakkaan saldoa. Lopetus negatiivisella luvulla. Valitse toiminto: 0 Ohjelma lopetetaan. ``` **Vastaus:** ``` #include using namespace std; class Asiakastili { public: void LisaaAsiakas(int tilinumero, int saldo, string nimi); void NaytaTiedot(); int MuutaSaldoa(int saldo); int VertaaTiliNro(int vertaatilinumero); private: int tilinumero_, saldo_; string nimi_; }; void Asiakastili::LisaaAsiakas(int tilinumero, int saldo, string nimi) { tilinumero_ = tilinumero; saldo_ = saldo; nimi_ = nimi; } void Asiakastili::NaytaTiedot() { cout << "Tilinumero: " << tilinumero_ << endl << "Asiakkaan nimi: " << nimi_ << endl << "Tilin saldo: " << saldo_ << endl; } int Asiakastili::MuutaSaldoa(int saldo) { saldo_ = saldo; return saldo_; } int Asiakastili::VertaaTiliNro(int tilinumero) { if (tilinumero_ == tilinumero) { return 1; } else { return 0; } } //** Pre-defined code in the assignment **// int main() { int valinta, tilin_nro, uusi_saldo, i, loytyi = 0; Asiakastili asiakasrekisteri[5]; asiakasrekisteri[0].LisaaAsiakas(12345, 312, "Mikko Möttönen"); asiakasrekisteri[1].LisaaAsiakas(23456, 23, "Anni Manninen"); asiakasrekisteri[2].LisaaAsiakas(34567, 112, "Simo Siili"); asiakasrekisteri[3].LisaaAsiakas(45678, 99834, "Riku Rikas"); asiakasrekisteri[4].LisaaAsiakas(56789, 7500, "Marja Mallikas"); do { cout << endl << "1: Näytä asiakkaan tiedot." << endl; cout << "2: Muuta asiakkaan saldoa." << endl; cout << "Lopetus negatiivisella luvulla." << endl; cout << "Valitse toiminto: "; cin >> valinta; if(valinta == 1) { cout << "Anna tilinumero: " << endl; cin >> tilin_nro; for(i=0; i<5; i++) { if(asiakasrekisteri[i].VertaaTiliNro(tilin_nro)==1) { loytyi = 1; asiakasrekisteri[i].NaytaTiedot(); } } if(loytyi == 0) { cout << "Antamaasi tilinumeroa ei löytynyt." << endl; } loytyi = 0; } else if(valinta == 2) { cout << "Anna tilinumero: "; cin >> tilin_nro; cout << "Anna uusi saldo: "; cin >> uusi_saldo; for(i=0; i<5; i++) { if(asiakasrekisteri[i].VertaaTiliNro(tilin_nro) == 1) { loytyi = 1; asiakasrekisteri[i].MuutaSaldoa(uusi_saldo); cout << endl << "Saldo muutettu." << endl; } } if(loytyi == 0) { cout << endl << "Antamaasi tilinumeroa ei löytynyt." << endl; } loytyi = 0; } else { cout << endl << "Ohjelma lopetetaan."; } } while(valinta>0); } //** ---------- ---------- ---------- **// ```