Sunteți pe pagina 1din 17

Academia de Studii Economice

Master Aprofundat de Contabilitate, Audit si Informatica de gestiune

Gestiunea imprumuturilor intr-o


biblioteca utilizand limbajul UML

Andreescu Ana Maria

Mai 2011
I. Structurarea cerintelor functionale ale aplicatiei

Sa consideram un sistem de gestiune electronica a cartilor dintr-o biblioteca. Sistemul urmeaza sa


fie utilizat de doua categorii de utilizatori: bibliotecarii si abonatii.
* Bibliotecarii acceseaza sistemul pentru a : - inregistra abonati si carti noi sau pentru a
elimina carti din evidenta
- inregistra imprumuturile si returnarile de carte
- efectua prelungirea imprumuturilor cititorilor

* Abonatii pot cere informatii despre diferite carti si pot cere imprumutarea unei carti, pot cere
prelungirea termenului de returnare cu 5 zile.
Sistemul trebuie sa pastreze evidenta abonatilor, a cartilor imprumutate de fiecare abonat si alte
informatii.
Un abonat poate sa imprumute maxim 3 carti,perioada de imprumut este de 10 zile; daca un
abonat nu restituie cartea in acest interval si nu solicita prelungirea imprumutului, se percep
penalitati de 1leu/zi pt zilele peste termen.
II. Prezentarea arhitecturii aplicaţiei

 Construirea diagramei cazurilor de utilizare. Se vor utiliza relaţii de incluziune şi extensie


între cazurile de utilizare.

Pentru procesul ales, principalele cazuri de utilizare sunt: gestiune cititori, gestiune
imprumuturi, gestiune penalizari.
În Fig.1.1. este descrisă diagrama cazurilor de utilizare, care cuprinde principalele cazuri de
utilizare enumerate mai sus şi legă tura acestora cu actorii.
În Fig.1.2. este evidenţiată diagrama cazurilor de utilizare care conţine relaţiile de
incluziune şi extensie între cazurile de utilizare.

Fig.1.1. Diagrama cazurilor de utilizare generala

Gestiune Cititori

Gestiune
Imprumuturi

Cititor Bibliotecar

Gestiune penalizari
Fig.1.2. Diagrama cazurilor de utilizare detaliata

«extends»
Cerere inscriere Adauga Cititor

{exista Cititor= Fals}

Primeste cerere
«uses»
imprumut
Cerere imprumut

Cititor «extends»
{Nr.Carti<3 AND Penalizari=0}

Ridicare carte Bibliotecar


«uses»
Verifica cont
«extends» cititor
Adauga imprumut

«extends»

«extends»
{DataCurenta<DataReturnare}

Efectueaza
prelungire

«uses»
Solicita prelungire Primeste cerere
prelungire
 Construirea diagramei de clase. Obligatoriu, ea va contine relatii de derivare (mostenire)
intre clase, toate cele trei tipuri de clasa (entitati, servicii (control) si interfată utilizator), clase
de asociere.
Pentru a descrie aspectele structurale ale procesului de management al bibliotecii, am
realizat diagrama claselor ce prezinta in detaliu fiecare clasa (atributele si operatiile
specifice fiecarei clase si multiplicitatea dintre clase).

Fig.2. Diagrama claselor

CARTE
IMPRUMUT
-CotaCarte : String
-NrFisaImp : String
-Titlu : String
CITITOR -DataImp : Date
-Autori : String
-DataRestituire : Date contine
-NrLegitimatie : String -Editura : String
-NumeCititor : String -DataPrelungire : Date 1 1..* -AnAparitie : Date
-PrenumeCititor : String +Adauga() -ISBN : String
-CNP : String 0..*
+Sterge() -NrExemplare : Integer
-Adresa : String +AfiseazaCarte() : Object
+AdaugaCarte()
-Telefon : Long
1 0..*
+Adauga()
include

+Sterge()
+Modifica()
+AfisareImprumuturi() : String
ImprumutPenalizat
1..1 -NrExemIntarziate : Integer Se refera la
* -NrZileIntarziere : Integer
achita

+ValoarePenalizare()
1..* *
0..*

PENALIZARE
-NumarPenalizare : Integer CarteImprumutata 1..*
-DataPlPenalizare : Date -NrExemplareImp : Integer
-StarePenAchitata : Boolean 1..* +NrExemplareDisponibile() : Integer
-StarePenNeachitata : Boolean
+AfiseazaStarePen() : Boolean
+AdaugaPenalizare() : Object
+Salveaza()
+Sterge()
+TotalPenalizare() : Double
+AfisCititor() : String
+TotalPlatit() : Double
 Construirea diagramelor de activitati pentru doua operatiuni ale unor clase.
Am realizat diagrama de activitati pentru operatiunea TotalPenalizare din clasa Penalizare
pentru a calcula totalul penalizarilor pe care le are un cititor de platit.

