Upload
dangdung
View
257
Download
1
Embed Size (px)
Citation preview
Colegiul Tehnic ,,IULIU MANIU”, BUcUresti
PROIECT
ATESTAT INFORMATICA
TEMA : EVIDENTA UNEI FARMACII
Proiect realizat de : BORNEA I. LILIANA-GEORGIANA CHIOSEA L.G. MARIANA-GEORGIANA-LAVINIA
Profesor coordonator:
prof. Brebenel Gheorghe
2013
2
Cuprins
1. Ce este Oracle?
2. Descrierea aplicaţiei
3. Modelul conceptual
4. Maparea modelului conceptual
5. Cod SQL
6. Bibliografie
3
1. CE ESTE ORACLE?
Oracle constă dintr-un set complet de constructori de aplicaţii şi produse pentru
utilizatori, căutând să asigure soluţii complete în tehnologia informaţiei.
Aplicaţiile Oracle sunt portabile peste un număr mare de staţii de lucru şi sisteme de
operare, de la calculatoare personale la procesoare paralele.
Oracle este înzestrat cu un flexibil Sistem de Management al Bazelor de Date (DBMS)
- Serverul Oracle - pentru stocarea şi managementul informaţiei utilizate de aplicaţii.
Printre multele dezvoltări de aplicaţii şi produse pentru utilizatori accesibile în familia
Oracle, există o posibilitate comună pentru a accesa baza de date.
Dacă direct sau indirect, aceasta este realizată prin Limbajul cu Structura de Interogare
(SQL),va fi un subiect pe care noi il vom trata în acest curs.
Produsele Oracle conţin:
Oracle Text Retrieval
O tehnologie care adaugă capabilităţi de refacere completă a textului într-o bază de
date Oracle.
Pro*Oracle
O serie de precomilatoare care permit accesul bazelor de date Oracle la limbajele de
programare C, Cobol, Fortran , PL/1, Pascal şi Ada.
Oracle Card
O interfaţă utilizator pentru producerea aplicaţiilor cu baze de date uşor de folosit ce
incorporează grafice şi facilităţi multimedia.
Oracle CASE
O familie de instrumente care ajută la analiza, designul şi generarea aplicaţiilor
Oracle.
SQL*Plus
Un instrument care permite o utilizare directă şi interactivă a limbajului SQL pentru a
accesa serverul Oracle, utilizând comenzi ad-hoc sau prin rularea fişierelor de comandă.
4
SQL, SQL*PLUS şi PL/SQL
*SQL
este limbajul utilizat pentru a accesa o bază de date relaţională, inclusiv Oracle.
poate fi utilizat de fiecare instrument Oracle, când accesul la baza de date este
necesar.
*PL/SQL
este limbajul Procedural al lui Oracle pentru scrierea aplicaţiilor şi pentru
manipularea datelor în afara bazei de date;
poate include un subset al comenzilor SQL, când accesul la baza de date este cerut;
este accesibil în fiecare din produsele CDE. De asemenea în însuşi serverul Oracle
(dacă opţiunea procedurală este instalată).
*SQL*Plus
este un produs Oracle în care limbajele SQL şi PL/SQL pot fi utilizate;
de asemenea are propriul limbaj de comandă pentru controlul comportării
produsului şi pentru formatarea rezultatelor interogărilor SQL.
În concluzie, SQL şi PL/SQL sunt limbaje care sunt utilizate într-un număr de produse
Oracle.
5
2. DESCRIEREA APLICAŢIEI
Această aplicaţie realizează evidenţa unei farmacii şi este realizată cu ajutorul Oracle
Application Expres.
Din punct de vedere compoziţional, aplicaţia este organizată în cinci secţiuni care pot
fi vizitate prin accesarea meniurilor corespunzatoare. Aceste secţiuni sunt: Home,
Medicamente, Furnizori, Achiziţii/Desfacere, Situaţii.
Atunci când este accesat unul dintre meniuri, intrăm în secţiunea asociată acestuia.
La accesarea meniului Home, intrăm în prima pagină a aplicaţiei, pagina de start.
Aceasta conţine numele, autorul proiectului, cât şi profesorul coordonator.
La accesarea meniului Medicamente se face intrarea in pagina ce contine lista
operatiilor ce pot fi efectuate asupra tabelei Medicamente.
Operatiile care se pot efectua asupra tabelei Medicamente sunt:
- adaugare informatii medicamente
- modificare informatii medicamente
- stergere informatii medicamente
6
Prin apasarea butonului Adaugare informatii medicamente ajungem in pagina prin
care se poate realiza adaugarea de informatii in tabela medicamente.
In cazul in care optiunea aleasa este Salvare, dupa adaugarea in baza de date, se
realizeaza redirectionarea catre pagina anterioara pentru a putea vizualiza rezultatul adaugarii.
In cazul in care utilizatorul se hotaraste sa renunte la adaugarea de informatii, acesta
poate prin simpla apasare a butonului Renuntare sa se intoarca in pagina principala a
meniului Medicamente.
Prin apasarea butonului Modificare informatii medicamente ajungem in pagina cu
informatiile despre medicamentele aflate pe stoc, în vederea selectării medicamentului ale
cărui informaţii vor fi modificate.
Utilizatorul poate aranja datele in ordine crescatoare sau descrescatoare dupa: Cod
bara, Denumire, Categorie, Pret de vanzare, le poate filtra si poate alege cate randuri sa
apara pe pagina iar in coltul din dreapta, butonul Resetare filtru reseteaza filtrele la forma
initiala.
7
Dupa alegerea medicamentului ale carui informatii vor fi modificate, ajungem in
pagina unde putem modifica campurile despre medicament: Cod bare, Denumire, Unitate
de masura, Categorie, Pret de vanzare, Compensabil.
Butonul Salvare va memora modificarile facute iar cel de Renuntare ne intoarce la
pagina anterioara.
Pagina Stergere informatii medicament ne ajuta sa stergem informatiile despre un
medicament din tabela.
Avem si aici de asemenea optiunile de a aranja sau filtra datele.
8
Dupa ce am ales o masina pe care dorim sa o stergem,ne sunt afisate detaliile acesteia
si trebuie sa confirmam prin apasarea butonului Stergere sau Renuntare in cazul in care
dorim sa renuntam la proces intorcandu-ne la pagina anterioara.
La accesarea meniului Furnizori se face intrarea in pagina ce contine lista operatiilor
ce pot fi efectuate asupra tabelei Furnizori.
Operatiile care se pot efectua asupra tabelei Furnizori sunt:
- adaugare informatii furnizori
9
- modificare informatii furnizori
10
- stergere informatii furnizori
11
La accesarea meniului Achizitie/Desfacere se face intrarea in pagina ce contine lista
operatiilor ce pot fi efectuate asupra tabelei Facturi, Lista_fact si Bonuri, Lista_bon.
Operatiile care se pot efectua asupra tabelei Operati sunt:
- adaugare informatii achizitii
- adaugare informatii desfacere
Prin apasarea butonului Adaugare informatii achizitii se deschide pagina in care se
selecteaza furnizorul, dupa care se introduc informatiile despre factura : Numar si Data
facturii.
12
Aceste date vor fi salvate in tabela FACTURI, urmand ca datele despre produsele
aflate pe factura (produsul, cantitatea si pretul de intrare) sa fie memorate in tabela
LISTA_FACT.
13
Dupa selectarea unui produs se poate inchide factura sau se poate adauga un nou
produs pe factura.
Prin apasarea butonului Adaugare informatii desfacere ajungem la pagina cu produsele
aflate pe stoc ce pot fi vandute. In primul ecran utilizatorul selecteaza datele despre bonul de
vanzare : numar bon, data bon, numar reteta. Aceste date sunt memorate in table
LISTA_BON.
14
In ecranul urmator sunt introduse datele despre produsul vandut : denumire,
cantitate, pret de vanzare.
15
In continuare bonul poate fi inchis sau se poate repeta operatia de adaugare a unui nou
produs pe bonul de vanzare.
La accesarea meniului Situatii se face intrarea in pagina ce contine lista situatiilor de
iesire.
16
Exista urmatoarele Situatii de iesire:
- Stoc produse
- Lista produselor cumparate intr-o luna
- Lista produselor vandute intr-o luna
- Lista facturilor de cumparare intr-o luna
- Lista facturilor de vanzare intr-o luna
Prin apasarea butonului Stoc produse sunt afisate produsele aflate pe stoc, cat si stocul
existent la momentul respectiv. Stocul produselor se calculeaza adaugand la stocul initial al
fiecarui produs cantitatea intrata si scazand cantitatea vanduta.
Se poate realiza sortarea si filtrarea datelor din tabel precum si exportul acestora intr-
un fisier excel.
17
Prin apasarea butonului Lista produselor cumparate intr-o luna este selectata luna si
anul despre care dorim informatii, dupa care sunt afisate informatiile despre produsele
cumparate in acea luna. Utilizatorul poate filtra si sorta datele dupa categorie, cod bara,
denumire, pret de intrare, cantitate si poate alege cate randuri ce vor fi afisate. De
asemenea datele pot fi exportate intr-un fisier excel.
18
Prin apasarea butonului Lista produselor vandute intr-o luna este selectata luna si anul
despre care dorim informatii, dupa care sunt afisate informatiile despre produsele vandute in
acea luna. Utilizatorul poate filtra si sorta datele dupa categorie, cod bara, denumire, pret
de intrare, cantitate si poate alege cate numarul de randuri ce vor fi afisate. De asemenea
datele pot fi exportate intr-un fisier excel.
19
Prin apasarea butonului Facturi cumparare intr-o luna este selectata luna si anul despre
care dorim informatii, dupa care sunt afisate informatiile despre documentele de cumparare in
acea luna : numar document, data document, valoare. Utilizatorul poate filtra si sorta
datele dupa numar document, data document, valoare si poate alege cate randuri vor fi
afisate. De asemenea datele pot fi exportate intr-un fisier excel.
20
Prin apasarea butonului Bonuri de vanzare intr-o luna este selectata luna si anul despre
care dorim informatii, dupa care sunt afisate informatiile despre documentele de vanzare in
acea luna : numar document, data document, valoare. Utilizatorul poate filtra si sorta
datele dupa numar document, data document, valoare si poate alege cate randuri vor fi
afisate. De asemenea datele pot fi exportate intr-un fisier excel.
21
FURNIZOR
# idfurnizor
* cui
* denumire
* adr
* localitate
o tel
o email
BON
# idbon
* numar
* data
o reteta
LISTA_BON
# idlstbon
* cantitate
* pret_vanzare
MEDICAMENTE
# idmedicament
* cod_bara
* denumire
* um
* categorie
* pret_vanzare
* compensabil
o stoc_initial
FACTURA
# idfactura
* numar
* data
LISTA_FACT
#idlstfact
* cantitate
* pret_intrare
3. MODELUL CONCEPTUAL
4. MAPAREA MODELULUI CONCEPTUAL
În urma mapării modelului conceptual prezentat anterior au fost create următoarele tabele :
MEDICAMENTE
FURNIZORI
24
FACTURI
LISTA_FACT
BONURI
25
LISTA_BON
26
5. COD SQL
TABELA FURNIZORI
-CREARE TABELA-
create table furnizori (
idfurnizor NUMBER(5) PRIMARY KEY,
cui VARCHAR2(13) NOT NULL UNIQUE,
denumire VARCHAR(30) NOT NULL,
adr VARCHAR(40) NOT NULL,
localitate VARCHAR2(30) NOT NULL,
tel VARCHAR(13),
email VARCHAR(20)
)
-INSERARE INFORMATII TABELA-
insert into furnizori (idfurnizor, cui, denumire, adr, localitate, tel, email)
values (1,'R1223312','S.C. ALFA S.R.L.','B-DUL IULIU MANIU, NR.128', 'BUCURESTI',
'021466887', '[email protected]')
insert into furnizori (idfurnizor, cui, denumire, adr, localitate, tel, email)
values (2,'R1489412','S.C. BETA S.R.L.','B-DUL IULIU MANIU, NR.1', 'BUCURESTI',
'021412347', '[email protected]')
insert into furnizori (idfurnizor, cui, denumire, adr, localitate, tel, email)
values (3,'R98765432','S.C. ATIBIOTICE S.A.','B-DUL SUCEVEI, NR.1','IASI', '0344444444',
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE furnizori_seq start with 4 increment by 1
-CREARE VIZUALIZARE LISTA FURNIZORI-
create or replace view v_furnizor_gest as(
select denumire||' - '||cui as FURNIZOR, idfurnizor
from furnizori cit
)
TABELA MEDICAMENTE
-CREARE TABELA-
create table medicamente(
idmedicament NUMBER(5) PRIMARY KEY,
cod_bara VARCHAR2(13) NOT NULL UNIQUE,
denumire VARCHAR2(30) NOT NULL,
um CHAR(3) NOT NULL,
categorie VARCHAR(30) NOT NULL,
pret_vanzare NUMBER(7,2) NOT NULL,
compensabil CHAR(1) DEFAULT 'N' NOT NULL,
stoc_initial NUMBER(7,2));
-INSERARE INFORMATII TABELA-
insert into medicamente (idmedicament, cod_bara, denumire, um, categorie, pret_vanzare,
compensabil, stoc_initial) values (1,'9876512435127', 'ALGOCALMIN', 'CUT', 'ANALGEZIC',
9.5, 'N', 200)
insert into medicamente (idmedicament, cod_bara, denumire, um, categorie, pret_vanzare,
compensabil, stoc_initial) values (2, '9876527415127', 'PARACETAMOL', 'CUT',
'ANTIINFLAMATOR', 8.5, 'N', 150)
27
insert into medicamente (idmedicament, cod_bara, denumire, um, categorie, pret_vanzare,
compensabil, stoc_initial) values (3, '987109215127', 'TETRACICLINA', 'CUT', 'ANTIBIOTIC',
12, 'D', 0)
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE medicamente_seq start with 4 increment by 1
-CREARE VIZUALIZARE LISTA MEDICAMENTE-
create or replace view v_medicamente_gst as(
select denumire||' - '||cod_bara as DENUMIRE, idmedicament
from medicamente med
)
-CREARE VIZUALIZARE LISTA STOC MEDICAMENTE (FARA STOC ZERO)-
create or replace view v_medicamente_gest as(select (denumire||' ('||um||') -'||compensabil) as
DENUMIRE, sum(stoc) as STOC, idmedicament FROM
(select idmedicament, denumire, um, compensabil, med.stoc_initial as stoc
from medicamente med
UNION
select idmedicament, denumire, um, compensabil,((select sum(lsf.cantitate) from lista_fact lsf
where lsf.idmedicament=med.idmedicament)) as stoc
from medicamente med group by idmedicament, denumire,um, compensabil
UNION
select idmedicament, denumire, um, compensabil,((select (-1)*sum(lsb.cantitate) from lista_bon lsb
where lsb.idmedicament=med.idmedicament)) as stoc
from medicamente med group by idmedicament, denumire,um, compensabil)
GROUP BY idmedicament, denumire, um, compensabil
HAVING sum(stoc)>0
)
-CREARE VIZUALIZARE LISTA STOC MEDICAMENTE (INCLUSIV STOC ZERO)-
create or replace view v_medicamente as(select (denumire||' ('||um||') -'||compensabil) as
DENUMIRE, sum(stoc) as STOC, idmedicament FROM
(select idmedicament, denumire, um, compensabil, med.stoc_initial as stoc
from medicamente med
UNION
select idmedicament, denumire, um, compensabil,((select sum(lsf.cantitate) from lista_fact lsf
where lsf.idmedicament=med.idmedicament)) as stoc
from medicamente med group by idmedicament, denumire,um, compensabil
UNION
select idmedicament, denumire, um, compensabil,((select (-1)*sum(lsb.cantitate) from lista_bon lsb
where lsb.idmedicament=med.idmedicament)) as stoc
from medicamente med group by idmedicament, denumire,um, compensabil)
GROUP BY idmedicament, denumire, um, compensabil
)
TABELA FACTURA
-CREARE TABELA-
create table facturi (
idfactura NUMBER(5) PRIMARY KEY,
28
idfurnizor NUMBER(5) NOT NULL REFERENCES furnizori(idfurnizor),
numar VARCHAR2(10) NOT NULL,
data DATE DEFAULT SYSDATE NOT NULL
)
-INSERARE INFORMATII TABELA-
insert into facturi (idfactura,idfurnizor,numar,data) values (1,1,'12345','01-FEB-2013');
insert into facturi (idfactura,idfurnizor,numar,data) values (2,1,'54321','02-FEB-2013');
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE facturi_seq start with 3 increment by 1
TABELA LISTA_FACT
-INSERARE INFORMATII TABELA-
create table lista_fact (
idlstfact NUMBER(10) PRIMARY KEY,
idfactura NUMBER(5) NOT NULL REFERENCES facturi(idfactura),
idmedicament NUMBER(5) NOT NULL REFERENCES medicamente (idmedicament),
cantitate NUMBER(3) NOT NULL,
pret_intrare NUMBER(7,2) NOT NULL
)
-INSERARE INFORMATII TABELA-
insert into lista_fact (idlstfact,idfactura,idmedicament,cantitate,pret_intrare) values (1,1,1,10,8.5)
insert into lista_fact (idlstfact,idfactura,idmedicament,cantitate,pret_intrare) values (2,1,2,10,7.5)
insert into lista_fact (idlstfact,idfactura,idmedicament,cantitate,pret_intrare) values (3,1,3,5,11)
insert into lista_fact (idlstfact,idfactura,idmedicament,cantitate,pret_intrare) values (4,1,4,5,9)
insert into lista_fact (idlstfact,idfactura,idmedicament,cantitate,pret_intrare) values (6,2,1,10,8.5)
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE lista_fact_seq start with 7 increment by 1
TABELA BONURI
-CREARE TABELA-
create table bonuri (
idbon NUMBER(5) PRIMARY KEY,
numar VARCHAR2(10) NOT NULL,
data DATE DEFAULT SYSDATE NOT NULL,
valoare NUMBER(15,2),
reteta VARCHAR2(5)
)
-INSERARE INFORMATII TABELA-
insert into bonuri (idbon,numar,data,valoare,reteta) values (1,'123456','15-FEB-2013',18,'123')
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE bonuri_seq start with 2 increment by 1
TABELA LISTA_BON
-CREARE TABELA-
29
create table lista_bon (
idlstbon NUMBER(10) PRIMARY KEY,
idbon NUMBER(5) NOT NULL REFERENCES bonuri(idbon),
idmedicament NUMBER(5) NOT NULL REFERENCES medicamente(idmedicament),
cantitate NUMBER(3) NOT NULL,
pret_vanzare NUMBER(7,2) NOT NULL
)
-INSERARE INFORMATII TABELA-
insert into lista_bon (idlstbon,idbon,idmedicament,cantitate,pret_vanzare) values (1,1,1,1,9.5)
insert into lista_bon (idlstbon,idbon,idmedicament,cantitate,pret_vanzare) values (2,1,2,1,8.5)
-CREARE SECVENTA PENTRU GENERARE CHEIE PRIMARA-
CREATE SEQUENCE lista_bon_seq start with 3 increment by 1
SITUATII DE IESIRE
STOC PRODUSE
select idmedicament, categorie, cod_bara, denumire, um, pret_vanzare, compensabil, sum(stoc) as
STOC
from (
select idmedicament, categorie, cod_bara, denumire, um, pret_vanzare, compensabil,
med.stoc_initial as stoc
from medicamente med
UNION
select idmedicament, categorie, cod_bara, denumire, um, pret_vanzare, compensabil,(select
sum(lsf.cantitate) from lista_fact lsf where lsf.idmedicament=med.idmedicament) as stoc
from medicamente med
UNION
select idmedicament, categorie, cod_bara, denumire, um, pret_vanzare, compensabil,(select (-1) *
sum(lsb.cantitate) from lista_bon lsb where lsb.idmedicament=med.idmedicament) as stoc
from medicamente med
)
group by idmedicament, categorie, cod_bara, denumire, um, pret_vanzare, compensabil
LISTA PRODUSE CUMPARATE INTR-O LUNA
select lsf.idmedicament, med.categorie, med.cod_bara, med.denumire, med.um,
med.compensabil,lsf.pret_intrare, sum(lsf.cantitate) as CANTITATE,
lsf.pret_intrare*sum(lsf.cantitate) as VALOARE
from lista_fact lsf, medicamente med, facturi fact
where (lsf.idmedicament=med.idmedicament) and (lsf.idfactura=fact.idfactura) and
TO_NUMBER(TO_CHAR(fact.data,'MM')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P17_LUNA,'DD.MM.YYYY'),'MM')) and
TO_NUMBER(TO_CHAR(fact.data,'YYYY')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P17_LUNA,'DD.MM.YYYY'),'YYYY'))
group by lsf.idmedicament, med.categorie, med.cod_bara, med.denumire, med.um,
med.compensabil, lsf.pret_intrare
LISTA PRODUSE VANDUTE INTR-O LUNA
select lsb.idmedicament, med.categorie, med.cod_bara, med.denumire, med.um, med.compensabil,
lsb.pret_vanzare, sum(lsb.cantitate) as CANTITATE
from lista_bon lsb, medicamente med, bonuri bon
30
where (lsb.idmedicament=med.idmedicament) and (lsb.idbon=bon.idbon) and
TO_NUMBER(TO_CHAR(bon.data,'MM')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P18_LUNA,'DD.MM.YYYY'),'MM')) and
TO_NUMBER(TO_CHAR(bon.data,'YYYY')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P18_LUNA,'DD.MM.YYYY'),'YYYY'))
group by lsb.idmedicament, med.categorie, med.cod_bara, med.denumire, med.um,
med.compensabil, lsb.pret_vanzare
LISTA FACTURILOR DE CUMPARARE INTR-O LUNA
select fact.idfactura, fact.numar, fact.data, fur.denumire, fur.localitate, (select sum (lstf.cantitate *
lstf.pret_intrare) from lista_fact lstf where fact.idfactura=lstf.idfactura ) AS VALOARE
from facturi fact, furnizori fur
where (fact.idfurnizor=fur.idfurnizor) and TO_NUMBER(TO_CHAR(fact.data,'MM')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P19_LUNA,'DD.MM.YYYY'),'MM')) and
TO_NUMBER(TO_CHAR(fact.data,'YYYY')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P19_LUNA,'DD.MM.YYYY'),'YYYY'))
LISTA BONURILOR DE VANZARE INTR-O LUNA
select bon.idbon, bon.numar, bon.data,
(select sum(lstb.cantitate*lstb.pret_vanzare) from lista_bon lstb where bon.idbon=lstb.idbon) AS
VALOARE
from bonuri bon
where TO_NUMBER(TO_CHAR(bon.data,'MM')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P20_LUNA,'DD.MM.YYYY'),'MM')) and
TO_NUMBER(TO_CHAR(bon.data,'YYYY')) =
TO_NUMBER(TO_CHAR(TO_DATE(:P20_LUNA,'DD.MM.YYYY'),'YYYY'))
31
6. BIBLIOGRAFIE
1. Popescu, Carmen, ”Manual de informatică pentru clasa a XII-a”, Editura L&S Info-mat,
2007
2. Nume site : ORACLE ACADEMY
https://academy.oracle.com/pages/student_area.htm
Ce aţi găsit pe acest site : Curs online SQL si PL/SQL
3. Nume site : Building an Application using Oracle Application Express
http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/devdays2012/apexp1_lab/apex
p1_lab.html
Ce aţi găsit pe acest site : Tutorial pentru realizarea aplicatiilor utilizând Application Express