Sunteți pe pagina 1din 21

MINISTERUL EDUCATIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICA A MOLDOVEI

CATEDRA SISTEME OPTOELECTRONICE

LUCRARE DE CURS

LA DISCIPLINA PROGRAMARE

A efectuat studentul grupei XXX-XXX Xxxxxxx Xxxxxxx

A verificat lectorul superior Istrati Serghei

CHISINAU 200__
Cuprins

1. Introducere ................................................................................................................... 3

2. Sarcina .....................…................................................................................................ 4

3. Schema logica a programului ................................................................................. 5-10

4. Listingul programului ........................................................................................... 11-16

5. Descrierea programului ..….................................................................................. 17-18

6. Rezultatele obtinute ................................................................................................... 19

7. Concluzii ................................................................................................................... 21

8. Lista literaturii utilizate ............................................................................................. 22

2
1. Introducere.

In timpul anilor 60 au aparut câteva noi limbaje de programare, precum ALGOL 60 care a
adunat din FORTRAN conceptele programarii structurate, care în final vor ajunge a fi utilizate de CPL
si succesorii sai (precum C++). Mai târziu, ALGOL 68 a influentat de asemenea in mod direct si
dezvoltarea tipurilor de date din C. De asemeni adevarat este faptul ca ALGOL a fost un limbaj
nespecific si modul sau abstract l-au facut putin folosit în practica pentru rezolvarea sarcinilor
obisnuite.
In 1963 se pare ca CPL (Combined Programming language) a fost mai specific pentru sarcini concrete
de programare la aceea vreme decât ALGOL. Cu toate acestea, aceasta caracteristica -l a facut un
limbaj cunoscut si, de asemeni, dificil de învatat si implementat.
In 1967, Martin Richards a dezvoltat BCPL (Basic Combined Programming Language), care a
însemnat o simplificare a CPL, luând cele mai bune parti de la acesta. Dar a continuat sa fie un limbaj
foarte abstract, si care a fost facut portabil putin câte putin, în functie de caracteristicile unei masini
concrete.
In 1970, Ken Thompson, adâncit în dezvoltarea UNIX la Bell Labs, a creat limbajul B. A fost o portare
a BCPL pentru o masina specifica si a unui sistem specific (DEC PDP-7 si UNIX), si care a fost
adaptat pentru gustul si necesitatile lui particulare. Rezultatul final a fost o simplificare enorma a CPL,
desi dependenta de sistem. Avea mari limitari, ca de exemplu nu compila în cod executabil, ci doar în
cod pe fire de executie, care genera cod lent în executie si de asemenea inadecvat pentru dezvoltarea
unui sistem de operare cu acest limbaj. Motiv pentru care, din 1971, Denis Ritchie, din echipa Bell
Labs, a început dezvoltarea unui compilator de B, care printre multe alte lucruri, a fost capabil sa
genereze în mod direct cod executabil. Acest "nou B", în final numit C, introducea în plus, câteva noi
concepte limbajului, ca tipul de date char.
Devreme în 1973, Denis Ritchie, a dezvoltat bazele limbajului C. Includerea tipurilor, a manipularii
lor, a îmbunatatirii pentru siruri si pointeri, alaturi de capacitatea demonstrata de portabilitate a fost
motivul pentru care a devenit un limbaj de nivel înalt, contribuind la extinderea C. A fost consacrat cu
volumul "The C Programming Language" (Programarea în C) de Brian Kernighan si Denis Ritchie,
cunoscut si ca White Book, si care a servit standard de facto pâna la publicarea oficiala a standardului
ANSI (ANSI X3J11 committee) in 1989.La începutul anilor '80, Bjarne Stroustrup, de la Bell labs, a
început dezvoltarea limbajului C++, care va primi formal acest nume la sfârsitul anului 1983, când
primul sau manual a fost publicat. In Octombrie 1985,a
aparut prima versiune comerciala a limbajului si prima
editie a cartii "Limbajul de programare C++" ("The C++
Programming Language") de Bjarne Stroustrup.
In timpul anilor '80, limbajul C++ a evoluat pâna a
devenit un limbaj cu propria personalitate. Toate acestea
fara practic a pierde compatibilitatea codului sau a unora
dintre cele mai importante caracteristici ale sale. De fapt,
standardul ANSI pentru limbajul C, publicat în 1989 a
adunat laolalta o buna parte din contributiile C++ la
programarea structurata.
Din 1996 comisia ANSI X3J16 a început dezvoltarea
propriului standard pentru c++. In perioada ce a trecut
pâna la publicarea versiunii finale in Noiembrie 1997,
C++ a cunoscut o mare dezvoltare în folosirea sa iar în
zilele noastre este cel mai folosit limbaj pentru dezvoltare
aplicatiilor. De asemenea, pâna la publicarea
standardului, C++ a cunoscut mari schimbari si a
încorporat noi concepte.
Evolutia familiei limbajului C(grafic):
O linie solida reprezinta o mostenire masiva de caracteristici, o linie întrerupta înseamna împrumutarea
caracteristicilor majore, o linie punctata împrumutul unor caracteristici minore.

3
Ministerul Educatiei al Republicii Moldova

Universitatea Tehnica a Moldovei

Aprob

Sef catedra Sisteme Optoelectronice

____________________ P. Nistiriuc
_____ ___________________ ______

SARCINA
pentru îndeplinirea lucrarii de curs la disciplina “Programare”

înmînata studentului anului I _________________________________


(numele, prenumele studentului)
grupa _________ la data de ____ ________________ ______

De elaborat un program pentru rezolvarea urmatoarei probleme:

De alcatuit o baza de date cu n înscrieri care ar contine informatia despre utilizatorii unui sistem
informational accesat prin parola.
a)Pentru a intra în sistem utilizatorul trebuie sa culeaga numele si parola personala.
b) Utilizatorii sa fie aranjati în ordine alfabetica dupa nume.
c) Intrînd în sistem, utilizatorul sa primeasca informatia despre drepturile sale în sistem (citire,
redactare, creare, stergere de fisiere).
d) Sa fie posibila cautarea utilizatorilor dupa nume (fara afisarea parolelor).

Lucrarea de curs trebuie sa contina:


1. Întroducere.
2. Sarcina.
3. Schema logica a programului.
4. Listingul programului.
5. Descrierea programului.
6. Rezultatele obtinute.
7. Concluzii.
8. Lista literaturii utilizate.

Lucrarea trebuie sa fie alcatuita conform standardelor pentru îndeplinirea documentelor soft.
În timpul îndeplinirii lucrarii de curs de respectat indicatiile generale.

Lucrarea trebuie sustinuta pîna la data de 31 mai 200__

Lucrarea a fost sustinuta pe nota _______ ( __________ )

lector superior Sergiu G.Istrati ______________

4
3. Schema logica a programului.
conditia pasmodif pass
START START START

j=0;j<strl j=0;j<n;
Conditia en(s);j++ j++
...

s[j]=s[ (strcmp(s,M[j].
nume)==0)&&(
j]+30 strcmp(p,M[j].p
as)==0)
STOP

return(1)
STOP

return(0)

STOP

inscr
citire
START
START

(f=fopen(s,
"w"))==NU
(f=fopen(s, LL
"r"))==NU
LL

fread(&M[i
\7Utilizatori cu ],sizeof(M[i Fisierul %s
]),1,f)==1
numele %s nu nu poate fi
sint inscrisi deschis
ex

i++
i=0;i<n;i+
+

e
x

fwrite(&M[
i],sizeof(M[
return(i) i]),1,f)

STOP return(1)

e
x

return(1)

STOP

5
add 1
START
Culege Culege dreptul
dreptul la la formarea
citirea bazei bazei noi
(f=fopen(s,
"a"))==NU
LL

c=getch() c=getch()

