Alx09

Tema SDA INcompleta

Oct 13th, 2020
545
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include    <stdio.h.>
  2. #include    <stdlib.h>
  3.  
  4. typedef enum{false, true}bool;
  5. typedef enum{medii, superioare, doctorat}Studii;
  6. typedef enum{econmic, tehnic}Doctorat;
  7.  
  8. typedef struct{
  9.     unsigned short zi, luna, an;
  10. }Date;
  11.  
  12. typedef struct {
  13.     char nume[15], prenume[15];
  14.     Date data;
  15.     double salar;
  16.     Studii  selector;
  17.     union {
  18.         struct
  19.         {
  20.             double mediaBac, mediaLiceu;
  21.         }studMedi;
  22.         double notaLicenta;
  23.         Doctorat doctorat;
  24.     };
  25. }angajat;
  26.  
  27. int ReadAngajat(angajat *angajat) {
  28.     int n = 0;
  29.     FILE *f = fopen("in.txt","r");
  30.     if (f == NULL)return false;
  31.     while (!feof(f)) {
  32.         if (7 != fscanf(f, "%s%s%hu%*c%hu%*c%hu%lf%d", angajat[n].nume, angajat[n].prenume, &angajat[n].data.zi, &angajat[n].data.luna, &angajat[n].data.an, &angajat[n].salar, &angajat[n].selector)) return n;
  33.         switch (angajat[n].selector)
  34.         {
  35.             case 0:
  36.                 if (fscanf(f, "%lf%lf", &angajat[n].studMedi.mediaBac, &angajat[n].studMedi.mediaLiceu) != 2) return n;
  37.                 break;
  38.             case 1:
  39.                 if (1 != fscanf(f, "%lf", &angajat[n].notaLicenta)) return n;
  40.                 break;
  41.             case 2:
  42.                 if (1 != fscanf(f, "%d", &angajat[n].selector)) {
  43.                     printf("\nDate introuduse gresit programul s-a oprit la persoana %d", n + 1);
  44.                     return n;
  45.                 }
  46.                 break;
  47.         default:
  48.             printf("\nDate introuduse gresit programul s-a oprit la persoana %d", n + 1);
  49.             return n;
  50.             break;
  51.         }
  52.         n++;
  53.         if (n == 20) return n;
  54.     }
  55.     return n;
  56. }
  57. void AfisareAngajat(angajat *angajat, int n) {
  58.     int i;
  59.     for (i = 0; i < n; i++) {
  60.         printf("\nNume: %sPrenume: %sData Nasteri: %hu/%hu/%hu\nSalariu: %lf", angajat[n].nume, angajat[n].prenume, angajat[n].data.zi, angajat[n].data.luna, angajat[n].data.an, angajat[n].salar);
  61.         switch (angajat[i].selector) {
  62.         case 0:
  63.             printf("\nAngajat cu studii medii:");
  64.             printf("\nMedia Bac: %f\nMedia Liceu:%f", angajat[i].studMedi.mediaBac, angajat[i].studMedi.mediaLiceu);
  65.             break;
  66.         case 1:
  67.             printf("\nAngajat cu studii superiare:");
  68.             printf("Nota Licenta: %lf", angajat[i].notaLicenta);
  69.             break;
  70.         case 2:
  71.             printf("\nAnjagat cu doctorat ");
  72.             if (angajat[i].doctorat == 1)
  73.                 printf("tehnic");
  74.             else
  75.                 printf("economic");
  76.             break;
  77.         }
  78.     }
  79. }
  80. int main() {
  81.     int n = 0;
  82.     int opt;
  83.     angajat angajat[20];
  84.     do {
  85.         printf("\n0.Iesire");
  86.         printf("\n1.Citire date din fiser");
  87.         printf("\n2.Afisare Date");
  88.         printf("\nOptiunea dorita:");
  89.         scanf("%d", &opt);
  90.    
  91.         switch (opt)
  92.         {
  93.         case 0: return 0;
  94.         case 1:
  95.             n = ReadAngajat(angajat);
  96.             break;
  97.         case 2:
  98.             if (n) {
  99.                 AfisareAngajat(angajat, n);
  100.                 printf("\n In total sunt %d angajati", n);
  101.             }
  102.             else
  103.                 printf("\nNu sunt angajati in baza de date");
  104.             break;
  105.         default:
  106.             break;
  107.         }
  108.        
  109.  
  110.     } while (1);
  111.     system("pause");
  112.     return 0;
  113. }
RAW Paste Data