Gestiunea activitatii agentiei de turism DREAM TRAVEL Student: Radu Elena Georgiana
Bucuresti 2013 2
Prezentarea bazei de date
Agentia de turism DreamTravel isi propune crearea unei baze de date privind gestionarea activitatii sale. Sistemul informatic va trebui sa realizeze evidenta clientilor, a contractelor cu clientii, evidenta serviciilor oferite de societate si a angajatilor. Clientii sunt identificati prin CNP client, nume, localitate si numar de telefon. Fiecare client poate alege ca destinatie de vacanta unul dintre serviciile agentiei de turism: oferta interna, oferta in strainatate sau oferta speciala. Fiecare oferta include o destinatie, din Romnia sau din strainatate, in functie de tipul serviciului. Fiecare oferta are un tarif prestabilit. Destinatia reprezinta orasul vizitat si tara. Clientii beneficiaza si de o reducere in functie de categoria din care fac parte: studentii beneficiaza de o reducere de 20%, persoanele angajate beneficiaza de 10% reducere, iar pensionarii de 30%. Contractele cu clientii cuprind numarul contractului, data la care a fost intocmit contractul si statusul (contract activ sau contract finalizat). Se pot incheia mai multe contracte cu acelasi client. Angajatii sunt identificati prin CNP, nume, adresa, numar de telefon si data angajarii. Acestia se ocupa de prezentarea ofertelor, inregistrarea clintilor noi, gestionarea portofoliului de clienti existenti si se asigura ca platile au fost facute. Baza de date cuprinde si un centralizator al platilor. Astfel, fiecare client trebuie sa plateasca agentiei valoarea totala a contractului, ce este formata din tariful prestabilit in oferta minus reducere plus penalitati (in caz de intrziere). Penalitatile se stabilesc in functie de numarul de zile scurs de la data scadentei platii pana la data curenta.
3
Diagrama cazurilor de utilizare
Pentru aceasta diagrama am folosit urmatoarele interactiuni intre actorii client si angajat:
1. Angajatul cauta in baza de date pentru a verifica daca un client este nou sau a mai avut alte contracte. Daca acesta nu este inregistrat, atunci se va trece la inregistrarea sa. 2. Dupa ce a fost inregistrat acesta va analiza ofertele prezentate de angajat. Clientul poate refuza sau accepta o oferta. Daca accepta oferta, atunci va intocmi un nou contract. 3. In cazul in care clientul refuza ofertele, se va renunta la adaugarea clientului in sistem. 4. Angajatului i se repartizeaza contracte pe care sa le gestioneze. 5. Cand intervine scadenta platii contractului, angajatul verifica daca banii au fost virati. In caz contrar, acesta contacteaza clientul. 6. Angajatul poate adauga oferte in gestiune.
4
<<extend>>{Client inexistent}
<<include>>
<<extend>>
<<extend>>
<<include>>
Client <<include>> <<include>>
<<include>>
<<include>>
Solicita oferta Analizeaz a oferta Refuza oferta Accept a oferta Semneaza contract Primest e factura Plateste factura Plateste penalita ti Inregistreaza client nou Prezinta oferta
Supervizeaza contractul Emite factura Verifica daca factura a fost platita Penalizeaza pentru termen depasit Angajat <<include>
<<include>
<<include>
5
Diagrama claselor
1. Un contract client apartine unui singur client; 2. Un client poate avea mai multe contracte; 3. Un serviciu poate aparea pe mai multe contracte; 4. Un contract client poate avea un singur serviciu; 5. Un client poate apartine unei singure categorii; 6. O categorie poate fi atribuita mai multor clienti; 7. Un serviciu apartine mai multor oferte; 8. O oferta poate avea doar un serviciu; 9. O oferta poate avea o singura destinatie; 10. O destinatie poate aparea pe mai multe oferte; 11. O plata se face de catre un client; 12. O penalizare i se da unui client; 13. O plata se face pentru o penalizare; 14. Un angajat gestioneaza mai multe contracte; 15. Un contract este gestionat de un angajat.
Restrictii:
1. CategorieClient=Student or CategorieClient=Angajat or CategorieClient=Pensionar 2. TipServiciu=Oferta interna or TipServiciu=Oferta strainatate or TipServiciu=Oferta speciala 3. DataIncepereSejur<DataSfrsitSejur 4. Reducere=0.1 or Reducere=0.2 or Reducere=0.3 5. DataContract=Today() 6. DataScadenta=Day(DataContract)+14
In prima parte se va proceda la autentificarea clientului. Angajatul verifica daca clientul a mai avut alte contracte cu agentia prin introducerea datelor acestuia. Daca respectivele informatii nu exista in baza de date, se va trece la inregistrarea clientului. Se realizeaza salvarea datelor intoduse de catre utilizator in cadrul obiectului nou creat, iar apoi acesta este adaugat in cadrul colectiei clienti. In cazul in care clientul deja exista, se anuleaza operatia, iar variabilele sunt resetate.
Diagrama 2 Adauga contract nou
Angajatul prezinta ofertele clientului. In momentul in care clientul accepta oferta si exista locuri disponibile, angajatul genereaza un contract nou. Daca locurile pentru acea ofera sunt indisponibile, se va afisa un mesaj cu acest text, iar angajatul va prezenta o alta oferta clientului. 8
Introducere numar contract pContract=NewContract pContract=Salveaza(CNP, NrContract, DataContract, Status) Oferta.LocuriDisponibile>0 colContract.Adauga(pContract) DA NU MesajLocuri Indisponibile 10
Diagramele de secvente
Diagrama 1 Formular pentru adaugare client nou
Aceasta diagrama descrie adaugarea unui client nou de catre un angajat. Angajatul verifica daca exista clientul respectiv in baza de date. In cazul in care acesta nu se regaseste, angajatul deschide un formular nou de adaugare clienti. In formular se vor introduce datele clientului.
Diagrama 2 Contract nou
Aceasta diagrama descrie adaugarea unui contract. Dupa ce se adauga noul client se vor introduce datele pentru noul contract, vor fi confirmate, dupa care aceste date vor fi incarcate in colectia de contracte. La sfarsit, angajatul va iesi din formularul de adaugare contracte.
11
1.Introducere date 1.1:2: pClient=NewClient 1.2: pClient.Salveaza(CNP, Nume, Localitate, NumarTelefon)
Angajat :FrmClient Client ColClient loop [<=ColClient Count alt [ColClient.Item(i).CNP=pClient.CNP] 1.3: Exista=TRUE 1.4: Exit FOR alt Exista=TRUE 1.5: ColClient.Adauga(pClient) 2: Termina 12
CLIENTI Public Class Clienti Private NumeClient As String Private Localitate As String Private NrTelefonClient As String
Public Property NumeClient() as String Get NumeClient=pNumeClient End Get Set(ByVal value as string) If value is nothing then MsgBox (Nume eronat) Else pNumeClient=value End if End Set End Property Public Property Localitate() as string Get Localitate =p Localitate End Get Set(ByVal value as string) p Localitate =value End Set End Property Public Property NrTelefonClient() as string Get NrTelefonClient =p NrTelefonClient End Get Set(ByVal value as string) p NrTelefonClient =value End Set End Property
Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Clas
SERVICII Public Class Servicii Private TipServiciu As String
Public Property TipServiciu() as String Get TipServiciu =p TipServiciu End Get Set(ByVal value as string) 15
p TipServiciu=value End Set End Property Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
DESTINATII Public Class Destinatii Private Oras As String Private Tara As String
Public Property Oras() as String Get Oras =pOras End Get Set(ByVal value as string) p Oras=value End Set End Property Public Property Tara() as String Get Tara =p Tara End Get Set(ByVal value as string) p Tara =value End Set End Property
Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
OFERTE Public Class Oferte Private DataIncepereSejur As String Private DataSfarsitSejur As String Private NrLocuri as Integer Private Tarif as Currency
Public Property DataIncepereSejur() as Date Get DataIncepereSejur =pDataIncepereSejur 16
End Get Set(ByVal value as date) If DataIncepereSejur<Today then MsgBox (DataIncepereSejur trebuie sa fie posterioara datei curente) Else pDataIncepereSejur=value End If End Set End Property Public Property DataSfarsitSejur () as Date Get DataSfarsitSejur =p DataSfarsitSejur End Get Set(ByVal value as date) If DataSfarsitSejur <DataIncepereSejur then MsgBox (Data sfarsitului de sejur trebuie sa fie posterioara datei inceperii sejurului) Else p DataSfarsitSejur=value End If End Set End Property Public Property NrLocuri() as String Get NrLocuri =p NrLocuri End Get Set(ByVal value as string) NrLocuri =value End Set End Property Public Property Tarif() as Currency Get Tarif =p Tarif End Get Set(ByVal value as string) If Tarif <=0 then MsgBox (Tariful trebuie sa aiba o valoare pozitiva) Else p Tarif =value End Set End Property
Public Function Valabilitate(DataIncepereSejur date, DataSfarsitSejur date) as Double Valabilitate= DataIncepereSejur - DataSfarsitSejur End function Public Function LocuriDisponibile() as Double End function Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
17
CATEGORIE CLIENTI Public Class Categorie Clienti Private Categorie As String Private Reducere As Single
Public Property Categorie() as String Get Categorie=p Categorie End Get Set(ByVal value as string) If pCategorie=Pensionar or pCategorie=Angajat or pCategorie=Student then pCategorie=value Else MsgBox (Categorie eronata selectati din cele afisate) End If End Set End Property Public Property Reducere() as Single Get Reducere =p Reducere End Get Set(ByVal value as string) If pReducere =0.1 or pReducere =0.2 or pReducere =0.3 then pReducere =value Else MsgBox (Reducere eronata selectati din cele afisate) End If End Set End Property
Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
CONTRACTE Public Class Contracte Private DataContract As Date Private Status As String
Public Property DataContract() as Date Get DataContract =p DataContract End Get Set(ByVal value as date) If DataContract <Today() then MsgBox (Data contractului trebuie sa fie posterioara datei curente) Else p DataContract =value End If 18
End Set End Property Public Property Status() as String Get Status =p Status End Get Set(ByVal value as string) Status =value End Set End Property
Public Function NrContracte() as Integer End Function Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
ANGAJATI Public Class Angajati Private NumeAngajat As String Private Adresa As String Private NrTelefonAngajat As String Private DataAngajare As Date
Public Property NumeAngajat() as String Get NumeAngajat=pNumeAngajat End Get Set(ByVal value as string) If value is nothing then MsgBox (Nume eronat) Else pNumeAngajat=value End if End Set End Property Public Property Adresa () as string Get Adresa=pAdresa End Get Set(ByVal value as string) pAdresa=value End Set End Property
Public Property NrTelefonAngajat() as string Get NrTelefonAngajat =p NrTelefonAngajat 19
End Get Set(ByVal value as string) p NrTelefonAngajat =value End Set End Property Public Property DataAngajare() as Date Get DataAngajare =p DataAngajare End Get Set(ByVal value as date) If DataAngajare <Today then MsgBox (Data angajarii trebuie sa fie posterioara datei curente) Else p DataAngajare =value End Set End Property
Public Function Vechime(DataAngajare date) as Integer Vechime=Today()-DataAngajare End Function Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
PLATI Public Class Plati Private SumaPlatita As Integer
Public Property SumaPlatita () as Integer Get SumaPlatita =p SumaPlatita End Get Set(ByVal value as integer) pSumaPlatita =value End Set End Property
Public Function DataScadenta(DataContract Date) as Date DataScadenta= Day(DataContract)+14 End Function Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class
20
PENALIZARE Private SumaPenalizare As Integer
Public Property SumaPenalizare () as Integer Get SumaPenalizare =p SumaPenalizare End Get Set(ByVal value as integer) p SumaPenalizare =value End Set End Property
Public Function NrZileIntarziere(DataContract date) as integer NrZileIntarziere =Today()-DataContract End Function Public Function TotalPenalizare(NrZileIntarziere integer, SumaPenalizare currency) as currency TotalPenalizare= NrZileIntarziere* SumaPenalizare End Function Public Function TotalPlati(Tarif as currency, Reducere as single, TotalPenalizare as currency) as currency TotalPlati= Tarif - Reducere + TotalPenalizare End Function Public sub Adauga() End sub Public sub Salveaza() End sub Public sub Sterge() End sub End Class