Fig.3. Diagrama de activitati pentru operatia TotalPenalizare

pImprumutPenalizat:ImprumutPenalizat

Declara variabila

[FOR EACH ImprumutPenalizat] TRUE

TotalPenalizare=TotalPenalizare+pImprumutPenalizat.ValoarePenalizare

FALSE
Am realizat diagrama de activitati pentru operatiunea AfiseazaStarePen din clasa
Penalizare pentru a evidentia daca o penalizare aplicata unui cititor din diferite motive a
fost achitata sau nu de acesta.

Fig.4. Diagrama de activitati pentru operatiunea AfiseazaStarePen

Penalizare.DataPlPenalizare<>Null Penalizare.DataPlPenalizare=Null

Return StarePenAchitata Return StarePenNeachitata


 Construirea diagramelor de secvente. Diagramele de secvente sunt diagrame de interactiune
ce evidentiaza ordinea transmiterii mesajelor si la realizarea acestora se ia in considerare
factorul timp.
Am realizat diagrama de secvente pentru operatiunea de adaugare a unui nou cititor din cadrul
clasei Cititor.

Fig.5. Diagrama de secvente pentru operatiunea de AdaugareCititor

SD- Adauga Cititor

+ pCititor: Cititor

: User :FrmCititor :ColCititori

1: IntroducereDate()

2: ConfirmareDate() 3: pCititor= New Cititor


:Cititor
4: pCititor.IncarcaDate
Alt
[Exista(pCititor)=False]
5: Adauga(pCititor)

[Else]
6: pCititor=Nothing

7: Close()
Am realizat diagrama de secvente pentru operatiunea TotalPenalizare- ce calculeaza toate
penalizarile pe care le are un cititor- din cadrul clasei Penalizare.

Fig.6. Diagrama de secvente pentru TotalPenalizare

+pImprumutPenalizat: ImprumutPenalizat

Penalizare : ImprumutPenalizat

[FOR EACH ImprumutPenalizat]


Loop TotalPenalizare=TotalPenalizare+pImprumutPenalizat.ValoarePenalizare
Fig.7.Diagrama de secvente pentru gestiunea imprumuturilor

Cititor Imprumuturi
Bibliotecar

1: Verificare cont cititor

2:Cont valid

3:Verificare situatie imprumut

4:Nu exista carti imprumutate

5:Inregistrare imprumut

6:Inregistrare prelungire

 Construirea diagramei de stare pentru un obiect .In diagrama se vor include evenimentele
declansatoare, actiunile si conditiile de tranzitie.
Diagrama starilor de tranzitie este utilizata pentru a prezenta starile prin trec trec diferite tipuri
de obiecte, precum si evenimentele care determina tranzitiile de la o stare la alta.
Fig.8.Diagrama de stare pentru Penalizare

Introducere date

Cand( btn Validare=True)/Valideaza


Creare Penalizare PenalizareValidata
Do/Intr DataPlPenalizare
Do/Intr StarePenAchitata
Do/Intr StarePenNEachitata
PenalizareAchitata

Achitare in curs
TotalPlatit<
Cand(btnValidare=False)/Renunta

TotalPenali
zare

TotalPlatit=TotalPenalizare
III. Modelul relational al aplicatiei

CITITOR( IDCititor,NrLegitimatie,NumeCititor,PrenumeCititor,CNP,Adresa,Telefon)
IMPRUMUT(IDImprumut, NrFisaImp, DataRestituire, DataPrelungire,IDCititor)
CARTE( IDCarte, CotaCarte, Titlu, Autori, Editura, AnAparitie, ISBN, NrExemplare)
CarteImprumutata(ID, NrExemplareImp, IDCarte,IDImprumut)
PENALIZARE(IDPenalizare,NumarPenalizare,DataPlPenalizare,StarePenAchitata,StarePenNeachit
ata,IDImprumut)
ImprumutPenalizat(ID, NrExemIntarziate, NrZileIntarziere,IDImprumut,IDPenalizare)

IV. Implementarea diagramei claselor in VB

Public Class CITITOR


Private _NrLegitimatie As String
Private _NumeCititor As String
Private _PrenumeCititor As String
Private _CNP As String
Private _Adresa As String
Private _Telefon As Long

Property NrLegitimatie()
Get
Return _NrLegitimatie

End Get
Set(ByVal value)
_NrLegitimatie = value

End Set
End Property
Property NumeCititor()
Get
Return _NumeCititor

End Get
Set(ByVal value)
_NumeCititor = value

End Set
End Property
Property PrenumeCititor()
Get
Return _PrenumeCititor

End Get
Set(ByVal value)
_PrenumeCititor = value

End Set
End Property
Property CNP()
Get
Return _CNP

End Get
Set(ByVal value)
_CNP = value

End Set
End Property
Property Adresa()
Get
Return _Adresa

