Sunteți pe pagina 1din 5

Seminarul 4

1. Să se scrie programul care să conțină un subprogram care creează un fișier secvențial cu date despre angajații unei
întreprinderi. Articolele au următoarea structură:

Salariu (ultimele trei


Marca Nume Prenume Profesie Departament luni - RON)
0 1 2

int char [20] char [20] char [20] char [20] float float float

Datele se preiau de la tastatură, sfârșitul introducerii fiind marcat standard.


#include <stdio.h>
#include<string.h>
#pragma warning (disable:4996)
typedef struct
{
int marca;
char nume[20];
char prenume[20];
char prof[20];
char dep[20];
float sal[3];
} ang;
int nrart(FILE *f, int p)
{ int r, l, n;
r = ftell(f);
fseek(f, 0, 2);
l = ftell(f);
n = l / p;
fseek(f, r, 0);
return(n);
}
void populare()
{ FILE *f;
int i;
ang a;
f = fopen("angajat.dat", "wb");//fopen_s(&f,"angajat.dat","wb");
printf("marca="); scanf("%d", &a.marca);
fflush(stdin);
while (!feof(stdin))
{
printf("Nume: "); scanf_s("%s", a.nume, sizeof(a.nume));
//printf("Nume: "); getc(stdin); gets_s(a.nume);
printf("Prenume: "); scanf_s("%s", a.prenume, sizeof(a.prenume));
printf("Profesie:"); scanf_s("%s", a.prof, sizeof(a.prof));
printf("Departamente:"); scanf_s("%s", a.dep, sizeof(a.dep));
for (i = 0; i <3; i++)
{
printf("Salariu din luna %d: ", i + 1);
scanf("%f", &a.sal[i]);
}
fwrite(&a, sizeof(a), 1, f);
printf("marca="); scanf("%d", &a.marca);
}
fclose(f);
}

void main()
{
populare();
}
2. Să se scrie subprogramul care adaugă noi angajați în fișierul creat la problema anterioară. Datele se preiau de la
tastatură, sfârșitul introducerii fiind marcat standard.
void adaugare()
{
FILE *f;
int i;
ang a;
char nume_f[20];
printf("\nnume fisier:");
gets_s(nume_f);
f = fopen(nume_f, "rb+");
if (f==NULL) printf("nu exista fisierul");
else
{
fseek(f, 0, 2);
printf("marca="); scanf("%d", &a.marca);
fflush(stdin);
while (!feof(stdin))
{
printf("Nume: "); scanf_s("%s", a.nume, sizeof(a.nume));
//printf("Nume: "); getc(stdin); gets_s(a.nume);
printf("Prenume: "); scanf_s("%s", a.prenume, sizeof(a.prenume));
printf("Profesie:"); scanf_s("%s", a.prof, sizeof(a.prof));
printf("Departamente:"); scanf_s("%s", a.dep, sizeof(a.dep));
for (i = 0; i < 3; i++)
{
printf("Salariu din luna %d: ", i + 1);
scanf("%f", &a.sal[i]);
}
fwrite(&a, sizeof(a), 1, f);
printf("marca="); scanf("%d", &a.marca);
}
fclose(f);
}
}

3. Să se scrie subprogramul care listează, într-un fișier text si pe monitor, sub formă de tabel, conținutul fișierului creat la
problema de la punctul 1.
void afisare()
{
FILE *f,*g;
char nume_f[20];
int i;
ang x;
printf("\nnume fisier:");
gets_s(nume_f);
f = fopen(nume_f, "rb");
if (f==NULL) printf("nu exista fisierul");
else {
g = fopen("lista_ang1.txt", "w");
printf("\n ");
printf("MARCA========NUME========PRENUME=======PROFESIE=========SAL1========SAL2=======SAL3");
fprintf(g,"MARCA========NUME=======PRENUME========PROFESIE========SAL1========SAL2=======SAL3");
fread(&x, sizeof(x), 1, f);
while (!feof(f))
{
printf("\n %5d || %20s || %20s || %20s ", x.marca, x.nume, x.prenume, x.prof);
for (i = 0; i < 3; i++) printf("|| %7.2f ", x.sal[i]);
fprintf(g,"\n %5d || %20s || %20s || %20s ", x.marca, x.nume, x.prenume, x.prof);
for (i = 0; i < 3; i++) fprintf(g,"|| %7.2f ", x.sal[i]);
fread(&x, sizeof(x), 1, f);
}
fclose(f);fclose(g);
}
}
4. Să se scrie subprogramul care afișează datele despre angajații ale căror mărci se introduc de la tastatură. Sfârșitul
introducerii este marcat standard.

void afisare_marca()
{
FILE *f, *g;
int marca1, vb;
ang x;
char nume_f[20];
printf("\nnume fisier:");
gets_s(nume_f);//scanf_s("%s",nume, sizeof(nume));
if (!(f = fopen(nume_f, "rb"))) printf("nu exista fisierul");
else
{
g = fopen("lista_marca.txt", "w");
printf("\n ");
fprintf(g, " LISTA SUCURSALA \n ");
fprintf(g, "================================================================================\n ");
fprintf(g, "MARCA|| NUME || PRENUME || SAL1 || SAL2 || SAL3 \n ");
fprintf(g, "================================================================================\n ");
printf("MARCA CAUTATA:"); scanf("%d", &marca1);
while (!feof(stdin))
{
rewind(f);
vb = 0;
fread(&x, sizeof(x), 1, f);
while (!feof(f) && (vb == 0))
{
if (x.marca== marca1)
{
printf("\n%5d || %-20s || %-20s || %5.2f || %5.2f || %5.2f ", x.marca, x.nume, x.prenume, x.sal[0],
x.sal[1], x.sal[2]);
fprintf(g,"\n%5d || %-20s || %-20s || %5.2f || %5.2f || %5.2f ", x.marca, x.nume, x.prenume, x.sal[0],
x.sal[1], x.sal[2]);
vb = 1;
}
else fread(&x, sizeof(x), 1, f);
}
if (vb == 0) printf("\n nu a fost gasit");

printf("\nMARCA CAUTATA:"); scanf("%d", &marca1);


}
fclose(f); fclose(g);
}
}
5. Să se scrie subprogramul care sortează angajații după profesie și departament.
Varianta 1
void sortare()
{
FILE *f;
int ok, i, n;
ang x, y;
char nume_f[20];
printf("\nnume fisier:");
gets_s(nume_f);//scanf_s("%s",nume,sizeof(nume));
if (!(f = fopen(nume_f, "rb+"))) printf("nu exista fisierul");
else {
n = nrart(f, sizeof(x)); //printf("\n%d", n);
ok = 1;
while (ok == 1)
{ok = 0;
for (i = 0; i < n - 1; i++)
{
fseek(f, i * sizeof(x), 0);
fread(&x, sizeof(x), 1, f);
fread(&y, sizeof(y), 1, f);
if ((strcmp(x.prof, y.prof) > 0) || ((strcmp(x.prof, y.prof) == 0) && (strcmp(x.dep, y.dep) > 0)))
{ fseek(f, i * sizeof(x), 0);
fwrite(&y, sizeof(y), 1, f);
fwrite(&x, sizeof(x), 1, f);
ok = 1;
}
}
}
fclose(f);}
}

Variant 2

void sortare1()
{
FILE* f;
char nume[20];
int n, i, j;
ang x, y;
printf("\nnumele fisierului sortat=");
gets_s(nume);
f = fopen(nume, "rb+");
if (f != NULL)
{
n = nrart(f, sizeof(x));
for (i = 0; i < n - 1; i++)
{
for (j = i + 1; j < n; j++)
{
fseek(f, i * sizeof(x), 0);
fread(&x, sizeof(x), 1, f);
fseek(f, j * sizeof(x), 0);
fread(&y, sizeof(x), 1, f);
if ((strcmp(x.prof, y.prof) > 0) || ((strcmp(x.prof, y.prof) == 0) && (strcmp(x.dep, y.dep) > 0)))
{
fseek(f, i * sizeof(x), 0);
fwrite(&y, sizeof(x), 1, f);
fseek(f, j * sizeof(x), 0);
fwrite(&x, sizeof(x), 1, f);
}
}
}
fclose(f);
}
else printf("\nFisierul nu poate fi deschis.");
}
Tema:
1. Să se scrie programul care creează un fișier secvențial cu date despre studenții unei facultăți. Articolele au
următoarea structură:

note
Numar_matricol nume an grupa seria
0 … 9

int char [20] int int char float float float

Datele se preiau de la tastatură, sfârșitul introducerii fiind marcat standard.

2. Să se scrie programul care listează, într-un fișier text, sub formă de tabel, conținutul fișierului creat la problema de
la punctul 1.
3. Să se scrie programul care listează, într-un fișier text, sub formă de tabel, studenții care au media celor 10 note peste
8, din fișierului creat la problema la punctul 1.
4. Să se scrie programul care listează, în fișiere text, situația studenților din grupele ale căror numere se introduc de la
tastatură. Sfârșitul introducerii este marcat standard.
5. Să se scrie programul care afișează studenții integraliști din seriile care sunt introduse de la tastatură. Sfârșitul
introducerii este marcat standard.
6. Să se scrie programul care sortează studenții după anii de studiu şi grupe.

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

  • Impozitele
    Impozitele
    Document50 pagini
    Impozitele
    MisterTony112
    Încă nu există evaluări
  • Curs4 A
    Curs4 A
    Document16 pagini
    Curs4 A
    MisterTony112
    Încă nu există evaluări
  • BPC - Sem 03 - OL
    BPC - Sem 03 - OL
    Document19 pagini
    BPC - Sem 03 - OL
    MisterTony112
    Încă nu există evaluări
  • ECONOMIE
    ECONOMIE
    Document9 pagini
    ECONOMIE
    MisterTony112
    Încă nu există evaluări
  • Probleme Tema - Sem 3
    Probleme Tema - Sem 3
    Document3 pagini
    Probleme Tema - Sem 3
    MisterTony112
    Încă nu există evaluări
  • Finante Publice Notiuni Generale Si Cheltuieli Publice
    Finante Publice Notiuni Generale Si Cheltuieli Publice
    Document18 pagini
    Finante Publice Notiuni Generale Si Cheltuieli Publice
    MisterTony112
    Încă nu există evaluări
  • Stat Sal 05052022 130154
    Stat Sal 05052022 130154
    Document1 pagină
    Stat Sal 05052022 130154
    MisterTony112
    Încă nu există evaluări
  • Curs 9
    Curs 9
    Document20 pagini
    Curs 9
    MisterTony112
    Încă nu există evaluări
  • Finante - Introductiv
    Finante - Introductiv
    Document4 pagini
    Finante - Introductiv
    MisterTony112
    Încă nu există evaluări
  • Curs 11
    Curs 11
    Document30 pagini
    Curs 11
    MisterTony112
    Încă nu există evaluări
  • Man 3
    Man 3
    Document30 pagini
    Man 3
    MisterTony112
    Încă nu există evaluări
  • Man 2
    Man 2
    Document2 pagini
    Man 2
    MisterTony112
    Încă nu există evaluări
  • Cursuri Microecon Merged
    Cursuri Microecon Merged
    Document158 pagini
    Cursuri Microecon Merged
    MisterTony112
    Încă nu există evaluări
  • Energie Electrică
    Energie Electrică
    Document5 pagini
    Energie Electrică
    MisterTony112
    Încă nu există evaluări