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
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 ;)
Ciekawe, czy ktoś zrozumie na czym polega programowanie zorientowane obiektowo czytając Twojego bloga… ;)
Z takim nastawieniem jak twoje, na pewno nie ;)
Gdybym na prawdę potrzebował bardzo prosty program do sprzedaży miejsc numerowanych to dało by się ten adoptować ??
Adoptować w jakim sensie?
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.