Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <locale.h>
- #include <string.h>
- #define DLUGOSC_TEKSTU 64
- struct Kontakt
- {
- char imie[DLUGOSC_TEKSTU];
- char nazwisko[DLUGOSC_TEKSTU];
- char numer[DLUGOSC_TEKSTU];
- char grupa[DLUGOSC_TEKSTU];
- };
- typedef struct Kontakt Kontakt;
- struct Element
- {
- Kontakt kontakt;
- struct Element* poprzedni;
- struct Element* nastepny;
- };
- typedef struct Element Element;
- struct Lista
- {
- Element* glowa;
- Element* ogon;
- int rozmiar;
- };
- typedef struct Lista Lista;
- void ustawKodowaniePolskichZnakow();
- int czytajLiczbeCalkowita(const char* komunikat);
- const char* czytajTekst(const char* komunikat);
- const char* czytajNazwePliku(const char* komunikat, const char* rozszerzenie);
- void czytaj(const char* komunikat, const char* format, const char* blad, void* rezultat);
- void listaInicjalizuj(Lista* lista);
- void listaZwolnij(Lista* lista);
- void listaDodajNaPoczatek(Lista* lista, Kontakt* kontakt);
- void listaDodajNaKoniec(Lista* lista, Kontakt* kontakt);
- void listaWypisz(Lista* lista);
- int listaUsun(Lista* lista, int indeks);
- Element* listaPobierzElement(Lista* lista, int indeks);
- int listaWstaw(Lista* lista, Kontakt* kontakt, int indeks);
- int listaWczytaj(const char* nazwaPliku, Lista* lista);
- main()
- {
- int wybor, koniec;
- char* sciezka;
- Lista lista;
- Kontakt kontakt;
- ustawKodowaniePolskichZnakow();
- koniec = 0;
- listaInicjalizuj(&lista);
- while (!koniec)
- {
- printf("Legenda:\n");
- printf(" 1 <- Wczytaj kontakty\n");
- printf(" 2 <- Wyświetl kontakty\n");
- printf(" 3 <- \n");
- printf(" 4 <- \n");
- printf(" 5 <- \n");
- printf(" 6 <- \n");
- printf(" 7 <- \n");
- printf(" 8 <- \n");
- printf(" 9 <- \n");
- printf(" 10 <- \n");
- printf(" 0 <- Koniec działania programu\n");
- wybor = czytajLiczbeCalkowita("");
- switch (wybor)
- {
- case 0:
- koniec = 1;
- break;
- case 1:
- sciezka = czytajNazwePliku("Podaj nazwę pliku: ", ".csv");
- listaZwolnij(&lista);
- if (!listaWczytaj(sciezka, &lista))
- {
- printf("Nie udało się wczytać pliku\n");
- }
- break;
- case 2:
- listaWypisz(&lista);
- break;
- }
- }
- }
- void ustawKodowaniePolskichZnakow()
- {
- system("chcp 1250 > nul");
- }
- int czytajLiczbeCalkowita(const char* komunikat)
- {
- int liczba;
- czytaj(komunikat, "%d", "Podana wartość nie jest liczbą całkowitą", &liczba);
- return liczba;
- }
- const char* czytajTekst(const char* komunikat)
- {
- static char tekst[1024];
- czytaj(komunikat, "%s", "Podana wartość nie jest tekstem", tekst);
- return tekst;
- }
- const char* czytajNazwePliku(const char* komunikat, const char* rozszerzenie)
- {
- const char* nazwaPliku;
- nazwaPliku = czytajTekst(komunikat);
- if (strstr(nazwaPliku, rozszerzenie) == NULL)
- {
- strcat(nazwaPliku, rozszerzenie);
- }
- return nazwaPliku;
- }
- void czytaj(const char* komunikat, const char* format, const char* blad, void* rezultat)
- {
- while (1)
- {
- printf(komunikat);
- if (scanf(format, rezultat) == 1)
- {
- break;
- }
- printf("%s\n", blad);
- fseek(stdin, 0, SEEK_END);
- }
- }
- void listaInicjalizuj(Lista* lista)
- {
- lista->glowa = NULL;
- lista->ogon = NULL;
- lista->rozmiar = 0;
- }
- void listaZwolnij(Lista* lista)
- {
- Element* p, * t;
- p = lista->glowa;
- while (p != NULL)
- {
- t = p->nastepny;
- free(p);
- p = t;
- }
- lista->glowa = NULL;
- lista->ogon = NULL;
- lista->rozmiar = 0;
- }
- void listaDodajNaPoczatek(Lista* lista, Kontakt* kontakt) //wpisałem po zajęciach
- {
- Element* p;
- p = malloc(sizeof(Element));
- p->kontakt = *kontakt;
- p->poprzedni = NULL;
- p->nastepny = lista->glowa;
- lista->glowa = p;
- lista->rozmiar++;
- if (p->nastepny != NULL)
- {
- p->nastepny->poprzedni = p;
- }
- else
- {
- lista->ogon = p;
- }
- }
- void listaDodajNaKoniec(Lista* lista, Kontakt* kontakt)
- {
- Element* p;
- p = malloc(sizeof(Element));
- p->kontakt = *kontakt;
- p->nastepny = NULL;
- p->poprzedni = lista->ogon;
- lista->ogon = p;
- lista->rozmiar++;
- if (p->poprzedni != NULL)
- {
- p->poprzedni->nastepny = p;
- }
- else
- {
- lista->glowa = p;
- }
- }
- void listaWypisz(Lista* lista)
- {
- Element* p;
- p = lista->glowa;
- while (p != NULL)
- {
- printf("%s %s %s %s\n", p->kontakt.imie, p->kontakt.nazwisko, p->kontakt.numer, p->kontakt.grupa);
- p = p->nastepny;
- }
- }
- int listaUsun(Lista* lista, int indeks)
- {
- Element* p;
- p = listaPobierzElement(lista, indeks);
- if (p != NULL)
- {
- lista->rozmiar--;
- if (p->poprzedni != NULL)
- {
- p->poprzedni->nastepny = p->nastepny;
- }
- else
- {
- lista->glowa = p->nastepny;
- }
- if (p->nastepny != NULL)
- {
- p->nastepny->poprzedni = p->poprzedni;
- }
- else
- {
- lista->ogon = p->poprzedni;
- }
- free(p);
- return 1;
- }
- return 0;
- }
- Element* listaPobierzElement(Lista* lista, int indeks)
- {
- Element* p;
- if (indeks >= 0 && indeks < lista->rozmiar)
- {
- p = lista->glowa;
- while (indeks-- > 0)
- {
- p = p->nastepny;
- }
- return p;
- }
- return NULL;
- }
- int listaWstaw(Lista* lista, Kontakt* kontakt, int indeks)
- {
- Element* e, * p;
- e = listaPobierzElement(lista, indeks);
- if (e != NULL)
- {
- if (e == lista->glowa)
- {
- listaDodajNaPoczatek(lista, kontakt);
- }
- else
- {
- p = malloc(sizeof(Element));
- p->kontakt = *kontakt;
- p->nastepny = e;
- p->poprzedni = e->poprzedni;
- e->poprzedni->nastepny = p;
- e->poprzedni = p;
- lista->rozmiar++;
- }
- return 1;
- }
- return 0;
- }
- int listaWczytaj(const char* nazwaPliku, Lista* lista)
- {
- FILE* plik;
- Kontakt kontakt;
- char linia[512];
- char* token;
- plik = fopen(nazwaPliku, "rb");
- if (plik != NULL)
- {
- // WCZYTAJ KOLEJNĄ LINIĘ
- while (fgets(linia, sizeof(linia), plik) != NULL)
- {
- // WSTAW ZERO KOŃCZĄCE ZAMIAST ZNAKU NOWEGO WIERSZA '\n'
- linia[strlen(linia) - 1] = '\0';
- // CZYTAMY PIERWSZY TOKEN (IMIĘ)
- if ((token = strtok(linia, ";")) != NULL)
- {
- // imie <= token
- strcpy(kontakt.imie, token);
- }
- else
- {
- return 0;
- }
- // CZYTAMY DRUGI TOKEN (NAZWISKO)
- if ((token = strtok(NULL, ";")) != NULL)
- {
- strcpy(kontakt.nazwisko, token);
- }
- else
- {
- return 0;
- }
- // TRZECI
- if ((token = strtok(NULL, ";")) != NULL)
- {
- strcpy(kontakt.numer, token);
- }
- else
- {
- return 0;
- }
- // CZWARTY
- if ((token = strtok(NULL, ";")) != NULL)
- {
- strcpy(kontakt.grupa, token);
- }
- else
- {
- return 0;
- }
- // DODAJEMY SPARSOWANY (PRZETWORZONY) KONTAKT NA KONIEC LISTY
- listaDodajNaKoniec(lista, &kontakt);
- }
- fclose(plik);
- return 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement