Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

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

Zanim przytoczę całość kodu, pozwolę sobie sporządzić mały schemat, ułatwiający pracę ze źródłem:

// poczatek kodu, dodawanie bibliotek, namespace, itd.

void wyswietl_menu_glowne();
void czekaj_na_klawisz();

// klasa Miejsce

class Miejsce {

public:
    char imie[20];
    char nazwisko[20];

    int numer;
    bool zarezerwowane;

    Miejsce();

    Miejsce(char t_imie[], char t_nazwisko[], int t_numer, bool t_zarezerwowane);

    void rezerwuj();
    void wypisz();
    bool jestZarezerwowane();
};

// klasa Film

class Film {

private:
    char tytul[100];
    static const int ilosc_miejsc = 30;
    int wybrane_miejsce;

    Miejsce wszystkie_miejsca[ilosc_miejsc];

public:
    Film();

    Film(char t_tytul[]);

    void wypisz();
    void wybierz_miejsce();
    void wyswietl_wszystkie_miejsca();
    void wyswietl_wolne_miejsca();
    void wyswietl_zarezerwowane_miejsca();
    void dodaj_rezerwacje();
    void anuluj_rezerwacje();
    void sprawdz_miejsce();
};

// kalsa Kino

class Kino {

private:
    static const int ilosc_filmow = 5;
    int wybrany_film;
    Film wszystkie_filmy[ilosc_filmow];
    int ilosc_dodanych_filmow;

public:

    Kino();

    void dodaj_film(char t_tytul[]);
    void wybierz_film();
    void wyswietl_wszystkie_filmy();
    void wyswietl_wszystkie_miejsca();
    void wyswietl_wolne_miejsca();
    void wyswietl_zarezerwowane_miejsca();
    void dodaj_rezerwacje();
    void anuluj_rezerwacje();
    void sprawdz_miejsce();
};

// funkcja główna

int main();

Całość kodu:

#include <iostream>
#include <stdio.h>

using namespace std;

void wyswietl_menu_glowne() // funkcja bez argumentów
{
    cout << "System rezerwacji miejsc - Singlekino.pl" << endl << endl; // tworzymy menu
    cout << "Wybierz opcje:" << endl << endl;
    cout << "1 - Dodaj rezerwacje" << endl;
    cout << "2 - Usun rezerwacje" << endl;
    cout << "3 - Sprawdz miejsce" << endl;
    cout << "4 - Wyswietl wszystkie rezerwacje" << endl;
    cout << "5 - Wyswietl wolne miejsca" << endl;
    cout << "6 - Wyswietl zarezerwowane miejsca" << endl;
    cout << "7 - Zamknij system" << endl;
}

void czekaj_na_klawisz()
{
    cout << endl << "(Wcisnij dowolny przycisk, aby wyjsc)" << endl;
    getchar();
}

class Miejsce
{
    
public: // składniki klasy będą publiczbe
    char imie[20]; // składniki klasy
    char nazwisko[20];
    int numer;
    bool zarezerwowane;
    
    Miejsce()
    {
        strcpy(imie, "");
        strcpy(nazwisko, "");

        numer = 0;
        zarezerwowane = false;
    }
    
    Miejsce(char t_imie[], char t_nazwisko[], int t_numer, bool t_zarezerwowane)
    {
        strcpy(imie, t_imie);
        strcpy(nazwisko, t_nazwisko);
        
        numer = t_numer;
        zarezerwowane = t_zarezerwowane;
    }
    
    void rezerwuj()
    {
        if(zarezerwowane)
        {
            cout << "Miejsce jest juz zarezerwowane.";
        }
        else
        {
            cout << "Podaj imie: ";
            cin >> imie;
            
            cout << "Podaj nazwisko: ";
            cin >> nazwisko;
            
            zarezerwowane = true;
            
            cout << endl << "Miejsce " << numer << " zostalo zarezerwowane dla: " << imie << " " << nazwisko << ".";
        }
    }
    
    void anuluj_rezerwacje()
    {
        if(zarezerwowane)
        {
            strcpy(imie, "");
            strcpy(nazwisko, "");
            
            zarezerwowane = false;
            cout << "Rezerwacja anulowana." << endl;
        }
        else
        {
            cout << "Nie ma takiej rezerwacji." << endl;
        }
    }
    
    void wypisz() // funkcja wypisująca
    {
        if(zarezerwowane)
        {
            cout<< "Numer: " << numer << ", " << imie << " " << nazwisko << endl;
        }
        else
        {
            cout << "Numer: " << numer << " - miejsce wolne" << endl;
        }
    }
    
    bool jestZarezerwowane()
    {
        return zarezerwowane;
    }
}; // zamykamy nawias klamrowy i dajemy ŚREDNIK !

class Film
{
private:
    char tytul[100];
    static const int ilosc_miejsc = 30;
    int wybrane_miejsce;
    
