Professional Documents
Culture Documents
PROIECT
Gestionarea stocurilor unui depozit de materiale de construcii
Coordonator tiinific
Asist.ing.Dan Munteanu
Student
Auric Alexandru-Daniel
Grupa 22C31A
Galai
2013
Analiza problemei
Volumul mare de informatii existente in cazul unui deposit de
material cu un numar mare de materiale de constructii,client si furnizori
determina necesitatea informatizarii domeniului de gestiune a
stocurilor dintr-un depozit de materiale de constructii.
Activitatea de evident a stocurilor unui depozit de materiale de
constructii implica o munca intense cu numeroase documente care tin de
inregistrarea clientilor,a furnizorilor,de inregistrarea tuturor produselor
de toate tipurilor si a comenzilor accestora,cat si de transportul acestora
intr-un timp cat mai scurt.Prin informatizarea domeniului de eivdenta a
stocurilor dintr-un depozit de materiale de constructii se castiga timp si
se evita pierderea unor date,nefiind necesare consultarea unui numar
mare de documente ce tin de gestionarea stocurilor unui depozit.Se obtin
astfel mult mai usor informatii despre clienti,furnizori,comenzi,stocarea
produselor,transportul produselor.
Definirea depozitelor si a stocurilor:
Prin stoc se intelege cantitatea de bunuri existente intr-un depozit
la un moment dat.Depozitul este folosit ca punct de achizitionare de
marfuri,depozitare de marfuri de catre client,respective furnizori.
Depozitele se definesc n general din trei puncte de vedere:
tehnic, economic i organizatoric.
Sub aspectul tehnic al noiunii, prin depozit se nelege orice
construcie sau suprafa special amenajat pentru primirea-pstrareaconservarea-eliberarea-livrarea resurselor i produselor finite (cldire,
ncpere, hal, magazie, opron, hambar, siloz, platform), dotat cu
Cerintele aplicatiei
denumirea produsului;
pretul produsului;
transporturi,dupa:
adresa transportului;
facturi,dupa:
data facturii;
valoarea facturii;
cantitatea de pe facture;
client,dupa:
numele clientului;
CNP-ul clientului;
telefonul clientului;
bonuri,dupa:
data bonului;
valoarea bonului;
furnizori,dupa:
nume furnizorului;
codul fiscal;
telefonul furnizorului;
adaugare de:
o
facturi;
bonuri;
transporturi;
client;
produse;
furnizori;
stergere de:
o
facturi;
bonuri;
transporturi;
client;
produse;
furnizori;
modificare de:
o
facturi;
bonuri;
transporturi;
client;
produse;
furnizori;
creare rapoarte:
o dupa categoria de produse;
Modelul relational
PRODUSE [ codprodus, denprodus, categorie, cantitate, pret, codtransport]
CLIENTI [ codclient, numeclient, prenume, CNPclient, domiciliu, telclient ]
Modelul fizic
PRODUSE:
- codprodus: int(10)
- denprodus: varchar(45)
- categorie: varchar(45)
- cantitate: float
- pret: float
CLIENTI:
- codclient: int(10)
- numeclient: varchar (45)
- prenume: varchar(45)
- CNPclient: varchar(45)
- domiciliu: varchar(45)
- telclient: varchar(45)
FURNIZORI:
- codfurnizor: int(10)
- numefurnizor: varchar(45)
- codfiscal: varchar(10)
- adresafurnizor: varchar(45)
- telfurnizor: varchar(10)
FACTURI:
- codfactura: int(10)
- datafactura: date
- furnizor: varchar(45)
- produs: varhcar(45)
- totalfactura: int(20)
- achitatfactura: tinyint(1)
- facturafurnizor: tinyint(1)
- facturaclient: tinyint(1)
- cant_factura: int(10)
BON:
- codbon: int(10)
- databon: date
- nume_client: varchar(45)
- totalbon: float
- achitatbon: tinyint(10)
TRANSPORT:
- codtransport: int(10)
- adresadestinatie: varchar(45)
- efectuat_t: tinyint(1)
FACTURI_PRODUSE
- codfactura: int(10)
- codprodus: int(10)
PRODUSE_BON
- codprodus: int(10)
- codbon: int(10)
Descrierea aplicaiei
Aplicaia este implementat n limbajul Java. Prin program se conecteaz
aplicaia la serverul Mysql server unde se afl baza de date prezentat mai sus,
prin intermediul tehnologiei JDBC( Java Database Connectivity). Mediul de
dezvoltare folosit este NetBeans IDE versiunea 7.2.1 .
Aplicatia contine urmatoarele clase:Jframe_principal, c_raport, cautare_bon,
cautare_client, cautare_factura, cautare_furnizor, cautare_produs,
cautare_transport, frame_bonuri, frame clienti, frame_facturi, frame_furnizori,
frame_produse, frame_transporturi, modificare_bon, modificare_clienti,
modificare_factura, modificare_furnizor, modificare_produs, modificare_transport,
stergere_bonuri, stergere_clienti, stergere_facturi, stergere_furnizori,
stergere_produse, stergere_transporturi, Conexiune, AlexProject;
Clasa Conexiune contine codul pentru realizarea unei conexiuni cu baza de
date.
Clasa Jframe_principal contine codul pentru realizarea ferestrei principale
din interfata. Aceasta contine diferite butoane, meniuri si ascultatoare pe butoane
respectiv pe Item-urile din meniuri. La inceput, inainte de apasarea oricarui buton
sau meniu interfata arata in felul urmator:
Dupa cum se poate observa in coltul din stanga sus este un meniu format
din 3 optiuni:Consultare, Operatii, Rapoarte. Odata cu apasarea optiuni Consultare
din meniu, optiune de unde se selecteaza ce tabela doreste utilizatorul sa
vizualizeze, fereastra principal se transforma in felul urmator:
Rezultatul va si afisat atat in acea lista, dupa cum se poate vedea mai sus,
dar va fi afisat si in tabel, dupa cum se poate vedea mai departe:
Bibliografie:
1. http://www.vogella.com/articles/JavaPDF/article.html
2. http://docs.oracle.com/javase/6/docs/api/
3. http://stackoverflow.com/
4. http://www.depozit-online.ro
5. http://www.javaworld.com
6. http://www.scribd.com
7. http://www.w3schools.com
8. http://forums.netbeans.org
9. http://www.iconarchive.com
10. http://docs.oracle.com
Anexa 1:
Codul folosit pentru crearea functiile care efectueaza adaugarea de produs:
}
System.out.println("Executie add jComboBox_produse1");
}
return produse;
}
public void setComboprod()
{ jComboBox1_produse1.removeAllItems();
String[] produse = get_list_of_values_produse("select
distinct(categorie) from produse");
jComboBox1_produse1.addItem("
");
for (String element : produse) {
jComboBox1_produse1.addItem(element);}}
public frame_produse() {
initComponents();
this.setLocation(1000, 20);
setComboprod(); }
public void adaugare_produs(){
Connection conn = null;
Statement stmt = null;
String denprodus=jTextField1.getText();
String categorie=jTextField4.getText();
int cantitate=Integer.parseInt(jTextField2.getText());
int pret=Integer.parseInt(jTextField3.getText());
System.out.println(categorie);
//System.out.println(cantitate);
if (categorie.equals(""))
categorie=jComboBox1_produse1.getSelectedItem().toString();
try {
conn = Jframe_principal.getConnection();
System.out.println("conn=" + conn);
stmt = conn.createStatement();
int nr = stmt.executeUpdate("insert into produse
(denprodus,categorie,cantitate,pret)
values('"+denprodus+"','"+categorie+"',"+cantitate+","+pret+")")
;
JOptionPane.showMessageDialog(null,"Produsul a fost
adaugat cu succes! ",null,JOptionPane.INFORMATION_MESSAGE);
setComboprod();
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("Executie algoritm adaugare_bon");
}}
Anexa 2:
Codul folosit pentru crearea functiile care efectueaza stergerea de produs:
public static List getResults(String query) throws SQLException
{
List<String> results = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
while (rs.next()) {
results.add(rs.getString(1));
}} catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}} return results;}
public void cautare_pentru_stergere_produse(){
String denprodus=jtextFieldStergereProduse.getText();
final DefaultListModel model = new DefaultListModel();
List<String> list = null;
try {
list = getResults("select denprodus from produse where
denprodus regexp '"+denprodus+"' ");
} catch (SQLException ex) {
}
Iterator itr = list.iterator();
while (itr.hasNext()) {
model.addElement(itr.next());
}
jListStergereProduse.setModel(model);
}
public void stergere_produse(){
String
denprodus=jListStergereProduse.getSelectedValue().toString();
String cantitate=jTextField10_cantitate.getText();
Connection conn = null;
Statement stmt = null;
try {
conn = getConnection();
stmt = conn.createStatement();
int update = stmt.executeUpdate("update produse
set cantitate=cantitate-"+cantitate+" where
denprodus='"+denprodus+"' ");
//int update = stmt.executeUpdate("delete from
produse where denprodus='"+denprodus+"' ");
JOptionPane.showMessageDialog(null,"Produsul a
fost sters cu succes! ",null,JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
}
finally {
try {conn.close();
} catch (SQLException e) {
e.printStackTrace();
}}}
Anexa 3:
Codul folosit pentru crearea functiile care efectueaza modificare de produs:
public modificare_produs() {
initComponents();
this.setLocation(1000, 20);
jLabel1_modificare_produs.setVisible(false);
}
public void modificare_produs(){
Connection conn = null;
Statement stmt = null;
int codprodus =
Integer.parseInt((String)jLabel1_modificare_produs.getText());
String denprodus=jTextField1_modificare_produs.getText();
String categorie=jTextField4_modificare_produs.getText();
int
cantitate=Integer.parseInt(jTextField2_modificare_produs.getText
());
int
pret=Integer.parseInt(jTextField3_modificare_produs.getText());
System.out.println(categorie);
try {
conn = Jframe_principal.getConnection();
System.out.println("conn=" + conn);
stmt = conn.createStatement();
int nr = stmt.executeUpdate("update produse set
denprodus='"+denprodus+"',categorie='"+categorie+"',cantitate="+
cantitate+",pret='"+pret+"' where codprodus="+codprodus+"");
JOptionPane.showMessageDialog(null,"Produsul a fost
modificat cu succes! ",null,JOptionPane.INFORMATION_MESSAGE);
}
catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();}
System.out.println("Executie algoritm adaugare_bon");}}
Anexa 4:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
CREATE SCHEMA IF NOT EXISTS `proiect_alex` DEFAULT CHARACTER SET
latin1 COLLATE latin1_swedish_ci ;
use `proiect_alex` ;
-- ------------------------------------------------------ Table `Transport`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `proiect_alex`.`Transport` (
`codtransport` INT(10) NOT NULL AUTO_INCREMENT,
`adresadestinatie` VARCHAR(45) NULL ,
`efectuat_t` TINYINT(1) NULL ,
PRIMARY KEY (`codtransport`) )
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `Produse`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `proiect_alex`.`Produse` (
`codprodus` INT(10) NOT NULL AUTO_INCREMENT ,
`denprodus` VARCHAR(45) NULL ,
`categorie` VARCHAR(45) NULL ,
`cantitate` FLOAT(10) NULL ,
`pret` FLOAT(10) NULL,
PRIMARY KEY (`codprodus`) )
ENGINE = InnoDB;
-- ------------------------------------------------------ Table `Clienti`
-- ----------------------------------------------------CREATE TABLE IF NOT EXISTS `proiect_alex`.`Clienti` (
`codclient` INT(10) NOT NULL AUTO_INCREMENT ,
`numeclient` VARCHAR(45) NULL ,
`prenume` VARCHAR(45) NULL ,
`CNPclient` VARCHAR(13) NULL ,
ENGINE = InnoDB;
Anexa 5:
Codul folosit pentru crearea functiile care efectueaza cautare de produs:
public static List getResults(String query) throws SQLException
{
List<String> results = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery(query);
while (rs.next()) {
results.add(rs.getString(1));
}} catch (Exception e) {
e.printStackTrace();
System.exit(1);
} finally {
// release database resources
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return results;
}
public void cautare_produse(){
String
denprodus=jTextField3_denumire_cautare_introducere.getText();
String
categorie=jTextField1_categorie_cautare_introducere.getText();
String pret=jTextField2_pret_cautare_introducere.getText();
int ok=0;
final DefaultListModel model = new DefaultListModel();
List<String> list = null;
String query = " ";
try {
if (denprodus.isEmpty() && categorie.isEmpty() &&
pret.isEmpty()){
JOptionPane.showMessageDialog(null," Nu ati completa nici
un criteriu de cautare !"+"\n"+"Completati cel putin un criteriu
de cautare ! ",null,JOptionPane.INFORMATION_MESSAGE);
ok=1;}
else {ok=0;
if(!denprodus.isEmpty() && !categorie.isEmpty() && !
pret.isEmpty() ){
query="select * from produse where denprodus regexp
'"+denprodus+"' and categorie regexp '"+categorie+"' and
pret="+pret+" ";
list = getResults("select denprodus from produse
where denprodus regexp '"+denprodus+"' and categorie regexp
'"+categorie+"' and pret="+pret+" ");
AlexProject.principal.refresh_produse(query);
}
else
if(denprodus.isEmpty() && !
categorie.isEmpty() && !pret.isEmpty() ){
query="select * from produse where categorie
regexp '"+categorie+"' and pret="+pret+" ";
list = getResults("select denprodus from
produse where categorie regexp '"+categorie+"' and
pret="+pret+" ");
AlexProject.principal.refresh_produse(query);
}
else
if(!denprodus.isEmpty() &&
categorie.isEmpty() && !pret.isEmpty() ){
query="select * from produse where
denprodus regexp '"+denprodus+"' and pret="+pret+" ";
else
if(!denprodus.isEmpty() && !
categorie.isEmpty() && pret.isEmpty() ){
query="select * from produse where
denprodus regexp '"+denprodus+"' and categorie regexp
'"+categorie+"' ";
list = getResults("select denprodus
from produse where denprodus regexp '"+denprodus+"' and
categorie regexp '"+categorie+"' ");
AlexProject.principal.refresh_produse(query);
}
else
if(denprodus.isEmpty() &&
categorie.isEmpty() && !pret.isEmpty() ){
list = getResults("select
denprodus from produse where pret="+pret+" ");
query="select * from produse
where pret="+pret+" ";
AlexProject.principal.refresh_produse(query);
}
else
if(!denprodus.isEmpty() &&
categorie.isEmpty() && pret.isEmpty() ){
query="select * from produse
where denprodus regexp '"+denprodus+"' ";
list = getResults("select
denprodus from produse where denprodus regexp '"+denprodus+"'
");
AlexProject.principal.refresh_produse(query);
}
else
if(denprodus.isEmpty()
&& !categorie.isEmpty() && pret.isEmpty() ){
query="select * from
produse where categorie regexp '"+categorie+"' ";
list =
getResults("select denprodus from produse where categorie regexp
'"+categorie+"' ");
AlexProject.principal.refresh_produse(query);
} }
} catch (SQLException ex) {
}
if (ok==0){
Iterator itr = list.iterator();
while (itr.hasNext()) {
model.addElement(itr.next());
}
jListCautareProduse.setModel(model);
}}