Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <string.h>
- #include <conio.h>
- struct kontakt
- {
- char imie[100];
- char nazwisko[100];
- char numer[100];
- char grupa[100];
- };
- struct element
- {
- struct kontakt dane;
- struct element *poprzedni;
- struct element *nastepny;
- };
- void wyswietlListe(struct element **);
- void wczytajCSV(struct element **, int *);
- int sortujListe(struct element **, int *);
- void dodajKontakt(struct element **, int);
- void usunKontakt(struct element **,int,int *);
- void wyszukajKontakt(struct element **);
- void wyszukajKontaktGrupa(struct element **);
- void wyszukajKontaktGrupa(struct element **lista)
- {
- char *grupa;
- char *bufor;
- char *tbufor;
- char *wskaznik, *wskaznik2;
- char temp;
- struct element *aktualny;
- int i = 0;
- int j = 0;
- aktualny = *lista;
- tbufor = NULL;
- bufor = malloc(sizeof(char) * 2);
- printf("podaj ciąg znaków(tylko małe litery, '#' by wyjsc)\n");
- while (1)
- {
- temp = _getch();
- if (temp == '#')
- break;
- bufor[j] = temp;
- j++;
- tbufor = realloc(bufor, sizeof(char)*(j + 1));
- if (tbufor != NULL)
- {
- bufor = tbufor;
- }
- else
- {
- printf("realokajca bufora w wyszukiwaniu\n");
- system("pause");
- exit(1);
- }
- bufor[j] = '\0';
- system("cls");
- while (aktualny->poprzedni != NULL)
- {
- grupa = malloc(sizeof(char)*(strlen(aktualny->dane.grupa) - 1));
- strcpy(grupa, aktualny->dane.grupa);
- for (i = 0; i < (sizeof(aktualny->dane.grupa) / sizeof(char)); i++)
- {
- if (grupa[i] >= 65 && grupa[i] <= 95)
- {
- grupa[i] = grupa[i] + 32;
- }
- }
- wskaznik = strstr(grupa, bufor);
- if (wskaznik != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- grupa = NULL;
- if (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- }
- if (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- else
- {
- grupa = malloc(sizeof(aktualny->dane.imie));
- strcpy(grupa, aktualny->dane.grupa);
- for (i = 0; i < (sizeof(aktualny->dane.grupa) / sizeof(char)); i++)
- {
- if (grupa[i] >= 65 && grupa[i] <= 95)
- {
- grupa[i] = grupa[i] + 32;
- }
- }
- wskaznik = strstr(grupa, bufor);
- if (wskaznik != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- do
- {
- aktualny = aktualny->nastepny;
- } while (aktualny->nastepny != NULL);
- printf("%s", bufor);
- }
- }
- }
- void wyszukajKontakt(struct element **lista)
- {
- char *imie;
- char *nazwisko;
- char *bufor;
- char *tbufor;
- char *wskaznik, *wskaznik2;
- char temp;
- struct element *aktualny;
- int i=0;
- int j = 0;
- aktualny = *lista;
- tbufor = NULL;
- bufor = malloc(sizeof(char)*2);
- //bufor = calloc(1,sizeof(char)); //marcin
- printf("podaj ciąg znaków(tylko małe litery, '#' by wyjsc)\n");
- while (1)
- {
- temp=_getch();
- if (temp == '#')
- break;
- if (temp == 8)
- {
- if (j != 0)
- {
- j--;
- bufor[j] = '\0';
- }
- else
- {
- printf("brak liter w buforze\n");
- break;
- }
- }
- else
- {
- bufor[j] = temp;
- j++;
- tbufor = realloc(bufor, sizeof(char)*(j + 1));
- if (tbufor != NULL)
- {
- bufor = tbufor;
- }
- else
- {
- printf("realokajca bufora w wyszukiwaniu\n");
- system("pause");
- exit(1);
- }
- bufor[j] = '\0';
- // system("cls");
- while (aktualny->poprzedni != NULL)
- {
- imie = malloc(sizeof(char)*(strlen(aktualny->dane.imie) - 1));
- nazwisko = malloc(sizeof(char)*(strlen(aktualny->dane.nazwisko) - 1));
- strcpy(imie, aktualny->dane.imie);
- strcpy(nazwisko, aktualny->dane.nazwisko);
- for (i = 0; i < (sizeof(aktualny->dane.imie) / sizeof(char)); i++)
- {
- if (imie[i] >= 65 && imie[i] <= 95)
- {
- imie[i] = imie[i] + 32;
- }
- }
- for (i = 0; i < (sizeof(aktualny->dane.nazwisko) / sizeof(char)); i++)
- {
- if (nazwisko[i] >= 65 && nazwisko[i] <= 95)
- {
- nazwisko[i] = nazwisko[i] + 32;
- }
- }
- wskaznik = strstr(imie, bufor);
- wskaznik2 = strstr(nazwisko, bufor);
- if (wskaznik != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- else if (wskaznik2 != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- imie = NULL;
- nazwisko = NULL;
- if (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- }
- if (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- else
- {
- imie = malloc(sizeof(aktualny->dane.imie));
- nazwisko = malloc(sizeof(aktualny->dane.nazwisko));
- strcpy(imie, aktualny->dane.imie);
- strcpy(nazwisko, aktualny->dane.nazwisko);
- for (i = 0; i < (sizeof(aktualny->dane.imie) / sizeof(char)); i++)
- {
- if (imie[i] >= 65 && imie[i] <= 95)
- {
- imie[i] = imie[i] + 32;
- }
- }
- for (i = 0; i < (sizeof(aktualny->dane.nazwisko) / sizeof(char)); i++)
- {
- if (nazwisko[i] >= 65 && nazwisko[i] <= 95)
- {
- nazwisko[i] = nazwisko[i] + 32;
- }
- }
- wskaznik = strstr(imie, bufor);
- wskaznik2 = strstr(nazwisko, bufor);
- if (wskaznik != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- else if (wskaznik2 != NULL)
- {
- printf("%s\t%s\t%s\t%s\t\n", aktualny->dane.imie, aktualny->dane.nazwisko, aktualny->dane.numer, aktualny->dane.grupa);
- }
- do
- {
- aktualny = aktualny->nastepny;
- } while (aktualny->nastepny != NULL);
- printf("%s", bufor);
- }
- }
- }
- }
- void usunKontakt(struct element **lista,int wybor,int *liczbaKontaktow)
- {
- char numer[100];
- struct element *aktualny;
- int i = 0;
- aktualny = *lista;
- if (wybor == 1)
- {
- do
- {
- if (aktualny->poprzedni != NULL)
- {
- aktualny->poprzedni->nastepny = aktualny->nastepny;
- }
- *lista = (*lista)->poprzedni;
- free(aktualny);
- if(*lista!=NULL)
- aktualny = *lista;
- (*liczbaKontaktow)--;
- } while (*liczbaKontaktow != 0);
- }
- if (wybor == 0)
- {
- do
- {
- printf("podaj numer telefoniczny kontaktu, który chcesz usunąć\n");
- scanf("%s", &numer);
- while (strstr(numer, aktualny->dane.numer) == NULL)
- {
- if (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- else
- break;
- }
- if (strstr(numer, aktualny->dane.numer) != NULL)
- {
- if (aktualny->nastepny != NULL)
- {
- aktualny->nastepny->poprzedni = aktualny->poprzedni;
- }
- else
- {
- *lista = (*lista)->poprzedni;
- }
- if (aktualny->poprzedni != NULL)
- {
- aktualny->poprzedni->nastepny = aktualny->nastepny;
- }
- free(aktualny);
- i++;
- }
- else
- {
- do
- {
- aktualny = aktualny->nastepny;
- } while (aktualny->nastepny != NULL);
- }
- } while (i == 0);
- (*liczbaKontaktow)--;
- printf("");
- }
- }
- void dodajKontakt(struct element ** lista, int rodzajSortowania)
- {
- struct element *temp, *aktualny;
- char imie[100];
- char nazwisko[100];
- char numer[100];
- char grupa[100];
- temp=malloc(sizeof(struct element));
- printf("Podaj imię\n");
- scanf("%s", &imie);
- printf("Podaj nazwisko\n");
- scanf("%s", &nazwisko);
- printf("Podaj numer\n");
- scanf("%s", &numer);
- printf("Podaj grupę\n");
- scanf("%s",&grupa);
- strcpy((temp->dane.imie), imie);
- strcpy((temp->dane.nazwisko), nazwisko);
- strcpy((temp->dane.numer), numer);
- strcpy((temp->dane.grupa), grupa);
- aktualny = *lista;
- switch (rodzajSortowania)
- {
- case 1:
- while (strcoll(temp->dane.imie, aktualny->dane.imie) == -1)
- {
- if (aktualny->poprzedni != NULL)
- aktualny = aktualny->poprzedni;
- else
- break;
- }
- if (aktualny->poprzedni == NULL)
- {
- temp->poprzedni = NULL;
- temp->nastepny = aktualny;
- aktualny->poprzedni = temp;
- }
- else
- {
- temp->poprzedni = aktualny;
- temp->nastepny = aktualny->nastepny;
- aktualny->nastepny = temp;
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp;
- }
- break;
- case 2:
- while (strcoll(temp->dane.nazwisko, aktualny->dane.nazwisko) == -1)
- {
- if (aktualny->poprzedni != NULL)
- aktualny = aktualny->poprzedni;
- else
- break;
- }
- if (aktualny->poprzedni == NULL)
- {
- temp->poprzedni = NULL;
- temp->nastepny = aktualny;
- aktualny->poprzedni = temp;
- }
- else
- {
- temp->poprzedni = aktualny;
- temp->nastepny = aktualny->nastepny;
- aktualny->nastepny = temp;
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp;
- }
- break;
- case 3:
- while (strcoll(temp->dane.grupa, aktualny->dane.grupa) == -1)
- {
- if (aktualny->poprzedni != NULL)
- aktualny = aktualny->poprzedni;
- else
- break;
- }
- if (aktualny->poprzedni == NULL)
- {
- temp->poprzedni = NULL;
- temp->nastepny = aktualny;
- aktualny->poprzedni = temp;
- }
- else
- {
- temp->poprzedni = aktualny;
- temp->nastepny = aktualny->nastepny;
- aktualny->nastepny = temp;
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp;
- }
- break;
- default:
- while (aktualny->poprzedni != NULL)
- {
- aktualny = aktualny->poprzedni;
- }
- aktualny->poprzedni = temp;
- temp->nastepny = aktualny;
- temp->poprzedni = NULL;
- break;
- }
- }
- int sortujListe(struct element **lista, int *iloscKontaktow)
- {
- struct element *temp;
- char temp1[100];
- char temp2[100];
- int sortowanie;
- int i;
- //temp = malloc(sizeof(struct element));
- do
- {
- printf("Sortować po 1)imionach 2)nazwiskach 3)grupach?\n");
- scanf("%d", &sortowanie);
- } while (sortowanie != 1 && sortowanie != 2 && sortowanie != 3 );
- switch (sortowanie)
- {
- case 1:
- for (i = 0; i < (*iloscKontaktow); i++)
- {
- temp = (*lista);
- while ((temp->poprzedni) != NULL)
- {
- strcpy(temp1, temp->dane.imie);
- temp = temp->poprzedni;
- strcpy(temp2, temp->dane.imie);
- temp = temp->nastepny;
- if (strcoll(temp1, temp2) == -1)
- {
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp->poprzedni;
- temp->poprzedni->nastepny = temp->nastepny;
- temp->nastepny = temp->poprzedni;
- temp->poprzedni = temp->nastepny->poprzedni;
- temp->nastepny->poprzedni = temp;
- if (temp->poprzedni != NULL)
- temp->poprzedni->nastepny = temp;
- }
- if(temp->poprzedni!=NULL)
- temp = temp->poprzedni;
- }
- }
- break;
- case 2:
- for (i = 0; i < (*iloscKontaktow); i++)
- {
- temp = (*lista);
- while ((temp->poprzedni) != NULL)
- {
- strcpy(temp1, temp->dane.nazwisko);
- temp = temp->poprzedni;
- strcpy(temp2, temp->dane.nazwisko);
- temp = temp->nastepny;
- if (strcoll(temp1, temp2) == -1)
- {
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp->poprzedni;
- temp->poprzedni->nastepny = temp->nastepny;
- temp->nastepny = temp->poprzedni;
- temp->poprzedni = temp->nastepny->poprzedni;
- temp->nastepny->poprzedni = temp;
- if (temp->poprzedni != NULL)
- temp->poprzedni->nastepny = temp;
- }
- if (temp->poprzedni != NULL)
- temp = temp->poprzedni;
- }
- }
- break;
- case 3:
- for (i = 0; i < (*iloscKontaktow); i++)
- {
- temp = (*lista);
- while ((temp->poprzedni) != NULL)
- {
- strcpy(temp1, temp->dane.grupa);
- temp = temp->poprzedni;
- strcpy(temp2, temp->dane.grupa);
- temp = temp->nastepny;
- if (strcoll(temp1, temp2) == -1)
- {
- if (temp->nastepny != NULL)
- temp->nastepny->poprzedni = temp->poprzedni;
- temp->poprzedni->nastepny = temp->nastepny;
- temp->nastepny = temp->poprzedni;
- temp->poprzedni = temp->nastepny->poprzedni;
- temp->nastepny->poprzedni = temp;
- if (temp->poprzedni != NULL)
- temp->poprzedni->nastepny = temp;
- }
- if (temp->poprzedni != NULL)
- temp = temp->poprzedni;
- }
- }
- break;
- }
- return sortowanie;
- }
- void wyswietlListe(struct element **lista)
- {
- struct element *temp;
- temp = malloc(sizeof(struct element));
- temp = *lista;
- // printf("Imię\tNazwisko\tNumer\tGrupa\n");
- if (temp->poprzedni == NULL)
- {
- while ((temp->nastepny) != NULL)
- {
- temp = temp->nastepny;
- }
- while ((temp) != NULL)
- {
- printf("%s\t", temp->dane.imie);
- printf("%s\t", temp->dane.nazwisko);
- printf("%s\t", temp->dane.numer);
- printf("%s\n", temp->dane.grupa);
- temp = temp->poprzedni;
- }
- }
- else
- {
- while ((temp->poprzedni) != NULL)
- {
- temp = temp->poprzedni;
- }
- while ((temp) != NULL)
- {
- printf("%s\t", temp->dane.imie);
- printf("%s\t", temp->dane.nazwisko);
- printf("%s\t", temp->dane.numer);
- printf("%s\n", temp->dane.grupa);
- temp = temp->nastepny;
- }
- }
- free(temp);
- }
- void wczytajCSV(struct element **lista,int *ilosckontaktow)
- {
- char nazwaPliku[100];
- struct element *temp=NULL;
- char imie[100];
- char nazwisko[100];
- char numer[100];
- char grupa[100];
- FILE *plik;
- do
- {
- printf("Proszę podać nazwę pliku, który chcesz odczytać ( wraz z rozszerzeniem .csv!)\n");
- scanf("%s", nazwaPliku);
- plik = fopen(nazwaPliku, "r");
- system("cls");
- } while (plik == NULL);
- while (fscanf(plik, "%[^;] ; %[^;] ; %[^;] ;%s", imie, nazwisko, numer, grupa) != -1)
- {
- (*ilosckontaktow)++;
- temp = malloc(sizeof(struct element));
- fseek(plik, 2, SEEK_CUR);
- strcpy(temp->dane.imie, imie);
- strcpy(temp->dane.nazwisko, nazwisko);
- strcpy(temp->dane.numer, numer);
- strcpy(temp->dane.grupa, grupa);
- temp->nastepny = NULL;
- temp->poprzedni = NULL;
- if ((*ilosckontaktow) != 1)
- {
- temp->poprzedni = *lista;
- (*lista)->nastepny = temp;
- }
- *lista = temp;
- }
- fclose(plik);
- }
- int main()
- {
- struct element *lista;
- struct element *temp;
- char tymczasowa[100];
- int rodzajsortowania = 0;
- int ilosckontaktow = 0;
- int menu;
- int wyszukanieWybor = 0;
- setlocale(LC_ALL, "polish_poland");
- lista = malloc(sizeof(struct element));
- //lista->poprzedni = NULL;
- //lista->nastepny = NULL;
- wczytajCSV(&lista, &ilosckontaktow);
- wyswietlListe(&lista);
- while (1)
- {
- printf("1)sortuj 2)dodatj kontakt 3)usun kontakt 4)wyszukaj kontakt 0)by wyjść\n");
- scanf("%d", &menu);
- switch (menu)
- {
- case 1:
- rodzajsortowania=sortujListe(&lista, &ilosckontaktow);
- system("cls");
- wyswietlListe(&lista);
- system("pause");
- break;
- case 2:
- dodajKontakt(&lista, rodzajsortowania);
- system("cls");
- wyswietlListe(&lista);
- system("pause");
- break;
- case 3:
- usunKontakt(&lista,0,&ilosckontaktow);
- system("cls");
- wyswietlListe(&lista);
- system("pause");
- break;
- case 4:
- do
- {
- printf("1) Po imionach, nazwiskach 2)po grupach\n");
- scanf("%d", &wyszukanieWybor);
- system("cls");
- } while (wyszukanieWybor != 1 && wyszukanieWybor != 2);
- wyswietlListe(&lista);
- if(wyszukanieWybor==1)
- wyszukajKontakt(&lista);
- else
- wyszukajKontaktGrupa(&lista);
- system("cls");
- wyswietlListe(&lista);
- system("pause");
- break;
- case 0:
- usunKontakt(&lista, 1,&ilosckontaktow);
- return 0;
- break;
- default:
- scanf("%s", &tymczasowa);
- system("cls");
- wyswietlListe(&lista);
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement