Tucancitto

FP - lucru cu fișiere (informații despre autoturisme)

Jan 29th, 2021 (edited)
887
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct DateAutoturism
  6. {
  7.     char nrInmatriculare[30];
  8.     char marca[30];
  9.     char culoarea[30];
  10.     int nrLocuri;
  11.     char tipCombustibil[30];
  12.     float capacitateMotor;
  13.     char serieSasiu[30];
  14.     int vechime;
  15.     int nrKm;
  16. }autoturism;
  17.  
  18. void citireNrInmatriculare()
  19. {
  20.     printf("Va rugam sa introduceti numarul de inmatriculare al autoturismului sau -1 pentru terminare: ");
  21.     scanf("%s", &autoturism.nrInmatriculare);
  22. }
  23.  
  24. void citireAutoturism()
  25. {
  26.     printf("Introduceti marca autoturismului: ");
  27.     scanf("%s", &autoturism.marca);
  28.  
  29.     printf("Introduceti culoarea autoturismului: ");
  30.     scanf("%s", &autoturism.culoarea);
  31.  
  32.     printf("Introduceti numarul de locuri al autoturismului: ");
  33.     scanf("%d", &autoturism.nrLocuri);
  34.  
  35.     printf("Introduceti tipul de combustibil al autoturismului: ");
  36.     scanf("%s", &autoturism.tipCombustibil);
  37.  
  38.     printf("Introduceti capacitatea motorului autoturismului: ");
  39.     scanf("%f", &autoturism.capacitateMotor);
  40.  
  41.     printf("Introduceti seria de sasiu a autoturismului: ");
  42.     scanf("%s", &autoturism.serieSasiu);
  43.  
  44.     printf("Introduceti vechimea autoturismului: ");
  45.     scanf("%d", &autoturism.vechime);
  46.  
  47.     printf("Introduceti numarul de km ai autoturismului: ");
  48.     scanf("%d", &autoturism.nrKm);
  49. }
  50.  
  51. void creare_fisier(char* fn)
  52. {
  53.     FILE* f;
  54.     f = fopen(fn, "wb");
  55.     if (f == NULL)
  56.     {
  57.         printf("A aparut o eroare in momentul in care s-a creat fisierul! \n");
  58.         exit(1);
  59.     }
  60.  
  61.     citireNrInmatriculare();
  62.  
  63.     while (strcmp(autoturism.nrInmatriculare, "-1") != 0)
  64.     {
  65.         citireAutoturism();
  66.         fwrite(&autoturism, sizeof(autoturism), 1, f);
  67.         citireNrInmatriculare();
  68.     }
  69.  
  70.     fclose(f);
  71. }
  72.  
  73. void listare_fisier(char* fn)
  74. {
  75.     FILE* f;
  76.     int nr_articole;
  77.     f = fopen(fn, "rb");
  78.     if (f == NULL)
  79.     {
  80.         printf("A aparut o eroare in momentul in care s-a creat fisierul. \n");
  81.         exit(1);
  82.     }
  83.  
  84.     nr_articole = fread(&autoturism, sizeof(autoturism), 1, f);
  85.  
  86.     printf("\nListare autoturisme: \n");
  87.  
  88.     while (nr_articole == 1)
  89.     {
  90.         printf("\nNr inmatriculare: %s", autoturism.nrInmatriculare);
  91.         printf("\nMarca: %s", autoturism.marca);
  92.         printf("\nCuloarea: %s", autoturism.culoarea);
  93.         printf("\nNr locuri: %d", autoturism.nrLocuri);
  94.         printf("\nTip combustibil: %s", autoturism.tipCombustibil);
  95.         printf("\nCapacitate motor: %.2f", autoturism.capacitateMotor);
  96.         printf("\nSerie sasiu: %s", autoturism.serieSasiu);
  97.         printf("\nVechime: %d", autoturism.vechime);
  98.         printf("\nNr km: %d\n\n", autoturism.nrKm);
  99.  
  100.         nr_articole = fread(&autoturism, sizeof(autoturism), 1, f);
  101.     }
  102.     fclose(f);
  103. }
  104.  
  105. void adaugare_autoturism(char* fn)
  106. {
  107.     FILE* f;
  108.     f = fopen(fn, "ab");
  109.     if (f == NULL)
  110.     {
  111.         printf("A aparut o eroare in momentul in care s-a creat fisierul. \n");
  112.         exit(1);
  113.     }
  114.  
  115.     citireNrInmatriculare();
  116.  
  117.     while (strcmp(autoturism.nrInmatriculare, "-1") != 0)
  118.     {
  119.         citireAutoturism();
  120.         fwrite(&autoturism, sizeof(autoturism), 1, f);
  121.  
  122.         citireNrInmatriculare();
  123.     }
  124.     fclose(f);
  125. }
  126.  
  127. void modificare_fisier(char* fn)
  128. {
  129.     FILE* f;
  130.     char nrInmatriculare[30] = { 0 };
  131.     int pos = 0;
  132.     int n_art = 0;
  133.  
  134.     f = fopen(fn, "rb+");
  135.     if (f == NULL)
  136.     {
  137.         printf("A aparut o eroare in momentul in care s-a creat fisierul. \n");
  138.         exit(1);
  139.     }
  140.  
  141.     printf("\nIntroduceti numarul de inmatriculare al autoturismului al carui numar de km parcursi si vechime doriti sa le modificati sau -1 pentru terminare: ");
  142.     scanf("%s", &nrInmatriculare);
  143.  
  144.     while (strcmp(nrInmatriculare, "-1") != 0)
  145.     {
  146.         do
  147.         {
  148.             n_art = fread(&autoturism, sizeof(autoturism), 1, f);
  149.             if (strcmp(autoturism.nrInmatriculare, nrInmatriculare) == 0)
  150.             {
  151.                 pos = ftell(f) - sizeof(autoturism);
  152.                 break;
  153.             }
  154.  
  155.         } while (strcmp(autoturism.nrInmatriculare, nrInmatriculare) != 0 && n_art == 1);
  156.  
  157.         if (n_art < 1)
  158.         {
  159.             printf("\nNu exista acest autoturism. \n");
  160.             break;
  161.         }
  162.  
  163.         printf("\nIntroduceti noua vechime a autoturismului: ");
  164.         scanf("%d", &autoturism.vechime);
  165.  
  166.         printf("Introduceti noul nr de km al autoturismului: ");
  167.         scanf("%d", &autoturism.nrKm);
  168.  
  169.         fseek(f, pos, 0);
  170.         fwrite(&autoturism, sizeof(autoturism), 1, f);
  171.  
  172.         printf("\nIntroduceti numarul de inmatriculare al autoturismului al carui numar de km parcursi si vechime doriti sa le modificati sau -1 pentru terminare: ");
  173.         scanf("%s", &nrInmatriculare);
  174.     }
  175.     fclose(f);
  176. }
  177.  
  178. int main()
  179. {
  180.     char numeFisier[70];
  181.     printf("Introduceti numele fisierului unde se vor salva informatii despre autoturisme: ");
  182.     scanf("%s", &numeFisier);
  183.  
  184.     creare_fisier(numeFisier);
  185.     listare_fisier(numeFisier);
  186.  
  187.     printf("\nAdaugare autoturisme noi: \n");
  188.     adaugare_autoturism(numeFisier);
  189.     listare_fisier(numeFisier);
  190.  
  191.     printf("\nModificare autoturisme: \n");
  192.     modificare_fisier(numeFisier);
  193.     listare_fisier(numeFisier);
  194.  
  195.     return 0;
  196. }
  197.  
Add Comment
Please, Sign In to add comment