Baze de Date Personal Si Salarizare
Figură 1-Tabela Localități 4
Figură 2-Tabela Salariați 5
Figură 3-Tabela Departamente 6
Figură 4-Tabela Sporuri 7
Figură 5-Tabela Spor_angajat 8
Figură 6-Tabela Retineri 9
Figură 7-Tabela Retineri_angajat 10
Figură 8-Salariati.frx 12
Figură 9-Report5.frx 13
Figură 10-program_adaugare.prg 14
Figură 11-program_modificare.prg 16
Figură 12-program_stergere.prg 18
Figură 13-listare.prg 19
Figură 14-program_raport.prg 20
Figură 15-program_stergere_retinere.prg 22
Figură 16-program_modificare_retinere.prg 24
Figură 17-program_adaugare_spor.prg 26
Figură 18-program_stergere_spor.prg 28
Figură 19-raport_spor_angajat.prg 29
Figură 20-meniu.prg 31
Figură 21-meniu.prg 31
Figură 22-meniu.prg 32
=== Prezentarea teoretica a proiectului ===
Analiza și prezentarea cerințelor aplicației
Aplicația realizată este denumită “Personal și salarizare”.Prin intermediul meniului acestei aplicații pot fi adăugate noi înregistrări în tabela “Salariați”,se pot modifica înregistrări în tabela “Salariați”,se pot șterge înregistrări din tabela “Salariați”,se poate lista tabela “Salariați”,se pot accesa rapoarte pe baza tabelei “Salariați” ,se pot șterge reținerile salariaților,se pot modifica reținerile salariaților,se pot obține rapoarte cu privire la reținerile angajaților pe baza tabelei “Rețineri_angajat”,se pot adăuga sporuri,se pot șterge sporuri și se pot obține rapoarte cu privire la sporurile angajaților pe baza tabelei “Spor_angajat”.
Proiectarea aplicației
În proiectarea prezentei aplicații am pornit de la necesitatea unei societăți comerciale de a avea realizată o bază de date pentru evidența salariaților,iar în acest scop am conceput următorul dicționar de date,prin preluarea datelor din diverse registre și contracte de muncă:marca salariat,nume salariat,adresă,localitate,cod poștal,data nașterii,vârstă,salariu încadrare,data angajării,denumirea departamentului,denumirea sporurilor,denumirea reținerilor,procentul reținerilor,beneficiarul reținerii,cod spor,procent spor,vechimea de la angajare,codul reținerii.
Regulile de gestiune stabilite sunt următoarele:
RG1:fiecare salariat este încadrat într-un department;
RG2:fiecare salariat are anumite sporuri și rețineri;
RG3:procentele de spor si de reținere sunt specifice fiecărui salariat.
Având la bază regulile de gestiune și dicționarul de date am parcurs etapele necesare obținerii modelului relațional folosind metoda normalizării.
Am eliminat din dicționarul de date atributele vechimea de la angajare și vârstă,ce pot fi deduse din data nașterii si din data angajării.
În cele ce urmează am aplicat metoda grafului dependentelor funcționale:
– – – – – – – – – – – – – – – – – – – – >
|
|
|
|
|
| |
| ^
| |
| |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _ _ _ _ _
+ +
Ulterior am procedat la stabilirea cheilor candidat:
Chei primare:Marca,Cod_postal,Cod_depart,cod_spor,cod_retin,marca+cod_s,marca+cod_r.
Cu fiecare cheie primară și artibutele determinate funcțional netranzitiv am elaborat următoarele tabele:
Salariați(Marca,nume_s,adresa_s,cod_postal,data,data_ang,cod_depart,sal_incadr)
Cheie primară:Marca;Chei externe:cod_postal,cod_depart
Localitați(cod_postal,loc_sal)
Cheie primară:cod_postal
Departamente(cod_depart,den_depart)
Cheie primară:cod_depart
Sporuri(cod_spor,den_spor)
Cheie primară:cod_spor
Rețineri(cod_retin,den_retin,ben_retin)
Cheie primară:cod_retin
Spor_angajat(marca,cod_spor,procent_s)
Chei primare și externe:marca,cod_spor
Rețineri_angajat(marca,cod_retin,procent_r)
Chei primare și externe:marca,cod_retin.
Realizarea aplicației informatice
După ce am obținut tabelele am trecut la implementarea fiecăreia dintre ele în Microsoft Visual FoxPro 9.0:
Figură -Tabela Localități
Figură -Tabela Salariați
Figură -Tabela Departamente
Figură -Tabela Sporuri
Figură -Tabela Spor_angajat
Figură -Tabela Retineri
Figură -Tabela Retineri_angajat
După realizarea tabelelor în Microsoft Visual FoxPro 9.0 am trecut la indexarea fiecăreia,având în vederea această necesitate pentru elaborarea programelor următoare.
Am procedat la relaționarea tabelei “ Salariați” cu tabela “Localități”:
USE salariati
INDEX on marca TAG marca OF ind_marca
USE localitati
INDEX on cod_postal TAG cod_postal OF ind_cod_postal
DISPLAY STATUS
CLOSE ALL
USE salariati INDEX ind_marca ORDER marca IN 0
USE localitati INDEX ind_cod_postal ORDER marca IN 0
USE localitati INDEX ind_cod_postal ORDER cod_postal IN 0
SELECT salariati
SET RELATION TO marca INTO localitati
SET SKIP TO localitati
BROWSE FIELDS salariati.nume_s,localitati.loc_sal
și a tabelei “Salariati” cu tabela “ Departamente”:
CLOSE ALL
USE salariati INDEX ind_marca ORDER marca IN 0
USE departamente INDEX ind_cod_depart ORDER cod_depart IN 0
SELECT salariati
SET RELATION TO marca INTO departamente
SET SKIP TO departamente
Am realizat rapoarte asupra tabelelor:Spor_angajat(report1.frx),Rețineri_angajat(report2.frx),Departamente(report3.frx),Salariați(report4.frx),Rețineri(report5.frx) și din nou asupra tabelei Salariați(salariati.frx).
Figură -Salariati.frx
Figură -Report5.frx
Pe baza tabelei “Salariați” am realizat:program_adaugare.prg,program_modificare.prg,program_stergere.prg,program_raport.prg si listare.prg.
Program_adaugare.prg:
PRIVATE m.continue,m.yn
m.continue=.T.
m.yn=" "
DEFINE WINDOW insert FROM 6,10 TO 19,60
ACTIVATE WINDOW insert
DO WHILE m.continue
SCATTER MEMVAR blank
STORE "" TO m.yn
@1,1 say "marca:" get m.marca
@2,1 say "nume_s:" get m.nume_s
@3,1 say "adresa_s:" get m.adresa_s
@5,1 say "cod_postal:" get m.cod_postal picture "99999"
@6,1 say "data_ang:" get m.data_ang picture "99/99/99"
@7,1 say "cod_depart:" get m.cod_depart picture "999"
@8,1 say "sal_incadr:" get m.sal_incadr
READ
IF LASTKEY()=27
EXIT
ENDIF
APPEND BLANK
replace marca WITH m.marca,nume_s WITH m.nume_s,adresa_s WITH m.adresa_s,cod_postal WITH m.cod_postal,data_n WITH m.data_n,data_ang WITH m.data_ang,cod_depart WITH m.cod_depart,sal_incadr WITH m.sal_incadr
WAIT WINDOW "introd.inreg.noua?(y/n)" TO m.yn
IF UPPER(m.yn)<>"y"
m.continue=.F.
ENDIF
ENDDO
RELEASE WINDOWS insert
RETURN
Figură -program_adaugare.prg
Program_modificare.prg:
USE Salariati
USE Salariati INDEX index.CDX ORDER nume_s
CLEAR
PRIVATE m.recnum,m.reccnt
DEFINE WINDOW edit FROM 6,10 TO 19,60
DEFINE WINDOW key FROM 4,20 TO 21,75
ACTIVATE WINDOW key
DO WHILE .T.
@2,0 clear to 15,36
STORE 0 TO m.recnum
STORE SPACE(20) TO m.nume_s
@0,1 say "introd.numele:"get m.nume_s
@15,1 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
DEACTIVATE WINDOW key
return
ENDIF
m.nume_s=ALLTRIM(m.nume_s)
SEEK m.nume_s
if!FOUND()
WAIT WINDOW "nu s-a gasit!Apasati orice tasta pt.a continua."
LOOP
ENDIF
DO while nume_s=m.nume_s
@2,0 clear to 15,36
@1,0
m.reccnt=0
SCAN WHILE nume_s=m.nume_s AND m.reccnt<10
LIST next 1 TRIM(nume_s)
m.reccnt=m.reccnt+1
ENDSCAN
IF nume_s=m.nume_s
?
WAIT
ENDIF
ENDDO
@13,20 say "introd nr.intrg pt modificare:" get m.recnum range 1,RECCOUNT()
@15,0 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
endif
GOTO m.recnum
SCATTER memvar
ACTIVATE WINDOW edit
@1,1 say "marca:" get m.marca
@2,1 say "nume_s:" get m.nume_s
@3,1 say "adresa_s:" get m.adresa_s
@5,1 say "cod_postal:" get m.cod_postal picture "99999"
@6,1 say "data_ang:" get m.data_ang picture "99/99/99"
@7,1 say "cod_depart:" get m.cod_depart picture "999"
@8,1 say "sal_incadr:" get m.sal_incadr
@11,1 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
ENDIF
GATHER memvar
DEACTIVATE WINDOW edit
ENDDO
CLEAR WINDOW
Figură -program_modificare.prg
Program_stergere.prg:
USE Salariati
USE Salariati INDEX index.CDX ORDER nume_s
CLEAR
PRIVATE m.recnum,m.reccnt,m.yn
STORE space(8) TO m.nume_s
DEFINE WINDOW delete FROM 6,10 TO 19,60
DEFINE WINDOW key FROM 4,20 TO 21,75
ACTIVATE WINDOW key
DO WHILE .T.
@2,0 clear to 18,59
STORE "N" TO m.yn
STORE 0 TO m.recnum
@0,1 say "Introd.Numele:" Get m.nume_s
@15,1 say "Apasati ESC pentru anulare."
READ
IF LASTKEY()=27
DEACTIVATE WINDOW key
RETURN
ENDIF
m.nume_s=ALLTRIM(m.nume_S)
SEEK m.nume_s
IF !FOUND()
WAIT WINDOW "Nu s-a gasit!Apasati orice tasta pentru a continua."
LOOP
endif
linia=3
nr_linia=3
nr=0
DO WHILE nume_s=m.nume_S
@2,0 clear to 15,36
@1,0
m.reccnt=0
@2,1 say "Nr.inreg Nume"
SCAN WHILE nume_s=m.nume_s AND m.reccnt<10
STORE RECNO() TO nr
@linia,11 say nume_s
@nr_linia,0 say nr picture "99"
linia=linia+1
m.reccnt=m.reccnt+1
ENDSCAN
IF nume_S=m.nume_s
?
WAIT
ENDIF
ENDDO
@13,0 say "introd nr inreg pt stergere:" get m.recnum range 1,RECCOUNT()
@15,0 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
ENDIF
GOTO m.recnum
m.nume_S=nume_s
ACTIVATE WINDOW delete
@0,1 say TRIM(nume_s)
@2,1 say "Delete:Esti foarte sigur?(Y/N):"Get m.yn picture "!"
READ
IF upper(m.yn)="Y"
delete
PACK
ENDIF
DEACTIVATE WINDOW delete
ENDDO
CLEAR windows
return
Figură -program_stergere.prg
Listare.prg:
SET TALK OFF
CLEAR
CLOSE ALL
accept "Tastati numele bazei de date:" to bd
USE &bd IN 1
r=""
DO WHILE .T.
CLEAR
@1,1 say "1).nume_s"
@2,1 say "2).marca"
@3,1 say "3).adresa_s"
@4,1 say "4).cod_postal"
@5,1 say "5).data_n"
optiune=1
@7,5 say "Tastati numar optiune:" get optiune picture"9"
READ
CLEAR
DO case
CASE optiune=1
camp="nume_s"
CASE optiune=2
camp="marca"
CASE optiune=3
camp="adresa_s"
CASE optiune=4
camp="cod_postal"
CASE optiune=4
camp="data_n"
OTHERWISE
CANCEL
CLEAR
ENDCASE
INDEX on &camp TAG &camp
LIST off
WAIT
CLEAR
@3,3 say "doriti o alta listare?(D/N)"Get R picture "A"
*VALID UPPER(R)="D" .OR. UPPER(R)="N"
READ
IF UPPER(R)="D"
LOOP
ELSE
CLEAR
RETURN
ENDIF
ENDDO
Figură -listare.prg
Program_raport:
INDEX on UPPER(nume_s) TAG nume_s OF index.cdx
SET TALK OFF
USE Salariati INDEX index.cdx ORDER Nume_s
m.choice = "0"
DO WHILE m.choice != "4"
CLEAR
TEXT
Program date Salariati
1) Intoducere de inregistrari
2) Modificarea inregistrarilor
3) Rularea unui Raport
4) Return
ENDTEXT
ACCEPT " Introd. Optiunea dorita: " TO m.choice
CLEAR
DO CASE
CASE m.choice = "1"
APPEND
CASE m.choice = "2"
ACCEPT "Introd. ultimul NUME salvat " TO m.nume_s
SEEK m.nume_s
EDIT
CASE m.choice = "3"
ACCEPT "Listare pe ( E )cran sau pe ( I )mprimanta? (E / I) " TO m.prnt
IF UPPER(m.prnt) = "I"
SET PRINT on
ENDIF
REPORT FORM Salariati
IF UPPER(m.prnt) = "E"
SET PRINT OFF
ELSE
WAIT
ENDIF
ENDCASE
ENDDO
RETURN
Figură -program_raport.prg
Pe baza tabelei „Retineri” am realizat:program_stergere_retinere.prg,program_modificare_retinere.prg,raport_retinere_angajat.prg.
Program_stergere_retineri:
USE retineri
USE retineri INDEX ind_ben_retin.CDX ORDER ben_retin
CLEAR
PRIVATE m.recnum,m.reccnt,m.yn
STORE space(8) TO m.ben_retin
DEFINE WINDOW delete FROM 6,10 TO 19,60
DEFINE WINDOW key FROM 4,20 TO 21,75
ACTIVATE WINDOW key
DO WHILE .T.
@2,0 clear to 18,59
STORE "N" TO m.yn
STORE 0 TO m.recnum
@0,1 say "Introd.ben_retin:" Get m.ben_retin
@15,1 say "Apasati ESC pentru anulare."
READ
IF LASTKEY()=27
DEACTIVATE WINDOW key
RETURN
ENDIF
m.ben_retin=ALLTRIM(m.ben_retin)
SEEK ben_retin
IF !FOUND()
WAIT WINDOW "Nu s-a gasit!Apasati orice tasta pentru a continua."
LOOP
endif
linia=3
nr_linia=3
nr=0
DO WHILE ben_retin=m.ben_retin
@2,0 clear to 15,36
@1,0
m.reccnt=0
@2,1 say "Nr.inreg Nume"
SCAN WHILE ben_retin=m.ben_retin AND m.reccnt<10
STORE RECNO() TO nr
@linia,11 say nume_s
@nr_linia,0 say nr picture "99"
linia=linia+1
m.reccnt=m.reccnt+1
ENDSCAN
IF ben_retin=m.ben_retin
?
WAIT
ENDIF
ENDDO
@13,0 say "introd nr inreg pt stergere:" get m.recnum range 1,RECCOUNT()
@15,0 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
ENDIF
GOTO m.recnum
m.ben_retin=ben_retin
ACTIVATE WINDOW delete
@0,1 say TRIM(ben_retin)
@2,1 say "Delete:Esti foarte sigur?(Y/N):"Get m.yn picture "!"
READ
IF upper(m.yn)="Y"
delete
PACK
ENDIF
DEACTIVATE WINDOW delete
ENDDO
CLEAR windows
return
Figură -program_stergere_retinere.prg
Program_modificare_retinere:
USE Retineri
USE Retineri INDEX ind_ben_retin.CDX ORDER ben_retin
CLEAR
PRIVATE m.recnum,m.reccnt
DEFINE WINDOW edit FROM 6,10 TO 19,60
DEFINE WINDOW key FROM 4,20 TO 21,75
ACTIVATE WINDOW key
DO WHILE .T.
@2,0 clear to 15,36
STORE 0 TO m.recnum
STORE SPACE(20) TO m.ben_retin
@0,1 say "introd.ben_retin:"get m.ben_retin
@15,1 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
DEACTIVATE WINDOW key
return
ENDIF
m.ben_retin=ALLTRIM(m.ben_retin)
SEEK m.ben_retin
if!FOUND()
WAIT WINDOW "nu s-a gasit!Apasati orice tasta pt.a continua."
LOOP
ENDIF
DO while ben_retin=m.ben_retin
@2,0 clear to 15,36
@1,0
m.reccnt=0
SCAN WHILE ben_retin=m.ben_retin AND m.reccnt<10
LIST next 1 TRIM(ben_retin)
m.reccnt=m.reccnt+1
ENDSCAN
IF ben_retin=m.ben_retin
?
WAIT
ENDIF
ENDDO
@13,20 say "introd nr.intrg pt modificare:" get m.recnum range 1,RECCOUNT()
@15,0 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
endif
GOTO m.recnum
SCATTER memvar
ACTIVATE WINDOW edit
@1,1 say "cod_retin:" get m.cod_retin
@2,1 say "den_retin:" get m.den_retin
@3,1 say "ben_retin:" get m.ben_retin
@11,1 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
ENDIF
GATHER memvar
DEACTIVATE WINDOW edit
ENDDO
CLEAR WINDOW
Figură -program_modificare_retinere.prg
Raport_retinere_angajat:
USE retineri_angajat INDEX ind_cod_retin.cdx ORDER cod_retin
m.choice = "0"
DO WHILE m.choice != "4"
CLEAR
TEXT
Program date Retineri_angajat
1) Intoducere de inregistrari
2) Modificarea inregistrarilor
3) Rularea unui Raport
4) Return
ENDTEXT
ACCEPT " Introd. Optiunea dorita: " TO m.choice
CLEAR
DO CASE
CASE m.choice = "1"
APPEND
CASE m.choice = "2"
ACCEPT "Introd. ultimul cod salvat " TO m.cod_retin
SEEK m.cod_retin
EDIT
CASE m.choice = "3"
ACCEPT "Listare pe ( E )cran sau pe ( I )mprimanta? (E / I) " TO m.prnt
IF UPPER(m.prnt) = "I"
SET PRINT on
ENDIF
REPORT FORM report2
IF UPPER(m.prnt) = "E"
SET PRINT OFF
ELSE
WAIT
ENDIF
ENDCASE
ENDDO
RETURN
Pe baza tabelei „Sporuri” am realizat:program_adaugare_spor.prg,program_stergere_spor.prg,raport_spor_angajat.prg.
Program_adaugare_spor:
USE sporuri
PRIVATE m.continue,m.yn
m.continue=.T.
m.yn=" "
DEFINE WINDOW insert FROM 6,10 TO 19,60
ACTIVATE WINDOW insert
DO WHILE m.continue
SCATTER MEMVAR blank
STORE "" TO m.yn
@1,1 say "cod_spor:" get m.cod_spor
@2,1 say "den_spor:" get m.den_spor
READ
IF LASTKEY()=27
EXIT
ENDIF
APPEND BLANK
replace cod_spor WITH m.cod_spor,den_spor WITH m.den_spor
WAIT WINDOW "introd.inreg.noua?(y/n)" TO m.yn
IF UPPER(m.yn)<>"y"
m.continue=.F.
ENDIF
ENDDO
RELEASE WINDOWS insert
RETURN
Figură -program_adaugare_spor.prg
Program_stergere_spor:
USE Sporuri
USE Sporuri INDEX ind_den_spor.CDX ORDER den_spor
CLEAr
PRIVATE m.recnum,m.reccnt,m.yn
STORE space(8) TO m.den_spor
DEFINE WINDOW delete FROM 6,10 TO 19,60
DEFINE WINDOW key FROM 4,20 TO 21,75
ACTIVATE WINDOW key
DO WHILE .T.
@2,0 clear to 18,59
STORE "N" TO m.yn
STORE 0 TO m.recnum
@0,1 say "Introd.den_spor:" Get m.den_spor
@15,1 say "Apasati ESC pentru anulare."
READ
IF LASTKEY()=27
DEACTIVATE WINDOW key
RETURN
ENDIF
m.den_spor=ALLTRIM(m.den_spor)
SEEK m.den_spor
IF !FOUND()
WAIT WINDOW "Nu s-a gasit!Apasati orice tasta pentru a continua."
LOOP
endif
linia=3
nr_linia=3
nr=0
DO WHILE den_spor=m.den_spor
@2,0 clear to 15,36
@1,0
m.reccnt=0
@2,1 say "Nr.inreg Nume"
SCAN WHILE den_spor=m.den_spor AND m.reccnt<10
STORE RECNO() TO nr
@linia,11 say cod_spor
@nr_linia,0 say nr picture "99"
linia=linia+1
m.reccnt=m.reccnt+1
ENDSCAN
IF den_spor=m.den_spor
?
WAIT
ENDIF
ENDDO
@13,0 say "introd nr inreg pt stergere:" get m.recnum range 1,RECCOUNT()
@15,0 say "apasati ESC pentru anulare."
READ
IF LASTKEY()=27
EXIT
ENDIF
GOTO m.recnum
m.den_spor=den_spor
ACTIVATE WINDOW delete
@0,1 say TRIM(cod_spor)
@2,1 say "Delete:Esti foarte sigur?(Y/N):"Get m.yn picture "!"
READ
IF upper(m.yn)="Y"
delete
PACK
ENDIF
DEACTIVATE WINDOW delete
ENDDO
CLEAR windows
return
Figură -program_stergere_spor.prg
Raport_spor_angajat:
USE spor_angajat INDEX ind_cod_spor.cdx ORDER cod_spor
m.choice = "0"
DO WHILE m.choice != "4"
CLEAR
TEXT
Program date Spor_angajat
1) Intoducere de inregistrari
2) Modificarea inregistrarilor
3) Rularea unui Raport
4) Return
ENDTEXT
ACCEPT " Introd. Optiunea dorita: " TO m.choice
CLEAR
DO CASE
CASE m.choice = "1"
APPEND
CASE m.choice = "2"
ACCEPT "Introd. ultimul cod salvat " TO m.cod_spor
SEEK m.cod_spor
EDIT
CASE m.choice = "3"
ACCEPT "Listare pe ( E )cran sau pe ( I )mprimanta? (E / I) " TO m.prnt
IF UPPER(m.prnt) = "I"
SET PRINT on
ENDIF
REPORT FORM report1
IF UPPER(m.prnt) = "E"
SET PRINT OFF
ELSE
WAIT
ENDIF
ENDCASE
ENDDO
RETURN
Figură -raport_spor_angajat.prg
După ce am programele anterioare au fost implementate și testate am trecut la elaborarea meniului.
Meniu.prg:
set talk off
set color to w/r+
clear
do def
acti menu m1
return
procedure def
defi menu m1
defi pad v1 of m1 prom "MENIUL BAZEI DE DATE PERSONAL SI SALARIAZARE" at 5,20
on sele pad v1 of m1 acti popup mv1
@2,5 to 18,79 double
defi popup mv1 from 20,20
defi bar 1 of mv1 prom 'ADAUGARE INREGISTRARI IN TABELA SALARIATI'
defi bar 2 of mv1 prom 'MODIFICARE INREGISTRARI IN TABELA SALARIATI '
defi bar 3 of mv1 prom 'STERGERE INREGISTRARI DIN TABELA SALARIATI'
defi bar 4 of mv1 prom 'LISTARE TABELA SALARIATI'
defi bar 5 of mv1 prom 'RAPORT TABELA SALARIATI'
defi bar 6 of mv1 prom 'STERGERE RETINERI'
defi bar 7 of mv1 prom 'MODIFICARE RETINERE'
defi bar 8 of mv1 prom 'RAPORT TABELA RETINERE_ANGAJAT'
defi bar 9 of mv1 prom 'ADAUGARE SPOR'
defi bar 10 of mv1 prom 'STERGERE SPOR'
defi bar 11 of mv1 prom 'RAPORT TABELA SPOR_ANGAJAT'
defi bar 12 of mv1 prom 'QUIT'
on sele popup mv1 do mv1
*
procedure mv1
if bar()=1
do program_adaugare
endif
if bar()=2
do program_modificare
endif
if bar()=3
do program_stergere
endif
if bar()=4
do listare
endif
if bar()=5
do program_raport
endif
if bar()=6
do program_stergere_retinere
endif
if bar()=7
do program_modificare_retinere
endif
if bar()=8
do raport_retinere_angajat
endif
if bar()=9
do program_adaugare_spor
endif
if bar()=10
do program_stergere_spor
endif
if bar()=11
do raport_spor_angajat
endif
if bar()=12
quit
endif
Figură -meniu.prg
Figură -meniu.prg
Implementarea aplicației și menținerea în funcțiune
Caracteristici tehnice Microsoft Visual FoxPro 9.0:
Visual FoxPro 9.0 este o unealtă de dezvoltare aplicații extrem de puternică, ce permite construirea de aplicații de baze de date pentru calculatoare desktop sau client–server, precum și a componentelor pentru aplicații și servicii web.
Visual FoxPro 9.0 furnizează unelte și motoare de date puternice. Administrează volume mari de date, indiferent de organizarea informației, se rulează interogari și se pot construi aplicații complete de baze de date pentru end-useri.
Ajută la dezvoltarea productivității: se obține maximum de productivitate cu un mediu de dezvoltare puternic, ușor de utilizat, unelte grafice precum noul Code References tool.
Permite flexibilitate totală în dezvoltare. Vă bucurati de această flexibilitate în dezvoltarea tipurilor de aplicații de baze de date, construind și utilizând componente COM+ și servicii web.
Se asigură suport XML integrat construind aplicații și componente, ce utilizează bazele de date ca XML și utilizând datele XML importate in tabelele Visul FoxPro.
Cerințe de sistem minimale:
-Procesor Pentium
-Microsoft Windows 2000 cu Service Pack 3, Microsoft Windows XP, Microsoft Windows Server 2003
-64 MB RAM minim; 128 MB sau mai mult recomandat
-165 MB spațiu disponibil pe hard-disk pentru instalare; 20 MB spațiu suplimentar pe hard-disk pentru Microsoft Visual FoxPro 9.0 Prerequisites
-CD-ROM or DVD-ROM drive
-Afisaj Super VGA 800 X 600 sau mai mult, cu 256 culori
-Mouse sau alt dispozitiv compatibil
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Baze de Date Personal Si Salarizare (ID: 148880)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
