Programowanie obiektowe w C++ – System rezerwacji biletów w kinie cz. III

Gościnie autorem wpisu jest Adam Sawicki.

Właściciel kina jest bardzo zadowolony z naszego oprogramowania. Zyski ciągle rosną a zarząd już wydał plany rozbudowy budynku o cztery nowe sale. Dostaliśmy zlecenie modernizacji systemu, aby obsługiwał on wszystkie pięć seansów.

Fot: Bogdoro, CC BY-SA 3.0.

Fot: Bogdoro, CC BY-SA 3.0.

Wstępnie przeanalizujmy sytuację. Nie ma najmniejszej wątpliwosci, że klient chcący dokonać rezerwacji jest już zdecydowany na konkretny film. Dlatego system powinien umożliwić najpierw wybór filmu, dopiero potem miejsca.

Podobno dwie rzeczy są w życiu pewne – śmierć i podatki. Chciałbym zasugerować jeszcze trzecią sytuację – zmiany w kodzie :-)

Przyjrzyjmy się klasie Kino. Czyż nie stanowi ona dobego materiału na klasę Film? :-) W jednej sali wyświetlany jest jeden film (przeważnie :-)), dlatego Film może zawierać tytuł filmu oraz miejsca w sali, w której jest oglądany. Rozważmy klasę Film powstałą po modyfikacji klasy Kino:

Klasę uzupełniliśmy jedynie o tytuł. Zmian jest niewiele, ale za to możliwości przybyło bardzo dużo. Wcześniejsza wersja programu zakładała, że dla jednej sali można zarezerwować miejsce tylko na jeden film. Nie jest to do końca prawda, ponieważ w jednej sali może odbyć się kilka seansów dzienne o wybranych godzinach. Aby nie komplikować kodu, poczyńmy takowe założenie również teraz. O nadaniu projektowi realizmu porozmawiamy później, obiecuję :-)

Aby menu naszego programu w dalszym ciągu działało, nie ominie nas napisanie nowej klasy Kino, będącej managerem wszystkich obiektów klasy Film.

Dodatkowo bradzo pomocne będą następujące metody:

Plan już jest. Teraz realizacja. Zacznijmy od podania składników prywatnych. Wiemy, że powinniśmy obsłużyć 5 sal kinowych, dlatego potrzebujemy 5 obiektów klasy Film. Dodatkowo, przyda się zmienna przechowująca numer wybranego filmu. Dodając kolejne filmy do systemu musimy wiedzieć czy nie przekroczyliśmy limitu pieciu sal, dlatego licznik filmów w systemie również zostanie użyty.

W konstruktorze domyślnym przypiszemy wartości do wybrany_film i ilosc_dodanych_filmow:

Cóz nam z kina kiedy nie ma w nim filmów. Rozbudujmy metodę dodaj_film:

Mając filmy w systemie, sprawdźmy stan miejsc poprzez uzupełnienie metod wyswietl_wszystkie_miejsca, wyswietl_wolne_miejsca i wyswietl_zarezerwowane_miejsca.

Zanim to zrobimy, dodajmy do klasy Film metodę wypisz:

Dzięki niej metoda wyswietl_wszystkie_miejsca wygląda tak:

Filozofia żadna, ponieważ wykorzystujemy tutaj już wcześniej napisane funkcje. Idąc tym tropem, wyswietl_wolne_miejsca:

oraz funkcja wyswietl_zarezerwowane_miejsca:

Zanim dodamy pierwszą rezerwację, przygotujmy sobie metodę wybierającą film. Wyświetlenie ich listy okaże się badzo pomoce.

Dzięki tym funkcjom dodamy rezerwację :-)

Tutaj rownież używamy istniejacej metody. Bez najmniejszego problemu zaimplementujemy anuluj_rezerwacje oraz sprawdz_miejsce:

Doając kilka filmów do sytemu

czynimy z niego potężne narzędzie w rękach managera kina :-D

Strony: 1 2

, , , , , , , , ,

  • Zażenowany

    Ciekawe, które kino chciałoby tego użyć…

    • W obecnej formie, żadne. To nie jest system produkcyjny dla klienta, tylko po to, żeby zrozumieć na czym polega programowanie zorientowane obiektowo. Dalej można ten program rozwijać, a to jest dobry początek ;)

      • Zażenowany

        Ciekawe, czy ktoś zrozumie na czym polega programowanie zorientowane obiektowo czytając Twojego bloga… ;)

        • Z takim nastawieniem jak twoje, na pewno nie ;)

  • Piotr Piotrowski

    Gdybym na prawdę potrzebował bardzo prosty program do sprzedaży miejsc numerowanych to dało by się ten adoptować ??

    • Adoptować w jakim sensie?

      • Piotr Piotrowski

        Dostosować do rzeczywistego wyglądu sali i drukować bilety zgodne z układem siedzeń.

        • Jeżeli funkcjonalności tego programu Panu odpowiadają to jak najbardziej tak. Moim zdaniem aby to użyć komercyjnie trzeba by dorobić jeszcze kilka rzeczy jak na przykład interfejs i zapis danych.