Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


Descrierea bazei de date si a formularelor - Logica bazei de date

baze de date



+ Font mai mare | - Font mai mic



Descrierea bazei de date si a formularelor



1 Logica bazei de date

Pentru a concepe baza de date, este nevoie de a intelege cum functioneaza sistemul de salarizare, adica din ce este format acesta si, in special, care sunt procesele la care sunt supuse datele si cum se modifica datele in urma acestor porcese, precum si cum interactioneaza datele intre ele.

Este important de specificat ca nu exista o sigura modalitate corecta pentru a crea baza de date. Aceasta poate fi abordata din mai multe perspective, important fiind sa raspunda la toate necesitatile sistemului. Un alt argument pentru a acorda o atentie deosebita logicii bazei de date este faptul ca nu este suficiet ca baza de date sa fie functionala, trebuie si ca aceasta sa fie optima, pentru ca, odata cu cresterea numarului de inregistrari, timpul necesar exragerii datetelor se mareste, astfel, la un numar mai mare ce cereri, creste posibilitatea ca serverul sa nu mai faca fata.

Prin urmare, la inceput trebuiesc identificate toate datele care sunt folosite la compunerea salariului unui angajat in sitemul de invatamant preuniversitar, dupa care trebuiesc identificate relatiile dintre aceste date. Aceste relatii trebuiesc tratate prin prisma normalizarii, care lucreaza strict cu tehnologia relationala. Se spune ca pentru a putea implementa o baza de date este nevoie ca aceasta sa fie cel putin in forma a treia de normalizare. Acest lucru presupune doua conditii a) toate atributele ne-cheie din R sunt independente unele de altele, in sensul ca nici unul dintre atribute neparticipante in cheia primara nu apare in vreo dependenta functional in care sursa este constituita dintr-o combinatie de celelalte atribute ne-cheie; b) toate atributele ne-cheie din R sunt dependente ireductibil de cheia primara.

Pana la acest moment, am realizat o analiza a aplicatiei din mai multe puncte de vedere, incepand cu alaliza factorilor economici, in functie de care se stabileste salariul unui angajat pana la modelarea grafica a bazei de date care va retine toate datele necesare calculului salarial, si nu numai. Din acest moment, crearea aplicatiei de salarizare va avea un demers mai mult practic, cu unele comentarii si sugestii pe parcurs.

Figura nr. 6 Shema bazei de date conform modelului relational

Urmatorul pas in realizarea aplicatiei il reprezinta transpunerea schemei bazei de date in sintaxa SQL, care permite creare tabelelor si a legaturilor dintre acestea prin comezi relativ simple, deoarece limbajul sql este unul de nivel patru, fiind cel mai apropiat limbaj de programare de cel uman.

Comanda sql pentru crearea unui tabel simplu este:

CREATE TABLE numetabela

camp1 tip_date1,

camp2 tip_date2,

campN tip_dateN

In care camp1campN reprezinta atributele care se regasesc in tabel si tip_data sunt tipurile de date care definesc aceste atribute. Pentru aplicatie, se vor folosi patru tipuri de date: a) numeric (nu necesita explicatii) b) varchar - sir de caractere cu lunghime variabila, c) text - sir de caractere cu lungime variabila, nelimitata, d) date - retine data calindaristica.

