Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define X 11
  6. #define K 7
  7. #define D 85
  8.  
  9. struct Obiekt_noclegowy {
  10.     char* miasto;
  11.     char* kategoria;
  12.     char nazwa[D];
  13.     int cena;
  14.     struct Obiekt_noclegowy *nast;
  15. };
  16.  
  17. typedef struct Obiekt_noclegowy OBIEKT_NOCLEGOWY;
  18. typedef OBIEKT_NOCLEGOWY *ADRES;
  19.  
  20. ADRES pierwszy = NULL, ostatni = NULL, pom;
  21.  
  22. char* WczytywanieMiasta (char tablica_miast[][D], char nazwa_miasta[D])
  23. {
  24.     int m;
  25.     for (m = 0; m < (X-1); ++m)
  26.     {
  27.         if (((strcmp(tablica_miast[m], "")) == 0) || ((strcmp(tablica_miast[m], nazwa_miasta)) == 0))
  28.             break;
  29.     }
  30.     strcpy(tablica_miast[m], nazwa_miasta);
  31.     return tablica_miast[m];
  32. }
  33.  
  34. char* WczytywanieKategorii (char tablica_kategorii[][D], char nazwa_kategorii[D])
  35. {
  36.     int k;
  37.     for (k = 0; k < (K-1); ++k)
  38.     {
  39.         if (((strcmp(tablica_kategorii[k], "")) == 0) || ((strcmp(tablica_kategorii[k], nazwa_kategorii)) == 0))
  40.             break;
  41.     }
  42.     strcpy(tablica_kategorii[k], nazwa_kategorii);
  43.     return tablica_kategorii[k];
  44. }
  45.  
  46. void WypisanieTablicyMiast (char tablica_miast[][D])
  47. {
  48.     int i = 1;
  49.     int m = 0;
  50.     while ((strcmp(tablica_miast[m], "")) != 0)
  51.     {
  52.         printf("%d. %s\n", i, tablica_miast[m]);
  53.         ++i;
  54.         ++m;
  55.     }
  56.     printf("\n");
  57. }
  58.  
  59. void WypisanieTablicyKategorii (char tablica_kategorii[][D])
  60. {
  61.     char j = 'a';
  62.     int k = 0;
  63.     while ((strcmp(tablica_kategorii[k], "") != 0))
  64.     {
  65.         printf("%c) %s\n", j, tablica_kategorii[k]);
  66.         ++j;
  67.         ++k;
  68.     }
  69.     printf("\n");
  70. }
  71.  
  72. void KategorieIObiekty (char tablica_miast[][D], ADRES pierwszy)
  73. {
  74.     int m = 0;
  75.     int k = 0;
  76.     ADRES pom;
  77.     char rozpoznane_kategorie[K][D];
  78.     while ((strcmp(tablica_miast, "")) != 0)
  79.     {
  80.         pom = pierwszy;
  81.         for (; k < K; ++k)
  82.             memset(rozpoznane_kategorie[k], 0, sizeof(rozpoznane_kategorie[k]));
  83.             while (pom != NULL)
  84.             {
  85.                 if ((strcmp(tablica_miast[m], (pom->miasto))) == 0)
  86.                 {
  87.                     WczytywanieKategorii(rozpoznane_kategorie, (pom->kategoria));
  88.                 }
  89.                 pom = pom->nast;
  90.             }
  91.             int i;
  92.             printf("\nMiasto %s:\n", tablica_miast[m]);
  93.             for (i = 0; i < K; ++i)
  94.             {
  95.                 if ((strcmp(rozpoznane_kategorie[i], "") == 0))
  96.                     break;
  97.                 printf("\nKategoria %s\n", rozpoznane_kategorie[i]);
  98.                 WypiszObiekty(tablica_miast[m], rozpoznane_kategorie[i], pierwszy);
  99.             }
  100.         ++m;
  101.     }
  102. }
  103.  
  104. void WypiszObiekty (char* szukane_miasto, char* szukana_kategoria, ADRES pierwszy)
  105. {
  106.     ADRES pom;
  107.     for (pom = pierwszy; pom != NULL; pom = pom->nast)
  108.     {
  109.         if ((strcmp(szukane_miasto, (pom->miasto)) != 0))
  110.             continue;
  111.         if ((strcmp(szukana_kategoria, (pom->kategoria) != 0)))
  112.             continue;
  113.         printf("%s\n", (pom->nazwa));
  114.     }
  115. }
  116.  
  117. int main()
  118. {
  119.     char wiersz[256];
  120.     char miasta[X][D];
  121.     char kategorie[K][D];
  122.     char nowe_miasto[D];
  123.     char nowa_kategoria[D];
  124.  
  125.     int m;
  126.     for (m = 0; m < X; ++m)
  127.         memset(miasta[m], 0, sizeof(miasta[m]));
  128.  
  129.     int k;
  130.     for (k = 0; k < K; ++k)
  131.         memset(kategorie[k], 0, sizeof(kategorie[k]));
  132.  
  133.     FILE *dane;
  134.     if ((dane = fopen("Plik.txt", "rt")) == NULL)
  135.     {
  136.         printf("Blad odczytu pliku.\n");
  137.         return 1;
  138.     }
  139.     else
  140.     {
  141.         while ((fgets(wiersz, sizeof(wiersz), dane)) != NULL)
  142.         {
  143.             pom = (ADRES)malloc(sizeof(OBIEKT_NOCLEGOWY));
  144.             sscanf(wiersz, "%s %s %s %d", nowe_miasto, nowa_kategoria, pom->nazwa, &pom->cena);
  145.             pom->miasto = WczytywanieMiasta(miasta, nowe_miasto);
  146.             pom->kategoria = WczytywanieKategorii(kategorie, nowa_kategoria);
  147.  
  148.             if (pierwszy == NULL)
  149.             {
  150.                 pierwszy = pom;
  151.                 ostatni = pom;
  152.             }
  153.             else
  154.             {
  155.                 ostatni->nast = pom;
  156.                 ostatni = pom;
  157.             }
  158.             pom->nast = NULL;
  159.         }
  160.     fclose(dane);
  161.     }
  162.  
  163.    char rozpoznane_kategorie[K][D];
  164.    KategorieIObiekty(miasta, pierwszy);
  165.  
  166.     return 0;
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement