Sunteți pe pagina 1din 7

PROIECT ALGORITMI SI

TEHNICI DE
PROGRAMARE
Oprescu Valentin 1113 ID

Realizati aplicatia care sa gestioneze salariatii unei societati.Se cere sa se creeze un


meniu pentru a putea selecta urmatoarele functii:
-creare fisier
-adaugare salariati
-modificare salariati
-stergere salariati
-listare angajati
-listare selectiva angajati(criteriul-vechime in munca mai mare de 5 ani)
-afisare pe ecran date angajat
Articolele din fisierul organizat relativ au urmatoarea structura:
ANGAJAT:
COD
angaja
t

CNP

Nume

Prenume

Vechime

Salariu

Programul a fost realizat in Visual Studio 2010.


A fost conceput in urmatorul mod:
-a fost construita o structura denumita ANGAJAT cu mai multe campuri:
cod,cnp,nume,prenume,vechime,salariu,is;
-fiecare cerinta a fost facuta ca un subprogram:
Creare-creeaza un fisier ,denumirea este preluata de la tastatura;
Adaugare-adauga un salariat,un articol in fisier,completandu-se toate campurile
structurii ANGAJAT;
Stergere-sterge un articol din fisier in functie de cod-ul de angajat introdus de la
tastatura;
Modificare-modifica un articol in functie de cod-ul de angajat care este introdus
de la tastatura
ListaAngajati-creeaza un fisier text cu angajatii introdusi;
Lista2-creeaza un fisier text cu angajatii care corespund criteriului vechime in
munca mai mare de 5 ani
Afisare-afiseaza pe ecran datele unui angajat in functie de cod-ul de angajat
introdus de la tastatura
-un alt subprogram a fost folosit pntru a determina dimensiunea fisierelor nrart
-in main s-a folosit o structra de tip switch case pentru a construi un meniu
cu 7 variante de a alege
-fisierul este organizat relativ

-cheia relativa a fisierului este cod angajat


-is-indicatorul de stare, ne arata daca un articol este gol sau nu
Programul se poate folosi pentru a gestiona o baza de date cu angajatii unei
societati si i se pot adauga mai multe campuri in functie de nevoia societatii.Se
pot modifica criteriile de selectie pentru subprogramul lista2 in functie de
necesitati.
Codul sursa:

#include<stdio.h>
#include <math.h>
#include <string.h>
#include<stdlib.h>
#include <conio.h>
#include <ctype.h>
typedef struct{
int cod;
char nume[20];
char cnp[13];
char prenume[20];
float salariu;
int vechime;
int is;
}ANGAJAT;
int nrart(FILE *f, int l)
{long p; int n;
p=ftell(f); fseek(f,0,2); n=ftell(f)/l;
fseek(f,p,0);return n;
}
FILE * creare()
{
FILE *f;
char nume[20];
char a;
printf("\nFisier: ");gets(nume);
f=fopen(nume,"rb+");
if(f==NULL)
{
printf("Se creaza fisierul cu numele %nume?", nume);
a=getch();
if(toupper(a)=='D')
{
f=fopen(nume, "wb");
fclose(f);
fopen(nume,"rb+");
}
}
return f;
}
FILE *adaugare(FILE *f)
{
ANGAJAT p; int i, cod;

printf("\t\t--------------------");
printf("\t\tADAUGARE ANGAJAT NOU");
printf("\t\t--------------------");

printf("\n Cod angajat: "); scanf("%d",&cod);


while(!feof(stdin))
{
if(cod>=nrart(f,sizeof(ANGAJAT)))
{
p.is=0; fseek(f,0,2);
for(i=nrart(f,sizeof(ANGAJAT));i<=cod;i++)
fwrite(&p,sizeof(ANGAJAT), 1, f);
}
fseek(f,cod*sizeof(ANGAJAT),0); fread(&p,sizeof(ANGAJAT), 1, f);
if(p.is) printf("\nExista deja un angajat cu acest cod");
else{
fseek(f,cod*sizeof(ANGAJAT),0);
printf("CNP: "); fflush(stdin);gets(p.cnp);
printf("NUME: "); fflush(stdin);gets(p.nume);
printf("PRENUME: "); fflush(stdin);gets(p.prenume);
printf("Vechime:"); scanf("%d",&p.vechime);
printf("Salariu:"); scanf("%f",&p.salariu);
p.is=1; p.cod=cod;
fwrite(&p,sizeof(ANGAJAT), 1, f);
}
printf("\nCod: "); scanf("%d",&cod);
}
return f;
}
FILE *modificare(FILE *f)
{
ANGAJAT p;
int CodModificat;
printf("\n Introduceti codul angajatului pe care doriti sa il modificati: "); scanf("%d",
&CodModificat);
fseek(f, CodModificat*sizeof(ANGAJAT),0);
fread(&p, sizeof(ANGAJAT),1,f);
if(p.cod!=1){ printf("\nNu exista angajat cu acest cod..."); }
else
{
printf("CNP: "); fflush(stdin);gets(p.cnp);
printf("NUME: "); fflush(stdin);gets(p.nume);
printf("PRENUME: "); fflush(stdin);gets(p.prenume);
printf("Vechime:"); scanf("%d",&p.vechime);
printf("Salariu:"); scanf("%f",&p.salariu);
fseek(f, CodModificat*sizeof(ANGAJAT),0);
fwrite(&p,sizeof(ANGAJAT),1,f);
printf("\nAngajatul cu codul %d a fost modificat...", CodModificat);
}
return f;
}
FILE *stergere(FILE *f)
{
ANGAJAT p;
int CodStergere;
printf("\n Introduceti codul angajatului pe care doriti sa il stergeti: "); scanf("%d",
&CodStergere);
fseek(f, CodStergere*sizeof(ANGAJAT),0);
fread(&p, sizeof(ANGAJAT),1,f);
if(p.cod!=1){ printf("\nNu exista angajat cu acest cod..."); }
else
{

p.is=0;
fseek(f, CodStergere*sizeof(ANGAJAT),0);
fwrite(&p,sizeof(ANGAJAT),1,f);
printf("Angajatul cu codul %d a fost sters din baza de date...", CodStergere);
}
return f;

void listaAngajati(FILE *f)


{
FILE *h;
ANGAJAT x;
fseek(f,0,0);
h=fopen("lista.txt", "wt");
fprintf(h, "\t\tLISTA ANGAJATILOR SOCIETATII COMERCIALE");
fseek(f,0,0);
fread(&x, sizeof(ANGAJAT),1,f);
while(!feof(f))
{
if(x.is==1)
{
fprintf(h,"&d &s &d &s &s &f &d",
x.cod,x.cnp,x.is,x.nume,x.prenume,x.salariu,x.vechime);
}
fread(&x, sizeof(ANGAJAT),1,f);
}
fclose(h);
}
void lista2(FILE *f) //angajati cu vechime mai mare de 5 ani
{
FILE *h;
ANGAJAT x;
fseek(f,0,0);
h=fopen("lista.txt", "wt");
fprintf(h, "\t\tLISTA ANGAJATILOR SOCIETATII COMERCIALE CU VECHIME MAI MARE DE 5
ANI");
fseek(f,0,0);
fread(&x, sizeof(ANGAJAT),1,f);
while(!feof(f))
{ if(x.is==1&& x.vechime>=5)
{
fprintf(h,"&d &s &d &s &s &f &d",
x.cod,x.cnp,x.is,x.nume,x.prenume,x.salariu,x.vechime);
}
fread(&x, sizeof(ANGAJAT),1,f);
}
fclose(h);
}
void afisare (FILE *f)
{
ANGAJAT p;
int CodAfisare;
printf("\n Introduceti codul angajatului pe care doriti sa il afisati: "); scanf("%d",
&CodAfisare);
fseek(f, CodAfisare*sizeof(ANGAJAT),0);
fread(&p, sizeof(ANGAJAT),1,f);

if(p.cod!=1){ printf("\nNu exista angajat cu acest cod..."); }


else
{
fseek(f,0,1);
printf("\n&d &s &d &s &s &f &d",
p.cod,p.cnp,p.is,p.nume,p.prenume,p.salariu,p.vechime);
}
}
void main()
{

FILE *f=NULL;
int opt=1;
while(opt!=0)
{
system ("cls");
printf("GESTIONAREA UNEI BAZE DE DATE CU INFORMATII DESPRE ANGAJATI");
printf("\n1. Alegere fisier de lucru.");
printf("\n2. Adaugare angajati in baza de date.");
printf("\n3. Modificare angajat din baza de date.");
printf("\n4. Stergere angajat din baza de date.");
printf("\n5. Generare raport cu angajatii actuali .");
printf("\n6. Generare raport angajati cu vechime mai mare de 5 ani .");
printf("\n7. Afisare date angajat.");
printf("\n0. Iesire");
printf("\n Alegeti optiunea: "); scanf("%d", &opt);
switch (opt)
{
case 1:
{
f=creare();
}
break;
case 2:
{
if(f==NULL)
{printf("\n NU ATI ALES FISIERUL DE LUCRU");
getch();
}
else f=adaugare(f);
}
break;
case 3:
{
if(f==NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
getch();
}
else {modificare(f);getch();}
}
break;
case 4:
{
if(f==NULL)
{

printf("\n NU ATI ALES FISIERUL DE LUCRU");


getch();
else {f=stergere(f);getch();}
}
break;
case 5:
{
if(f==NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
getch();
}
else {listaAngajati(f);getch();}

}
break;
case 6:
{
if(f==NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
getch();
}
else
lista2(f);

}
break;
case 7:
{
if(f==NULL)
{
printf("\n NU ATI ALES FISIERUL DE LUCRU");
getch();
}
else
afisare(f);
}
break;

}
fclose(f);
}