a
d (c!='Y')&& (c!='Y')&&
(c!='y')&&( (c!='y')&&(
c!='n')&&( c!='n')&&(

Adaogare?
aux[0].dr.r=c aux[0].dr.r=c

c c
(c=='y')||(c=
='Y')||(c==1
3)
e
x

Culege dreptul Culege dreptul


la completarea la cautarea
bazei utilizatorului
Complectare:

c=getch() c=getch()
ad
1

(c!='Y')&& (c!='Y')&&
(c!='y')&&( (c!='y')&&(
c!='n')&&( c!='n')&&(
Culege
numele
utilizatorului
aux[0].dr.r=c aux[0].dr.r=c

aux[0].nume

c c

Fisierul %s
strlen(aux[0
].nume)>10 nu poate fi
deschis Doriti sa
adaugati
inscrierea noua
! numele
ad
2 prea lung !

c=getch()
Culege
parola
utilizatorului

(c=='y')||(c=
aux[0].pas ='Y')||
(c==13)

e
x

strlen(aux[0
].pas)>8 fwrite(&au
x[0],sizeof(
Confirma aux[0]),1,f)
! parola parola
utilizatorului
prea lunga !
Baza a fost
STOP inscrisa

ux

strcmp(aux[
0].pas,ux)!
=0

! parola pasmodi
gresita! f(aux[0].
pas)

6
culmasiv 1

START
i=k;i<n;i+
+

k=0
wr Doriti sa
1
inscriti baza
de date
Doriti sa
creati o baza Culege
de date noua? numele
utilizatorului
(c=='y')||(c=
='Y')||(c==1
3)

(c=='y')||(c= M[i].nume
='Y')||(c==1
3)

i=inscr(s
,n)
strlen(M[i].
Culege nume)>10

numarul nou
de utilizatori wr
! numele
2

prea lung ! Baza a fost


inscrisa
Culege
citire(nf parola
is)!=0 utilizatorului

k=0
M[i].pas
pastrati
accesul DV?

strlen(M[ STOP
i].pas)>8

(c=='y')||(c=
='Y')||(c==1
Confirma
3)
parola
! parola utilizatorului
prea lunga !
aux[0]=M[po
z];M[0]=aux[ ux
0];k=1;poz=0
*
Complecteaz strcmp(M[i
a cimpurile ].pas,ux)!= c=getch()
0
bazei de date:
! parola pasmodi
gresita ! f(aux[0].
(c!='Y')&&

1 pas) (c!='y')&&(
c!='n')&&(

Culege
dreptul la aux[0].dr.r=c
citirea bazei

c
*
Culege dreptul Doriti sa
la completarea adaugati
bazei inscrierea noua

* c=getch()

Culege dreptul
la formarea
baze i noi

*
Culege dreptul
la cautarea
utilizatorului

*
7
afisare caut
START
START

+---------------------- ---+ e
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦ x
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
+-------------------------+

* Culege
numele
i=0;i<n;i+ tex tbackground(BLAC utilizatorului
+ K);textcolor(WHITE);g STOP

i==poz fmod(i, textbackground(BLUE)


s1
;textcolor(RED);
2)==0
i=0;i<n;i+
+

textbackground(BLAC textbackground(RED);t
K);textcolor(6+BLINK) extcolor(BLUE);

strcmp(s1,
M[i].nume)
==0
z=186;

\r%d%9s %c ******** %c %c
%c %c %c %c %c %c
%c \n",i+1,M[i].nume,z,z,M[i].d
r.r,z,M[i].dr.add,z,M[i].dr.scr,z,
r++
M[i].dr.c,z

textbackground(0);textc
olor(7);z=205; i<n-1 r>0
+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+

\r%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c \n
\r%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c \n
",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z
* \7Utilizatori cu
",204,z,z,z,z,z,z,z,z,z,z,206,z,z,z
,z,z,z,z,z,z,z,206,z,z,z,206,z,z,z, ,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
206,z,z,z,206,z,z,z,185 202,z,z,z,202,z,z,z,188 numele %s nu
i=0;i<n;i+ sint inscrisi
+

strcmp(s1,
M[i].nume)
==0 e
x

+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL
¦-----------+-------------¦
¦

¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
Doriti sa
+-------------------------+
cautati un alt
** nume

aranj (c=='y')||(c=
='Y')||(c==1
3)
START

i=0;i<n-
1;i++ STOP STOP
afis drept
i=0;i<n-
1;i++ START

+-------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦ - ----------+-------------¦
strcmp(M[i ¦ ume ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
].nume,M[j +-----------------------------+

].nume)>0
*

i=0;i<n;i+
+
poz==i

pass(p,s,n)==1)
&&(strc mp(p,
return(i)
M[i].pas)==0)&
&(strcmp(s,M[i

poz=j ].nume)==0)

+-------------------------+
STOP
¦ UTILIZATORUL ¦ DREPTUL ¦
¦-----------+-------------¦
¦ u m e ¦ passw ¦ R ¦ A ¦ W ¦C ¦
+-------------------------+
aux[0]=M[i];
M[i]=M[j];M
[j]=aux[0];
**

8
main
START me
niu

start
nfis meniu*

n=citir nfis
s
e(nfis) new

condit
c==’1’ h1
n==0
inscr(nfis
,n)==0
ia()

poz=afis
Baza de date c==’ 2’ h2 drept(p,s
Culege
lipseste. ,n)
numele:

s c==’ 3’ h3 add(nfis)
culmasiv
(nfis)==0
exit

Culege
parola: c==’ 4’ h4
(M[poz].dr.add
=='Y')||(M[poz]
.dr.add=='y')
start

i=0
c==’ 5’ h5 noac
ACCESS
ba cess INTERZIS
k

c=getch() c==’ 6’ h6

c==27 nop
ass (M[poz].dr.c==' caut(n)
c==’ 7’ h7 Y')||(M[poz].dr.
c=='y')

c==8 i>=1
c==’ 0’ exit

(i>=8)&
i--
&(c!=13) \7EXIT
?(Y/N):
c<<"
"<<c
c!=13 gotoxy(whe
rex()-
1,wherey())
c='\0' "%c",15
Y

p[i]=c;i++ c=getch()
c!='\0'

c=='n')||(c= (c!='Y')&&
='N')||(c==2 (c!='y')&&(
7) c!=13)
p[i]=c pass(p,s nop
,n)==0 ass
pasmo N
START
dif(p) poz=afis
drept(p,s c=getch()
,n)

sta (c!='N')&&
(c!='n')&&(
me rt c!=13)

niu
9
h3 h5 h6

n=citire(
(M[poz].d r . noa (M[poz].dr.
r=='Y')||(M[
poz].dr.r=='
cce scr=='Y')||(
M[poz].dr.s
nfis)
ss

n=citire( n=culma aranj(n)


nfis) siv(nfis);

poz==0
inscr(nfis
n==0 nfi 2,n)==0
sne
w
sta
rt
me
fraza="BAZA
INITIALA"
niu inscr(nf
s
is,n);

afisare(n
,fraza)
(M[poz].dr.
r=='Y')||(M[
poz].dr.r=='

me
niu
s fraza="BAZA
FINALA"

afisare(
n,fraza)

Baza finala a
nopa fost inscrisa in
ss fisierul %s

\7! Numele sau me


parola gresita niu
!\n\n\rEXIT s

c=getch()

(c=='N')||(c
=='n')||(c==
sta
27) rt

(c=='Y')||(c
no
=='y')||(c==
13) pas
s

10
4. Listingul programului.

#include<conio.h>//clrscr,getch,getpass,gotoxy
#include<stdio.h>//fclose,fopen,printf
#include<iostream.h>//cin,cout
#include<math.h>//fmod
#include<string.h>//strcmp,strcpy

FILE *f;
int i,j,n,poz;
char c,z,nfis[20]="D:\\baza.txt",nfis2[20]="D:\\bazanew.txt",ux[10];
struct drept{char r;char add;char scr;char c;};
struct masiv{char nume[10];char pas[8];struct drept dr;};
struct masiv M[20],aux[10];

void conditia(){clrscr();textcolor(4);textbackground(0);
cprintf("Conditia :\n\r"
" De alcatuit o baza de date cu n inscrieri care ar contine informatia despre\n\r"
" utilizatorii unui sistem informational accesat prin parola.\n\r"
" a) Pentru a intra in sistem utilizatorul trebuie sa culeaga numele\n\r"
" si parola personala.\n\r"
" b) Utilizatorii sa fie aranjati in ordine alfabetica dupa nume.\n\r"
" c) Intrand in sistem, utilizatorul sa primeasca informatia despre\n\r"
" drepturile sale in sistem (citire,redactare,creare,stergere de fisiere).\n\r"
" d) Sa fie posibila cautarea utilizatorului dupa nume (fara afisarea parolei).\n\n\r");
cout<<"Drepturile utilizatorului in sistem :\n\n"
" R - (read)citirea bazei de date.\n\n"
" A - (add)adaugarea unui nou utilizator.\n\n"
" W - (write)scrierea unei noi baze de date.\n\n"
" C - cautarea utilizatorului dupa nume.\n\n";
getch();};

void pasmodif(char *s){for(j=0;j<strlen(s);j++)s[j]=s[j]+30;}

int pass(char *p,char s[20],int n){


for(j=0;j<n;j++)
if((strcmp(s,M[j].nume)==0)&&(strcmp(p,M[j].pas)==0))return(1);
return(0);}

int citire(char s[20]){i=0;


if((f=fopen(s,"r"))==NULL){textcolor(RED+128);
cprintf("Fisierul %s nu poate fi deschis pentru citire !",s);
getch();goto ex;}
else{
while(fread(&M[i],sizeof(M[i]),1,f)==1)i++;
fclose(f);ex: return(i);}}

int inscr(char s[20],int n){


if((f=fopen(s,"w"))==NULL){clrscr();textcolor(15+128);
cprintf(" \n\r Fisierul %s nu poate fi deschis pentru inscriere !",s);
getch();goto ex;}
for(i=0;i<n;i++)fwrite(&M[i],sizeof(M[i]),1,f);
fclose(f);return(1);
ex:return(0);}

11
void add(char s[20]){
if((f=fopen(s,"a"))==NULL){
clrscr();gotoxy(15,2);textcolor(15+128);
cprintf("Fisierul %s nu poate fi deschis pentru completare !",s);
getch();goto ex;}
ad:clrscr();
cprintf("Doriti sa adaogati inca o inscriere in baza de date(Y/N)? ");c=getch();
if((c=='y')||(c=='Y')||(c==13)){
cprintf(" \r\nComplecteaza cimpurile bazei de date:\n\n");
ad1:
cprintf(" \r\n Culege numele utilizatorului : ");gets(aux[0].nume);
if(strlen(aux[0].pas)>10){textcolor(RED+128);
cprintf("! numele prea lung !"); textcolor(3);goto ad1;}
ad2:
cprintf(" \r\n Culege parola utilizatorului : ");gets(aux[0].pas);
if(strlen(aux[0].pas)>8){textcolor(RED+128);
cprintf("! parola prea lunga !"); textcolor(3);goto ad2;}
cprintf(" \r\n Confirma parola utilizatorului : "); gets(ux);
if(strcmp(aux[0].pas,ux)!=0){textcolor(RED+128);
cprintf("! parola gresita !"); textcolor(3);goto ad2;}
pasmodif(aux[0].pas);
cprintf(" \r\n Culege dreptul la citirea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.r=c;cout<<c;
cprintf(" \r\n Culege dreptul la completarea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.add=c;cout<<c;
cprintf(" \r\n Culege dreptul la formarea bazei noi (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.scr=c;cout<<c;
cprintf(" \r\n Culege dreptul la cautarea utilizatorului dupa nume (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));aux[0].dr.c=c;cout<<c;
cprintf(" \r\n\nDoriti sa inscriti baza de date in fisierul %s (Y/N)?",s);c=getch();
if((c=='y')||(c=='Y')||(c==13)){ fwrite(&aux[0],sizeof(aux[0]),1,f);
cout<<" \nBaza a fost inscrisa";} goto ad;} fclose(f);ex:}

int culmasiv(char s[20]){textcolor(3);


textbackground(BLACK);clrscr();int k=0;
cprintf(" \rDoriti sa creati o baza de date noua(Y/N)? ");c=getch();
if((c=='y')||(c=='Y')||(c==13)){clrscr();
cprintf(" \rCulege numarul nou de utilizatori ai sistemului:");cin>>n;
if(citire(nfis)!=0){
cprintf(" \r\nDoriti sa pastrati accesul DV(Y/N):\n");c=getch();
if((c=='y')||(c=='Y')||(c==13)) {aux[0]=M[poz];M[0]=aux[0];k=1;poz=0;}}
cprintf(" \r\n\nComplecteaza cimpurile bazei de date:\n\r");
for(i=k;i<n;i++){
wr1:
cprintf(" \r\n\n %d)\n Culege numele utilizatorului : ",i+1); gets(M[i].nume);
if(strlen(M[i].nume)>10){textcolor(RED+128);
cprintf("! numele prea lung !");textcolor(3); goto wr1;}
wr2:
cprintf(" \r\n Culege parola utilizatorului : ");gets(M[i].pas);
if(strlen(M[i].pas)>8){textcolor(RED+128);
cprintf("! parola prea lunga !");textcolor(3); goto wr2;}
cprintf(" \r\n Confirma parola : ");gets(ux);
if(strcmp(M[i].pas,ux)!=0){textcolor(RED+128);
cprintf("! parola gresita !");textcolor(3); goto wr2;}
pasmodif(M[i].pas);
12
cprintf(" \r\n Culege dreptul la citirea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));M[i].dr.r=c;cout<<c;
cprintf(" \r\n Culege dreptul la completarea bazei (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));M[i].dr.add=c;cout<<c;
cprintf(" \r\n Culege dreptul la formarea bazei noi (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));M[i].dr.scr=c;cout<<c;
cprintf(" \r\n Culege dreptul la cautarea utilizatorului dupa nume (Y/N) : ");
do c=getch();while((c!='Y')&&(c!='y')&&(c!='n')&&(c!='N'));M[i].dr.c=c;cout<<c;}
cprintf(" \r\n\nDoriti sa inscriti baza de date in fisierul %s (Y/N)?",s);c=getch();
if((c=='y')||(c=='Y')||(c==13)){ i=inscr(s,n);cout<<"\nBaza a fost inscrisa";}}
return(n);}void afisare(int n,char *s){
clrscr();cprintf(" \r%s\n\n",s);textcolor(BLACK);textbackground(GREEN);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,z
,z,z,z,z,187); z=186;
cprintf(" \r%c UTILIZATORUL %c DREPTUL %c\n",z,z,z);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",204,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,206,z,z,z,203,z,z,z,
203,z,z,z,203,z,z,z,185); z=186;
cprintf(" \r%c nume %c password %c R %c A %c W %c C %c\n",z,z,z,z,z,z,z);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188); textbackground(0);textcolor(7);
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,
z,z,z,z,z,z,187);
for(i=0;i<n;i++)
if(i==poz){textbackground(BLACK);textcolor(6+BLINK);}
else if(fmod(i,2)==0){textbackground(RED);textcolor(BLUE);}
else{textbackground(BLUE);textcolor(RED);} z=186;
cprintf(" \r%d%9s %c ******** %c %c %c %c %c %c %c %c
%c\n",i+1,M[i].nume,z,z,M[i].dr.r,z,M[i].dr.add,z,M[i].dr.scr,z,M[i].dr.c,z);
textbackground(0);textcolor(7);z=205;
if(i<n-1)
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",204,z,z,z,z,z,z,z,z,z,z,206,z,z,z,z,z,z,z,z,z,z,206,z,z,z,206,z,z,z,
206,z,z,z,206,z,z,z,185); else
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188);} textbackground(BLACK);textcolor(WHITE);getch();}

int afisdrept(char *p,char s[20],int n){clrscr();


cout<<"Drepturile utilizatorului "<<s<<" :\n\n";
textcolor(BLACK);textbackground(GREEN);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,z
,z,z,z,z,187); z=186;
cprintf(" \r%c UTILIZATORUL %c DREPTUL %c\n",z,z,z);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",204,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,206,z,z,z,203,z,z,z,
203,z,z,z,203,z,z,z,185); z=186;
cprintf(" \r%c nume %c password %c R %c A %c W %c C %c\n",z,z,z,z,z,z,z);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188); textbackground(0);textcolor(7);
13
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,
z,z,z,z,z,z,187);
for(i=0;i<n;i++)
if((pass(p,s,n)==1)&&(strcmp(p,M[i].pas)==0)&&(strcmp(s,M[i].nume)==0)){
textbackground(RED);textcolor(BLUE);z=186;
cprintf(" \r%c%9s %c ******** %c %c %c %c %c %c %c %c
%c\n",z,M[i].nume,z,z,M[i].dr.r,z,M[i].dr.add,z,M[i].dr.scr,z,M[i].dr.c,z);
textbackground(0);textcolor(7);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188); getch();return(i);}}

void aranj(int n){int j;


for(i=0;i<n-1;i++) for(j=i+1;j<n;j++){
if(strcmp(M[i].nume,M[j].nume)>0){
if(poz==i)poz=j;aux[0]=M[i];M[i]=M[j];M[j]=aux[0];}}}

void caut(int n){


st1:char s1[10];int r=0;clrscr();textcolor(3);
cprintf("Culege numele utilizatorului dorit:");gets(s1);
for(i=0;i<n;i++)if(strcmp(s1,M[i].nume)==0)r++;
if(r>0){cprintf(" \rS-au gasit %d utilizatori cu numele %s :\n\n",r,s1);
textcolor(0);textbackground(GREEN);z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,z
,z,z,z,z,187); z=186;cprintf(" \r%c UTILIZATORUL %c DREPTUL %c\n",z,z,z); z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",204,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,206,z,z,z,203,z,z,z,
203,z,z,z,203,z,z,z,185); z=186;
cprintf(" \r%c nume %c password %c R %c A %c W %c C %c\n",z,z,z,z,z,z,z); z=205;
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188);textbackground(0);textcolor(7);
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",201,z,z,z,z,z,z,z,z,z,z,203,z,z,z,z,z,z,z,z,z,z,203,z,z,z,203,z,z,z,
203,z,z,z,203,z,z,z,187);
for(i=0;i<n;i++)
if(strcmp(s1,M[i].nume)==0){ if(fmod(i,2)==0){textbackground(RED);textcolor(BLUE);}
else{textbackground(BLUE);textcolor(RED);}z=186;
cprintf(" \r%d%9s %c ******** %c %c %c %c %c %c %c %c
%c\n",r,M[i].nume,z,z,M[i].dr.r,z,M[i].dr.add,z,M[i].dr.scr,z,M[i].dr.c,z);
textbackground(0);textcolor(7);z=205;
if(i<r-1)
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",204,z,z,z,z,z,z,z,z,z,z,206,z,z,z,z,z,z,z,z,z,z,206,z,z,z,206,z,z,z,
206,z,z,z,206,z,z,z,185);else
cprintf(" \r%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%
c%c%c%c%c%c%c%c%c%c%c%c\n",200,z,z,z,z,z,z,z,z,z,z,202,z,z,z,z,z,z,z,z,z,z,202,z,z,z,202,z,z,z,
202,z,z,z,202,z,z,z,188);} getch();goto ex1;}
else{textbackground(BLACK);textcolor(RED);clrscr();
cprintf(" \r\7Utilizatori cu numele %s nu sint inscrisi in baza de date:",s1); getch(); ex1:
cprintf(" \n\rDoriti sa cautati un alt nume de utilizator (Y/N)?"); c=getch();
if((c=='y')||(c=='Y')||(c==13))goto st1;} textbackground(BLACK);textcolor(WHITE);}

14
void main(void){
clrscr();char s[10],p[10],*fraza;
start:
textcolor(7);textbackground(0);clrscr();
n=citire(nfis);
if(n==0){
if(inscr(nfis,n)==0)goto nfisnew;
cprintf(" \r\nBaza de date lipseste.");
if(culmasiv(nfis)==0)goto exit;
goto start;}
textcolor(RED);textbackground(0);
cprintf("Culege numele: ");gets(s);
cprintf("Culege parola personala:");
i=0;
do{
bak:c=getch();
if(c==27)goto nopass;
if(c==8){if(i>=1){i--;cout<<c<<" "<<c;}goto bak;}
if((i>=8)&&(c!=13))goto bak;
if(c!=13){printf("%c",15);p[i]=c;i++;}
else c='\0';}
while(c!='\0');p[i]=c;
pasmodif(p);
if(pass(p,s,n)==0)goto nopass;
poz=afisdrept(p,s,n);

meniu:textcolor(3);textbackground(0);clrscr();
cprintf(" \rAlege din meniu :\n\n\r"
"1. Afisarea conditiilor problemei.\n\n\r"
"2. Afisarea dreptului utilizatorului.\n\n\r"
"3. Citirea bazei de date din fisierul 'baza.txt' si afisarea ei la monitor.\n\n\r"
"4. Adaugarea unei noi inscrieri la sfirsitul fisierului existent 'baza.txt'.\n\n\r"
"5. Crearea bazei noi de date si inscrierea ei in fisierul 'baza.txt'.\n\n\r"
"6. Aranjarea utilizatorilor in ordine alfabetica dupa nume si inscrierea bazei\n\n\r"
" finale in fisierul 'bazanew.txt'.\n\n\r"
"7. Cautarea utilizatorului dupa nume.\n\n\r"
"0. Iesire");c=getch();clrscr();
switch(c){
case'1':goto h1;
case'2':goto h2;
case'3':goto h3;
case'4':goto h4;
case'5':goto h5;
case'6':goto h6;
case'7':goto h7;
case'0':goto exit;
default:goto meniu;}

h1:
conditia();goto meniu;

h2:
poz=afisdrept(p,s,n);goto meniu;

15
h3:
if((M[poz].dr.r=='Y')||(M[poz].dr.r=='y')){n=citire(nfis);
if(n==0)goto start;
fraza="BAZA INITIALA";afisare(n,fraza);goto meniu;}
else goto noaccess;
h4:
if((M[poz].dr.add=='Y')||(M[poz].dr.add=='y')){add(nfis);goto meniu;}
else goto noaccess;

h5:
if((M[poz].dr.scr=='Y')||(M[poz].dr.scr=='y')){n=culmasiv(nfis);if(poz==0)goto meniu;}
else goto noaccess;

h6:
n=citire(nfis);
aranj(n);if(inscr(nfis2,n)==0)goto nfisnew;inscr(nfis,n);
if((M[poz].dr.r=='Y')||(M[poz].dr.r=='y')){n=citire(nfis2);
fraza="BAZA FINALA";afisare(n,fraza);}
cprintf(" \rBaza finala a fost inscrisa in fisierul %s",nfis2);getch();
goto meniu;

h7:
if((M[poz].dr.c=='Y')||(M[poz].dr.c=='y')){caut(n);goto meniu;}
else goto noaccess;

nfisnew:
cprintf(" \n\rCulege numele de fisier dorit: ");
gets(nfis);goto start;

nopass:
clrscr();textcolor(RED+BLINK);
cprintf(" \7! Numele sau parola gresita !\n\n\rEXIT(Y/N)? ");
textcolor(RED);c=getch();
if((c=='N')||(c=='n')||(c==27))goto start;
else if((c=='Y')||(c=='y')||(c==13))goto exit;
else goto nopass;

noaccess:
clrscr();textcolor(RED+BLINK);
cprintf(" \7! ACCESS INTERZIS !");
getch();goto meniu;

exit:
textcolor(RED);clrscr();gotoxy(30,10);
cprintf(" \7EXIT ?(Y/N): "); textcolor(RED+128);
cprintf("Y");gotoxy(wherex()-1,wherey());
c=getch();
if((c=='n')||(c=='N')||(c==27)){
cout<<"N";c=getch();
if((c!='N')&&(c!='n')&&(c!=13))goto exit;
else goto start;}
else if((c!='Y')&&(c!='y')&&(c!=13))goto exit;
}

16
5. Descrierea programului.

La executarea programului se controleaza cu ajutorul functiei predefinite citire() daca fisierul


("D:\\baza.txt"), unde se afla baza de date cu informatia despre utilizatorii sistemului, poate fi deschis
pentru citire, în caz contrar se va controla cu ajutorul functiei inscr() daca fisierul poate fi deschis
pentru înscriere (creare), daca nu, se va executa instructiunea goto nfisnew, unde utilizatorul poate
indica un alt fisier care poate fi creat si prelucrat. Daca fisierul nu contine baza de date cu informatia
despre utilizatorii sistemului, se va executa functia culmasiv(nfis), unde (primul) utilizator va crea o
noua baza de date cu informatia despre numarul datele (numele, parola) si drepturile utilizatorilor.
Pentru un fisier ce poate fi citit si care contine informatia despre utilizatorii sistemului, se va
culege numele si parola utilizatorului (parola utilizatorului va fi afisata cu simbolul stelutei -
printf("%c",15), plus la aceasta facilitatea de a sterge si de a schimba caracterele din parola în caz de
culegere gresita). Dupa culegerea parolei ea deodata se codifica cu ajutorul functiei pasmodif(p). Apoi
se controleaza daca utilizatorul exista în baza de date a sistemului (din fisierul citi mai înainte) cu
ajutorul functiei pass(p,s,n), daca exista atunci i se va afisa drepturile sale in sistem, daca nu, se va
executa instructiunea goto nopass, care va anunta utilizatorul ca numele sau parola e gresita (adica
utilizatorul nu este înscris în baza de date adica în fisier) de asemenea dupa dorinta utilizatorului poate
fi efectuata iesirea din program sau reculegerea numelui si a parolei personale. Dupa afisarea
drepturilor sale (R – citire, A – adaugare, W – înscriere, C – cautare), utilizatorului i se va afisa meniul
cu 8 optiuni dintre care 4 principale, sunt drepturile sale în sistem. La culegerea unei cifre (1-7, 0) va fi
executata un bloc de operatii (instructiuni, afisari, functii) a programului cu ajutorul instructiunei de
selectare switch(c) si instructiunii goto(). La culegerea “cifrei cu drepturile utilizatorului” (3 – citire, 4
– adaugare, 5 – înscriere, 7 – cautare) programul va controla accesul utilizatorului în sistem. Pentru 0 –
iesirea din sistem(program), utilizatorul poate alege între Y si N.
Pentru economisirea spatiului si a utilizarii eficace a datelor am folosit variabile globale si o
structura imbricata (pentru drepturile utilizatorului). La fiecare executare a functiei fopen(), se
controleaza daca fisierul poate fi deschis sau nu.
Functiile ce prelucreaza si afiseaza datele functiei principale sunt :
void conditia() – afiseaza conditiile problemei.
void pasmodif(char *s) – codifica (parola) sirul de pe adresa s, astfel în fisier se va pastra parola
codificata a utilizatorului.
int pass(char *p,char s[20],int n) – întoarce valoarea 1 – pentru nume si parola adevarata, 0 – pentru
nume si parola falsa.
int citire(char s[20]) – citeste baza de date din fisier si întoarce numarul de înscrieri (utilizatori).
int inscr(char s[20],int n) – înscrie baza de date din fisier si întoarce 1daca s-a înscris, 0 daca nu.
void add(char s[20]) – adauga un utilizator la sfârsitul bazei de date din fisier.
int culmasiv(char s[20]) – culegerea informatiei despre utilizatorii sistemului într-o baza noua de date
si înscrierea ei în fisier, de asemenea întoarce numarul de înscrieri (utilizatori).
functiile add si culmasiv includ si alte optiuni (culegere gresita, schimbari).
void afisare(int n,char *s) – afiseaza tabela cu informatia despre utilizatorii sistemului.
int afisdrept(char *p,char s[20],int n) – afiseaza tabela cu informatia despre drepturile utilizatorului ce
a intrat în sistem.
void aranj(int n) – aranjeaza utilizatorii în ordine alfabetica dupa nume.
void caut(int n) – cautarea utilizatorilor dupa nume.

În elaborarea programului am folosit urmatoarele functii :


printf() – functie de iesire cu format . Ea permite afisarea la monitor a unui sir de caractere .
scanf() – functie de intrare cu format. Ea permite introducerea de la tastatura a datelor . Exemplu :
scanf("%d%d",&a,&b) ;
gotoxy() – functie ce muta cursorul în fereastra activa de executie . Parametrii ei sunt
gotoxy(coordonata x ,coordonata y) . Exemplu gotoxy(2,10) ;
wherex() si wherey() – functii care întorc ca valoare coordonata curenta a lui x (wherex()) si a lui y
(wherey()) ;
getch() – functie de intrare care permite citirea de la tastatura a unui caracter ;
cprintf() – echivalenta cu printf() numai ca afiseaza textul / fonul la monitor colorat ;
17
textcolor() – functie care scrisa înainte de cprintf() permite de afisat textul în diferite culori . De
exemplu textcolor(12) ;
textbackground() – functie ce coloreaza fonul textului în culori diferite ;
clrscr() – functie ce curata ecranul de tot ce se afla pe el .
fopen() – functie ce deschide un fisier aflat în memoria calculatorului daca el exista si daca fisierul nu
exista , atunci functia creeaza fisierul si îl deschide pentru scriere daca folosim modul de deschidere
”w” care pozitioneaza cursorul la începutul fisierului astfel pierzându-se toata informatia care se afla
înscrisa în el (daca a fost înscrisa ceva informatie mai înainte) sau ”a” care pozitioneaza cursorul la
sfârsitul fisierului astfel pastrându-se informatia înscrisa (daca a avut loc o înscriere ma i înainte) .
Folosind modul de deschidere ”r” fisierul se deschide pentru citire . Functia fopen() întoarce un
indicator la începutul fisierului .
Am folosit instructiunea de ramificare „ if ” . Functia selecteaza varianta corecta din alternativele sale .
Ea are urmatoarea sintaxa : if(c) I1;else I2 ; unde c este expresie logica .
Instructiunea functioneaza astfel : se evaluiaza expresia c , daca rezultatul este 1, atunci se executa I1
, dar daca rezultatul este 0 , atunci se executa I2 .
Pentru trecerea usoara din meniul programului în functii si invers am folosit instructiunea de
selectare „ switch ” . Ea este destinata pentru selectarea unei variante dintr-o multime posibila de
ramificari . Sintaxa : switch (E){case EC1: I1;case EC2: I2; ... case ECN: IN;default I;}. Expresia E
trebuie sa fie de tip ordonat (int ,char) , tipul EC trebuie sa corespunda cu cel al E . Principiul de
functionare al ei este : se calculeaza valoarea expresiei E , apoi aceasta valoare se compara cu
expresiile constante ale prefixelor “ case ” si îndeplineste instructiunea I pentru care aceste valori
coincid . Daca valoarea expresiei E nu coincide nici cu o valoare din prefixele “ case ” , atunci sau se
îndeplineste instructiunea ramurii “ default ” sau nu se îndeplineste nimic daca ea lipseste .
Am mai folosit instructiunile ciclice “ for ” si “ while ”.
Ciclu for poseda urmatoarele caracteristici : numarul de repetari ale ciclului este cunoscut de la
începutul executarii lui ; conducerea ciclului este efectuata cu ajutorul unei variabile de tip întreg
numita parametrul ciclului care în acest proces ciclic primeste valori diferite consecutiv de la valoarea
initiala pâna la valoarea finala data . Instructiunea are sintaxa : for(E1;E2;E3;){I;} E1,E2,E3 – expresii
, I – instructiune (corpul ciclului) , E1 – expresia de atribuire a valorii initiale parametrului ciclului ,
E2 – expresia de control (logica) , E3 – expresia de corectie (schimbare) a valorii parametrului ciclului
. Principiul de functionare : la început se îndeplineste expresia E1 de initializare a parametrului ciclului
, apoi se verifica valoarea E2 . Daca este primita valoarea 1 atunci se îndeplineste corpul ciclului I .
Dupa aceasta se executa E3 de corectie , apoi este din nou controlata valoarea E2 . Ciclul continua
pâna când E2 are valoarea 1 si se sfârseste când E2 are valoarea 0 . Instructiunea “ for ” poate folosi în
calitate de corp a ciclului o instructiune compusa .
Un pointer este o variabila care contine adresa unei alte variabile. Pointerii sînt foarte mult utilizati în
C ++ pentru ca uneori sînt singura cale de rezolvare a unei anumite probleme, parte pentru ca folosirea
lor duce la alcatuirea unui cod mai compact si mai eficient decât altul obtinut in alt mod. Pointerii au
fost "îngramaditi" la câteva instructiuni goto ca un minunat mod de a crea programe "imposibil" de
priceput. Acest lucru devine pe deplin adevarat atunci când pointerii sânt folositi neatent, fiind usor de
creat pointeri care sa idice în locuri cu totul neasteptate. Cu metoda, pointerii se utilizeaza pt. un plus
de simplitate. Din moment ce un pointer sustine adresa unui obiect, este posibila adresarea acelui
obiect "indirect" prin intermediul pointerului.
px=&x asigneaza variabilei px adresa lui x acum, px înseamna "pointeaza pe x". Operatorul & poate fi
aplicat numai variabilelor si elementelor unui tablou, constructii ca &(x+1) si &3 sînt interzise. Este de
asemenea interzisa pastrarea adresei unei variabile registru. Datorita faptului ca in C este posibila
transmiterea de argumente unei functii prin "apel prin valoare" nu exista modalitate directa pentru
functia apelata de a altera o variabila in functia apelanta.

18
6. Rezultatele obtinute.

Dupa culegerea numelui si a parolei utilizatorului se va afisa tabelul :


Alege din meniu :

1. Afisarea conditiilor problemei.

Doriti sa cautati un alt nume de utilizator (Y/N)?


Conditia :
De alcatuit o baza de date cu n inscrieri care ar contine informatia despre
utilizatorii unui sistem informational accesat prin parola.
a) Pentru a intra in sistem utilizatorul trebuie sa culeaga numele
si parola personala.
b) Utilizatorii sa fie aranjati in ordine alfabetica dupa nume.
c) Intrand in sistem, utilizatorul sa primeasca informatia despre
drepturile sale in sistem (citire,redactare,creare,stergere de fisiere).
d) Sa fie posibila cautarea utilizatorului dupa nume (fara afisarea parolei).

Drepturile utilizatorului in sistem :

R - (read)citirea bazei de date.

A - (add)adaugarea unui nou utilizator.

W - (write)scrierea unei noi baze de date.

C - cautarea utilizatorului dupa nume.

2. Afisarea dreptului utilizatorului.

+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
¦ ion ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
+-------------------------------------+

3. Citirea bazei de date din fisierul 'baza.txt' si afisarea ei la monitor.

BAZA INITIALA
+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 lamer ¦ ******** ¦ y ¦ y ¦ y ¦ y ¦
¦----------+----------+---+---+---+---¦
2 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
¦----------+----------+---+---+---+---¦
3 luser ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
+-------------------------------------+

4. Adaugarea unei noi inscrieri la sfirsitul fisierului existent 'baza.txt'.

5. Crearea bazei noi de date si inscrierea ei in fisierul 'baza.txt'.

19
6. Aranjarea utilizatorilor in ordine alfabetica dupa nume si inscrierea bazei

finale in fisierul 'bazanew.txt'.

BAZA FINALA

+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 lamer ¦ ******** ¦ y ¦ y ¦ y ¦ y ¦
¦----------+----------+---+---+---+---¦
2 luser ¦ ******** ¦ y ¦ y ¦ n ¦ y ¦
¦----------+----------+---+---+---+---¦
3 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
+-------------------------------------+

7. Cautarea utilizatorului dupa nume.

Culege numele utilizatorului dorit:serii


S-au gasit 1 utilizatori cu numele serii :

+-------------------------------------+
¦ UTILIZATORUL ¦ DREPTUL ¦
¦---------------------+---------------¦
¦ nume ¦ password ¦ R ¦ A ¦ W ¦ C ¦
+-------------------------------------+
+-------------------------------------+
1 serii ¦ ******** ¦ y ¦ n ¦ y ¦ n ¦
+-------------------------------------+

0. Iesirea
EXIT?(Y/N):Y

7. Concluzii.

C este un limbaj de programare cu scop general ale carui caracteristici sînt


economia de expresie, structuri moderne de control al fluxului si de date, precum si
un set bogat de operatori. C nu este un limbaj de nivel "foarte înalt", nici "mare", si
nu este specializat vreunei arii particulare de aplicatii. Dar absenta în restrictii si
generalitatea sa îl fac mai convenabil si mai de efect pentru mai multe scopuri decât
limbaje presupuse mai puternice. În experienta mea, C s-a dovedit un limbaj placut,
expresiv si adaptabil pentru o mare varietate de programe. Este usor de invatat si "se
poarta bine" pe masura ce experienta în programare cu el creste. Sper ca în viitor sa-
l folosesc mai bine.

20
8. Lista literaturii utilizate.

1. Borland C++ User’s Guide

2. Brian W. Kernighan, The C Programming Language

3. ???? ? ., ????????? ? ????????? ??????, M., Editura ? ??, 1989

4. Jamsa Kris (tradus Ion Fatu), Succes cu C++

5. www.istrati.com

21

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