End Get
Set(ByVal value)
_Adresa = value

End Set
End Property
Property Telefon()
Get
Return _Telefon

End Get
Set(ByVal value)
_Telefon = value

End Set
End Property
Sub Adauga()
End Sub
Sub Sterge()
End Sub
Sub Modifica()
End Sub
Sub AfisareImprumuturi() Handles(IMPRUMUT)
End Sub
End Class
Public Class IMPRUMUT
Private _NrFisaImp As String
Private _DataImp As Date
Private _DataRestituire As Date
Private _DataPrelungire As Date
Public pCititor As CITITOR

Property NrFisaImp()
Get
Return _NrFisaImp
End Get
Set(ByVal value)
_NrFisaImp = value

End Set
End Property
Property DataImp()
Get
Return _DataImp
End Get
Set(ByVal value)
_DataImp = value
End Set
End Property
Property DataRestituire()
Get
Return _DataRestituire
End Get
Set(ByVal value)
_DataRestituire = value
End Set
End Property
Property DataPrelungire()
Get
Return _DataPrelungire
End Get
Set(ByVal value)
If value >= DataRestituire Then _DataPrelungire = value

End Set
End Property
Sub Adauga()
End Sub
Sub Sterge()
End Sub
Sub AfiseazaCarte() Handles(CARTE)
End Sub

End Class

Public Class CARTE


Private _CotaCarte As String
Private _Titlu As String
Private _Autori As String
Private _Editura As String
Private _AnAparitie As Date
Private _ISBN As String
Private _NrExemplare As Integer

Property CotaCarte()
Get
Return _CotaCarte
End Get
Set(ByVal value)
_CotaCarte = value

End Set
End Property
Property Titlu()
Get
Return _Titlu
End Get
Set(ByVal value)
_Titlu = value
End Set
End Property
Property Autori()
Get
Return _Autori
End Get
Set(ByVal value)
_Autori = value
End Set
End Property
Property Editura()
Get
Return _Editura
End Get
Set(ByVal value)
_Editura = value

End Set
End Property
Property AnAparitie()
Get
Return _AnAparitie

End Get
Set(ByVal value)
_AnAparitie = value

End Set
End Property
Property ISBN()
Get
Return _ISBN

End Get
Set(ByVal value)
_ISBN = value

End Set
End Property
Property NrExemplare()
Get
Return _AnAparitie

End Get
Set(ByVal value)
_NrExemplare = value

End Set
End Property
Sub Adauga()
End Sub
Sub Sterge()
End Sub

End Class
Public Class PENALIZARE
Private _NumarPenalizare As Integer
Private _DataPlPenalizare As Date
Private _StarePenAchitata As Boolean
Private _StarePenNeachitata As Boolean
Public pImprumut As IMPRUMUT
Property NumarPenalizare()
Get
Return _NumarPenalizare
End Get
Set(ByVal value)
_NumarPenalizare = value

End Set
End Property
Property DataPlPenalizare()
Get
Return _DataPlPenalizare

End Get
Set(ByVal value)
_DataPlPenalizare = value
End Set
End Property
Property StarePenAchitata()
Get
Return _StarePenAchitata
End Get
Set(ByVal value)
If DataPlPenalizare = value Then _StarePenAchitata = True
End Set
End Property
Property StarePenNeachitata()
Get
Return _StarePenNeachitata
End Get
Set(ByVal value)
If StarePenAchitata = True Then _StarePenNeachitata = False
End Set
End Property
Sub AdaugaPenalizare()
End Sub
Sub Salveaza()
End Sub
Sub Sterge()
End Sub
Sub AfiseazaCititor()
End Sub
Sub AfiseazaStarePen()
End Sub
Function TotalPenalizare() As Double
End Function
Function TotalPlatit() As Double
End Function
End Class
Public Class CarteImprumutata
Private _NrExemplareImp As Integer

Public pCarte As CARTE


Public pImprumut As IMPRUMUT

Property NrExemplareImp()
Get
Return _NrExemplareImp

End Get
Set(ByVal value)
_NrExemplareImp = value

End Set
End Property

Sub NrExemplareDisponibile()
End Sub

End Class
Public Class ImprumutPenalizat
Private _NrExemIntarziate As Integer
Private _NrZileIntarziere As Integer

Public pImprumut As IMPRUMUT


Public pPenalizare As PENALIZARE

Property NrExemIntarziate()
Get
Return _NrExemIntarziate

End Get
Set(ByVal value)
_NrExemIntarziate = value

End Set
End Property
Property NrZileIntarziere()
Get
Return _NrZileIntarziere

End Get
Set(ByVal value)
_NrZileIntarziere = value

End Set
End Property

Function ValoarePenalizare() As Double


ValoarePenalizare = NrExemIntarziate * NrZileIntarziere
End Function

End Class

S-ar putea să vă placă și