Exercițiu
Implementați un sistem simplificat de vânzare a biletelor pentru un cinema. Sistemul gestionează mai multe tipuri de bilete, fiecare cu propriul mod de calcul al prețului, și o casă de bilete care centralizează vânzările.
Clasa Client
ClientDefiniți clasa Client cu următoarele proprietăți:
string Numestring Prenumestring Email– conține caracterele@și.string Telefon– exact 10 caractere
Interfețe
Definiți două interfețe:
IPretCalculabil cu metodele:
double CalculeazaPretFinal()— returnează prețul pe care clientul îl plătește efectivdouble GetReducere()— returnează suma scăzută din prețul de bază (nu procentul, ci valoarea în RON)
IValidabil cu metoda:
bool EsteValid()— returnează true dacă biletul este în perioada de valabilitate
Clasa Bilet
BiletDefiniți clasa Bilet care implementează ambele interfețe de mai sus.
Clasa conține următoarele date:
string NumeFilmint NumarSalaTipFilm TipFilm– enumerație care conține valorileComedie,Acțiune,Dramă,IstoricDateTime ExpiraLaClient Clientint NumarLoc– numărul locului, între 1 și 200; dacă valoarea transmisă este în afara acestui interval, se aruncăArgumentExceptiondouble PretBaza– prețul fără reduceri, strict pozitiv; dacă valoarea transmisă este negativă sau zero, se aruncăArgumentException
Constructorul primește toate câmpurile de mai sus ca parametri.
Comportament așteptat:
GetReducere()returnează0- biletul standard nu are reducereCalculeazaPretFinal()returneazăPretBaza - GetReducere()EsteValid()returnează true doar dacă ExpiraLa este în viitor și NumarLoc este valid
Clase derivate
BiletStudent - derivată din Bilet
Date suplimentare:
string NumarLegitimatiestring Facultate
Comportament așteptat:
Reducerea este de 20% din prețul de bază
EsteValid()returneazăfalseși dacă numărul legitimației este gol saunull
BiletSenior - derivată din Bilet
Date suplimentare:
int VarstaClient
Comportament așteptat:
Dacă vârsta transmisă în constructor este sub 60 de ani, se aruncă
ArgumentExceptionReducerea este de 30% din prețul de bază
BiletVIP - derivată din Bilet
Date suplimentare:
bool IncludePopcornbool IncludeBautura
Comportament așteptat:
Biletul VIP nu are reducere
Popcorn-ul costă 15 RON, băutura costă 10 RON
Definiți metoda
GetExtras()care returnează suma serviciilor suplimentare aleseCalculeazaPretFinal()returneazăPretBaza + GetExtras()
Clasa CasaBilete
CasaBileteDefiniți clasa CasaBilete care gestionează o colecție privată de bilete vândute.
Metode necesare:
AdaugaBilet(Bilet b)— adaugă biletul în colecțieGetIncasariTotale()— returnează suma prețurilor finale ale tuturor biletelor din colecțieGetReduceriAcordate()— returnează suma totală a reducerilor acordateGetNumarBiletePerTip<T>()— returnează numărul de bilete de un anumit tipGetBiletulCelMaiScump()— returnează biletul cu cel mai mare preț final
Last updated