Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  

 
CATEGORII DOCUMENTE
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


DOCUMENTE SIMILARE

Trimite pe Messenger
Agregarea, compunerea si descompunerea – date obiect
Proiectarea BDOO – componenta a sistemului informatic
Datele
Premisele BDOO
Atribute – proprietati ale obiectelor
Limbaj unificat de modelare (UML )
Proiect - Baze de Date
Procese de realizare a sistemelor informatice conform RUP
Proiectarea si implementarea unei baze de date
ADMINISTRATORUL BAZEI DE DATE A RETELEI DE SERVICE-URI AUTO

TERMENI importanti pentru acest document

limbajul sql crearea unei tabele cu personalul si salariatii :

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 1nr. 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'

Private 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

.

DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 303
Importanta: rank

Comenteaza documentul:

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

Creaza cont nou

Distribuie URL

Adauga cod HTML in site

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