Post on 07-Nov-2015
description
transcript
COLEGIUL NAIONAL CALISTRAT HOGA TECUCIAtestat la informatic
Gestiune firma de taxiuri Mai 2015Visual Fox Professional
Profesor coordonator Elev
Ionescu Gabriela
Neacu Bogdan
Clasa a XII-a CContents
3Capitolul I - Introducere
31.Denumirea temei
32.Enunul temei
33.Motivaia lucrrii
4Capitolul II - Analiz
41.Descrierea activitatii analizate
42. Prezentarea coleciilor de date
53. Prezentarea suportului teoretic
9Capitolul III - Arhitectura sistemului
91. Modelul conceptual al datelor
102. Implementarea aplicaiei
113. Prezentarea programelor
25Interogri
26Capitolul IV- Listare program
26Bibliografie
Capitolul I - Introducere
1.Denumirea temei
Gestiune firma de taxiuri2.Enunul temei
Se va elabora un sistem informatic care s realizeze evidenta unei firme de taxiuri folosind Visual FoxPro.
Aplicaia va conine :-meniu-formulare pentru actualizarea bazei de date-interogri3.Motivaia lucrrii
Lucrarea a fost elaborata cu scopul de a tine evidenta unei firme de taxiuri. Capitolul II - Analiz
1.Descrierea activitatii analizate
Evidenta unui dealer auto se realizeaz prin manipularea unor informaii despre date_firma (cod_d, cod_fiscal, nume, adresa, oras, telefon, lei_km), angajati (cod_a, nume, prenume, telefon, functie, salariu), masini (cod_m, nume, numar_inmatriculare, km, an_fabr).
2. Prezentarea coleciilor de date
Baza de date Taxi.dbc cuprinde 3 tabele utilizate n activitatea analizat:-tabela date_firma.dbf cuprinde 7 cmpuri cu informatii privind dispeceratele firmei;-tabela angajati.dbf are n componen 6 cmpuri care rein informaii cu privire la angajati;-tabela masini.dbf curpinde 5 cmpuri care furnizeaz informaii despre masinile firmei de taxi;3. Prezentarea suportului teoretic
Pentru manipularea informaiei in cadrul activitii realizate au fost folosite urmtoarele tipuri de date:
-tipul numeric, cu subtipul integer folosit pentru reprezentarea numerelor ntregi;
-tipul alfanumeric, care are ca subtip irul de caractere (character) delimitat de doua apostrofuri sau ghilimele i a crui lungime maxim este de 254 de caractere;
Baza de date relaionala este formata dintr-unul sau mai multe tabele ntre care s-au stabilit legturi (relaii). Relaia dintre doua tabele este o legtur dintre un cmp sau un ansamblu de cmpuri dintr-un tabel (cheia primar) i cmpurile corespunztoare dintr-un alt tabel (cheia secundar). Exist mai multe tipuri de relaii determinate de conectivitile maxime ale entitilor ale cror nregistrri se afl n tabele ntre care s-a stabilit o legtur printr-o asociere. n aplicaia analizat s-a utilizat tipul de legtur 1 la n (1:n) adica o nregistrare din primul tabel este legat la mai multe nregistrari din al doilea tabel.
Actualizarea tabelului se poate face prin:
Adugarea de noi nregistrri:
-adugarea de nregistrri la sfritul tabelului prin intermediul comenzii append
-adugarea unei nregistrri vide : append blank-adugarea nregistrrilor dintr-un alt tabel:
append from [fields ] [for ];
-inserarea n interiorul tabelului:
insert [before] [blank];
tergerea nregistrrilor:
-tergere logica : delete [] [for ] [while ];
-refacerea nregistrrilor sterse logic :
recall [] [for ] [while ];
-tergerea fizica: pack;
-tergerea fizica a tuturor nregistrrilor : zap;
Modificarea nregistrrilor:
-nlocuirea valorii unui cmp cu o valoare specificat :
replace nume camp [] with [for ] [while ];
-interactiv, prin urmatoarele comenzi:
browse [fields ] [noappend] [noedit] [nodelete]; edit [fields ] [noappend] [noedit] [nodelete]; change [fields ] [noappend] [noedit] [nodelete];Consultarea tabelului pentru obinerea unor informaii:
list/display [fields] [] [for ] [while ] [to printer \ to file ] [off]; list=dispay all;Sortarea tabelului
n urma sortrii unui tabel se creeaz un nou tabel n care nregistrrile sunt rearanjate n urma criteriului de sortare folosit. Sintaxa comenzii este :
sort to on [/a] [/d] [/c] [ [/a] [/d] [/c] ...] [ascending] [descending] [] [for ] [while ] [fields ];Indexarea tabelului
Sintaxa comenzii este:index on to \tag [of ] [for] [ascending] [descending] [additive];Comenzi de poziionare pe o nregistrare din tabela :1.dup numrul nregistrrii:a) goto | go n | top | bottom;b) skip [n];2.dup un criteriu logic de cutare :a) locate for [] [while ];b) continue;3.alte criterii:
a) reccount() - obine numrul de inregistrri din tabela;b) recno() - obine numrul nregistrrii curente din tabela;c) eof() - fumizeaz un rezultat logic care este .T. daca pointerul este poziionat pe ultima nregistrare din tabela;d) bof() - fumizeaz un rezultat logic care este .T. dac pointerul este poziionat pe prima nregistrare din tabela;e) found() - furnizeaz un rezultat logic care este .T. dac a avut succes operaia de cutare.Raportul este o colecie de informaii obinute din datele stocate in tabelele bazei de date, prezentate utilizatorului ntr-o form ct mai clar si mai concis. n general este conceput sub forma unui tabel avnd i funcia de sortare i grupare a datelor. Raportul se compune din : seciunea de date (Detail), antetul paginii (Page Header), subsolul paginii (Page Footer), antetul raportului (Report Header/Title), subsolul raportului (Report Footer/Summary), grupul (Group).Raportul este memorat ntr-un fiier cu extensia .frx si se poate tipri cu comanda:report form [heading ] [summary] [J [for ] [while ] [to printer | to file ].Interogarea este operaia prin care se extrag date din baza de date - far s fie terse sau modificate - ce vor fi afiate ntr-un anumit format. Folosind o interogare se pot executa urmatoarele operaii:
-combinarea nregistrrilor din mai multe tabele ntr-un singur tabel;
-selectarea numai a nregistrrilor care ndeplinesc un anumit criteriu;
-afiarea nregistrrilor n ordinea dorita;
-afiarea cmpurilor calculate.
n Visual FoxPro se poate crea o interogare :-interactiv folosind query designer;-prin limbajul SQL (instruciunea select - diferit de comanda select folosit pentru selectarea unei zonede lucru).Interogarea este salvata ntr-un fiier cu extensia .qpr si se lanseaza n execuie cu comanda:do .qprCapitolul III - Arhitectura sistemului
1. Modelul conceptual al datelor
i)Tabela date_firma:
Conine informaii despre datele dispeceratelor din firma: cod_d(N,10), cod_fiscal(N,10), nume(C,30), adresa(C,30), oras(C,30), telefon(N,10), lei_km(N,10); ii)Tabela angajai:
Conine informaii despre angajatii firmei: cod_a(N,5), nume(C,30), prenume(C,30), telefon(N,10), functie(C,30), salariu(N,10);iii)Tabela maini:
Conine informaii despre masini: cod_m(N,5), nume(C, 20), numar_inmatriculare(C,9), km(N,10), an_fabr(N,10);
2. Implementarea aplicaiei
n aplicaia analizat au fost implementate cu ajutorul formularelor proceduri de adugare, tergere, modificare, listare, cutare, sortare, interogare. Pentru fiecare dintre tabelele date_firma, angajati, masini s-au efectuat: adugare date_firma, angajati, masini, modificare date_firma, angajati, masini i tergere date_firma, angajati, masini. De asemenea asupra tabelelor s-au executat prelucrri prin intermediul interogrilor. Toate aceste operaii au fost incluse ntr-un meniu.
3. Prezentarea programelorAdugare angajai
Butonul ADUGARE (click event):
PRIVATE valcod_a
PRIVATE valnume
PRIVATE valprenume
PRIVATE valfunctie
PRIVATE valtelefon
PRIVATE valsalariu
SET TALK OFF
valcod_a=VAL(ALLTRIM(thisform.editcod_a.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valprenume=PROPER(ALLTRIM(thisform.editprenume.Text))
valfunctie=PROPER(ALLTRIM(thisform.editfunctie.Text))
valtelefon=VAL(ALLTRIM(thisform.edittelefon.Text))
valsalariu=VAL(ALLTRIM(thisform.editsalariu.Text))
IF VAL(ALLTRIM(thisform.editcod_a.Text))=0
MESSAGEBOX("Nu ati introdus cod angajat!")
RETURN
ENDIF
CLOSE ALL
SELE 1
USE angajati
LOCATE FOR (valcod_a)=cod_a
IF FOUND()=.t.
MESSAGEBOX("Exista deja acest angajat!")
RETURN
ENDIF
CLOSE ALL
USE angajati
APPEND BLANK
replace cod_a WITH valcod_a
replace nume WITH PROPER(valnume)
replace prenume WITH PROPER(valprenume)
replace functie WITH PROPER(valfunctie)
replace telefon WITH valtelefon
replace salariu WITH valsalariu
MESSAGEBOX("Adaugarea a reusit!")
Butonul RESETARE (click event):
SET TALK OFF
thisform.editcod_a.Value=""
thisform.editnume.Value=""
thisform.editprenume.Value=""
thisform.editfunctie.Value=""
thisform.edittelefon.Value=""
thisform.editsalariu.Value=""Butonul AFIARE (click event):
SET TALK OFF
USE angajati
BROWSE NOEDIT NODELETE noappend
Adugare date dispecerat
Butonul ADUGARE (click event):
PRIVATE valcod_d
PRIVATE valcod_fiscal
PRIVATE valnume
PRIVATE valadresa
PRIVATE valoras
PRIVATE valtelefon
PRIVATE vallei_km
SET TALK OFF
valcod_d=VAL(ALLTRIM(thisform.editcod_d.Text))
valcod_fiscal=VAL(ALLTRIM(thisform.editcod_fiscal.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valadresa=PROPER(ALLTRIM(thisform.editadresa.Text))
valoras=PROPER(ALLTRIM(thisform.editoras.Text))
valtelefon=VAL(ALLTRIM(thisform.edittelefon.Text))
vallei_km=VAL(ALLTRIM(thisform.editlei_km.Text))
IF VAL(ALLTRIM(thisform.editcod_d.Text))=0
MESSAGEBOX("Nu ati introdus cod dispecerat!")
RETURN
ENDIF
CLOSE ALL
SELE 1
USE date_firma
LOCATE FOR valcod_d=cod_d
IF FOUND()=.T.
MESSAGEBOX("Exista deja acest cod!")
RETURN
ENDIF
CLOSE ALL
USE date_firma
APPEND BLANK
replace cod_d WITH valcod_d
replace cod_fiscal WITH valcod_fiscal
replace nume WITH PROPER(valnume)
replace adresa WITH PROPER(valadresa)
replace oras WITH PROPER(valoras)
replace telefon WITH valtelefon
replace lei_km WITH vallei_km
MESSAGEBOX("Adaugare reusita!")Butonul RESETARE(click event):SET TALK OFF
thisform.editcod_d.Value=""
thisform.editcod_fiscal.Value=""
thisform.editnume.Value=""
thisform.editadresa.Value=""
thisform.editoras.Value=""
thisform.edittelefon.Value=""
thisform.editlei_km.Value=""
Butonul AFIARE (click event):
SET TALK OFF
USE date_firmaBROWSE NOEDIT NODELETE noappendAdugare maini
Butonul ADUGARE (click event):
PRIVATE valcod_m
PRIVATE valnume
PRIVATE valnumar_inmatriculare
PRIVATE valan_fabr
PRIVATE valkm
SET TALK OFF
valcod_m=VAL(ALLTRIM(thisform.editcod_m.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valnumar_inmatriculare=PROPER(ALLTRIM(thisform.editnumar_inmatriculare.Text))
valan_fabr=VAL(ALLTRIM(thisform.editan_fabr.Text))
valkm=VAL(ALLTRIM(thisform.editkm.Text))
IF VAL(ALLTRIM(thisform.editcod_m.Text))=0
MESSAGEBOX("Nu ati introdus cod masina!")
RETURN
ENDIF
CLOSE ALL
SELE 1
USE masini
LOCATE FOR (valcod_m)=cod_m
if FOUND()=.T.
MESSAGEBOX("Exista deja aceasta masina!")
RETURN
ENDIF
CLOSE ALL
USE masini
APPEND BLANK
replace cod_m WITH VALcod_m
replace nume WITH valnume
replace numar_inmatriculare WITH valnumar_inmatriculare
replace an_fabr WITH valan_fabr
replace km WITH valkm
MEssagebox("Adaugarea s-a efectuat!")Butonul RESETARE (click event):
SET TALK OFF
thisform.editcod_m.Value=""
thisform.editnume.Value=""
thisform.editnumar_inmatriculare.Value=""
thisform.editan_fabr.Value=""
thisform.editkm.Value=""Butonul AFIARE(click event):
SET talk OFF
USE masiniBROWSE NOEDIT NODELETE noappend
Modificare angajai
Butonul de MODIFICARE (click event):PRIVATE valcod_a
PRIVATE valnume
PRIVATE valprenume
PRIVATE valfunctie
PRIVATE valtelefon
PRIVATE valsalariu
SET TALK OFF
valcod_a=VAL(ALLTRIM(thisform.editcod_a.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valprenume=PROPER(ALLTRIM(thisform.editprenume.Text))
valfunctie=PROPER(ALLTRIM(thisform.editfunctie.Text))
valtelefon=VAL(ALLTRIM(thisform.edittelefon.Text))
valsalariu=VAL(ALLTRIM(thisform.editsalariu.Text))
IF VAL(ALLTRIM(thisform.editcod_a.Text))=0
MESSAGEBOX("Nu ati introdus cod angajat!")
RETURN
ENDIF
USE angajati
LOCATE FOR cod_a=valcod_a
IF FOUND()
IF LEN(ALLTRIM(valnume))0
replace nume WITH PROPER(valnume)
ENDIF
IF LEN(ALLTRIM(valprenume))0
replace prenume WITH PROPER(valprenume)
ENDIF
IF LEN(ALLTRIM(valfunctie))0
replace functie WITH PROPER(valfunctie)
ENDIF
IF valtelefon0
replace telefon WITH valtelefon
ENDIF
IF valsalariu0
replace salariu WITH valsalariu
ENDIF
MESSAGEBOX("Modificarea s-a efectuat!")
ELSE
MESSAGEBOX("Angajat inexistent!")
ENDIF
USE
Butonul AFIARE MODIFICARE (click event):
SET TALK OFF
valcod_a=VAL(ALLTRIM(thisform.editcod_a.Text))
SELECT * FROM angajati WHERE cod_a=valcod_a
USE
Butonul Afisare (click event):
SET TALK OFF
CLOSE ALL
USE
USE angajatiBROWSE NOEDIT NODELETE noappend
USEButonul Resetare (click event):
SET TALK OFF
thisform.editcod_a.Value=""
thisform.editnume.Value=""
thisform.editprenume.Value=""
thisform.editfunctie.Value=""
thisform.edittelefon.Value=""
thisform.editsalariu.Value=""Modificare date dispecerat
Butonul MODIFICARE (click event):
PRIVATE valcod_d
PRIVATE valcod_fiscal
PRIVATE valnume
PRIVATE valadresa
PRIVATE valoras
PRIVATE valtelefon
PRIVATE vallei_km
SET TALK OFF
valcod_d=VAL(ALLTRIM(thisform.editcod_d.Text))
valcod_fiscal=VAL(ALLTRIM(thisform.editcod_fiscal.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valadresa=PROPER(ALLTRIM(thisform.editadresa.Text))
valoras=PROPER(ALLTRIM(thisform.editoras.Text))
valtelefon=VAL(ALLTRIM(thisform.edittelefon.Text))
vallei_km=VAL(ALLTRIM(thisform.editlei_km.Text))
IF VAL(ALLTRIM(thisform.editcod_d.Text))=0
MESSAGEBOX("Nu ati introdus cod dispecerat!")
RETURN
ENDIF
USE date_firma
LOCATE FOR cod_d=valcod_d
IF FOUND()
IF valcod_fiscal0
replace cod_fiscal WITH valcod_fiscal
ENDIF
IF LEN(ALLTRIM((valnume)))0
replace nume WITH PROPER (valnume)
ENDIF
IF LEN(ALLTRIM((valadresa)))0
replace adresa WITH PROPER (valadresa)
ENDIF
IF LEN(ALLTRIM((valoras)))0
replace oras WITH PROPER (valoras)
ENDIF
IF valtelefon0
replace telefon WITH valtelefon
ENDIF
IF vallei_km0
replace lei_km WITH vallei_km
ENDIF
MESSAGEBOX("Modificarea s-a efectuat!")
ELSE
MESSAGEBOX("Dispecerat inexistent!")
ENDIF
USE
Butonul AFIARE MODIFICARE (click event):
SET TALK OFF
valcod_d=VAL(ALLTRIM(thisform.editcod_d.Text))
SELECT * FROM date_firma WHERE cod_d=valcod_d
USE
Butonul Afisare (click event):
CLOSE all
SET talk OFF
USE date_firma
BROWSE NOEDIT NODELETE noappend
Butonul Resetare (click event):
SET TALK OFF
thisform.editcod_d.Value=""
thisform.editcod_fiscal.Value=""
thisform.editnume.Value=""
thisform.editadresa.Value=""
thisform.editoras.Value=""
thisform.edittelefon.Value=""
thisform.editlei_km.Value=""Modificare maini
Butonul MODIFICARE (click event):PRIVATE valcod_m
PRIVATE valnume
PRIVATE valnumar_inmatriculare
PRIVATE valan_fabr
PRIVATE valkm
SET TALK OFF
valcod_m=VAL(ALLTRIM(thisform.editcod_m.Text))
valnume=PROPER(ALLTRIM(thisform.editnume.Text))
valnumar_inmatriculare=PROPER(ALLTRIM(thisform.editnumar_inmatriculare.Text))
valan_fabr=VAL(ALLTRIM(thisform.editan_fabr.Text))
valkm=VAL(ALLTRIM(thisform.editkm.Text))
IF VAL(ALLTRIM(thisform.editcod_m.Text))=0
MESSAGEBOX("Nu ati introdus cod masina!")
RETURN
ENDIF
USE masini
LOCATE FOR cod_m=valcod_m
IF FOUND()
IF LEN(ALLTRIM(valnume))0
replace nume WITH PROPER(valnume)
ENDIF
IF LEN(ALLTRIM(valnumar_inmatriculare))0
replace numar_inmatriculare WITH PROPER(valnumar_inmatriculare)
ENDIF
IF valan_fabr0
replace an_fabr WITH valan_fabr
ENDIF
IF valkm0
replace km WITH valkm
ENDIF
MESSAGEBOX("Modificarea s-a efectuat!")
ELSE
MESSAGEBOX("Masina inexistenta!")
ENDIF
USE
Butonul AFIARE MODIFICARE (click event):SET TALK OFF
valcod_m=VAL(ALLTRIM(thisform.editcod_m.Text))
SELECT * FROM masini WHERE cod_m=valcod_m
USE
Butonul Afisare (click event):
SET TALK OFF
CLOSE ALL
USE
USE masiniBROWSE NOEDIT NODELETE
USE
Butonul Resetare (click event):
SET TALK OFF
thisform.editcod_m.Value=""
thisform.editnume.Value=""
thisform.editnumar_inmatriculare.Value=""
thisform.editan_fabr.Value=""
thisform.editkm.Value=""tergere angajai
Butonul TERGERE (click event):CLOSE all
SELECT 1
USE angajati
PRIVATE valcod_a
PRIVATE pozitie
SET TALK OFF
valcod_a=VAL(ALLTRIM(thisform.editcod_a.Text))
**use angajati
LOCATE FOR cod_a=valcod_a
pozitie=RECNO()
IF EOF()=.T. AND FOUND()=.F.
MESSAGEBOX("Inregistrarea de sters nu exista!")
ELSE
&&pozitie=recno()
GOTO pozitie
DELETE
PACK
MESSAGEBOX("Stergere reusita!")
ENDIF
USE
Butonul AFIARE (click event):SET TALK OFF
SELECT * FROM angajatiUSEButonul RESETARE (click event):SET TALK OFF
thisform.editcod_a.Value=""
CLOSE DATA
Butonul CUTARE (click event):SET TALK OFF
IF VAL(ALLTRIM(thisform.editcod_a.Text))=0
MESSAGEBOX("Nu ati introdus cod angajat!")
RETURN
ENDIF
valcod_a=VAL(ALLTRIM(thisform.editcod_a.Text))
SELECT * FROM angajati WHERE cod_a=valcod_a
USE
tergere date dispecerat
Butonul TERGERE (click event):SELECT 1
USE date_firma
PRIVATE valcod_d
PRIVATE pozitie
SET TALK OFF
valcod_d=VAL(ALLTRIM(thisform.editcod_d.Text))
**use date_firma
LOCATE FOR cod_d=valcod_d
pozitie=RECNO()
IF EOF()=.T. AND FOUND()=.F.
MESSAGEBOX("Inregistrarea de sters nu exista!")
ELSE
&&pozitie=recno()
GOTO pozitie
DELETE
PACK
MESSAGEBOX("Stergere reusita!")
ENDIF
USEButonul CUTARE (click event):SET TALK OFF
IF VAL(ALLTRIM(thisform.editcod_d.Text))=0
MESSAGEBOX("Nu ati introdus codul dispeceratului!")
RETURN
ENDIF
valcod_d=VAL(ALLTRIM(thisform.editcod_d.Text))
SELECT * FROM date_firma WHERE cod_d=valcod_d
useButonul AFIARE (click event):
SET TALK OFF
SELECT * FROM date_firma
USE
Butonul RESETARE (click event):
SET TALK OFF
thisform.editcod_d.Value=""
CLOSE DATA
tergere maini
Butonul TERGERE(click event):CLOSE ALL
SELECT 1
USE masini
PRIVATE valcod_m
PRIVATE pozitie
SET TALK OFF
valcod_m=VAL(ALLTRIM(thisform.editcod_m.Text))
**use masini
LOCATE FOR cod_m=valcod_m
pozitie=RECNO()
IF EOF()=.T. AND FOUND()=.F.
MESSAGEBOX("Inregistrarea de sters nu exista!")
ELSE
&&pozitie=recno()
GOTO pozitie
DELETE
PACK
MESSAGEBOX("Stergere reusita!")
ENDIF
USE
Butonul AFIARE (click event):SET TALK OFF
SELECT * FROM masiniUSEButonul RESETARE (click event):SET TALK OFF
thisform.editcod_m.Value=""
CLOSE DATAButonul CUTARE (click event):CLOSE ALL
SET TALK OFF
IF VAL(ALLTRIM(thisform.editcod_m.Text))=0
MESSAGEBOX("Nu ati introdus cod masina!")
RETURN
ENDIF
valcod_m=VAL(ALLTRIM(thisform.editcod_m.Text))
SELECT * FROM masini WHERE cod_m=valcod_m
USE
Interogri
Capitolul IV- Listare program
Print Screens
Bibliografie
Manual de Informatica - SGBD - Sisteme de Gestiune a Bazelor de Date- Mariana Milosescu, Editura Didactica si Pedagogica
Baze de date in Visual FoxPro-Mariana Milosescu, Editura Teora