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.

159 lines
4.6 KiB

4 years ago
  1. ## 2 Oliotaulukon käsittely
  2. **Tehtävä:**
  3. Edellisessä tehtävässä sinun vastuulla oli toteuttaa luokka, jonka
  4. palveluiden avulla alkeellinen pankkiohjelma toimi. Nyt tehtävänäsi on
  5. toteuttaa pieni osa "Asiakastili" luokkaa hyödyntävästä pääohjelmasta,
  6. joka kokonaisuudessaan muodostaa pankkiohjelman logiikan ja toiminnan.
  7. Tehtävänäsi on kirjoittaa ohjelmanpätkä, joka liitetään osaksi koko pankkiohjelmaa. Sinun ohjelman osan tulee selvittää, löytyykö köytössäsi olevasta oliotaulukosta oliota eli asiakasta, jolla on sama tilinumero kuin ohjelmalle juuri syötetty tilinumero. Jos oliotaulukko (asiakasrekisteri[5]) sisältää asiakkaan, jolla on sama numero, tulee ohjelman osasi asettaa bool-muuttujalle "loytyi" arvo "true", sekä kutsua täsmäävän olion jäsenfunktiota "NaytaTiedot()".
  8. Seuraavassa huomioita tehtävän ratkaisemiseksi:
  9. - Tilinumero, jota haetaan oliotaulukon olioista sijaitsee muuttujassa "tilin_nro".
  10. - Oliot, joiden seasta etsitään täsmäävää tilinumeroa on nimeltään "asiakasrekisteri" ja se sisältää viisi oliota (asiakasrekisteri[0]-->asiakasrekisteri[4]).
  11. - Tehokkaimmin täsmäävän tilinumeron etsiminen onnistuu silmukassa. Silmukan ehto-osassa on mahdollista määritellä erityinen indeksimuuttuja, esim: for(int indeksi; ....
  12. - Olioiden funktioihin viitataan pistenotaatiolla.
  13. - Ohjelman tulee vain ja ainoastaan verrata olemassa olevaa tilinumeroa olioiden tilinumeroihin ja jos saman tilinumeron omaava olio löytyy, asettaa "loytyi", sekä kutsua "NaytaTiedot" funktiota. Muut toiminnallisuudet ovat turhia ja estävät mahdollisesti tehtävän hyväksytyn suorittamisen.
  14. Example output:
  15. ```
  16. 1: Näytä asiakkaan tiedot.
  17. 2: Muuta asiakkaan saldoa.
  18. Lopetus negatiivisella luvulla.
  19. Valitse toiminto: 1
  20. Anna tilinumero:
  21. 32442
  22. Antamaasi tilinumeroa ei löytynyt.
  23. 1: Näytä asiakkaan tiedot.
  24. 2: Muuta asiakkaan saldoa.
  25. Lopetus negatiivisella luvulla.
  26. Valitse toiminto: -1
  27. Ohjelma lopetetaan.
  28. ```
  29. **Vastaus:**
  30. ```
  31. //** Pre-defined code in the assignment **//
  32. #include <iostream>
  33. using namespace std;
  34. class Asiakastili
  35. {
  36. public:
  37. void LisaaAsiakas(int tilinumero, int saldo, string nimi);
  38. void NaytaTiedot();
  39. int MuutaSaldoa(int saldo);
  40. int VertaaTiliNro(int vertaatilinumero);
  41. private:
  42. int tilinumero_, saldo_;
  43. string nimi_;
  44. };
  45. void Asiakastili::LisaaAsiakas(int tilinumero, int saldo, string nimi)
  46. {
  47. tilinumero_ = tilinumero;
  48. saldo_ = saldo;
  49. nimi_ = nimi;
  50. }
  51. void Asiakastili::NaytaTiedot()
  52. {
  53. cout << endl << "Tilinumero: " << tilinumero_ << endl << "Asiakkaan nimi: " << nimi_ << endl << "Tilin saldo: " << saldo_ << endl;
  54. }
  55. int Asiakastili::MuutaSaldoa(int saldo)
  56. {
  57. saldo_ = saldo;
  58. return saldo_;
  59. }
  60. int Asiakastili::VertaaTiliNro(int tilinumero)
  61. {
  62. if (tilinumero_ == tilinumero)
  63. {
  64. return 1;
  65. }
  66. else
  67. {
  68. return 0;
  69. }
  70. }
  71. int main() {
  72. int valinta, tilin_nro, uusi_saldo, i;
  73. bool loytyi;
  74. Asiakastili asiakasrekisteri[5];
  75. asiakasrekisteri[0].LisaaAsiakas(12345, 312, "Mikko Möttönen");
  76. asiakasrekisteri[1].LisaaAsiakas(23456, 23, "Anni Manninen");
  77. asiakasrekisteri[2].LisaaAsiakas(34567, 112, "Simo Siili");
  78. asiakasrekisteri[3].LisaaAsiakas(45678, 99834, "Riku Rikas");
  79. asiakasrekisteri[4].LisaaAsiakas(56789, 7500, "Marja Mallikas");
  80. do {
  81. cout << endl << "1: Näytä asiakkaan tiedot." << endl;
  82. cout << "2: Muuta asiakkaan saldoa." << endl;
  83. cout << "Lopetus negatiivisella luvulla." << endl;
  84. cout << "Valitse toiminto: ";
  85. cin >> valinta;
  86. if(valinta == 1) {
  87. cout << "Anna tilinumero: " << endl;
  88. cin >> tilin_nro;
  89. //** ---------- ---------- ---------- **//
  90. loytyi = false;
  91. for(int a=0; a<5; a++)
  92. {
  93. if(asiakasrekisteri[a].VertaaTiliNro(tilin_nro))
  94. {
  95. loytyi = true;
  96. asiakasrekisteri[a].NaytaTiedot();
  97. break;
  98. }
  99. }
  100. //** Pre-defined code in the assignment **//
  101. if(loytyi == false) {
  102. cout << endl << "Antamaasi tilinumeroa ei löytynyt." << endl;
  103. }
  104. loytyi = 0;
  105. } else if(valinta == 2){
  106. cout << "Anna tilinumero: ";
  107. cin >> tilin_nro;
  108. cout << "Anna uusi saldo:";
  109. cin >> uusi_saldo;
  110. for(int i=0; i<5; i++) {
  111. if(asiakasrekisteri[i].VertaaTiliNro(tilin_nro) == 1) {
  112. loytyi = true;
  113. asiakasrekisteri[i].MuutaSaldoa(uusi_saldo);
  114. cout << endl << "Saldo muutettu." << endl;
  115. }
  116. }
  117. if(loytyi == false) {
  118. cout << endl << "Antamaasi tilinumeroa ei löytynyt." << endl;
  119. }
  120. loytyi = false;
  121. } else {
  122. cout << endl << "Ohjelma lopetetaan.";
  123. }
  124. }
  125. while(valinta>0);
  126. }
  127. //** ---------- ---------- ---------- **//
  128. ```