    Miejsce wszystkie_miejsca[ilosc_miejsc];
    
public: // składniki klasy będą publiczbe
    Film() // konstruktor domyślny
    {
        strcpy(tytul, "");
        
        wybrane_miejsce = 0;
        int i = 0;
        
        for(i = i; i < ilosc_miejsc; i++)
        {
            wszystkie_miejsca[i] = Miejsce("","",i+1,false);
        }
    }
    
    Film(char t_tytul[])
    {
        strcpy(tytul, t_tytul);
        
        wybrane_miejsce = 0;
        int i = 0;
        
        for(i = i; i < ilosc_miejsc; i++)
        {
            wszystkie_miejsca[i] = Miejsce("","",i+1,false);
        }
    }
    
    void wypisz()
    {
        cout << endl << "tytul: " << tytul << endl;
    }
    
    void wybierz_miejsce()
    {
        cout << "Wybierz numer miejsca (lub 0 aby wyjsc):" << endl << endl;
        
        cin >> wybrane_miejsce;
        
        if(wybrane_miejsce < 0 || wybrane_miejsce > ilosc_miejsc)
        {
            if(wybrane_miejsce != 0) {
                
                wybrane_miejsce = 0;
                cout << "Nie ma takiego miejsca" << endl << endl;
            }
        }
    }
    
    void wyczysc_miejsce()
    {
        wybrane_miejsce = 0;
    }
    
    void wyswietl_wszystkie_miejsca()
    {
        int i = 0;
        for(i = i; i < ilosc_miejsc; i++)
        {
            wszystkie_miejsca[i].wypisz();
        }
        
        cout << endl << "Wszystkich miejsc: " << ilosc_miejsc << endl;
    }
    
    void wyswietl_wolne_miejsca()
    {
        int i = 0;
        int wolne = 0;
        
        for(i = i; i < ilosc_miejsc; i++)
        {
            if(!wszystkie_miejsca[i].jestZarezerwowane())
            {
                wszystkie_miejsca[i].wypisz();
                wolne++;
            }
        }
        
        cout << endl << "Wolnych miejsc: " << wolne << endl;
    }
    
    void wyswietl_zarezerwowane_miejsca()
    {
        int i = 0;
        int zarezerwowane = 0;

        for(i = i; i < ilosc_miejsc; i++)
        {
            if(wszystkie_miejsca[i].jestZarezerwowane())
            {
                wszystkie_miejsca[i].wypisz();
                zarezerwowane++;
            }
        }
        
        cout << endl << "Zarezerwowanych miejsc: " << zarezerwowane << endl;
    }
    
    void dodaj_rezerwacje()
    {
        cout << "Dodaj rezerwacje:" << endl << endl << endl;
        
        wyswietl_wolne_miejsca();
        wybierz_miejsce();
        
        if(wybrane_miejsce != 0)
        {
            wszystkie_miejsca[wybrane_miejsce-1].rezerwuj();
        }
        
        czekaj_na_klawisz();
    }
    
    void anuluj_rezerwacje()
    {
        cout << "Anuluj rezerwacje:" << endl << endl << endl;
        wyswietl_zarezerwowane_miejsca();
        wybierz_miejsce();
        
        if(wybrane_miejsce != 0)
        {
            wszystkie_miejsca[wybrane_miejsce-1].anuluj_rezerwacje();
        }
        
        czekaj_na_klawisz();
    }
    
    void sprawdz_miejsce()
    {
        cout << "Sprawdz rezerwacje:" << endl << endl << endl;
        wybierz_miejsce();
        
        if(wybrane_miejsce != 0)
        {
            wszystkie_miejsca[wybrane_miejsce-1].wypisz();
            wyczysc_miejsce();
        }
        
        czekaj_na_klawisz();
    }
}; // zamykamy nawias klamrowy i dajemy ŚREDNIK !

class Kino
{
private:
    
    static const int ilosc_filmow = 5;
    int wybrany_film;

    Film wszystkie_filmy[ilosc_filmow];
    int ilosc_dodanych_filmow;
    
public:
    Kino()
    {
        wybrany_film = 0;
        ilosc_dodanych_filmow = 0;
    }
    
    void dodaj_film(char t_tytul[])
    {
        if(ilosc_dodanych_filmow<ilosc_filmow)
        {
            wszystkie_filmy[ilosc_dodanych_filmow] = Film(t_tytul);
            ilosc_dodanych_filmow++;
            
            cout << "Dodano film " << t_tytul << endl;
        }
        else
        {
            cout << "Maksymalna liczba filmow dodana" << endl;
        }
    }
    
    void wybierz_film()
    {
        cout << "Wybierz numer filmu (lub 0 aby wyjsc):" << endl << endl;
        
        cin >> wybrany_film;
        
        if(wybrany_film < 0 || wybrany_film > ilosc_filmow)
        {
            if(wybrany_film != 0) {
                wybrany_film = 0;
                cout << "Nie ma takiego filmu" << endl << endl;
            }
        }
    }
    
    void wyswietl_wszystkie_filmy()
    {
        int i = 0;
        
        for(i = i; i < ilosc_filmow; i++)
        {
            cout << "Film nr. " << i+1 << ": ";
            wszystkie_filmy[i].wypisz();
            cout << endl;
        }
        
        cout << endl << "Wszystkich filmow: " << ilosc_filmow << endl;
    }
    
    void wyswietl_wszystkie_miejsca()
    {
        int i = 0;
        
        for(i = i; i < ilosc_filmow; i++)
        {
            wszystkie_filmy[i].wypisz();
            wszystkie_filmy[i].wyswietl_wszystkie_miejsca();
        }
    }
    
    void wyswietl_wolne_miejsca()
    {
        int i = 0;
    
        for(i = i; i < ilosc_filmow; i++)
        {
            wszystkie_filmy[i].wypisz();
            wszystkie_filmy[i].wyswietl_wolne_miejsca();
        }
    }
    
    void wyswietl_zarezerwowane_miejsca()
    {
        int i = 0;
        
        for(i = i; i < ilosc_filmow; i++)
        {
            wszystkie_filmy[i].wypisz();
            wszystkie_filmy[i].wyswietl_zarezerwowane_miejsca();
        }
    }
    
    void dodaj_rezerwacje()
    {
        cout << "Dodaj rezerwacje:" << endl << endl << endl;
        
        wyswietl_wszystkie_filmy();
        wybierz_film();
        
        if(wybrany_film != 0) {
            wszystkie_filmy[wybrany_film-1].dodaj_rezerwacje();
        }
    }
    
    void anuluj_rezerwacje()
    {
        cout << "Anuluj rezerwacje:" << endl << endl << endl;
        
        wyswietl_wszystkie_filmy();
        wybierz_film();
        
        if(wybrany_film != 0)
        {
            wszystkie_filmy[wybrany_film-1].anuluj_rezerwacje();
        }
    }
    
    void sprawdz_miejsce()
    {
        cout << "Sprawdz rezerwacje:" << endl << endl << endl;
        
        wyswietl_wszystkie_filmy();
        wybierz_film();
        
        if(wybrany_film != 0)
        {
            wszystkie_filmy[wybrany_film-1].sprawdz_miejsce();
        }
    }
};

int main()
{
    
    Kino kino;
    char znak; // tu zapiszemy wciśnięty klawisz
    
    // dodajmy kilka filmów do bazy
    kino.dodaj_film("film1");
    kino.dodaj_film("film2");
    kino.dodaj_film("film3");
    kino.dodaj_film("film4");
    kino.dodaj_film("film5");
    
    //kino.wyswietl_wszystkie_miejsca();
    
    wyswietl_menu_glowne();
    
    znak = getchar(); // program pobiera znak
    
    while(znak != '7')
    {
        
        system("cls");
        
        switch(znak)
        {
            case '1':
                kino.dodaj_rezerwacje();
                break;
            case '2':
                kino.anuluj_rezerwacje();
                break;
            case '3':
                kino.sprawdz_miejsce();
                break;
            case '4':
                kino.wyswietl_wszystkie_miejsca();
                czekaj_na_klawisz();
                break;
            case '5':
                kino.wyswietl_wolne_miejsca();
                czekaj_na_klawisz();
                break;
            case '6':
                kino.wyswietl_zarezerwowane_miejsca();
                czekaj_na_klawisz();
                break;
        }
        
        system("cls");
        wyswietl_menu_glowne();
        znak = getchar();// jeszcze raz dokonujemy wyboru
        
    } // tutaj pętla zawraca i jeszcze raz sprawdza warunek
    
    return 0;
}

Co w przypadku, gdy właściciel kina zażyczy sobie możliwości rezerwacji kilku filmów w jednej sali, zależnie od daty i godziny? Zaden problem. Wystarczy rozbudować klasę Kino. Jej zadaniem byłoby nie tylko tworzenie kolejnych filmów o okreslonym tytule i czasie emisji (data, godzina) ale również pilnowanie aby seanse nie kolidowały ze sobą. Jak widzimy, modyfikując istnejącą już klasę otrzymujemy bardzo realny system.

Dodając mozliwość odczytu i zapisu danych do bazy oraz ubierając całość w przystępnie wyglądający interfejs użytkownika mamy progam z prawdziwego zdarzenia :-)

Adam Sawicki – programista aplikacji internetowych, obserwator nowych trendów w świecie startup’ów i technologii webowych. Autor kursu C++ dla początkujących www.cpp.jcom.pl.

Strony: 1 2

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , , , , , ,

Dodaj komentarz

Komentarze (8)

  • Zażenowany pisze:

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

    • lukas124 pisze:

      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 ;)

  • Piotr Piotrowski pisze:

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

    • lukas124 pisze:

      Adoptować w jakim sensie?

      • Piotr Piotrowski pisze:

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

      • lukas124 pisze:

        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.

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest