Sunteți pe pagina 1din 0

1

1. Tipuri de date. Constante, operaii i funcii


Datele (variabile sau constante) utilizate n programare pot fi simple sau sub
form de masiv de date (vectori, matrici, care presupun o ordonare a datelor dup un
criteriu de poziie). La rndul lor aceste dou categorii pot fi alctuite din date de tip:
logic, care nu pot lua dect dou valori: .T. (adevrat) i .F. (fals);
numeric;
ir de caractere, reprezint o mulime ordonat de caractere, fiecare caracter
avnd un numr de ordine n ir, numerotarea ncepnd cu 1. irurile de caractere
(constante) se scriu ntre apostroafe sau ghilimele;
calendaristic.

1.1 Operatori i operanzi

Se pot construi expresii, combinnd datele (operanzi) cu operaii specifice
(operatori). Operatorii la rndul lor sunt de tip:
logic, lucreaz cu toate tipurile de date i returneaz o valoare logic (.T. / .F.)

Operator Aciune Cod
( ) gruparea expresiilor
logice
Cvar1 AND (Cvar2 AND Cvar3)
NOT, ! negare logic IF NOT CvarA = CvarB sau IF ! Nvar1 =
Nvar2
AND I logic LvarX AND LvarY
OR SAU logic LvarX OR LvarY

TEMA
Variabile i tipuri de date
predefinite in
Visual FoxPro
2
Sumar


Tipuri de date. Constante, operaii i funcii
Variabile
Aplicaii propuse spre rezolvare n laborator


2
unde Cvar variabil de tip caracter, Nvar variabil de tip numeric, Lvar variabil de
tip logic.
relaional, lucreaz cu toate tipurile de date, expresia este evaluat i se
returneaz o valoare logic .T. / .F.(adevrat / fals).

Operator Aciune Cod
< mai mic dect ? 23 < 54
> mai mare dect ? 1 > 2 sau ?.t.>.f.
= egal cu ? cVar1 = cVar
<>, #, != diferit de ? .T. <> .F.
<= mai mic egal cu ? {^1998/02/16} <=
{^1998/02/16}
>= mai mare egal cu ? 32 >= n_ani
== comparare iruri de
caractere
? status == "Open"

n cazul variabilelor de tip caracter operatorii relaionali funcioneaz prin
compararea codurilor ASCII corespunztoare caracterelor din cele dou iruri,
comparaia fcndu-se caracter cu caracter, de la stnga la dreapta.
Dac irurile care se compar nu au aceeai lungime, implicit se completeaz irul
mai scurt cu codul ASCII pentru caracterul 0.
Operaia de egalitate a dou iruri de caractere este controlat de comanda:
SET EXACT ON|OFF
prin clauza OFF, implicit, se consider c cele dou iruri sunt egale n cazul cnd
caracterele coincid pe lungimea celui mai scurt.
prin clauza ON, egalitatea se verific pe lungimea irului mai lung, spaiile de la sfritul
irurilor sunt ignorate.

numeric, lucreaz cu toate tipurile de date numerice.

Operator Aciune Cod
( ) gruparea subexpresiilor (4-3) * (12/Nvar2)
**, ^ exponent (putere) ? 3 ** 2 sau ? 3 ^ 2
*, / nmulire, mprire ? 2 * 7 sau ? 14 / 7
% restul mpririi (modulo) ? 15 % 4
+, - adunare, scdere ? 4 + 15

Ordinea operatorilor din tabel este cea folosit n matematic.
Operaia modulo (%) se mai poate executa apelnd funcia MOD(n1,n2) care va calcula
restul mpririi numrului n1 la numrul n2.

caracter, care permite concatenarea, compararea datelor de tip ir de caracatere,
utiliznd urmtorii operatori:


3
Operator Aciune Cod
+ Concatenare. Se unesc dou iruri de caractere, un ir i
un cmp dintr-o nregistrare sau un ir de caractere i o
variabil
? 'Bun ' + 'ziua'
- Concatenare. Se ndeprteaz spaiile goale de la sfritul
elementului care precede operatorul, apoi se unesc cele
dou elemente.
? 'Bun ' - 'seara'
$ Comparare. Se caut un ir de caractere n interiorul altui
ir de caractere.
? 'punct' $
contrapunct'
? 'principal' $
clienti.adresa



1.2 Date i funcii predefinite asociate tipurilor de date

a) Date de tip numeric. Funcii aritmetice

Expresiile de tip numeric pot fi:
cmpuri de tip numeric (N), ntreg (I), virgul mobil (F) dintr-un tabel;
funcii care returneaz o variabil (constant) numeric;
variabile i constante de tip numeric.

Scop / reprezentare matematic Funcie VFP
restul mpririi exacte a lui n
1
la n
2
mod (n
1
,n
2
)

abs(x)
partea ntreag a lui x int(x)
urmtorul ntreg mai mare sau egal cu x (plafon) ceiling(x)
urmtorul ntreg care este mai mic sau egal cu x (podea) floor(x)
rotunjirea unei expresii numerice la un numr specificat de
zecimale
round(nExpr,nr_zecimale)
e
x

exp(x)
ln(x) log(x)

log10(x)

sqrt(x)
sin x sin(x)
cos x cos(x)
tg x tan(x)
arcsin x asin(x)
arccos x acos(x)

4
arctg x atan(x)
trecerea din grade n radiani dtor(x)
trecerea din radiani n grade rtod(x)
alegerea numrului de zecimale n set decimals to n
valoarea constantei
PI()


b) Funcii financiare
Scop Funcie VFP
returneaz valoarea ratei necesare pentru achitarea unui
mprumut s, cu dobnda d*, pe perioada nr** (anual sau
lunar)
PAYMENT(s,d,nr)
returneaz suma ce trebuie depus n cont pentru a plti o
rat s, pe o perioad nr (ani sau luni), dac dobnda acordat
este d
PV(s,d,nr)
(Present Value)
returneaz suma ce se poate strnge n cont, dup o perioad
nr (ani sau luni), dac dobnda este d iar rata depunerii este s
FV(s,d,nr)
(Future Value)


*Argumentul d (dobnda) este utilizat n form zecimal (d=0.06 6%). Dac dobnda se
preia sub form procentual se va mprii la 100. Implicit este dobnda anual.
**Argumentul nr (perioada) este implicit exprimat n ani. Dac calculul se efectueaz
pentru o perioad exprimat n luni, va terbui modificat corespunztor i dobnda
(anual lunar).


A. Funcia PAYMENT returneaz valoarea fiecrei pli, dintr-o serie periodic de pli
(rat), a unui mprumut s, cu dobnda fix d, pe o perioad nr.
Sintaxa funciei: PAYMENT(s,d,nr)

Exemplu 1: Firma DACIA vinde autoturisme marca LOGAN care pot fi achitate n rate
lunare, pe o perioad de patru ani. mprumutnd de la BRD suma de 6400 $ cu dobnda
anual de 8.9%, s se stabileasc care este rata lunar pe care trebuie s o achite un client.

SET TALK OFF && anuleaza afisarea rezultatelor comenzilor
CLEAR && curata spatiul de afisare
SET CURRENCY TO '$' && definirea simbolului monedei
STORE 0 TO S,NR && initializarea variabilelor S, NR cu 0
D=0.00 && initializarea variabilei D (un alt mod de initializare)

@3,20 SAY 'STABILIREA RATEI LUNARE PENTRU UN IMPRUMUT'
@7,15 SAY 'SUMA IMPRUMUTATA ?:' GET S
@9,15 SAY 'DOBANDA ANUALA (%) ?:' GET D
@11,15 SAY 'IN CATE LUNI TREBUIE ACHITAT IMPRUMUTUL ?:' GET NR
READ && citirea ntregului ecran - variabilele editate cu @.. GET

5

D=D/12/100 && transformare dobnda anuala procentuala, n dobnda lunara, exprimata zecimal

@15,20 SAY 'RATA LUNARA ESTE DE: '
SET CURRENCY RIGHT && setarea afisarii simbolului monedei la dreapta
@15,45 SAY PAYMENT(S,D,NR) FUNCTION '$9999.99' && afisarea rezultatului functiei si
a monedei
WAIT WINDOW 'APASATI ENTER'

B. Funcia PV returneaz valoarea sumei pe care trebuie s o avem n cont, pentru a putea
plti o rat s, pe o perioad nr, pentru o dobnd anual d acordat de banc la depozit.
Sintaxa funciei: PV(s,d,nr)

Exemplu 2: O firm trebuie s achite o chirie lunar de 300 $ pentru sediu, pe o perioad
de 5 ani. Ci bani trebuie depui n cont la banca BCR, dac dobnda la acest tip de
depozit este de 4% pe an.

SET CLOCK ON && afisarea timpului dat de sistemul de operare
CLEAR
STORE 0 TO S,NR
D=0.00
@3,25 SAY 'STABILIREA SUMEI NECESARE IN CONT PENTRU PLATA UNEI RATE;
LUNARE'
@7,20 SAY 'RATA LUNARA ?:' GET S
@9,20 SAY 'DOBANDA ANUALA (%) ?:' GET D
@11,20 SAY 'PERIOADA (LUNI) DE ACHITARE A RATEI ?:' GET NR
READ
D=D/12/100
@15,25 SAY 'SUMA INITIALA DIN CONT TREBUIE SA FIE DE ';
+ALLTRIM(STR(PV(S,D,NR),10,2))+' $'
* functia STR() transforma o valoare numerica ntr-un sir de caractere
* functia ALLTRIM() elimina spatiile de la nceputul si sfrsitul sirului
WAIT WINDOW 'APASATI ENTER'

C. Funcia FV returneaz valoarea sumei ce se strnge ntr-un cont, n cazul n care se
depune o rat s, banca ofer o dobnd anual d, pe o perioad nr. Sintaxa funciei:
FV(s,d,nr)

Exemplu 3: Ce sum va strnge n cont un copil, care primete pensie alimentar timp de
10 ani, cte 50 $ pe lun, la o banc ce ofer o dobnd de 4% pe an ?

CLEAR
STORE 0 TO S,NR
D=0.00
@3,25 SAY STABILIREA SUMEI STRANSE IN CONT DUPA O PERIOADA DE TIMP
@7,20 SAY RATA LUNARA ?: GET S
@9,20 SAY DOBANDA ANUALA ?: GET D
@11,20 SAY PERIOADA (LUNI) DE DEPUNERE A RATEI ?: GET NR
READ
D=D/12/100
@15,25 SAY SUMA STRANSA IN CONT ESTE +ALLTRIM(STR(FV(S,D,NR),10,2))+
$
WAIT WINDOW APASATI ENTER

6


c) Date i funcii de tip caracter

Operanzii de tip caracter pot fi:
cmpurile de tip CHARACTER ale unui tabel;
funciile care returneaz un ir de caractere;
variabile i constante de tip ir de caractere.

O constant de tip ir de caractere se trece ntre caracterele , resprectiv, .
Dac irul de caractere conine n componena sa caracterul () atunci pentru definirea
irului se folosesc caracterele ().

Scop Funcie VFP
Returneaz caracterul corespunztor codului ASCII n
(I=1...127)
CHR(n)
Returneaz codul ASCII pentru un caracter c ASC(c)
Extragerea unui subir de de caractere, de lungime n
2
,
din irul s, ncepnd cu poziia n
1

SUBSTR(s,n1,n2)
Extragerea unui subir de n caractere, ncepnd din
stnga irului s
LEFT(s,n)
Extragerea unui subir de n caractere, ncepnd din
dreapta irului s
RIGHT(s,n)
Returnarea unui ir de caractere s, n mod repetat de n
ori
REPLICATE(s,n)
Obinerea unui ir de n spaii goale SPACE(n)
Eliminarea spaiilor ntr-un ir de caractere:
de la nceputul i sfritul irului s
de la nceputul irului s
de la sfritul irului s

ALLTRIM(s)
LTRIM(s)
RTRIM(s)
Adugarea de spaii, sau a unui caracter c_pad, ntr-un
ir s pentru a ajunge la lungimea n:
la ambele capete
la stnga
la dreapta

PADC(s,n[,
c_pad])
PADL(s,n[,c_pad])
PADR(s,n[,c_pad])
Returneaz lungimea unui ir de caractere s LEN(s)
Returneaz poziia de nceput, la a n-a apariie, a unui
subir de caractere ss ntr-un ir de caractere s
AT(s,ss,n)
Returneaz poziia de nceput, la a n-a apariie, a unui
subir de caractere ss ntr-un ir de caractere s, fr a se
ine seama de litere mari/mici
ATC(s,ss,n)
Returneaz poziia numeric, la a n-a apariie, a unui
subir de caractere ss ntr-un ir de caractere s, ncepnd
cutarea de la dreapta
RAT(s,ss,n)

7
Transformarea caracterelor unui ir s n litere mari UPPER(s)
Transformarea caracterelor unui ir s n litere mici LOWER(s)
Transformarea primului caracter al unui ir s, dac este
o liter, n majuscul
PROPER(s)


d) Date i funcii de tip calendaristic

Expresiile de tip dat calendaristic pot fi:
cmpuri de tip dat calendaristic (DATE), dintr-un tabel;
funcii care returneaz data calendaristic;
constante de tip dat calendaristic.

O dat de tip dat calendaristic precizeaz ziua, luna, anul, ordinea acestor 3 elemente
poate fi aleas din 11 moduri, cu ajutorul comenzii:
SET DATE TO <tip_dat>
unde:
tip_dat Format
AMERICAN ll/zz/aa
ANSI aa.ll.zz
BRITISH zz/ll/aa
FRENCH zz/ll/aa
GERMAN zz.ll.aa
ITALIAN zz-ll-aa
JAPAN aa/ll/zz
USA ll-zz-aa
MDY ll/zz/aa
DMY zz/ll/aa
YMD aa/ll/dd

Cele 3 elemente pot fi separate cu /, -, .. Implicit se consider formatul: ll/zz/aa.
Cu comanda:
SET CENTURY ON|OFF
se poate preciza dac anul este este afiat cu 2 cifre (ON) sau 4 cifre (OFF).
Comanda:
SET MARK TO <caracter>
precizeaz ce caracter se va folosi ca separator ntre cele 3 elemente ale datei.
Funcii pentru datele de tip dat calendaristic sunt date n tabelul urmtor:

Scop Funcie VFP
Returneaz data din sistem(calculator) DATE()
Numele zilei dintr-o expresie de tip dat d CDOW(d)
A cta zi din sptmn dintr-o expresie de tip dat d DOW(d)

8
Numele lunii dintr-o expresie de tip dat d CMONTH(d)
A cta lun din an dintr-o expresie de tip dat d MONTH(d)
Izolarea anului dintr-o expresie de tip dat d YEAR(d)
Returneaz ora din sistem (calculator) TIME()
Returnarea sub form de ir de caractere, n format aaaallzz a
unei expresii de tip dat calendaristic d
DTOS(d)


Folosirea ntr-un program a unei constante de tip dat calendaristic, se face ntre
acolade {^aaaa/ll/zz}, unde aaaa reprezint anul (scris folosind patru cifre), ll
reprezint luna, iar zz ziua n cadrul anului respectiv.
O constant de tip moment de timp se specific astfel: {^aaaa/ll/zz,
oo:mm:ss xM}, unde:
- aaaa reprezint anul, ll reprezint luna, iar zz reprezint ziua; acest format
poate varia n funcie de comenzile SET DATE, SET YEAR, etc.;
- oo reprezint ora n cadrul zilei (de la 0 la 12 sau de la 0 la 24, n funcie
prezena sau de absena construciei AM sau PM), mm reprezint minutele, iar ss
secundele;
- xM poate fi AM (AnteMeridian), indicnd c ora respectiv este nainte de prnz
(ora 12:00), sau PM (PostMeridian), cnd ora se situeaz dup prnz.

Spre deosebire de cazul datelor calendaristice, efectul aplicrii operatorilor + i
- asupra unor date de tip moment de timp este acela de avans i respectiv de recul cu
numrul de secunde respectiv.

e) Date de tip memo

Acest tip de date este asemntor tipului ir de caractere. Este indicat folosirea
datelor de tip memo n cazul n care un cmp al unei nregistrri dintr-un tabel, nu are o
lungime cunoscut (sau care nu poate fi aproximat). Utilizarea unui cmp memo ntr-un
tabel, are ca efect asocierea la tabel a unui fiier suplimentar n care se depun datele
cmpului memo. n tabel, n cmpul memo sunt stocate informaii referitoare la tabelul
suplimentar.