CREATE TABLE liceu (

id_liceu NUMERIC (5) NOT NULL PRIMARY KEY,

CONSTRAINT ck_id_liceu CHECK (id_liceu > 0),

Adresa VARCHAR(50),

Denumire VARCHAR (50),

Profil VARCHAR (40)

Asa arata tabelelul parinte "liceu" din schema baze de date. Prin atribuirea proprietatii de cheie primara elementului id_liceu, acesta nu poate lua valori nule, iar in sql aceasta restrictie se seteaza prin comanda NOT NULL. In acest mod se pot defini o multime de restrictii daca e cazul, in functie de necesitatile aplicatiei sau din preferintele programatorului, care se poate lipsi de niste restrictii la nivelul bazei de date pentru a le implementa in aplicatia care va folosi aceasta baza de date.

Exemplu tabelul copil:

CREATE TABLE useri (

username VARCHAR (20),

parola VARCHAR (20),

id_liceu NUMERIC (5)

CONSTRAINT fk_useri_liceu REFERENCES liceu(id_liceu)

ON DELETE CASCADE ON UPDATE CASCADE ,

CONSTRAINT pk_useri_liceu PRIMARY KEY (id_liceu)

In acest tabel, se specifica faptul ca atributul id_liceu se "refera" la id_liceu din tabelul parinte de mai sus. Inserarea unei linii intr-un tabel parinte, ca si stergerea de linii dintr-un tabel copil nu reprezinta nici un pericol "referential", la stergerea unei linii dintr-un tabel parinte trebuie precizat cum se prezinta restrictia referentiala: fie prin stergerea in cascada a tuturor inregistrarilor copil (ON DELETE CASCADE), (cum ar fi cazul si in exemplu de mai sus, deoarece, odata sters din baza de date, un liceu nu va mai fi nevoie nici de contul alcelui liceu) fie , pur si simplu prin interzicerea stergerii (ON DELETE RESTRICT). In aceeasi maniera se procedeaza si la modificarea unei chei primare/alternative pentru care exista in alt tabel, inregistrari-copil, fiind necesara precizarea actiunii intreprinsa de SGBD: modificarea in cascada a tuturor liniilor copil (ON UPDATE CASCADE) sau interzicerea modificarii, daca exista cel putin o inregitrare copil (ON UPDATE RESTRICT).

2 Creare interfetelor pentru utilizatori

La dezvoltarea aplicatiei sa folosit o baza de date din figura

Pentru a incepe crearea formularelor in mediul de lucru Visula Baisic, se va deschide un proiect nou, pe care il vom numi "Alpicatie Salarizare" si se va selecta windows aplication care va avea, in mod implict, un formular gol, se va seta denumirea formularului, intr-un mod sugestiv.

Primul formular descris amanuntit in acest demers teoretic, va servi la autentificarea utilizatorilor. Pentru a incepe sesiunea de editare, se va aplica click dreapta view code

2.1 Autentificare

Public Class Logare

//Primul lucru care trebuie facut este crearea unei functii responsabile de conectarea la baza de date si pe care o vom folosi de fiecare data cand vom avea nevoie de a deschide o sesiune de lucru cu postgres-ul. Pentru a putea fi folosita de toate procedurile si functie din acest formular o vom declara la inceput. O alta medota ar fi declarearea functiei intr-un modul de unde va putea fi apelata pe tot parcursul aplicatie.

Public postgres As String = 'DRIVER=;DATABASE=postgres;SERVER=localhost;UID=postgres;PWD=licenta;'

Function conexiune() As Odbc.OdbcConnection

conexiune = New Odbc.OdbcConnection(postgres)

Return conexiune

End Function

Declaram setul de date(DataSet) de care vom avea nevoie, ele servesc la afisarea datelor extrase de adaptoare in structurile vizulare

Dim dslog As New DataSet

Dim dslic As New DataSet

Porcedura urmatoare se ocupa de "incarcarea" formularului, ea este responsabila de starea de "start" a formularului si a datelor care apar in el chiar la inceput, inainte de a declansa un alt eveniment

Private Sub Logare(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

End Sub

In continuare este descrisa procedura care este apelata la clickul butonului de Logare, cele mai importante obiecte care raspund la acest evenimet sunt: adaptorule denumit OdbcDataAdapter1 si OdbcDataAdapter2 care are rol de intermediar inteligent intre seturile de date locale si baza de date, precum si obiectele de tip TextBox cum este Me.usertxt in care se va introduce nume de cont.

Private Sub Logare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Try

conexiune.Open()

Dim OdbcDataAdapter1 As New Odbc.OdbcDataAdapter

Dim user As String

user = Me.usertxt.Text

Dim parola As String

parola = Me.parola.Text

OdbcDataAdapter1.SelectCommand = New System.Data.Odbc.OdbcCommand('Select * from useri where parola = '' & parola & '' and username = '' & user & )

OdbcDataAdapter1.SelectCommand.Connection = conexiune()

OdbcDataAdapter1.Fill(dslog) serveste la popularea setului de date dslog de catre adaptorul OdbcDataAdapter1 prin instructiunea Fill, dupa care datele sunt transmise si afisate prin obiectele de tip TextBox.

dslog.Clear()

OdbcDataAdapter1.Fill(dslog)

Me.idlictxt.DataBindings.Clear()

Me.idlictxt.DataBindings.Add('TEXT', dslog.Tables(0), 'id_liceu')

Dim OdbcDataAdapter2 As New Odbc.OdbcDataAdapter

OdbcDataAdapter2.SelectCommand = New System.Data.Odbc.OdbcCommand('Select * from liceu where id_liceu = '' & Me.idlictxt.Text & )

OdbcDataAdapter2.SelectCommand.Connection = conexiune()

OdbcDataAdapter2.Fill(dslic)

Me.numelictxt.DataBindings.Clear()

Me.numelictxt.DataBindings.Add('TEXT', dslic.Tables(0), 'Denumire')

Se verifica daca s-a reusit extragerea datelor si afisarea lor in obiectele de tip TextBox, in caz ca nu s-a reusit, acestea se golesc pentru a mai permite incercari de completare a lor.

If Me.numelictxt.Text = Then

Me.usertxt.Text =

Me.parola.Text =

End If

Catch ex As Exception

dslog.Clear()

MsgBox('Nume de cont sau parola gresita')

End Try

End Sub

La apasarea butonui Continuare se va testa daca au fost extrase datele necesare si se va deschide urmatorul formular, autentificarea realizandu-se cu succes.

Private Sub Continuare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

If Val(Me.idlictxt.Text) > 0 Then

Me.SetVisibleCore(False)

MeniuLiceu.Show()

End If

End Sub

Butonul de Revocare va inchide formularul curent.

Private Sub Revocare_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonClick

Me.Close()

End Sub

End Class

Figura nr.7 Formular "Autentificare" primul pas

Figura nr. 8 Formular "Autentificare" pasul al doilea

Pasul 1- Se introduce numele de cont si parola, ca in figura nr x, dupa care se apasa butonul Logare, in acest moment se va executa secventa de cod din "spatele" butonului, care a fost comentata mai sus.

Pasul 2- Dupa executia secventei de cod echivalenta, butonul Logare se va optine situatia din figura nr y, in care se precizeaza carei institutie ii corespunde numele de cont si numarul de ordine al institutiei. La apasarea butonului Continuare, va fi deschis formularul denumit MeniuLiceu.

Figura nr y- Formular "Autentificare" pasul doi

In ameble situatii, la apasaea butonului Revocare formularul se va inchide   

In cazul in care se va introduce un nume de cont inexistent sau o parola gresita, aplicatia va furniza un mesaj de avertizare prezentat in figura 10

Figura nr 10

2.2 Date personale:

Pentru a reusi implementarea acestei aplicatii in mai multe licee, este nevoie de o limitare a accesului utilizatorilor doar la datele unui liceu pentru care a fost creat un cont, in acest fel, cu un cont creat, un utilizator va putea manipula datele aferente unei singure institutii. Acest lucru presupune declararea unei varialibe globale care va putea fi "vazuta" in orice loc al aplicatiei, astfel incat sa permita mentinerea "legaturii" dintre contul utilizat si datele care pot fi accesate folosind acel cont.

Am realizat aceasta legatura prin atributul id_liceu, care corespunde unui nume de cont si unei parole asa cum se vede din schema bazei de date.

Module Functii

Public idlictxt As TextBox

In acest fel, voi putea extragre datele in functie de contul liceului care este logat.

Private Sub CalculSalariiPersonal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim idlic As Integer

Atribui unei variabile valoarea extrasa la logare.

idlic = Val(Logare.idlictxt.Text)

conexiune.Open()

Folosesc aceasta variabila in fraza SQL a adaptorului pentru a obtine datele necesare.

Dim adapterpers As New Odbc.OdbcDataAdapter

adapterpers.SelectCommand = New System.Data.Odbc.OdbcCommand('select distinct nume, prenume from liceu l inner join stat_salariu ss on ss.id_liceu = l.id_liceu inner join personal p on p.id_personal = ss.id_personal where l.id_liceu = '' & idlic & )

adapterpers.SelectCommand.Connection = conexiune()

dslic.Clear()

adapterpers.Fill(dslic)

Me.numetxt.DataBindings.Clear()

Me.numetxt.DataBindings.Add('TEXT', dslic.Tables(0), 'nume')

Me.prenumetxt.DataBindings.Clear()

Me.prenumetxt.DataBindings.Add('TEXT', dslic.Tables(0), 'prenume')

Me.cbolistanume.DataSource = dslic.Tables(0)

Me.cbolistanume.DisplayMember = 'nume'

End Sub

In urma executiei acestei secvente de cod, sunt extrase in formular numele si prenumele personalului dintr-un singur liceu. M-am limitat doar la nume si prenume, insa se mai pot extrage si alte date precum: CNP, Adresa, Sex sau se poate verifica daca angajatul este profesor.

(CREATE TABLE personal ( []Profesor boolean,[] );

Me.numetxt

 

Me.cbolistanume

(Obiect de tip comboBox)

 

In aceast camp se introduc luna si anul. Exemplu(luna: 08 anul:2008)

 

Figura nr.11 Date personale

Pentru a naviga spre o anumita persoana, se foloseste obiectul de tip ComboBox care permite afisarea, intr-o lista, a tuturor persoanelor dintr-un liceu. Lista este completata prin setul de date dslic odata cu "incarcarea" formularului. Odata cu selectarea altei persoane din lista, adica la modificarea de stare a acesteea, se vor "goli" toate campurile care sunt folosite la extragerea datelor unei persoane, pentru ca datele sunt extrase in functie de nume si prenume.

Private Sub cbolistanume_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbolistanume.SelectedIndexChanged

Me.imptxt.Text =

TextBox impozit

Me.cboimp.Text =

ComboBox impozit

Me.totalimptxt.Text =

TextBox total impozit

Me.vechimetxt.Text =

TextBox vechime invatamant

Me.gradtxt.Text =

TextBox grad didactic

Me.studiitxt.Text =

TextBox nivel studii

Me.salbazatxt.Text =

TextBox    valoare salariu de baza

Me.vspor.Text =

TextBox valoare spor

Me.cbospor.Text =

ComboBox lista sporuri

Me.tspor.Text =

TextBox total sporuri

Tabelul 2 obiectele de TextBox si ComboBox folosite in formularul "Calcul salarii personal"

End Sub

2.3 Salariu de baza:

La calculul salariului de baza am tratat una din doua situatii posibile. Logica bazei de date permite abordarea ambelor solutii, dar pentru acest demers teoretic am ales varianta cea mai des intalnita in practica, si anume calcularea salariului de baza in functie de grilele de salarizare si de numarul de zile lucrate lunar.

Buton "Continuare"

 

Butoane Radio

 

Figura nr. 12 Salariu de baza

Toate obiectele din acest formular, de tip TextBox, sunt descrise in Tabelul 2. Chiar daca sunt extrase alte date, principiul de lucru nu s-a schimbat, din acest motiv se vor mentine doar secventele de cod care sunt mai importante, precum fraza SQL si cazul structurii alterative IF ELSE.

Private Sub Continuare_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

In cazul in care este bifat butonul radio Nu exista exceptii, se intra pe aceasta prima ramura a structurii alterative, de unde sunt extrase datele si afisate asa cum sunt stocate iin baza de date, adica in conformitate cu grilele de salarizare din invatamant.

If Me.RadioButton1.Checked = True Then

conexiune.Open()

Dim adaptersalbaza As New Odbc.OdbcDataAdapter

adaptersalbaza.SelectCommand = New System.Data.Odbc.OdbcCommand('select distinct v_grila, nr_zile, Grad_didactic, Vechime, Nivel_studii from v_sal_baza v inner join sal_baza sb on sb.id_sal_baza = v.id_sal_baza inner join stat_salariu ss on ss.id_sal_baza = v.id_sal_baza inner join personal p on p.id_personal = ss.id_personal where p.nume = '' & nume & '' and p.prenume = '' & prenume & '' and ss.luna = '' & luna & '' and ss.an ='' & an & )

adaptersalbaza.SelectCommand.Connection = conexiune()

(Setul de date este "incarcat" si datele sunt afisate in obiecte de timp TexBox)

Else

Exista insa si situatii in care norma de zile lucratoare dintr-o luna nu se respecta. In aceste cazuri, de altfel deseori intalnite, se va bifa butonul radio Exista exceptii, care, odata bifat, va face vizibile un set de obiecte, care vor ajuta la tratarea exceptiei

If Me.RadioButton2.Checked = True Then

(Setul de date este "incarcat" si datele sunt afisate in obiecte de tip TexBox)

Me.nrluc.Visible = True

Me.Numarzile.Visible = True

Me.salnou.Visible = True

Me.ok.Visible = True

Me.zileluc.Visible = True

Me.zileluctxt.Visible = True

Me.Panel5.Visible = True

End If

End If

If Me.RadioButton2.Checked = False And Me.RadioButton1.Checked = False Then

Tratarea situatiei cand nu e bifat nici unul dintre butoale radio:

MsgBox('Selectati situatia care se potriveste')

End If End Sub

Drept raspuns la cea de a doua situattie in care exista exceptii, codul va genera urmatorul formular:

Me.salnou Me.salnou Me.salnou Me.nrluc Me.nrluc

 

Me.Numarzile tMe.nrluc Me.nrluc

 

Me.zileluctxt

 

Figura nr. 12 Salariu de baza 'Exceptii'

Sub ok_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ok.Click

Dim a As Integer

a = Val(Me.salbazatxt.Text) / Val(Me.zileluctxt.Text)

Me.salnou.Text = a * Val(Me.Numarzile.Text)

End Sub

 


2.4 Impozite:

Chiar daca se extrag date diferite in acest formular, modalitatea lor de extragere este aceeasi, la fel se intampla si la afisarea lor cu ajutorului obiectelor de tip TexBox sau ComboBox sau la actionarea butoanelor, se executa secvente de cod diferite, dar asemanatoare ca modalitate de concepere.

Figura nr. 13 Impozite

(precizez ca graficul din antetul formularului este o imagine, coloanele nu se modifica odata cu modificarea datelor extrase.)

2.5 Total:

Aceste date sunt extrase si calculate pe baza pasilor precedenti prin aplicarea formulei de calcul al salariului

Figura nr. 14 Total

2.6 Stat salariii:

O metoda eleganta de a pastra si apoi reveda datele din statul de salarii pentru toti angajatii ar fi crearea unei noi tabele in baza de date care ar avea drept atribute campurile calculate pana in acest moment. Odata obtinut salariu, cu toate componentele sale si datele personale, ar putea fi inserat in acea tabela ca mai apoi sa fie extrase datele tuturor angajatilor in obiectul de tip DataGrigView.

Figura nr.15 Formular pentru statul de salarii



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1880
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved