sennik

z klima, 1 tydzień temu, napisane w C++, wyświetlone 20 razy. [paste_expire] 2 tygodnie.
URL https://pastebin.k4be.pl/view/08f21ca5 Udostępnij
Pobierz wklejkę lub Pokaż surowy tekst
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <stdexcept>
  5.  
  6. /*
  7. zadanie:
  8. Napisz program w języku C++, który umożliwia zarządzanie listą mieszkań w bloku mieszkalnym.
  9. Mieszkania powinny być przechowywane w wektorze . Program powinien pozwalać na
  10. dodawanie, edytowanie, usuwanie, wyświetlanie dostępnych mieszkań oraz liczyć cenę za metr
  11. kwadratowy. Ponadto, powinien obliczać procent dostępnych mieszkań oraz umożliwiać
  12. sortowanie listy mieszkań według ceny. W programie musi występować obsługa błędów (np.
  13. brak mieszkania o wskazanym numerze).
  14. */
  15.  
  16. using namespace std;
  17.  
  18. struct Mieszkanie {
  19.     int numer;
  20.     bool dostepne;
  21.     float powierzchnia;
  22.     float cena_za_metr;  // Dodane pole dla ceny za metr (PatoDeveLopoOpszion)
  23. };
  24.  
  25. vector<Mieszkanie> mieszkania;
  26.  
  27. // Sprawdź unikalność numeru mieszkania
  28. bool czyNumerUnikalny(int numer) {
  29.     return none_of(mieszkania.begin(), mieszkania.end(),
  30.         [numer](const Mieszkanie& m) { return m.numer == numer; });
  31. }
  32.  
  33. // Dodaj mieszkanie z walidacją
  34. void dodajMieszkanie(int numer, bool dostepne, float powierzchnia) {
  35.     if (!czyNumerUnikalny(numer)) {
  36.         throw invalid_argument("Mieszkanie o tym numerze juz istnieje!");
  37.     }
  38.     if (powierzchnia <= 0) {
  39.         throw invalid_argument("Powierzchnia musi byc dodatnia!");
  40.     }
  41.     mieszkania.push_back({numer, dostepne, powierzchnia, 0.0f});
  42. }
  43.  
  44. // Usuń mieszkanie z obsługą błędów
  45. void usunMieszkanie(int id) {
  46.     if (id < 0 || id >= mieszkania.size()) {
  47.         throw out_of_range("Nieprawidlowe ID mieszkania!");
  48.     }
  49.     mieszkania.erase(mieszkania.begin() + id);
  50. }
  51.  
  52. // Edytuj mieszkanie
  53. void edytujMieszkanie(int id, int nowyNumer, bool nowaDostepnosc, float nowaPowierzchnia) {
  54.     if (id < 0 || id >= mieszkania.size()) {
  55.         throw out_of_range("Nieprawidlowe ID mieszkania!");
  56.     }
  57.     if (!czyNumerUnikalny(nowyNumer)) {
  58.         throw invalid_argument("Numer juz istnieje!");
  59.     }
  60.    
  61.     mieszkania[id] = {nowyNumer, nowaDostepnosc, nowaPowierzchnia, mieszkania[id].cena_za_metr};
  62. }
  63.  
  64. // Wyświetl wszystkie dostępne mieszkania
  65. void wyswietlDostepne() {
  66.     cout << "\nDostepne mieszkania:\n";
  67.     for (const auto& m : mieszkania) {
  68.         if (m.dostepne) {
  69.             cout << "Nr: " << m.numer
  70.                  << ", Powierzchnia: " << m.powierzchnia << " m2"
  71.                  << ", Cena za m2: " << m.cena_za_metr << endl;
  72.         }
  73.     }
  74. }
  75.  
  76. // Oblicz procent dostępnych mieszkań
  77. void obliczProcentDostepnych() {
  78.     int dostepne = count_if(mieszkania.begin(), mieszkania.end(),
  79.         [](const Mieszkanie& m) { return m.dostepne; });
  80.        
  81.     float procent = (dostepne / static_cast<float>(mieszkania.size())) * 100;
  82.     cout << "Dostepnych jest " << procent << "% mieszkan\n";
  83. }
  84.  
  85. // Sortuj mieszkania po cenie (malejąco)
  86. void sortujPoCenie() {
  87.     sort(mieszkania.begin(), mieszkania.end(),
  88.         [](const Mieszkanie& a, const Mieszkanie& b) {
  89.             return (a.powierzchnia * a.cena_za_metr) > (b.powierzchnia * b.cena_za_metr);
  90.         });
  91. }
  92.  
  93. // Ustaw cenę za metr z walidacją
  94. void ustawCeneZaMetr(int id, float cena) {
  95.     if (id < 0 || id >= mieszkania.size()) {
  96.         throw out_of_range("Nieprawidlowe ID mieszkania!");
  97.     }
  98.     if (cena <= 0) {
  99.         throw invalid_argument("Cena musi byc dodatnia!");
  100.     }
  101.     mieszkania[id].cena_za_metr = cena;
  102. }
  103.  
  104. // Menu pomocnicze
  105. void wyswietlMenu() {
  106.     cout << "\n===== MENU =====\n"
  107.          << "1. Dodaj mieszkanie\n"
  108.          << "2. Usun mieszkanie\n"
  109.          << "3. Edytuj mieszkanie\n"
  110.          << "4. Wyswietl dostepne\n"
  111.          << "5. Oblicz procent dostepnych\n"
  112.          << "6. Sortuj po cenie\n"
  113.          << "7. Ustaw cene za metr\n"
  114.          << "8. Wyjdz\n"
  115.          << "Wybor: ";
  116. }
  117.  
  118. int main() {
  119.     int wybor;
  120.    
  121.     while (true) {
  122.         try {
  123.             wyswietlMenu();
  124.             cin >> wybor;
  125.            
  126.             if (cin.fail()) {
  127.                 cin.clear();
  128.                 cin.ignore(numeric_limits<streamsize>::max(), '\n');
  129.                 throw runtime_error("Nieprawidlowy format danych!");
  130.             }
  131.  
  132.             switch (wybor) {
  133.                 case 1: {
  134.                     int numer;
  135.                     bool dostepne;
  136.                     float powierzchnia;
  137.                    
  138.                     cout << "Podaj numer, dostepnosc (1/0), powierzchnie: ";
  139.                     cin >> numer >> dostepne >> powierzchnia;
  140.                     dodajMieszkanie(numer, dostepne, powierzchnia);
  141.                     break;
  142.                 }
  143.                 case 2: {
  144.                     int id;
  145.                     cout << "Podaj ID do usuniecia: ";
  146.                     cin >> id;
  147.                     usunMieszkanie(id);
  148.                     break;
  149.                 }
  150.                 case 3: {
  151.                     int id, nowyNumer;
  152.                     bool nowaDostepnosc;
  153.                     float nowaPowierzchnia;
  154.                    
  155.                     cout << "Podaj ID, nowy numer, dostepnosc, powierzchnie: ";
  156.                     cin >> id >> nowyNumer >> nowaDostepnosc >> nowaPowierzchnia;
  157.                     edytujMieszkanie(id, nowyNumer, nowaDostepnosc, nowaPowierzchnia);
  158.                     break;
  159.                 }
  160.                 case 4:
  161.                     wyswietlDostepne();
  162.                     break;
  163.                 case 5:
  164.                     obliczProcentDostepnych();
  165.                     break;
  166.                 case 6:
  167.                     sortujPoCenie();
  168.                     cout << "Posortowano!\n";
  169.                     break;
  170.                 case 7: {
  171.                     int id;
  172.                     float cena;
  173.                     cout << "Podaj ID i cene za metr: ";
  174.                     cin >> id >> cena;
  175.                     ustawCeneZaMetr(id, cena);
  176.                     break;
  177.                 }
  178.                 case 8:
  179.                     return 0;
  180.                 default:
  181.                     cout << "Nieprawidlowy wybor!\n";
  182.             }
  183.         } catch (const exception& e) {
  184.             cerr << "Blad: " << e.what() << endl;
  185.         }
  186.     }
  187. }

odpowiedź "sennik"

Tutaj możesz odpowiedzieć na wklejkę z góry

captcha