Gestionaremagazinairsoft [610787]
Ministerul Educației Naționale
Universitatea ”OVIDIUS ” Constanța
Facultatea de Matematică și Informatică
Specializarea Informatică
LUCRARE DE LICENȚ A
Coordonator științific,
Lect. Dr. Șerban Cristina
Absolvent: [anonimizat] ”OVIDIUS ” Constanța
Facultatea de Matematică și Informatică
Specializarea Informatică
LUCRARE DE LICENȚ A
Sistem software pentru gestionarea
unui magazin de echipament Airsoft
Coordonator științific,
Lect. Dr. Șerban Cristina
Absolvent: [anonimizat]
1 INTRODUCERE ………………………….. ………………………….. ………………………….. ………………………….. ……. 1
1.1 Contextul temei ………………………….. ………………………….. ………………………….. ………………………. 1
1.2 Motivația ………………………….. ………………………….. ………………………….. ………………………….. ……. 1
1.3 Enunțul temei ………………………….. ………………………….. ………………………….. ………………………….. 1
1.4 Obiective generale ………………………….. ………………………….. ………………………….. …………………… 1
1.5 Cerințele sistemului ………………………….. ………………………….. ………………………….. …………………. 2
1.5.1 Cerințe funcționale ………………………….. ………………………….. ………………………….. …………… 2
1.5.2 Cerințe nefuncționale ………………………….. ………………………….. ………………………….. ……….. 2
1.6 Tehnologii folosite ………………………….. ………………………….. ………………………….. ……………………. 2
1.6.1 Visual Studio ………………………….. ………………………….. ………………………….. …………………….. 2
1.6.2 Limbajul C# și .NET Framework ………………………….. ………………………….. ……………………….. 3
1.6.3 iText.Shar p ………………………….. ………………………….. ………………………….. ………………………. 3
1.6.4 Microsoft Access ………………………….. ………………………….. ………………………….. ………………. 3
2 PROIECTAREA ARHITECTURII SISTEMULUI SOFTWARE ………………………….. ………………………….. ……… 4
2.1 Actorii sistemului ………………………….. ………………………….. ………………………….. …………………….. 4
2.2 Cazuri de utilizare ………………………….. ………………………….. ………………………….. …………………….. 4
2.2.1 Caz de utilizare: Adăugare produs ………………………….. ………………………….. …………………… 4
2.2.2 Caz de utilizare: Modificare produs ………………………….. ………………………….. …………………. 5
2.2.3 Caz de utilizare: Ștergere produs ………………………….. ………………………….. …………………….. 5
2.2.4 Caz de utilizare: Adăugare comandă(bon) ………………………….. ………………………….. ………… 6
2.2.5 Caz de utilizare: Adăugare comandă(Client nou) ………………………….. ………………………….. .. 7
2.2.6 Caz de utilizare: Adăugare comandă(Client existent) ………………………….. ……………………… 8
2.2.7 Caz de utilizare: Afișare și printare statistici ………………………….. ………………………….. ……… 8
2.3 Proiectarea bazei de date ………………………….. ………………………….. ………………………….. …………. 9
2.3.1 Diagrama Entit ăți-Asociații(DEA) ………………………….. ………………………….. …………………….. 9
2.3.2 Restric ții ………………………….. ………………………….. ………………………….. ………………………… 14
2.3.3 Schema MMED(Model matematic elementar al datelor) ………………………….. ……………… 15
2.3.4 MRD(Model relațional de date) ………………………….. ………………………….. …………………….. 22
3 IMPLEMENTAREA SISTEMULUI SOFTWARE ………………………….. ………………………….. …………………… 23
3.1.1 Design -ul interfeței ………………………….. ………………………….. ………………………….. …………. 23
3.1.2 Clasele de obiecte ………………………….. ………………………….. ………………………….. …………… 25
3.1.3 Încărcarea datelor în aplicație ………………………….. ………………………….. ………………………. 26
3.1.4 Modificarea datelor ………………………….. ………………………….. ………………………….. ………… 29
3.1.5 Adăugarea comenzilor ………………………….. ………………………….. ………………………….. …….. 31
3.1.6 Vizualizarea statisticilor ………………………….. ………………………….. ………………………….. …… 34
4 TESTAREA APLICAȚIEI ………………………….. ………………………….. ………………………….. …………………….. 36
5 CONCLUZII ………………………….. ………………………….. ………………………….. ………………………….. ……….. 40
6 BIBLIOGRAFIE ………………………….. ………………………….. ………………………….. ………………………….. …… 41
1
1 INTRODUCERE
1.1 Contextul temei
Contextul realizării acestei aplicații este cel al raspândirii jocurilor de tip Airsoft concomitent
cu dezvoltarea tehnologiei și apariția magazinelor de echipament pentru acest joc.
Datorită dezvoltărilor tehnologice din ultim a vreme gestionarea afacerilor a devenit mai
eficient ă. Din ce în ce mai multe magazine își crează software pentru administrarea business -ului,
pentru diverse procese economice: stocuri, livrări, personal.
Avându -și originea în Japonia anilor ’50 , datorit ă legilor locale cu privire la armele de foc,
airsoftul este un joc sportiv de simulare a unui conflict cu ajutorul unor replice ale armelor reale ce
folosesc proiectile sferice care nu sunt făcute din metal. Acesta s -a dezvoltat în SUA, fiind o
alternativă la paintball. P e măsura ce internetul s -a răspâ ndit pe glob, airsoftul a crescut în
popularitate enorm, mai ales în Europa și în Amer ica. Este prezent și în România, având din ce în ce
mai mulți practicanți, lucrul care a dus la apariția magazinelor de produse Airsoft.
1.2 Motivația
Am ales tema aceasta deoa rece sunt pasionat de lucrurile cu aer milităresc. Unul din motive a
fost dorința de a învăța și de a aprofu nda procesul de dezvoltare al aplicațiilor C#. Totodată am
integrat și o bază de date în Access. Este important ca un programator să știe cum să interacționeze
cu o bază de date. El trebuie să înțeleagă cum funcționează atunci când dezvoltă aplicații.
Ca sistem de operare am ales Microsoft Windows deoarece C# este cel mai folosit limbaj de
progra mare pentru platformele Windows și poate comunica cu o baza de da te Microsoft Access
foarte ușor, prin tehnologia OleDB.
1.3 Enunțul temei
Tema lucrării de față constă în realizarea unei aplicații software pentru administrarea unu i
magazin de echipament Airsoft, folosind limbajul de programare C#, IDE -ul Microsoft Visual
Studio și o bază de date Microsoft A ccess.
1.4 Obiective generale
Obiectivul principal al acestei aplica ții software este gestionarea unui magazin A irsoft,
folosind o aplicație C#, pentru a oferi un grad ridicat de eficientizare.
2
Un alt obiectiv este oferirea posibilității unui utilizator de a vizualiza lista de produse.
Totodată, el poate și să adauge prod use noi sau să modifice ori să șteargă produse din cele existente.
Ținănd cont că este vorba de un magazin, un lucru la fel de important este administrarea
comenzilor, putându -se vizualiza, respectiv ad ăuga comenzi.
De asemenea, este necesară vizualizarea unor statistici, cum ar fi cele mai vândute produse
sau profitul lunar ,precum și generarea unor rapoarte baza te pe ele .
1.5 Cerințele sistemului
1.5.1 Cerințe funcț ionale
Vizualizare și m odificare produse: Utilizatorul poate vedea toate produse le. De asemenea el are
posibilitatea de a adăuga,modifica respectiv șterge produse.
Vizualizare și a dăugare comenzi: Un utilizator poate vedea comenzile și conținutul lor. El are și
opțiunea de a adăuga comenzi noi , cu diverse tipuri de facturare.
Afișare statistici: Sistemul permite afișarea statisticilor despre vânzări,produse, etc. În plus,
utilizatorul are opțiunea de a salva statisticile într -un fișier PDF.
1.5.2 Cerințe nefuncționale
Utilizabilitate : Aplica ția este bazată pe interfețe grafice astfel încât poate fi utilizată relativ ușor.
Robustețe : Aplicația trebuie să verifice datele care sunt introduse de către utili zator. În cazul în care
formatul lor nu e corect se afișează un mesaj de eroare și i se permite să reintroducă datele.
Performanță: Aplica ția trebuie să răspundă la selec ția unei opțiuni din interfață cât mai rapid. Ea
trebuie și să nu consume prea multă memorie.
1.6 Tehnologii folosite
1.6.1 Visual Studio
Microsoft Visual S tudio [1] este un mediu integrat de dezvoltare (IDE în engleză) , fiind un
program ce poate fi folosit în dezvoltarea software -ului. În componența lui intră editorul standard și
depanatorul. Pe lânga acestea Visual Studio include și compilatoare , instrumente ce completează
codul (cum ar fi IntelliSense) și multe alte instrumente care ajută la dezvoltarea aplicațiilor.
O solu ție este un container folosit de Visual Studio care conține unul sau mai multe proiecte.
3
1.6.2 Limbajul C# și .NET Framework
C#[2] este un limbaj de programare orientat pe obiecte. Este similar și superior limbajelor C
și C++. Sintaxa acestuia este relativ simplă și ușor de învățat.
Componenta CLR (Common Language Runtime) este distribuit ă împreună cu limbajul C#,
ea fiind o parte a platformei .NET Framework. Datorită acestei componente , programele devin
portabile, ele putând rula pe diferite dispozitive sau sisteme de operare fără modificări sau cu
modificări minore.
În mod normal, sistemele de operare cele mai utilizate de către programele în C# sunt cele de
tip MS Windo ws. CLR și .NET Framework pot funcționa și pe dispozitive portabile cum ar fi
tabletele și telefoanele care au sistem de operare Windows(cum ar fi Windows Phone).
1.6.3 iText.Sharp
iText [4] este o librarie care este uti lizata pentru a genera documente PDF bazate pe data din
fișiere XML sau baze de date. Cu ajutorul acestei librării se pot edita și documente existente.
iTextSharp este o versiune por tată a iText 5 facută pentru Plaftorma .NET și limbajul C#.
1.6.4 Microsoft A ccess
Microsoft Access [5] este un SGBD(Sistem de gestiune a bazelor de date). Cu ajutorul
acestora utilizatorul poa te creea și accesa baze de date.
Programul îi permite unei persoane să adauge elemente noi într-un tabel(de exemplu un
produs), să editeze datele care deja sunt în baza de date(cum ar fi prețul unui produs) , sau să șteargă
informații.
El are și posibilitatea de a vizualiza și de a vedea datele în diverse moduri. O bază d e date
Access are 6 componente: tabele, formulare, rapoarte, queries(inte rogări),macrocomenzi și
module.
4
2 PROIECTARE A ARHITECTURII
SISTEMULUI SOFTWARE
2.1 Actorii sistemului
Pentru a proiecta un sistem sofware este necesară creerea unui set de scenarii care descriu
modul de utilizare a sistemului. Ele se mai numesc și cazuri de utilizare[8] . Înainte de a crea un caz
de utilizare este important ca un analist să identifice diverse tipuri de echipamente și persoane care
folosesc sistemul. Rolurile efectuate se numesc actori.
În cazul de față singurul actor este administratorul sist emului.
2.2 Cazuri de utilizare
În această secțiune vor fi descrise cazurile de utilizare.
2.2.1 Caz de utilizare : Adăugare produs
Nume : Adăugare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională
Postcondiții: Produsul trebuie să fie inserat cu succes în baza de date .
Administrator Sistem Sistem
1. Selectează opțiunea pentru produse 2.Afișare f ormular produse
3. Selectează opțiunea de adăugare produse 4.Afișează componenta pentru introducere date
5.Introduce datele produsului
6. Apasă butonul de confirmare 7. Verifică datele [A1]
8.Afișează modificările în formular
9.Adaugă produsul în baza de date
Flux alternativ:
5
[A1] : Datele necesare au fost introduse într -un mod eronat (nu respectă constrângerile de integritate)
sau nu au fost introduse deloc.
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continu ă de la pasul 4.
2.2.2 Caz de utilizare : Modificare produs
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să fie minim un produs în baza de date .
Postcondiții: Datele produsului sunt modificate cu succes în baza de date.
Administrator Sistem Sistem
1. Selectează opțiunea pentru produse 2.Afișare formular produse
3. Selectează opțiunea de modificare produse 4.Afișează componenta pentru introducere date
5.Introduce datele noi ale produsului
6. Apasă butonul de confirmare 7. Verifică datele [A1]
8. Afișează modificările în formular
9.Modifică datele produsului în baza de date
Flux alternativ:
[A1] : Datele necesare au fost introduse într -un mod eronat (nu respectă constrângerile de integritate)
sau nu au fost introduse deloc.
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continu ă de la pasul 4.
2.2.3 Caz de utilizare : Ștergere produs
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să existe minim un produs în baza de date .
Postcondiții: Datele produsului trebuies modificate cu succes în baza de date.
6
Administrator Sistem Sistem
1. Selectează opțiunea pentru produse 2.Afișare formular produse
3. Selectează un produs
4. Selectează opțiunea de ștergere a produsului 6. Verifică datele[A1]
7. Afișează modificările în formular
8. Șterge produsul din baza de date
Flux alternativ:
[A1] : Produsul nu poate fi șters deoarece există date în alte tabele care ar fi afectate de dispariția
acestuia(integritatea referințelor).
Este afișat un mesaj care îi descr ie utilizatorului eroarea, fluxul continu ă de la pasul 3.
2.2.4 Caz de utilizare : Adăugare comandă (bon)
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să existe măcar un produs în stoc
Postcondiții: Comanda și bonul este adăugate cu succes
Administrator Sistem Sistem
1. Apasă butonul pentru formularul de comenzi 2.Afișare formular comenzi
3. Selectează opțiunea pentru adăugarea de
comenzi 4.Afișează componenta pentru introducere de
produse
5. Selectează produsele și cantitatea 6.Compară cantitatea cu stocul [A1]
7.Apas ă butonul de checkout 8. Afișeaza butoanele pentru selectarea tipului de
facturare
9. Selectează tipul de facturare 10.Afișează datele clientului
11. Selectează client 12.Adaugă comanda
Flux alternativ:
[A1] : Cantitatea introdusă este mai mare decât stocul produsului
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continu ă de la pasul 4.
7
2.2.5 Caz de utilizare: Adăugare comandă( Client nou )
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să existe măcar un produs în stoc
Postcondiții: Comanda ,clientul și factura trebuie să fie adăugate cu succes
Administrator Siste m Sistem
1. Apasă butonul pentru formularul de comenzi 2.Afișare formular comenzi
3. Selectează opțiunea pentru adăugarea de
comenzi 4.Afișează componenta pentru introducere de
produse
5. Selectează produsele și cantitatea 6.Compară cantitatea cu stocul [A1]
7.Apas ă butonul de checkout 8. Afișeaza butoanele pentru selectarea tipului de
facturare
9. Selectează tipul de facturare 10.Afișează componenta pentru introducerea
datelor clientului
11. Introduce datele clientului
12.Apasă pe butonul de finalizare 13.Verifică datele clientului [A2]
14.Adaugă comanda
15.Adaugă clientul
16.Adaugă factura
Flux alternativ:
[A1] : Cantitatea introdusă este mai mare decât stocul produsului
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continuă de la pasul 5.
[A2] : Datele clientului au fost introduse într -un mod eronat(nu respectă constrângerile de
integritate) sau nu au fost introduse deloc.
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continuă de la pas ul 11.
8
2.2.6 Caz de utilizare: Adăugare comandă( Client
existent )
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să existe minim un produs în stoc și un
client.
Postcondiții: Comanda și factura sunt adăugate cu succes
Administrator Sistem Sistem
1. Apasă butonul pentru formularul de comenzi 2.Afișare formular comenzi
3. Selectează opțiunea pentru adăugarea de
comenzi 4.Afișează componenta pentru introducere de
produse
5. Selectează produsele și cantitatea 6.Compară cantitatea cu stocul [A1]
7.Apas ă butonul de checkout 8. Afișeaza butoanele pentru selectarea tipului de
facturare
9. Selectează tipul de facturare 10.Afișează datele clientului
11. Selectează client 12.Adaugă comanda
13.Adaugă factura
Flux alternativ:
[A1] : Cantitatea introdusă este mai mare decât stocul produsului
Este afișat un mesaj care îi descrie utilizatorului eroarea, fluxul continuă de la pasul 5.
2.2.7 Caz de utilizare : Afișare și printare statistici
9
Nume : Modificare produs
Actor software: Administrator Sistem
Precondiții: Aplicația trebuie să fie funcțională și trebuie să existe o statistică funcțională
Postcondiții: Fișierul PDF este creat cu succes
Administrator Sistem Sistem
1. Selectează opțiunea pentru statistici 2.Afișare formular produse
3. Selectează o statistică 4.Afișează o statistică
5. Apasă pe butonul de scriere în PDF 6. Creează un PDF nou cu statistica selectată
2.3 Proiectarea bazei de date
2.3.1 Diagrama Entit ăți-Asociații(DEA)
În această diagrama se află entitățile și asocierile dintre ele alături de atributele fiecărei entități.
Figura 2.3.1.1 DEA
10
Atributele pentru fiecare entitate și asociație:
Figura 2.3.1.2 Atribute produse
Figura 2.3.1.3 Atribute comenzi
11
Figura 2.3.1.4 Atribute ContinutComenzi
Figura 2.3.1.5 Atribute Categorii
12
Figura 2.3.1.6 Atribute Angajati
Figura 2.3.1.7 Atribute Funcții
13
Figura 2.3.1.8 Atribute Clienți
14
Figura 2.3.1.9 Atrbute Facturi și Bonuri
2.3.2 Restric ții
: Nu pot exista două funcții cu aceeași denumire
: Nu pot exista doi angajați cu același CNP , iar CNP -ul este format din 13 cifre
: Nu pot exista două categorii cu aceiași denumire
: Nu pot exista două produse cu același nume
15
: Nu pot exista două județe cu același nume
: Nu pot exista două orașe cu același nume, în acleași județ
: Nu pot exista doi clienți cu același cod de identificare
: Nu pot exista două bonuri cu același număr de bon
: Nu pot exista două facturi cu aceiași serie și număr
: Nu pot exista două produse în aceeași comandă
2.3.3 Schema MMED(Model matematic elementar al
datelor)
În urma aplicării algoritmului de transformares din DEA în MRD se obține următoarea schemă
MMED [7].
FUNCȚII (Mulțimea funcțiilor angajaților magazinului)
Id_Functie ↔NAT(4),
Funcție ↔CHAR(32), (denumire funcție ;unică,conform restricției )
ANGAJAȚI (Mulțimea angajaților)
Id_Angajat ↔ NAT(4),
CNP ↔CHAR(13) , (codul numeric personal, unic, format din doar din cifre , conform restricției )
Nume →CHAR(64),
Salariu →NAT(5),
Funcție: ANGAJAȚI →FUNCȚII
Algoritm de proiectare a cheilor semantice:
i=1
16
CNP cheie? DA
(Nu pot exista două persoane cu același CNP)
Nume cheie? NU
(Pot exista două persoane cu același nume)
Salariu cheie? NU
(Pot exista două persoane cu același salariu)
Funcție cheie? NU
(Pot exista două persoane cu aceiași funcție)
i=2
Nume ∙ Salariu cheie? NU
(Pot exista două persoane cu același nume și salariu)
Nume ∙ Funcție cheie? NU
(Pot exista două persoane cu același nume și aceiași funcție)
Funcție ∙ Salariu cheie? NU
(Pot exista doua persoane cu acee ași funcție și același salariu)
i=3
Nume ∙ Salariu ∙ Funcție cheie? NU
(Pot exista două persoane cu aceiași funcție si același nume și salariu)
CATEGORII( Mulțimea categoriilor de produse)
IdCategorie ↔NAT(3) ,
NumeCategorie ↔CHAR(64) ,(denumirea categoriei; unică , conform restricției )
PRODUSE (Mulțimea produselor)
Id_Produs ↔NAT(4) ,
17
Denumire ↔CHAR(64),(denumirea produsului ;unic ă, conform restricției )
Pret→NAT(4), (mai mare decât 0)
Imagine →CHAR(255),(numele fișierului și extensia)
Stoc→NAT(4),
Categorie:PRODUSE →CATEGORII
Algoritm de proiectare a cheilor semantice:
i=1
Denumire cheie? DA
(Nu pot exista două produse cu același nume)
Preț cheie? NU
(Pot exista mai multe produse cu același preț)
Imagine cheie? NU
(Pot exista mai multe produse cu ace eași imagine)
Stoc cheie? NU
(Pot exista două produse cu același stoc)
Categorie cheie? NU
(Pot exista mai multe produse care sunt în aceeași categorie)
i=2
Preț ∙ Imagine cheie? NU
(Pot exista două produse cu același preț și ace eași imagine)
Preț ∙ Stoc cheie? NU
(Pot exista două produse cu acelaș i preț și stoc)
Preț ∙ Categorie cheie? NU
(Pot exista mai multe produse cu ace eași categorie și același preț )
Imagine ∙ Stoc cheie? NU
18
(Pot exista mai multe produse cu același stoc și aceiași poză )
Imagine ∙ Categorie cheie? NU
(Pot exista mai multe produse cu aceiași imagine și categorie )
Categorie ∙ Stoc cheie? NU
(Pot exista mai multe produse cu ac eiași categorie și același stoc )
i=3
Preț ∙ Imagine ∙ Stoc cheie? NU
(Pot exista mai multe produse cu același preț și stoc și cu ace eași imagine)
Preț ∙ Imagine ∙ Categorie cheie? NU
(Pot exista mai multe produse cu același preț și acee ași imagine și categorie)
Preț ∙ Stoc ∙ Categorie cheie? NU
(Pot exista mai multe produse cu același preț și stoc și cu aceiași categorie)
Stoc ∙ Imagine ∙ Categorie cheie? NU
(Pot exista mai multe produse cu același stoc și ace eași imagine și categorie)
i=4
Preț ∙ Imagine ∙ Categorie ∙ Stoc cheie? NU
(Pot exista mai multe produse cu același preț și stoc și cu ace eași imagine și categorie)
JUDEȚE (Mulțimea județelor)
Id_Judet ↔NAT(2) ,
Județ ↔CHAR(32) ,(Denumirea județului, unic ă, conform restricției )
ORAȘE (Mulțimea orașelor)
Id_Oraș ↔NAT(5),
Oraș ↔CHAR(32), (denumirea orașului)
Județ: ORAȘE →JUDEȚE
19
Algoritm de proiectare a cheilor semantice:
i=1
Oraș cheie? NU
(Pot exista două orașe cu același nume)
Județ cheie? NU
(Pot exista mai multe orașe în același județ)
i=2
Oraș ∙ Județ cheie? DA
(Nu pot exista două orașe cu același nume în același județ)
CLIENȚI (Mulțimea clienților)
IdClient ↔NAT(5 )
TipClient → {“Fizic ă”, “Juridic ă” } , ( reprezint ă tipul de persoană)
Denumire →CHAR(64),(reprezintă numele clientului)
CodIdentificare ↔CHAR(13),( CNP -ul în cazul persoanelor fizice și CIF -ul în cazul persoanelor
juridice;unic , conform restricției )
Adresa →CHAR(64),(adresa clientului : strada, bloc, scara, apartament)
Telefon → CHAR(10),(telefonul clientului,format numai din cifre)
Oraș : CLIENȚI →ORAȘE
COMENZI (Mulțimea comenzilor)
Id_Comanda ↔NAT(5),
DataComanda → DATE,(format L/Z/A)
CONTINUTCOMENZI (Mulțimea perechilor de tip <c,p> unde c reprezintă comanda și p
reprezintă produsul )
Id_Conținut ↔NAT(5),
Cantitate → NAT(3),(Canitatea produsul din coamndă;mai mare ca 0)
20
Comandă :CONTINUTCOMENZI →COMENZI
Produs :CONTINUTCOMENZI →PRODUSE
Algoritm de proiectare a cheilor semantice:
i=1
Cantitate cheie? NU
(În aceeași comandă pot fi produse cu aceeași cantitate)
Comandă cheie? NU
(Pot exista mai multe comenzi)
Produs cheie? NU
(Același produs se poate găsi în comenzi diferite)
i=2
Comandă ∙ Produs cheie? DA
(Același produs nu se poate regăsi de două ori în aceeași comandă – )
Comandă ∙ Cantitate cheie? NU
(Pot exista produse în aceeași comandă cu aceeași cantitate)
Cantitate ∙ Produs cheie? NU
(Pot exista aceleași produse cu aceeași cantitate în comenzi diferite)
BON (Mulțimea bonurilor)
NumărBon ↔NAT(8) , (reprezintă numărul bonului,este unic,conform )
Id_Comanda ↔NAT(5),
Id_Comanda: BONURI →COMENZI
FACTURI (Mulțimea facturilor)
Serie →CHAR(4)
Numar →NAT(4)
21
Client: FACTURI →CLIENȚI
Id_Comanda ↔NAT(5),
Id_Comanda: FACTURI →COMENZI
Algoritm de proiectare a cheilor semantice:
i=1
Serie cheie? NU
(Două facturi pot avea aceiași serie)
Număr cheie? NU
(Mai multe facturi pot avea același număr)
Client cheie? NU
(Un client poate avea mai multe facturi)
i=2
Serie ∙ Număr cheie? DA
(Două facturi nu pot avea concomitent aceiași serie și același număr – )
Serie ∙ Client cheie? NU
(Un client poate avea facturi cu aceiași serie)
Număr ∙ Client cheie? NU
(Un client poate avea facturi cu aceiași număr)
22
2.3.4 MRD(Model relațional de date)
FUNCȚII (Id_Functie ,Funcție)
Φ├ Func ție
ANGAJAȚI( Id_Angajat ,CNP)
Φ├ CNP, Φ├ Nume , Φ├ Funcție , Φ├ Salariu ϵ (0,9999]
CATEGORII (Id_Categorie ,NumeCategorie )
Φ├ NumeCategorie
PRODUSE (Id_Produs ,Denumire )
Φ├ Denumire, Φ├ Preț >0, Φ├ Categorie , Φ├ Stoc ≥0
JUDEȚE (Id_Judet ,Jude ț)
Φ├ Județ
ORAȘE (Id_Oraș ,Județ ∙ Oraș )
Φ├ Județ , Φ├ Oraș
COMENZI( Id_Comanda )
Φ├ Data > 01.01.2018 și <01.01.2020
CONTINUTCOMENZI( Id_Continut ,Comanda ∙ Produs )
Φ├ Comanda, Φ├ Produs, Φ├ Cantitate >0 și ≤ stocul produsului
BONURI( Id_Comanda ,NumarBon )
Φ├ Id_Comanda , Φ├ NumarBon
CLIENȚI(IdClient ,CodIdentificare)
Φ├ TipClient, Φ├ Denumire, Φ├ CodIdentificare, Φ├ Adresa, Φ├ Oraș , Φ├ Telefon
FACTURI( Id_Comanda ,Serie ∙ Număr )
Φ├ Id_Comanda, Φ├ Serie, Φ├ Număr >0, Φ├ Client
23
3 IMPLEMENTARE A SISTEMULUI
SOFTWARE
Pentru a cr ea aplicația am folosit IDE -ul Microsoft Visual Studio, iar ca limbaj de programare
am utilizat C#.
3.1.1 Design -ul interfeței
Pentru interfața apli cației am folosit Windows Forms, fiind 4 în total.
Prima dintre ele este cea care apare la rularea programului.
Figura 3.1.1.1 Formularul de in ceput
Prin intermediul celor 3 butoane se poate accesa formularul corespunzător.
24
Figura 3.1.1.2 Interfață EditareProduse
În stânga este un obiect de tip DataGridView [9] (utilizat pentru afișa lista de produse , sub forma
unui tabel). În centru se află butoanele pentru interacționare cu lista de produse. Butonul de
confirmare și renunțare sunt doar vizibile în cazul în care utilizatorul apasă pe
Figura 3.1.1.3 Interfață FComenzi
25
3.1.2 Clasele de obiecte
Pentru a afișa modificările suferite d e baza de date a m foloșit clase care modelează entitățile
și asociațiile bazei de date.
public class Produs
{
public string Denumire { get; set; }
public int Pret { get; set; }
public string Categorie { get; set; }
public string Imagine { get; set; }
public int Stoc { get; set; }
}
Clasa Produs are aceleași atribute ca și tabelul produse din baza de date, cu excepția id -ului. Al
doilea lucru diferit este că atributul Categorie nu mai este număr natural, ci arată direc t categoria
produsului.
class Oras
{
public string Denumire { get; set; }
public string Judet { get; set; }
}
Clasa Oraș are două șiruri de caractere ca și atribute.
class Comanda
{
public DateTime dataComanda { get; set; }
public int Cost { get; set; }
}
class ContinutComenzi
{
public int Id_Comanda { get; set; }
public int Id_Produs { get; set; }
public int Cantitate { get; set; }
}
Clasa ContinutComenzi și -a păstrat atributele pentru Comandă și Produs.
class Bon : Comanda
{
public int IdComanda { get; set; }
public string NumarBon{ get;set;}
26
}
class Factura:Comanda
{
public int IdComanda { get; set; }
public string Serie { get; set; }
public int Numar { get; set; }
public string Client { get; set; }
public string Adresa { get; set; }
public string Oras { get; set; }
public string Judet { get; set; }
Clasele Bon și Factură sunt ,,copii ” clasei Comandă(asta înseamnă că moștenesc
atributele dataComanda și Cost)
class Client
{
public string TipClient { get; set; }
public string Denumire { get; set; }
public string CodIdentificare { get; set; }
public string Adresa { get; set; }
public string Oras { get; set; }
public string Judet { get; set; }
public string Telefon { get; set; }
}
3.1.3 Încărcarea datelor în aplicație
Datele au fost încărcate prin intermediul unui obiect de tip OleDbDataReader . Ele sunt
introduse într -o listă de tip BindingList, folosind un obiect de tip DataTable ca și intermediar.
Avanta jul acestui tip de listă este că dacă un obiect de tip dataGridView o folosește ca sursă de date,
el nu trebuie actualizat când se produc modificări în listă.
t
private OleDbConnection con = new OleDbConnection ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Airsoft.accdb" );
BindingList <Produs> Produse = new BindingList <Produs>();
BindingList <Comanda> comenzi = new BindingList <Comanda>();
BindingList <ContinutComenzi > ProduseAdd = new BindingList <ContinutComenzi >();
BindingList <Client> clienti = new BindingList <Client>();
BindingList <Bon> bonuri = new BindingList <Bon>();
BindingList <Factura> facturi = new BindingLis t<Factura>();
BindingList <Oras> orase = new BindingList <Oras>();
27
În cazul produselor, ele se încarcă doar o singură dată la rularea programului, pentru a
eficientiza procesul și a reduce consumul de timp, lucru care este vizibil la bazel e de date cu multe
înregistrări.
private void Form1_Load( object sender, EventArgs e)
{
con.Open();
OleDbCommand cmd = new OleDbCommand ();
cmd.Connection = con;
cmd.CommandText = "SELECT p.Denumire,p.Pret,c.NumeCategorie as
Categorie,Imagine,Stoc" +
" FROM Produse as p INNER JOIN Categorii as c " +
"ON p.Categorie = c.IdCategorie" ;
adt = new OleDbDataAdapter (cmd);
adt.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
Produs prod = new Produs();
prod.Denumire = dt.Rows[i][ "Denumire" ].ToString();
prod.Pret = Convert.ToInt32( dt.Rows[i][ "Pret"]);
prod.Categorie = dt.Rows[i][ "Categorie" ].ToString();
prod.Imagine = dt.Rows[i][ "Imagine" ].ToString();
prod.Stoc = Convert.ToInt32(dt.Rows[i][ "Stoc"]);
Produse.Add(prod);
}
con.Close();
}
28
Ulterior această listă este trimis ă ca argument către celelalte formulare, atunci când se apasă
unul din butoanele pentru formulare.
Obs: Metoda passlist se găsește atât în formularu l de comenzi cât și ce în cel de produse. Față
de majoritatea at ributelor și metodelor aceasta și lista de produse sunt setate ca și publice pentru a
putea fi accesate din formularul principal.
private void btnAdaugaComanda_Click( object sender,
EventArgs e)
{
Comenzi comenzi = new Comenzi();
comenzi.passList( Produse);
comenzi.Show();
}
public void passList( BindingList <Produs> Produse)
{
this.Produse = Produse;
}
29
3.1.4 Modificarea datelor
Pe lângă posibilitatea de vizualizare a datelor, un utilizator poate și să adauge, modifice,
șterge produse și să adauge comenzi noi. Acest lucru a fost implementat folosind listele de clase și
obiectele de tip OleDbCommand.
Este necesar ca aplicația să verifice dacă datele introduse de utilizator respectă constrângerile
de integritate(de exemplu, în câmpul pentru prețul unui produs trebuie să fie un număr natural
pozitiv) sau dac ă au fost introduse(de exemplu câmpul pentru denumirea unui produs nu trebuie să
fie gol).
OleDbCommand cmd = new OleDbCommand ();
con.Open();
cmd.Connection = con;
int ind; //index categorie
ind = comboBox1.SelectedIndex;
Produs prod1 = new Produs();
prod1.Denumire = txtDenumire.Text;
prod1.Pret = Convert.ToInt32(txtPret.Text);
prod1.Imagine = imgloc.ToString();
prod1.Categorie = comboBox1.SelectedItem.ToString();
prod1.Stoc = Convert.ToInt32(tx tStoc.Text);
ind++;
cmd.CommandText = "INSERT INTO
Produse(Denumire,Pret,Imagine,Categorie,Stoc) VALUES('" +
txtDenumire.Text + "'" + ",'" + txtPret.Text.ToString() + "'" +
",'" + imgloc + "'" + ",'" + ind.ToString() + "','" +
txtStoc.Text.ToString() + "')";
MessageBox .Show(Convert.ToString(cmd.CommandText));
Produse.Add(prod1);
cmd.ExecuteReader();
con.Close();
dataGridView1.Refresh();
30
Exemplu verificare
check = true;
if (txtDenumire.Text == "")
{
MessageBox .Show("Nu ati introdus denumirea produsului!" );
check = false;
}
if (txtDenumire.Text.Length>64)
{
MessageBox .Show("Denumire peste 64 de caractere!" );
check = false;
}
try {
if (txtPret.Text == "")
{
MessageBox .Show("Nu ati introdus pretul" );
check = false;
}
if (Convert.ToInt32(txtPret.Text) <= 0)
{
MessageBox .Show("Pretul trebuie sa fie mai mare ca 0!" );
check = false;
}
Convert.ToInt32(txtPret.Text);
}
catch (FormatException e)
{
check = false;
MessageBox .Show("Format eronat Pret!" );
MessageBox .Show(e.Message);
}
31
În cazul operațiilor de ștergere, este important ca elementul șters să nu aibă referințe în alte
tabele dacă integritatea referențială este setată.
3.1.5 Adăugarea comenzilor
Programul îi permite utilizatorului să adauge comenzi și clienți noi. Mai întâi el trebuie s ă
adauge produse.
private void deleteProduct()
{
try
{
OleDbCommand cmd = new OleDbCommand ();
con.Open();
cmd.Connection = con;
int ind = dataGridView1.CurrentCell.RowIndex;
pictureBox1.ImageLocation = "";
cmd.CommandText = "DELETE FROM Produse where Denumire='" + Produse[ind].Denumire + "';";
MessageBox .Show(Convert.ToString(cmd.CommandText));
cmd.ExecuteNonQuery();
con.Close();
Produse.RemoveAt(ind);
}
catch (OleDbException ex)
{
con.Close();
MessageBox .Show(ex.Message);
}
}
private void btnAdaugaProdus_Click( object sender, EventArgs e)
{
ContinutComenzi prodins = new ContinutComenzi ();
prodins.Cantitate = Convert.ToInt32(txtCantitate.Text);
prodins.Produs = Produse[comboBox1.SelectedIndex].Denumire;
int duplic = 0;
if (verificareProduse() == true)
{
if (ProduseAdd.Count >= 1)
{
foreach (ContinutComenzi pa in ProduseAdd)
{
if (pa.Produs == prodins.Produs)
{
MessageBox .Show("Produsul este deja in lista!!!Puteti modifica cantitatea in tabelul din dreapta!" );
duplic = 1;
}
}
}
if(duplic==0)
{
ProduseAdd.Add( prodins);
32
Se creează un obiect de tip ContinutComenzi și verifică dacă cantitatea aleasă a produsului
selectat este mai mare de cât stocul curent sau dacă cantitatea este în format corect(număr natural
nenul). Totodată se verifică și dacă produsul a fost deja adăugat în listă. Dacă a fost găsit este afișat
un mesaj de eroare. Pentru a remedia acest lucru, utilizatorul are posibilit atea de a modifica
cantitatea produsului din tabelul din dreapta sus (datagridview2) . Câmpurile Id_Comanda și Produs
nu sunt editabile pentru a nu creea erori și confuzie. Și la modificarea cantității din tabel este
verificată noua valoare.
Secvența de cod pentru schimbarea cantității din tabel
Atunci când utilizatorul apasă pe butonul de checkout apar 3 butoane pentru a selecta tipul de
facturare . După ce îl selectează și introduce datele(unde este cazul) poate apăsa pe butonul de
finalizare a comenzii. Dacă butonul anonim a fost apăsat, secreează un bon, pentru client existent
private void dataGridView2_CellValueChanged( object sender,
DataGridViewCellEventArgs e)
{
if (dataGridView2.DataSource == ProduseAdd)
{
if (e.ColumnIndex == 2) //index 2 este pentru atributul cantitatii
{
int val;
val =
Convert.ToInt32(dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value)
;
foreach (Produs p in Produse)
{
if ((p.Denumire == ProduseAdd[e.RowIndex].Produs))
{
if (val <= p.Stoc)
ProduseAdd[e.RowIndex].Cantitate = val;
else MessageBox .Show("Introduceti o cantitate mai mica!!!" );
}
}
ProduseAdd[e.RowIndex].Cantitate = val;
}
else MessageBox .Show("Nu editati altceva decat cantitatea!" );
}
}
33
creează o factură pe numele clientului selectat , iar în ultimul caz se creează un client nou cu factura
nouă.
Secvență de cod pentru adăugarea unei comenzi noi
private void addComandaNoua()
{
try
{
con.Open();
string dataComanda = DateTime .Today.Month + "/" + DateTime .Today.Day +
"/" + DateTime .Today.Year;
OleDbCommand cmd1 = new OleDbCommand ();
cmd1.Connection = con;
cmd1.CommandText = "INSERT INTO Comenzi(Data) VALUES ('" + dataComanda
+ "')";
cmd1.ExecuteNonQuery();
Comanda comanda = new Comanda();
comanda.dataComanda = DateTime .Parse(dataCom anda);
comenzi.Add(comanda);
con.Close();
}
catch (Exception e)
{
MessageBox .Show("Nu s-a putut adauga comanda noua!" );
MessageBox .Show(e.ToString());
}
}
34
3.1.6 Vizualizarea statisticilor
Utilizatorul poate să vizualizeze diferite statistici cum ar fi cele mai vân dute produse, lista
angajaților , câte produse au fost vândute. Mai jos este o secvență de cod pentru afișarea celor mai
vândute produse .
De asemenea, el are posibilitatea de a salva o statistică într -un fișier PDF. Acest lucru a fost
implementat folosind librăria iTextSharp.
Numele fișierului va fi compus din denumirea statisticii selectate și data la care a fost
creată (format Z/L/A) . Titlu l constă în denumirea statisticii. Ulterior este adăugat un tabel. Data
raportului este inserată la final. În final se deschide fișierul PDF(cu aplicația implicitiă).
Exemplu pentru codul de mai sus
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
con.Open();
cmd.CommandText = "SELECT p.Denumire, Sum(cc.Cantitate) AS Cantitate,
SUM(p.Pret*cc.Cantitate) as PretTotal " +
"FROM Produse AS p INNER JOIN ContinutComenzi AS cc ON p.Id_Produs =
cc.Produs " +
"GROUP BY p.Denumire ORDER BY Sum(cc.Cantitate) DESC" ;
DataTable dt = new DataTable();
OleDbDataAdapter adt = new OleDbDataAdapter(cmd);
con.Close();
adt.Fill(dt);
dataGridView1.DataSource = dt;
lblOperatie.Text = "Cele mai vandute produse" ;
35
Mai jos este codul pentru generarea fișierului PDF .
string numefisier;
numefisier = lblOperatie.Text.Tri mStart();
numefisier = numefisier + DateTime.Today.Day + DateTime.Today.Month +
DateTime.Today.Year;
Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35);
PdfWriter wri = PdfWriter.GetInstance(doc, new FileStream(numefisier + ".pdf",
FileMode.Create));
doc.Open();
iTextSharp.text.Font parfront = FontFactory.GetFont( "Times New Roman" , 30,
BaseColor.BLACK);
Paragraph paragraph = new Paragraph(lblOperatie.Text, parfront);
paragraph.Alignment = Element.ALIGN_CENTER;
doc.Add(paragraph);
doc.Add(Chunk.NEWLINE);
PdfPTable table = new PdfPTable(dataGridView1.Columns.Count);
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
table.AddCell( new Phrase(dataGridView1.Columns[j].HeaderText));
}
table.HeaderRows = 1;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
if (dataGridView1[k, i].Value != null)
{
table.AddCell( new Phrase(dataGridView1[k, i].Value.ToString()));
}
}
}
doc.Add(table);
doc.Add(Chunk.NEWLINE);
doc.Add(Chunk.NEWLINE);
Paragraph dataRaport = new Paragraph( "Data raport:" + DateTime.Today.Day.ToString() +
" " + DateTime.Today.Month.ToString() + " " + DateTime.Today.Year.ToString());
doc.Add(dataRaport);
doc.Close();
System.D iagnostics.Process.Start(@numefisier + ".pdf");
36
4 TESTAREA APLICAȚIEI
În dezvoltarea sistemelor software este foarte impo rtant ca produsul să fie testat, pentru a
depista erorile care ar putea apărea și pentru a verifica dacă fiecare componentă funționează într -un
mod corespunzător.
Pentru testarea aplicației am folosit Visual Studio, însă aplicația poate rula chiar și daca o
persoană nu are IDE-ul instalat pe calculatorul folosit. Ea se află în subdirectoarele ”/bin/Debug”
implicit. Am creat o arhivă cu aplicația,baza d e date și librăria iTextSharp 5(necesară pentru
generarea de fișiere PDF).
Pentru a exemplifica, voi apasă butonul pentru editare produse pentru a testa funcționalitatea
formula rului respectiv.
37
Se încearcă introducerea unui produs nou, în aces caz niște bile de 0.2g și se selecteaza poza(dând
dublu click pe zona unde sunt pozele).
Produsul a fost adăugat cu succes.
Se va încerca modificarea stocului într -o valoare negativă pentru a verifica daca funcșționează
corespunzător.
38
Se încearcă introducerea unei comenzi noi cu tipul facturarii bon(butonul Anonim).
Se apasă butonul de finalizare a comenzii.
39
Comanda și bonu l au fost adăugate cu succes. Ultimu lucru de testat rămâne partea cu
statistici și rapoarte.
Aici a fost selectată statistica pentru cele mai vândute produse. Prin apăsarea butonului din
dreapta se va genera un fișie PDF și se va deschide cu aplicația imp licită(în cazul meu este Adobe
Acrobat Reader).
40
Fișierul a fost generat cu succes. Deci, toate componentele programului funcționează normal.
Datele despre produse(preț,denumure,imagine) au fost preluate de pe site -uri de magazine
Airsoft.
5 CONCLUZII
În această lucrare a fost prezentat procesul de proiectare și implementare a unui sistem
software care are ca scop gestionarea unui magazin de echipament Airsoft.
Fiecare funcționalitate a fost implementată cu succes. Aplicația permite vizualizarea și
intera cționarea cu lista de produse. De asemen ea permite adăugarea de comenzi, cu diverse tipuri de
facturare. Însă, un lucru aparte este componenta statiscticilor și posibilitatea salvării unui raport într –
un fiș ier de tip PDF, care este mai avansat decât un r aport în format text.
Prin intermediul acesui proiect mi-am aprofundat nivelul de cuno ștințe despre procesul de
dezvoltare a unei aplicații C# care are diverse funcționalități. A fost necesară creerea unei baze de
date în Microsoft Access care a funcțio nat ca și sursa de date pen tru soft , precum și folosirea librăriei
iTextSharp 5 . În creerea bazei de date și a aplicației propriu zise am căpătat cunoștințe noi despre
sintaxa SQL și C#.
Momentan, aplicația are ca context piața Airsoft din România, deci o dezvoltare ulterioară
va fi adăugarea suportului pentru alte țări. Pe viitor s -ar mai putea adăuga diverse informații în baza
de date, cum ar fi achizițiile firmei sau mai multe date despre produse,clienți sau angajați.
Studierea unor tehnologii și noți uni a fost contribuția mea la dezvoltarea acestui sistem. M-
am documentat despre sintaxa SQL deoarece mi -a fost necesară pentru a face modificări în baza de
41
date. Eu am avut rolul de a integra toate tehnologiile folosite, precum și noțiunile teoretice într -un
program.
Îmbunătățirea componentei de statistică și rapoarte ar putea fi o adăugare posibilă. Acest
lucru s -ar realiza prin adăugarea unor statistici noi .
Deși modul de funcționare a progamului este cel mai important lucrul, extinderea interfeței ar
putea fi un pas ulterior în dezvoltare. Felul în care arată un produs software poate afecta părerea
utilizatorilor.
6 BIBLIOGRAFIE
[1] Despre Visual Studio
https://docs.microsoft.com/en -us/visualstudio/ide/visual -studio -ide?view=vs -2017
[2] Despre limbajul C# si platforma .NET
https://docs.microsoft.com/en -us/dotnet/csharp/getting -started/introduction -to-the-csharp -language –
and-the-net-framework
[3] Arhitectura .NET
https: //docs.microsoft.com/en -us/dotnet/csharp/getting -started/media/netarchitecture.png
[4] Desp e iTextSharp https://www.nuget.org/packages/iTextSharp/
[5] Despre Access si baze de date
https://support.office.com/ro -ro/article/no%C8%9Biuni -elementare -despre -bazele -de-date-
a849ac16 -07c7 -4a31 -9948 -3c8c94a 7c204
[6] Lector dr. Alexandrescu Adrian , Curs Medii de proiectare și programare
[7] Conf. dr. Christian Manca ș¸. Curs sisteme de gestiune a bazelor de date.
[8] Conf. dr. Puchianu Crenguța , Curs Ingineria sistemelor soft
[9] Despre controlul DataGridView
https://docs.microsoft.com/en -us/dotnet/framework/winforms/controls/datagridview -control –
windows -forms
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Gestionaremagazinairsoft [610787] (ID: 610787)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