f) Funcii de conversie
Funcii de conversie
din grade n radiani si invers
DTOR (nExpr)
RTOD (nExpr)
unde, nExpr este o expresie numeric
transformarea unei date calendaristice intr-un sir de caractere
DTOC (dExpr)
DTOS (dExpr)
MDY (dExpr) DMY (dExpr)

9
unde, dExpr este o expresie dat calendaristic
transformarea unui sir de caractere in data calendaristica
CTOD (cExpr)
unde, cExpr este o expresie caracter ir de caractere
transformarea valorilor numerice in siruri de caractere
STR(nExpr [, nLength [, nDecimalPlaces]])
unde, nLength lungimea exact a irului, nDecimalPlaces numrul de zecimale dup
virgul
transformarea sirurilor de caractere in valori numerice
VAL(cExpr)

Exemplu 4: Se va scrie o rutin pentru exemplificarea lucrului cu date ale unor tipuri
predefinite.
clear

* Tipul logic
?not (1=3)
?(1<=4) and (5>3)
?6<3or 4*2=9

*Tipul numeric
?mod(38,6) && echivalentul lui %
?mod(44.44,11.11)

?abs (-400) && returneaza absolutul unui numar
?sign(-32) && semnul
a=-2/3
?a=sign(a)*abs(a)

?int(14.46)
a=14.46
?a-int(a) && partea zecimala

?round(14.4,2) && rotunjire cu un numar de zecimale precizate

?exp(2) && e la x
?log(2) && ln x
?log10(2)
?sqrt(2)

*Tipul sir de caractere
?len('Strada ion Ratiu'+'nr. 10') && returneaza lungimea sirului de
caractere
?chr(49) && caracterul al carui cod este 49
?asc('1') &&codul ASCII al caraterului '1'
?substr('ABCDEF',2,3) && extragere din pozitia a doua pe 3 caractere
?substr('ABCDEF',2) && extragere din pozitia a dua

?left('ABCDEF',2)
?right('ABCDEF',2)
?space(6)+replicate('a',5)


10
*alltrim() elimina toate spatiile goale
*ltrim() elimina toate spatiile goale din stanga
*rtrim() elimina toate spatiile goa;le din dreapta

?padl('Exemplu',40,'-')
?padr('Exemplu',40,'-')
?padc('Exemplu',40,'-')

?upper('AlFa')
?lower('AlFa')
?proper('AlFa')

*Tipuri de date pentru gestiunea timpului
set century on
set date to brit
set mark to '.'
set hours to 24
set seconds on

store {^1999/03/24} to data_c
?data_c

?date() && data din sistem
?day(date())
?month(date())
?year(date())

?datetime()
?time()
?hour(datetime())
?minute(datetime())
?sec(datetime())

*Conversii intre tipuri

*a) sir de carctere - numar
?str(13.34,7,3) && 7 e nr de caractere iar 3 elemntele de dupa virgula
?val('13.34')

*b) data calendaristica - sir de caractere
?dtoc({^1990/10/02})
?ctod('10/02/1990') && ptr a fost definit modul britanic de data


2. Variabile
2.1 Folosirea variabilelor

O variabil are asociate urmtoarele elemente:
numele
coninutul
tipul variabilei


11
Din punct de vedere al utilizrii lor, variabilele pot fi:
locale, acioneaz ntr-o funcie sau procedur. Declararea utilizrii lor se face
cu comanda:

LOCAL <list_variabile>
<list_variabile> - variabilele se declar prin nume i tip.
globale, acioneaz la nivelul ntregului program, inclusiv n funcii i proceduri.
Declararea utilizrii lor se face cu comanda:

PUBLIC <list_variabile>
Atribuirea de valori unei variabile se face cu sintaxa:
<nume_var>=<expresie>
Efectul comenzii: se evalueaz expresia din dreapta, se caut dac variabila a fost definit
i i se atribuie valoarea i tipul expresiei.
Atribuirea se mai poate face utiliznd comanda:
STORE <expresie> TO <list_variabile>
Efectul comenzii: se evaluaz expresia i se atribuie variabilelor din list, valoarea i tipul
ei.
Eliberarea zonelor de memorie ocupate de variabile care nu mai sunt necesare n
program se face cu una din comenzile:
RELEASE [ALL] <list_variabile>
CLEAR [ALL] <list_variabile>
Afiarea coninutului variabilelor existente n memorie se face cu comenda:
DISPLAY MEMORY [TO PRINTER[PROMPT] | TO FILE nume_fiier]
[NOCONSOLE]
unde:
TO PRINTER[PROMPT] ieirea la imprimant. Clauza PROMPT se folosete pentru a
confirma imprimarea, ntr-o fereastr de dialog;
TO FILE nume_fiier ieirea direcionat ctre un fiier;
[NOCONSOLE] mpiedic afiarea n fereastra principal VFP, a rezultatelor comenzii.

Exemplu 5:
procedure test
private c
public d
c=3
d=4
note aici se cunosc variabilele a,b,c si d
?'a=',a
?'b=',b
?'c=',c
?'d=',d

Rezultatul n urma rulrii rutinei anterioare este cel descris ulterior:





12
2.2 Expresii de substituie

Macro substituia trateaz coninutul unei variabile ca un ir de caractere n sens literal
(cmpul unei nregistrri dintr-o tabel, nume de fiier etc.), ca i cum n locul variabilei
respective ar fi pus irul de caractere fr apostrofuri.
Sintaxa comenzii: & nume_variabil

Exemplu 6: Presupunem c avem 2 fiiere tabel Student1.DBF (Nume, Prenume,
Facultate) i Student2.DBF (Nota1, Nota2, Nota3). Vrem s le vizualizm
coninutul ntr-un ciclu FOR.

PUBLIC FIS C(20)
FOR I=1 TO 2
FIS='Student'+ALLTRIM(STR(I))+'.DBF'
USE &FIS
BROWSE
ENDFOR
CLOSE DATABASES

2.3 Expresia de nume
Aceste expresii sunt de forma: nume_variabil. Este utilizat oriunde ntr-o
instruciune, unde este vorba de un nume (nume de tabel, cmp, fiier). String-ul coninut
de variabil este numele care va fi folosit de instruciune.
Ex.: USE (vart) INDEX (varint) - e mai bun dect substituia
Variabilele pot fi folosite i n legtur cu tabelele pentru a prelua din articolul
curent al unui tabel valorile cmpurilor, respectiv, pentru a depune n articolul curent
valori dintr-o list de variabile. Variabilele i cmpurile au nume identice. Instruciuni
folosite sunt urmtoarele:
SCATTER MEMVAR pentru preluare din table
GATHER MEMVAR pentru inserarea (ncrcarea) unei variabile n tabel.
Exemplu 7:
USE Student1
LOCATE FOR Nume="POP"
SCATTER MEMVAR
DISPLAY OFF Nume, Prenume, Facultate





13
3. Aplicaii propuse spre rezolvare n laborator

Aplicaia 1.

Se va realiza o aplicaie tip calculator, pentru realizarea operaiilor primare aritmetice.
Se va construi un formular Calculator.scx sub descrierea de mai jos.


Modul proiectare Modul rulare

Coninutul butonului de comand (lansare) are urmtoarea procedur de
eveniment Click:
do case
case thisform.optiongroup1.value=1
thisform.text3.value=str(val(thisform.text1.value)+;
val(thisform.text2.value))
case thisform.optiongroup1.value=2
thisform.text3.value=str(val(thisform.text1.value)-;
val(thisform.text2.value))
case thisform.optiongroup1.value=3
thisform.text3.value=str(val(thisform.text1.value)*;
val(thisform.text2.value))
case thisform.optiongroup1.value=4
thisform.text3.value=str(val(thisform.text1.value)/;
val(thisform.text2.value),10,2)
endcase

Caseta de introducere are stabilit proprietatea: ReadOnly: .T. True.


Aplicaia 2.

Se va realiza o aplicaie tip simulator rate bancare. Aplicaia va fi descris sub forma unui
formular, cu numele Simulator credite.scx.

14

Modul proiectare Modul rulare

Opiunea buton de comand conine valorile nscrise, din meniul de
context opiunea Builder, .

Butonul de introducere date are urmtoarele proprieti:
ReadOnly: .T. True
ControlSource: d
Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.

Primul buton de comand are urmtorul coninut de procedur Click:
if thisform.combo1.value="Nevoi personale"
thisform.text1.value=10
endif
if thisform.combo1.value="Auto"
thisform.text1.value=8.9
endif
if thisform.combo1.value="Imobiliar"
thisform.text1.value=6.5
endif

Elementul de introducere date are urmtoarele proprieti:
ControlSource: s
Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.

Elementul de introducere date are urmtoarele proprieti:
ControlSource: p
Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.


15
Butonul de introducere date are urmtoarele proprieti:
ReadOnly: .T. True
Din meniul de context se alege Builder, iar din opiunea Data Type: Numeric.

Al doilea buton de comand are urmtorul coninut de procedur Click:
thisform.text4.value=payment(s,d/12/100,p)

Aplicaia 3:

Se va dezvolta o aplicaie concretizat ntr-un formular cu numele Varsta.scx, n care se
va determina timpul exact trecut de la naterea unui subiect.

Modul proiectare


Modul rulare
Cmpul de editare (introducere) date Text2 are urmtoarele proprieti:
Tip de date ales: dat calendaristic
ControlSource: d

Etichetele Label4 i Label5:
Autocenter: .T. True

16

Butonul de comand are urmtorul coninut de procedur Click:
thisform.label4.caption="Salut, "+alltrim(upper(thisform.text1.text))

Butonul de comand are urmtorul coninut de procedur Click:
set date to brit &&seteaza data in format zz/ll/aa
set cent on &&seteaza data in format zz/ll/aaaa

azi=date() &&data de azi este retinuta in variabila azi
z1=day(azi) &&ziua curenta
m1=month(azi) &&luna curenta
a1=year(azi) &&anul curent

z2=day(d) &&ziua nasterii
m2=month(d) &&luna nasterii
a2=year(d) &&anul nasterii

if a2<=a1

if z2<=z1
z3=z1-z2 &&in z3 retinem ziua rezultat
else
m1=m1-1
do case
case m1=1 or m1=3 or m1=5 or m1=7 or m1=8 or m1=10 or m1=12
z1=z1+31
case m1=4 or m1=6 or m1=9 or m1=11
z1=z1+30
case m1=2
if mod(a1,4)=0 &&cazul in care anul curent este bisect
z1=z1+29
else
z1=z1+28
endif
endcase
z3=z1-z2
endif

if m2<=m1
m3=m1-m2
else
a1=a1-1
m1=m1+12
m3=m1-m2
endif

a3=a1-a2

else
thisform.label4.caption="Data incorecta"
endif

if a2<=a1
thisform.label4.caption="Ani:"+alltr(str(a3))+space(5)+;
"luni: "+alltr(str(m3))+space(5)+"zile: "+alltr(str(z3))

17
thisform.label5.caption="Total numar zile: "+alltr(str(azi-d))
else
thisform.label4.caption="Data incorecta"
endif

Aplicaia 4.

Se va construi un formular cu numele CNP.scx, prin intermediul cruia se va introduce
un CNP valid, iar pe baza acestuia se vor determina sexul i data naterii ale persoanei
aparintoare.


Modul proiectare Modul rulare

Cmpul de introducere date Text1:
Tip de date ales: caracter
MaxLength: 13

Cmpul de introducere date Text2:
Tip de date ales: caracter
ReadOnly: .T. True

Cmpul de introducere date Text3:
Tip de date ales: dat calendaristic
ReadOnly: .T. True

Primul buton de comand are urmtorul coninut de procedur Click:
if left(thisform.text1.text,1)="1"
thisform.text2.value="Masculin"
else
if left(thisform.text1.text,1)="2"
thisform.text2.value="Feminin"
else
wait wind "CNP gresit!"
endif
endif

Al doilea buton de comand are urmtorul coninut de procedur Click:
z=substr(thisform.text1.text,6,2)

18
l=substr(thisform.text1.text,4,2)
a=substr(thisform.text1.text,2,2)

set cent on
set date to brit
thisform.text3.value=ctod(z+"/"+l+"/"+a)

S-ar putea să vă placă și