#include #include using std::cout; using std::cin; using std::endl; enum alkuvalikko {av_kirje, av_paketti, av_lopeta, av_virhe}; enum alkuvalikko tulkitse_alkuvalikkovastaus(char vastaus) { switch (vastaus) { case 'k': case 'K': return av_kirje; case 'p': case 'P': return av_paketti; case 'l': case 'L': return av_lopeta; default: return av_virhe; } } enum alkuvalikko nayta_alkuvalikko() { char vastaus; enum alkuvalikko tulos; cout << "Postihintalaskuri, valitse lähetyksen tyyppi:" << endl; cout << "[K]irje" << endl << "[P]aketti" << endl << "[L]opeta" << endl; cout << endl << "Valintasi [K/P/L]? "; cin >> vastaus; tulos = tulkitse_alkuvalikkovastaus(vastaus); if (tulos == av_virhe) { cout << "Virheellinen valinta, yritä uudelleen: "; cin >> vastaus; tulos = tulkitse_alkuvalikkovastaus(vastaus); } return tulos; } int kysy_paino() { int paino; cout << "Kuinka paljon lähetyksesi painaa (g)? "; cin >> paino; if (paino <= 0) { cout << "Anna nollaa suurempi paino: "; cin >> paino; } return paino; } enum mahtuvuusvalinta {mv_kylla, mv_ei, mv_virhe}; enum mahtuvuusvalinta tulkitse_mahtuvuusvalinta(char vastaus) { switch (vastaus) { case 'k': case 'K': return mv_kylla; case 'e': case 'E': return mv_ei; default: return mv_virhe; } } enum mahtuvuusvalinta kysy_mahtuuko() { char vastaus; enum mahtuvuusvalinta tulos; cout << "Mahtuuko kirjeesi postilaatikon luukusta [k/e]? "; cin >> vastaus; tulos = tulkitse_mahtuvuusvalinta(vastaus); if (tulos == mv_virhe) { cout << "Vastaa k tai e: "; cin >> vastaus; tulos = tulkitse_mahtuvuusvalinta(vastaus); } return tulos; } void tulosta_hinta(int hinta) { cout << hinta / 100 << " euroa " << hinta % 100 << " senttiä" << endl; } int main() { cout << "### OHJ-1151 Ohjelmointi Ie" << endl; cout << "### Petteri Aimonen, 205441, aimonen" << endl; enum alkuvalikko avvalinta = nayta_alkuvalikko(); if (avvalinta == av_virhe) { cout << "Virhe: Virheellinen alkuvalikkovalinta." << endl; return EXIT_FAILURE; } if (avvalinta == av_lopeta) { return EXIT_SUCCESS; } int paino = kysy_paino(); if (paino <= 0) { cout << "Virhe: Virheellinen paino." << endl; return EXIT_FAILURE; } enum mahtuvuusvalinta mvalinta = mv_kylla; if (avvalinta == av_kirje && paino > 500) { mvalinta = kysy_mahtuuko(); if (mvalinta == mv_virhe) { cout << "Virhe: Virheellinen mahtuvuusvalinta." << endl; return EXIT_FAILURE; } } int hinta_snt = 0; if (avvalinta == av_kirje) { hinta_snt = 50; cout << "Kirjeen perushinta: 50 senttiä" << endl; } else if (avvalinta == av_paketti) { hinta_snt = 200; cout << "Paketin perushinta: 200 senttiä" << endl; } int lisahinta = 0; int lisakerroin = 0; if (paino >= 200 && paino <= 500) { lisakerroin = (avvalinta == av_kirje) ? 4 : 8; lisahinta = paino / 100 * lisakerroin; cout << "Painoluokka: 200g - 500g, lisämaksu " << paino << "g * " << lisakerroin << "snt/100g = "; tulosta_hinta(lisahinta); } else if (paino > 500) { lisakerroin = (avvalinta == av_kirje) ? 7 : 14; lisahinta = paino / 100 * lisakerroin; cout << "Painoluokka: yli 500g, lisämaksu " << paino << "g * " << lisakerroin << "snt/100g = "; tulosta_hinta(lisahinta); } else { cout << "Painoluokka: alle 200g, ei lisämaksua" << endl; } hinta_snt += lisahinta; if (mvalinta == mv_ei) { cout << "Ei mahdu postilaatikkoon, lisämaksu 2 euroa" << endl; hinta_snt += 200; } cout << "Kokonaishinta: "; tulosta_hinta(hinta_snt); return EXIT_SUCCESS; }