Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.32 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. #define CHMAX 100
  7.  
  8. //sublista
  9. typedef struct model
  10. {
  11.     char magazin[CHMAX];
  12.     char model[CHMAX];
  13.     int pret;
  14.     struct model *next;
  15. }model;
  16.  
  17. //lista
  18. typedef struct pian {
  19.     char nume[CHMAX];
  20.     model *sl;
  21.     struct pian *next;
  22. }pian;
  23.  
  24. pian *root = NULL;
  25.  
  26. model *creareModel(char *mod, char *mag, int pret)
  27. {
  28.     model *m = (model*)malloc(sizeof(model));
  29.     strcpy(m->model, mod);
  30.     strcpy(m->magazin, mag);
  31.     m->pret = pret;
  32.     m->next = NULL;
  33.  
  34.     return m;
  35. }
  36.  
  37. pian *crearePian(char *nume) {
  38.     pian *p = (pian*)malloc(sizeof(pian));
  39.     strcpy(p->nume, nume);
  40.     p->sl = NULL;
  41.     p->next = NULL;
  42.  
  43.     return p;
  44. }
  45.  
  46. pian *existaPian(char *name) {
  47.     pian *p = root;
  48.     pian *temp = NULL;
  49.  
  50.     while (p != NULL)
  51.     {
  52.         if (strcmp(p->nume, name) == 0) {
  53.             temp = p;
  54.             return temp;
  55.         }
  56.         p = p->next;
  57.     }
  58.     return temp;
  59. }
  60.  
  61. model *adaugaModel(model *lista, model *x) {
  62.     model *q1, *q2;
  63.     for (q1 = q2 = lista; q1 != NULL && strcmp(q1->model, x->model) > 0; q2 = q1, q1 = q1->next);
  64.  
  65.     if (q1 == q2) {
  66.         x->next = lista;
  67.         lista = x;
  68.     }
  69.     else {
  70.         q2->next = x;
  71.         x->next = q1;
  72.     }
  73.     return lista;
  74. }
  75.  
  76. pian *adaugaPian(pian *lista, pian *x, model *mod)
  77. {
  78.     pian *q1, *q2;
  79.     for (q1 = q2 = lista; q1 != NULL && strcmp(q1->nume, x->nume) < 0; q2 = q1, q1 = q1->next);
  80.  
  81.     if (q1 == q2) {
  82.         x->next = lista;
  83.         lista = x;
  84.     }
  85.     else {
  86.         q2->next = x;
  87.         x->next = q1;
  88.     }
  89.     x->sl = mod;
  90.     return lista;
  91. }
  92.  
  93. pian *inserarePian(pian *p, model *m)
  94. {
  95.     pian *exPIAN;
  96.     if (root == NULL)
  97.     {
  98.         p->sl = m;
  99.         root = p;
  100.         return root;
  101.     }
  102.     else {
  103.         exPIAN = existaPian(p->nume);
  104.  
  105.         if (exPIAN != NULL) {
  106.             if (exPIAN->sl == NULL)
  107.             {
  108.                 exPIAN->sl = m;
  109.             }
  110.             else {
  111.                 exPIAN->sl = adaugaModel(exPIAN->sl, m);
  112.             }
  113.             return root;
  114.         }
  115.         else {
  116.             return adaugaPian(root, p, m);
  117.         }
  118.     }
  119. }
  120.  
  121. void citire()
  122. {
  123.     char nume[CHMAX], mod[CHMAX], magazin[CHMAX];
  124.     int pret;
  125.     pian *nodPIAN;
  126.     model *nodMODEL;
  127.     FILE *f = fopen("piane.txt", "rt");
  128.  
  129.     if (!f) {
  130.         fprintf(stderr, "Eroare la deschiderea fisierului!\n");
  131.         exit(EXIT_FAILURE);
  132.     }
  133.  
  134.     while (!feof(f)) {
  135.         fscanf(f,"%s %s %s %d", nume, magazin, mod, &pret);
  136.  
  137.         nodMODEL = creareModel(mod, magazin, pret);
  138.         nodPIAN = crearePian(nume);
  139.         root = inserarePian(nodPIAN, nodMODEL);
  140.     }
  141.     fclose(f);
  142. }
  143.  
  144. void afisare()
  145. {
  146.     pian *pian;
  147.     model *MOD;
  148.     int contor = 1;
  149.  
  150.     for (pian = root; pian != NULL; pian = pian->next) {
  151.         printf("%d. %s\n", contor++, pian->nume);
  152.         for (MOD = pian->sl; MOD != NULL; MOD = MOD->next) {
  153.             printf("\t%s %s %d\n", MOD->model, MOD->magazin, MOD->pret);
  154.         }
  155.         printf("---------------------------------------\n");
  156.     }
  157. }
  158.  
  159. void afisarePian(char *nume)
  160. {
  161.     pian *p = existaPian(nume);
  162.     model *m;
  163.     if (!p)
  164.     {
  165.         printf("Nu exista pianul cu numele introdus");
  166.         return;
  167.     }
  168.     else
  169.     {
  170.         printf("%s\n", p->nume);
  171.         for (m = p->sl; m != NULL; m = m->next) {
  172.             printf("\t%s %s %d\n", m->model, m->magazin, m->pret);
  173.         }
  174.     }
  175. }
  176.  
  177. void salvareModele(int info)
  178. {
  179.     FILE *g;
  180.     pian *p;
  181.     model *m;
  182.     int pret;
  183.  
  184.     printf("Modelele care au un pret mai mare sau egal cu %d sunt: \n", info);
  185.     for (p = root; p != NULL; p = p->next) {
  186.         for (m = p->sl; m != NULL; m = m->next) {
  187.             pret = m->pret;
  188.             if (pret >= info) {
  189.                 printf("%s %s %s %d\n", p->nume, m->magazin, m->model, m->pret);
  190.             }
  191.         }
  192.     }
  193.     g = fopen("expensive.txt", "wt");
  194.     if (g) {
  195.         for (p = root; p != NULL; p = p->next) {
  196.             for (m = p->sl; m != NULL; m = m->next) {
  197.                 pret = m->pret;
  198.                 if (pret >= info) {
  199.                     fprintf(g,"%s %s %s %d\n", p->nume, m->magazin, m->model, m->pret);
  200.                 }
  201.             }
  202.         }
  203.         fclose(g);
  204.     }
  205. }
  206. int main() {
  207.     int opt;
  208.     char pian[CHMAX];
  209.     int pret;
  210.  
  211.     do {
  212.         printf("1. Citire din fisier\n");
  213.         printf("2. Afisarea datelor din fisier\n");
  214.  
  215.         printf("0. Iesire\n");
  216.  
  217.         printf("Optiunea dumneavoastra: ");
  218.         scanf("%d", &opt);
  219.  
  220.         switch (opt)
  221.         {
  222.         case 1:
  223.             citire();
  224.             break;
  225.         case 2:
  226.             afisare();
  227.             break;
  228.         case 3:
  229.             printf("Introduceti numele pianului: ");
  230.             scanf("%s", pian);
  231.             afisarePian(pian);
  232.             break;
  233.         case 4:
  234.             printf("Introduceti pretul: ");
  235.             scanf("%d", &pret);
  236.             salvareModele(pret);
  237.             break;
  238.         case 0: exit(0);
  239.             break;
  240.         default: printf("Optiune gresita\n");
  241.             break;
  242.         }
  243.     } while (opt != 0);
  244.     return 0;
  245. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement