Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define X 11 //MAX liczba miast = 10 + dodatkowy wiersz pusty
- #define K 7 //MAX liczba kategorii = 6 + dodatkowy wiersz pusty
- #define D 85 //MAX dlugosc dowolnej nazwy
- struct Obiekt_noclegowy {
- char* miasto; //wskaznik na string
- char* kategoria; //wskaznik na string
- char nazwa[D];
- int cena;
- struct Obiekt_noclegowy *nast;
- };
- void WypisanieTablicyMiast (char tab[][85])
- {
- int m = 0;
- int n = 1;
- while (strcmp(tab[m], "") != 0)
- {
- printf("%d. %s\n", n, tab[m]);
- ++m;
- ++n;
- }
- printf("\n");
- }
- void WypisanieTablicyKategorii (char tab[][85])
- {
- int k = 'a';
- char n = 0;
- while (strcmp(tab[n], "") != 0)
- {
- printf("%c) %s\n", k, tab[n]);
- ++k;
- ++n;
- }
- printf("\n");
- }
- char* WczytywanieMiasta(char tablica[][D], char nazwa[D]) //zwraca string, char* to pierwsza litera
- {
- int m = 0;
- for (m = 0; m < (X-1); ++m) //iteracje z nieudanymi porownaniami zwiekszaja "m" do pierwszego ustego miejsca w tablicy
- {
- if (strcmp(tablica[m], "") == 0) //je¿eli jest zero - ³amie pêtlê i kopiuje do tablicy
- break;
- if (strcmp(tablica[m], nazwa) == 0)
- return tablica[m];
- }
- strcpy(tablica[m], nazwa);
- return tablica[m];
- }
- char* WczytywanieKategorii(char tablica[][D], char nazwa[D])
- {
- int k = 0;
- for (k = 0; k < (K-1); ++k)
- {
- if (strcmp(tablica[k], "") == 0)
- break;
- if (strcmp(tablica[k], nazwa) == 0)
- return tablica[k];
- }
- strcpy(tablica[k], nazwa);
- return tablica[k];
- }
- char odwiedzoneKategorie[K][D];
- void WypiszLokale (char* szukaneMiasto, char* szukanaKategoria, struct Obiekt_noclegowy *pierwszy)
- {
- struct Obiekt_noclegowy *pom;
- for (pom = pierwszy; pom != NULL; pom = pom->nast)
- {
- if (strcmp(szukaneMiasto, pom->miasto) != 0)
- continue;
- if (strcmp(szukanaKategoria, pom->kategoria) != 0)
- continue;
- printf("%s\n", pom->nazwa);
- }
- }
- void KategorieiLokale (char tab[][85], struct Obiekt_noclegowy *pierwszy)
- {
- int m = 0;
- int k = 0;
- struct Obiekt_noclegowy *pom;
- while (strcmp(tab[m], "") != 0)
- {
- pom = pierwszy;
- for (k = 0; k < K; ++k)
- memset(odwiedzoneKategorie[k], 0, sizeof(odwiedzoneKategorie[k]));
- while (pom != NULL)
- {
- if (strcmp(tab[m], pom->miasto) == 0)
- {
- WczytywanieKategorii(odwiedzoneKategorie, pom->kategoria);
- }
- pom = pom->nast;
- }
- int i;
- printf("\nMiasto %s:\n", tab[m]);
- //WypisanieTablicyKategorii(odwiedzoneKategorie);
- for (i = 0; i < K; ++i)
- {
- if (strcmp(odwiedzoneKategorie[i], "") == 0)
- break;
- printf("\n Kategoria %s\n",odwiedzoneKategorie[i]);
- WypiszLokale (tab[m], odwiedzoneKategorie[i], pierwszy);
- }
- ++m;
- }
- }
- int main()
- {
- char Wiersz[255]; //MAX dlugosc wczytywanego z pliku wiersza
- typedef struct Obiekt_noclegowy OBIEKT_NOCLEGOWY;
- typedef OBIEKT_NOCLEGOWY *ADRES;
- ADRES pierwszy = NULL, ostatni = NULL, pom;
- char miasta[X][D];
- char kategorie[K][D];
- char noweMiasto[D];
- char nowaKategoria[D];
- //oczyszczanie tablic
- int m;
- for (m = 0; m < X; ++m)
- memset(miasta[m], 0, sizeof(miasta[m]));
- int k;
- for (k = 0; k < K; ++k)
- memset(kategorie[k], 0, sizeof(kategorie[k]));
- FILE *dane;
- if ((dane = fopen("ja.txt", "rt")) == NULL)
- {
- printf("Blad odczytu pliku.\n");
- return 1;
- }
- else
- {
- while ((fgets(Wiersz, sizeof(Wiersz), dane)) != NULL) //gdy wiersz czytany z pliku nie jest pusty
- {
- pom = (ADRES)malloc(sizeof(OBIEKT_NOCLEGOWY));
- sscanf(Wiersz, "%s %s %s %d", noweMiasto, nowaKategoria, pom->nazwa, &pom->cena);
- pom->miasto = WczytywanieMiasta(miasta, noweMiasto);
- pom->kategoria = WczytywanieKategorii(kategorie, nowaKategoria);
- pom->nast = NULL;
- if (pierwszy == NULL)
- {
- pierwszy = pom;
- ostatni = pom;
- }
- else
- {
- ostatni->nast = pom;
- ostatni = pom;
- }
- }
- fclose(dane);
- }
- KategorieiLokale(miasta, pierwszy);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement