Sunteți pe pagina 1din 5

LAB 10 PB 1

Să se realizeze un program în C care realizează gestiunea pacienților unui medic de familie. Să se


realizeze un meniu interactiv pentru următoarele opțiuni:

1. Adăugarea informațiilor despre pacient: nume, prenume, vârstă, greutate, înălțime, hipertensiune
(1/0, dacă se introduce 1 atunci pacientul are hipertensiune, iar dacă se introduce 0 acesta nu are
hipertensiune.).

2. Afișarea tuturor pacienților pe ecran.

3. Salvarea pacienților cu vârsta mai mare de 60 de ani într-un fișier text cu numele pacien.txt.

4. Afișarea alfabetică după prenume a pacienților (qsort).

5. Afișarea tuturor pacienților care au hipertensiune.

6. Afișarea în ordine descrescătoare după vârstă a pacienților (bubble sort).

7. Afișarea numărului de pacienți cu vârsta mai mica de 30 de ani.

8. Să se adune la toți pacienții care au vârsta mai mare decât 50, 5 kilograme la greutatea acestora.

9. Să se afișeze toți pacienții care au vârsta egală cu o putere a lui 2.

10.Să se șteargă toți pacienții care au vârsta mai mare de 110 de ani. 0. Ieșire (implementați vectori
de structuri)

#define _CRT_SECURE_NO_WARNINGS
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>

typedef struct pacienti


{
char nume[10],prenume[10];
int varsta,greutate,inaltime,hipertensiune;
}P;

int varificare_ht(int a)
{
return(a != 1 && a != 0);
}

void citire(P *pacient,int *n)


{
(*n)++;
printf("Dati numele pacientului: ");
scanf("%s", (pacient + *n)->nume);
printf("Dati prenumele pacientului: ");
scanf("%s", (pacient+*n)->prenume);
printf("Dati varsta pacientului: ");
scanf("%d", &(pacient+*n)->varsta);
printf("Dati greutatea pacientului: ");
scanf("%d", &(pacient+*n)->greutate);
printf("Dati inaltimea pacientului: ");
scanf("%d", &(pacient+*n)->inaltime);
do
{
printf("Tastati 1 daca pacientul are hipertensine si 0 daca nu are: ");
scanf("%d", &(pacient+*n)->hipertensiune);
} while (varificare_ht((pacient + *n)->hipertensiune));
}

void afisare1(P *pacient, int n)


{
int i;
for (i = 0; i <= n; i++)
{
printf("%s %s, %d ani, %d kg, %d cm si ", (pacient + i)->nume, (pacient +
i)->prenume, (pacient + i)->varsta, (pacient + i)->greutate, (pacient + i)->inaltime);
if ((pacient + i)->hipertensiune)
printf("are hipertensiune.\n");
else
printf("nu are hipertensiune.\n");
}
}

void salvare_fisier(P *pacient, int n)


{
FILE *f;
int i,k=0;
f = fopen("pacienti.txt", "wt");
for (i = 0; i <= n; i++)
if((pacient+i)->varsta>60)
{
k = 1;
fprintf(f,"%s %s, %d ani, %d kg, %d cm si ", (pacient + i)->nume,
(pacient + i)->prenume, (pacient + i)->varsta, (pacient + i)->greutate, (pacient + i)-
>inaltime);
if ((pacient + i)->hipertensiune)
fprintf(f,"are hipertensiune.\n");
else
fprintf(f,"nu are hipertensiune.\n");
}
if (k == 0)
fprintf(f, "Nu exista pacienti mai batrani de 60 de ani!");
fclose(f);
}

int ordonare_prenume(const void *a, const void *b)


{
P *ia = (P*)a;
P *ib = (P*)b;
return strcmp(ia->prenume,ib->prenume);
}

void afisare2(P *pacient, int n)


{
int i,k=0;
printf("Urmatorii pacienti au hipertensiune: \n");
for (i = 0; i <= n; i++)
if((pacient+i)->hipertensiune==1)
{
printf("%s %s, %d ani, %d kg, %d cm \n", (pacient + i)->nume, (pacient +
i)->prenume, (pacient + i)->varsta, (pacient + i)->greutate, (pacient + i)->inaltime);
k = 1;
}
if (k == 0)
printf("Nu exista pacienti cu hipertensiune! \n");
}

void ordonare_varsta(P *pacient, int n)


{
int i, k;
P aux;
do
{
k = 0;
for (i = 0; i < n; i++)
if ((pacient + i)->varsta < (pacient + i + 1)->varsta)
{
aux = *(pacient + i);
*(pacient + i) = *(pacient + i + 1);
*(pacient + i + 1) = aux;
k = 1;
}
} while (k);
}

int numarare_varsta(P *pacient, int n)


{
int s = 0,i;
for (i = 0; i <= n; i++)
if ((pacient + i)->varsta < 30)
s++;
return s;
}

void adaugare5kg(P *pacient, int n)


{
int i;
for (i = 0; i <= n; i++)
if ((pacient + i)->varsta > 50)
(pacient + i)->greutate = (pacient + i)->greutate +5;
}

int putere2verificare(int k)
{
int h = 0,i;
if (k != 0 && k != 1)
for (i = 0; i < 32; i++)
if ((k >> i) & 1)
h++;
return h == 1;
}

void afisare3(P *pacient, int n)


{
int i;
for (i = 0; i <= n; i++)
if(putere2verificare((pacient+i)->varsta))
{
printf("%s %s, %d ani, %d kg, %d cm si ", (pacient + i)->nume, (pacient +
i)->prenume, (pacient + i)->varsta, (pacient + i)->greutate, (pacient + i)->inaltime);
if ((pacient + i)->hipertensiune)
printf("are hipertensiune.\n");
else
printf("nu are hipertensiune.\n");
}
}

void stergere(P *pacient, int *n)


{
int i,j;
for (i = 0; i < *n; i++)
if ((pacient + i)->varsta > 110)
{
for (j = i; j < *n; j++)
{
*(pacient + j) = *(pacient + j + 1);
}
(*n)--;
i--;
}
}

int main()
{
P pacient[50];
int opt,n=-1;
do
{
printf("1. Adaugarea informatiilor despre pacient: nume, prenume, varsta,
greutate, inaltime, hipertensiune(1 / 0, daca se introduce 1 atunci pacientul are
hipertensiune, iar daca se introduce 0 acesta nu are hipertensiune.).\n");
printf("2. Afisarea tuturor pacientilor pe ecran.\n");
printf("3. Salvarea pacientilor cu varsta mai mare de 60 de ani intr-un
fisier text cu numele pacien.txt.\n");
printf("4. Afisarea alfabetica dupa prenume a pacientilor(qsort).\n");
printf("5. Afisarea tuturor pacientilor care au hipertensiune.\n");
printf("6. Afisarea in ordine descrescatoare dupa varsta a
pacientilor(bubble sort).\n");
printf("7. Afisarea numarului de pacienti cu varsta mai mica de 30 de
ani.\n");
printf("8. Sa se adune la toti pacientii care au varsta mai mare decat
50, 5 kilograme la greutatea acestora.\n");
printf("9. Sa se afiseze toti pacientii care au varsta egala cu o putere
a lui 2.\n");
printf("10.Sa se stearga toti pacientii care au varsta mai mare de 110 de
ani.\n");
printf("0. Iesire\n");
printf("Opt. dvs. este: ");
scanf("%d", &opt);
switch (opt)
{
case 1:citire(pacient, &n);
break;
case 2:afisare1(pacient, n);
break;
case 3:salvare_fisier(pacient, n);
break;
case 4:qsort(pacient, n + 1, sizeof(P), ordonare_prenume);
afisare1(pacient, n);
break;
case 5:afisare2(pacient, n);
break;
case 6:ordonare_varsta(pacient, n);
afisare1(pacient, n);
break;
case 7:
if (numarare_varsta(pacient, n))
printf("Numarul pacientilor cu varsta mai mica de 30 de ani
este: %d \n", numarare_varsta(pacient, n));
else
printf("Nu exista pacienti cu varsta mai mica de 30 de
ani!\n");
break;
case 8:adaugare5kg(pacient, n);
afisare1(pacient, n);
break;
case 9:afisare3(pacient, n);
break;
case 10:stergere(pacient, &n);
afisare1(pacient, n);
break;
case 0: exit(0);
break;
default:printf("Opt. gresita!");
break;
}
} while (1);

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