C++ fundamentals through coding exercises
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
5.3 KiB

4 years ago
  1. ## 1 Luokan toteuttaminen: Asiakastili
  2. **Tehtävä:**
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Kolmas jäsenfunktio, "MuutaSaldoa" ottaa vastaan kokonaislukuparametrin, jonka se sijoittaa olion saldoa kuvaavaan jäsenmuuttujaan. Funktio ei palauta arvoa.
  8. 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.
  9. 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.
  10. Example output:
  11. ```
  12. 1: Näytä asiakkaan tiedot.
  13. 2: Muuta asiakkaan saldoa.
  14. Lopetus negatiivisella luvulla.
  15. Valitse toiminto: 1
  16. Anna tilinumero:
  17. 45678
  18. Tilinumero: 45678
  19. Asiakkaan nimi: Riku Rikas
  20. Tilin saldo: 99834
  21. 1: Näytä asiakkaan tiedot.
  22. 2: Muuta asiakkaan saldoa.
  23. Lopetus negatiivisella luvulla.
  24. Valitse toiminto: 2
  25. Anna tilinumero: 89892
  26. Anna uusi saldo: 234
  27. Antamaasi tilinumeroa ei löytynyt.
  28. 1: Näytä asiakkaan tiedot.
  29. 2: Muuta asiakkaan saldoa.
  30. Lopetus negatiivisella luvulla.
  31. Valitse toiminto: 0
  32. Ohjelma lopetetaan.
  33. ```
  34. **Vastaus:**
  35. ```
  36. #include<iostream>
  37. using namespace std;
  38. class Asiakastili
  39. {
  40. public:
  41. void LisaaAsiakas(int tilinumero, int saldo, string nimi);
  42. void NaytaTiedot();
  43. int MuutaSaldoa(int saldo);
  44. int VertaaTiliNro(int vertaatilinumero);
  45. private:
  46. int tilinumero_, saldo_;
  47. string nimi_;
  48. };
  49. void Asiakastili::LisaaAsiakas(int tilinumero, int saldo, string nimi)
  50. {
  51. tilinumero_ = tilinumero;
  52. saldo_ = saldo;
  53. nimi_ = nimi;
  54. }
  55. void Asiakastili::NaytaTiedot()
  56. {
  57. cout << "Tilinumero: " << tilinumero_ << endl << "Asiakkaan nimi: " << nimi_ << endl << "Tilin saldo: " << saldo_ << endl;
  58. }
  59. int Asiakastili::MuutaSaldoa(int saldo)
  60. {
  61. saldo_ = saldo;
  62. return saldo_;
  63. }
  64. int Asiakastili::VertaaTiliNro(int tilinumero)
  65. {
  66. if (tilinumero_ == tilinumero)
  67. {
  68. return 1;
  69. }
  70. else
  71. {
  72. return 0;
  73. }
  74. }
  75. //** Pre-defined code in the assignment **//
  76. int main() {
  77. int valinta, tilin_nro, uusi_saldo, i, loytyi = 0;
  78. Asiakastili asiakasrekisteri[5];
  79. asiakasrekisteri[0].LisaaAsiakas(12345, 312, "Mikko Möttönen");
  80. asiakasrekisteri[1].LisaaAsiakas(23456, 23, "Anni Manninen");
  81. asiakasrekisteri[2].LisaaAsiakas(34567, 112, "Simo Siili");
  82. asiakasrekisteri[3].LisaaAsiakas(45678, 99834, "Riku Rikas");
  83. asiakasrekisteri[4].LisaaAsiakas(56789, 7500, "Marja Mallikas");
  84. do {
  85. cout << endl << "1: Näytä asiakkaan tiedot." << endl;
  86. cout << "2: Muuta asiakkaan saldoa." << endl;
  87. cout << "Lopetus negatiivisella luvulla." << endl;
  88. cout << "Valitse toiminto: ";
  89. cin >> valinta;
  90. if(valinta == 1) {
  91. cout << "Anna tilinumero: " << endl;
  92. cin >> tilin_nro;
  93. for(i=0; i<5; i++) {
  94. if(asiakasrekisteri[i].VertaaTiliNro(tilin_nro)==1) {
  95. loytyi = 1;
  96. asiakasrekisteri[i].NaytaTiedot();
  97. }
  98. }
  99. if(loytyi == 0) {
  100. cout << "Antamaasi tilinumeroa ei löytynyt." << endl;
  101. }
  102. loytyi = 0;
  103. } else if(valinta == 2) {
  104. cout << "Anna tilinumero: ";
  105. cin >> tilin_nro;
  106. cout << "Anna uusi saldo: ";
  107. cin >> uusi_saldo;
  108. for(i=0; i<5; i++) {
  109. if(asiakasrekisteri[i].VertaaTiliNro(tilin_nro) == 1) {
  110. loytyi = 1;
  111. asiakasrekisteri[i].MuutaSaldoa(uusi_saldo);
  112. cout << endl << "Saldo muutettu." << endl;
  113. }
  114. }
  115. if(loytyi == 0) {
  116. cout << endl << "Antamaasi tilinumeroa ei löytynyt." << endl;
  117. }
  118. loytyi = 0;
  119. } else {
  120. cout << endl << "Ohjelma lopetetaan.";
  121. }
  122. }
  123. while(valinta>0);
  124. }
  125. //** ---------- ---------- ---------- **//
  126. ```