Advertisement
Guest User

Untitled

a guest
Jan 19th, 2019
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define X 11 //MAX liczba miast = 10 + dodatkowy wiersz pusty
  6. #define K 7 //MAX liczba kategorii = 6 + dodatkowy wiersz pusty
  7. #define D 85 //MAX dlugosc dowolnej nazwy
  8.  
  9. struct Obiekt_noclegowy {
  10.   char* miasto; //wskaznik na string
  11.   char* kategoria; //wskaznik na string
  12.   char nazwa[D];
  13.   int cena;
  14.   struct Obiekt_noclegowy *nast;
  15.  };
  16.  
  17.     void WypisanieTablicyMiast (char tab[][85])
  18.     {
  19.       int m = 0;
  20.       int n = 1;
  21.       while (strcmp(tab[m], "") != 0)
  22.       {
  23.              printf("%d. %s\n", n, tab[m]);
  24.              ++m;
  25.              ++n;
  26.       }
  27.       printf("\n");
  28.     }
  29.  
  30.     void WypisanieTablicyKategorii (char tab[][85])
  31.     {
  32.       int k = 'a';
  33.       char n = 0;
  34.       while (strcmp(tab[n], "") != 0)
  35.       {
  36.              printf("%c) %s\n", k, tab[n]);
  37.              ++k;
  38.              ++n;
  39.       }
  40.       printf("\n");
  41.     }
  42.  
  43. char* WczytywanieMiasta(char tablica[][D], char nazwa[D]) //zwraca string, char* to pierwsza litera
  44. {
  45.   int m = 0;
  46.   for (m = 0; m < (X-1); ++m) //iteracje z nieudanymi porownaniami zwiekszaja "m" do pierwszego ustego miejsca w tablicy
  47.   {
  48.     if (strcmp(tablica[m], "") == 0) //je¿eli jest zero - ³amie pêtlê i kopiuje do tablicy
  49.       break;
  50.  
  51.     if (strcmp(tablica[m], nazwa) == 0)
  52.       return tablica[m];
  53.   }
  54.  
  55.   strcpy(tablica[m], nazwa);
  56.   return tablica[m];
  57. }
  58.  
  59. char* WczytywanieKategorii(char tablica[][D], char nazwa[D])
  60. {
  61.   int k = 0;
  62.   for (k = 0; k < (K-1); ++k)
  63.   {
  64.     if (strcmp(tablica[k], "") == 0)
  65.       break;
  66.  
  67.     if (strcmp(tablica[k], nazwa) == 0)
  68.       return tablica[k];
  69.   }
  70.  
  71.   strcpy(tablica[k], nazwa);
  72.   return tablica[k];
  73. }
  74.  
  75.     char odwiedzoneKategorie[K][D];
  76.    
  77.     void WypiszLokale (char* szukaneMiasto, char* szukanaKategoria, struct Obiekt_noclegowy *pierwszy)
  78.     {
  79.         struct Obiekt_noclegowy *pom;
  80.         for (pom = pierwszy; pom != NULL; pom = pom->nast)
  81.         {
  82.             if (strcmp(szukaneMiasto, pom->miasto) != 0)
  83.             continue;
  84.  
  85.             if (strcmp(szukanaKategoria, pom->kategoria) != 0)
  86.             continue;
  87.  
  88.             printf("%s\n", pom->nazwa);
  89.          }
  90.     }
  91.  
  92.         void KategorieiLokale (char tab[][85], struct Obiekt_noclegowy *pierwszy)
  93.     {
  94.         int m = 0;
  95.         int k = 0;
  96.         struct Obiekt_noclegowy *pom;
  97.  
  98.         while (strcmp(tab[m], "") != 0)
  99.         {
  100.             pom = pierwszy;
  101.             for (k = 0; k < K; ++k)
  102.                 memset(odwiedzoneKategorie[k], 0, sizeof(odwiedzoneKategorie[k]));
  103.  
  104.             while (pom != NULL)
  105.             {
  106.                 if (strcmp(tab[m], pom->miasto) == 0)
  107.                 {
  108.                     WczytywanieKategorii(odwiedzoneKategorie, pom->kategoria);
  109.                 }
  110.                 pom = pom->nast;
  111.             }
  112.  
  113.             int i;
  114.             printf("\nMiasto %s:\n", tab[m]);
  115.             //WypisanieTablicyKategorii(odwiedzoneKategorie);
  116.            for (i = 0; i < K; ++i)
  117.                {
  118.              if (strcmp(odwiedzoneKategorie[i], "") == 0)
  119.                break;
  120.  
  121.              printf("\n Kategoria %s\n",odwiedzoneKategorie[i]);
  122.                WypiszLokale (tab[m], odwiedzoneKategorie[i], pierwszy);
  123.  
  124.            }
  125.            ++m;
  126.         }
  127.  
  128.     }
  129.  
  130. int main()
  131. {
  132.   char Wiersz[255]; //MAX dlugosc wczytywanego z pliku wiersza
  133.  
  134.   typedef struct Obiekt_noclegowy OBIEKT_NOCLEGOWY;
  135.   typedef OBIEKT_NOCLEGOWY *ADRES;
  136.  
  137.   ADRES pierwszy = NULL, ostatni = NULL, pom;
  138.  
  139.   char miasta[X][D];
  140.   char kategorie[K][D];
  141.   char noweMiasto[D];
  142.   char nowaKategoria[D];
  143.  
  144.   //oczyszczanie tablic
  145.  
  146.   int m;
  147.   for (m = 0; m < X; ++m)
  148.     memset(miasta[m], 0, sizeof(miasta[m]));
  149.  
  150.   int k;
  151.   for (k = 0; k < K; ++k)
  152.     memset(kategorie[k], 0, sizeof(kategorie[k]));
  153.  
  154.   FILE *dane;
  155.   if ((dane = fopen("ja.txt", "rt")) == NULL)
  156.   {
  157.       printf("Blad odczytu pliku.\n");
  158.       return 1;
  159.   }
  160.   else
  161.   {
  162.     while ((fgets(Wiersz, sizeof(Wiersz), dane)) != NULL) //gdy wiersz czytany z pliku nie jest pusty
  163.     {
  164.        pom = (ADRES)malloc(sizeof(OBIEKT_NOCLEGOWY));
  165.        sscanf(Wiersz, "%s %s %s %d", noweMiasto, nowaKategoria, pom->nazwa, &pom->cena);
  166.        pom->miasto = WczytywanieMiasta(miasta, noweMiasto);
  167.        pom->kategoria = WczytywanieKategorii(kategorie, nowaKategoria);
  168.  
  169.        pom->nast = NULL;
  170.  
  171.        if (pierwszy == NULL)
  172.        {
  173.            pierwszy = pom;
  174.            ostatni = pom;
  175.        }
  176.        else
  177.        {
  178.            ostatni->nast = pom;
  179.            ostatni = pom;
  180.        }
  181.     }
  182.   fclose(dane);
  183.   }
  184.  
  185.     KategorieiLokale(miasta, pierwszy);
  186.  
  187. return 0;
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement