Extras din proiect
Definirea cerințelor funcționale și nefuncționale
Cerințe funcționale:
- Pentru a rezerva un bilet de avion, clientul trebuie să completeze un formular privind detaliile cursei, tipul calătoriei (doar dus, dus-întors), data de plecare sau data retur (în cazul în care a optat pentru dus-întors) și numărul de persoane însoțitoare, care sunt împărțite în mai multe categorii de vârstă (bebeluși, copii, adulți, seniori).
- Clientul poate să-și aleagă aeroportul de plecare astfel: mai întâi iși alege țara, orașul și aeroportul propriu zis.
- Destinația se completează după același model, specificând țara unde sosește avionul, orașul și aeroportul.
- Există o opțiune de unde alege data de plecare, iar dacă a optat pentru o calătorie dus-întors se alege și data retur.
- Categoriile de vârstă se evaluează după ani, astfel: adulți între 12 și 55 ani, copii între 2 și 12 ani, bebeluși sub 2 ani, seniori peste 55 de ani.
- Pentru o singură rezervare a locurilor din avion, există un număr maxim de bilete pentru fiecare categorie de vârstă: adulți (5 locuri), seniori (5 locuri), bebeluși (4 locuri) și copii (4 locuri). Dacă numărul persoanelor din grup va depăși numărul maxim stabilit se va face o nouă rezervare cu restul persoanelor. De exemplu, dacă sunt 8 adulți și 2 copii, se poate face o rezervare pentru 4 locuri adulți și 2 copii și încă o rezervare cu 4 locuri adulți, urmând ca locurile să fie stabilite când se vor ridica de la agenție.
- După completarea formularului, vor fi afișate toate tipurile de zbor în conformitate cu acesta, având următoarele caracteristici: ora de plecare, ora de sosire, numărul de escale, durata escalei, durata de zbor, locurile rămase disponibile pentru fiecare zbor și prețul călătoriei.
- Mai departe, vor fi afișate două opțiuni disponibile pentru client: dacă vrea să se cazeze într-un hotel din orașul de destinație sau nu. În primul caz, are o listă cu hotelurile disponibile, data de cazare și decazare pentru fiecare hotel, numărul de camere, locația, prețul, stelele hotelului, tipul de oferte. În cel de-al doilea caz, se trece la următorul pas pentru rezervarea biletelor de avion.
- Înainte de finalizarea plății, se vor completa numele și prenumele fiecărui pasager, data de naștere și ca opțiune suplimentară (pentru cei cu cazare) camera de hotel.
- Finalizarea comenzii se poate face cu plată online sau cu plată offline. Fiecare plată se completează cu următoarele detalii: nume client, prenume client, e-mail, telefon, adresă, persoană fizică / juridică și alte opțiuni.
Cerințe nefuncționale:
- Defectarea unui sistem de rezervare aerian.
- Sistemul poate fi accesat ușor de către utilizatori prin intermediul internetului.
- Sistemul trebuie să permită accesul a mai multor utilizatori în același timp.
Modelarea UML
Diagrama cazurilor de utilizare
A se vedea Anexa 1.
Diagrama de activități
A se vedea Anexa 2.
Diagrama de clase
A se vedea Anexa 3.
Definirea testelor unitare
În urma diagramei de clase, am implementat următoarele clase în mediul de lucru Eclipse:
1. Client.java, pachetul com.rezervare
public class Client {
//Membrii clasei
private String nume;
private String prenume;
private long CNP;
private String adresa;
private String email;
public Calatorie calatorie;
public LocatiePlecare locatiePlecare;
public LocatieAterizare locatieAterizare;
public ArrayList<Bilet> bilete;
public TipZbor tipZbor;
public Cazare cazare;
//Constructor principal
public Client(String _nume, String _prenume, long _CNP, String _adresa, String _email){
this.nume = _nume;
this.prenume = _prenume;
this.CNP = _CNP;
this.adresa = _adresa;
this.email = _email;
}
Ca membrii privați avem patru variabile de tip string (nume, prenume, adresa și email) și o variabilă de tipul long (CNP).
Ca membrii public avem un obiect de tip Călătorie, unul de tip LocațiePlecare, unul LocațieAterizare. Pe lânga acestea, avem o colecție de tip ArrayList (bilete), un obiect TipZbor și Cazare.
Metodele definit in diagrama de clase au fost implementate cu succes în Eclipse, le vom lua pe rând explicându-le pe fiecare în parte.
public void alegeTipCalatorie(boolean calatorie, Calendar _dataPlecare, Calendar _dataRetur){
Random randomId = new Random();
int _id = randomId.nextInt();
if(calatorie){
this.calatorie = new CalatorieDus(_id, _dataPlecare);
}else {
this.calatorie = new CalatorieDusIntors(_id, _dataPlecare, _dataRetur);
}
}
Se observă argumentele, călătorie, _dataPlecare și _dataRetur. Argumentul calatorie este de tipul boolean, deoarece din clasa de bază Calatorie se extind două clase: CalatorieDus și CalatorieDusIntors. Am ales true pentru CalatorieDus și false pentru CalatorieDusIntors.
Inițializăm un obiect de tip Random și obținem un număr aleatoriu pe care îl vom pune ca ID-ul călătoriei respective. În funcție de tipul călătoriei, se apelează constructorul principal.
Funcția care testează această metodă am definit-o mai jos:
@Test
public void testAlegeTipCalatorie() {
Calendar _calendar = Calendar.getInstance();
Calatorie _calatorie = new CalatorieDusIntors(22, _calendar, _calendar);
assertEquals(22, _calatorie.getIdCalatorie());
}
Următoarele două metode se referă la alegerea clientului în privința destinației și plecării. El alege de unde vrea să plece (din ce țară, oraș, aeroport) și unde vrea să ajungă (în ce țară, oraș, aeroport).
public void alegeLocatiePlecare(String _taraPlecare, String _orasPlecare, String _aeroportPlecare){
this.locatiePlecare = new LocatiePlecare(_taraPlecare, _orasPlecare, _aeroportPlecare);
}
public void alegeLocatieAterizare(String _taraAterizare, String _orasAterizare, String _aeroportAterizare){
this.locatieAterizare = new LocatieAterizare(_taraAterizare, _orasAterizare, _aeroportAterizare);
}
Membrii pe care îi transmitem funcției devin și membrii pentru apelarea constructorilor principali ai respectivelor clase. Așadar, inițializăm un obiect LocațiePlecare cu preferințele noastre; același lucru și pentru LocațieAterizare.
Preview document
Conținut arhivă zip
- Documentatie
- anexa_1.docx
- anexa_2.docx
- anex_3.docx
- tema_1_isp.docx
- tema_2_isp.docx
- ModelareUML
- activity_diagram.png
- Class Diagram0.asta
- class_diagram.png
- usecase_diagram.png
- Program
- RezervareBilet
- RezervareBilet
- RezervareBilet
- bin
- com
- rezervare
- calatorie
- Bilet.class
- Calatorie.class
- CalatorieDus.class
- CalatorieDusIntors.class
- Escala.class
- TipZbor.class
- cazare
- Cazare.class
- Hotel.class
- junit
- BiletTest.class
- CalatorieDusIntorsTest.class
- CalatorieDusTest.class
- CalatorieTest.class
- CazareTest.class
- ClientTest.class
- EscalaTest.class
- HotelTest.class
- LocatieAterizareTest.class
- LocatiePlecareTest.class
- TipZborTest.class
- locatii
- LocatieAterizare.class
- LocatiePlecare.class
- Client.class
- Main.class
- src
- com
- rezervare
- calatorie
- Bilet.java
- Calatorie.java
- CalatorieDus.java
- CalatorieDusIntors.java
- Escala.java
- TipZbor.java
- cazare
- Cazare.java
- Hotel.java
- junit
- BiletTest.java
- CalatorieDusIntorsTest.java
- CalatorieDusTest.java
- CalatorieTest.java
- CazareTest.java
- ClientTest.java
- EscalaTest.java
- HotelTest.java
- LocatieAterizareTest.java
- LocatiePlecareTest.java
- TipZborTest.java
- locatii
- LocatieAterizare.java
- LocatiePlecare.java
- Client.java
- Main.java
- .classpath
- .project