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 <math.h>
- #include <locale.h>
- #include <time.h>
- #include <conio.h>
- #include <Windows.h>
- struct dane
- {
- char imie[20];
- char nazwisko[20];
- char numer_tel[20];
- char grupa[20];
- };
- struct element
- {
- struct dane kontakt;
- struct element* poprzedni;
- struct element* nastepny;
- };
- int dodaj_na_koniec(struct element** a, struct dane kontakt);
- int wyswietl_liste(struct element** poczatek);
- int wczytaj_z_bazy(struct element** podstawa1);
- struct element* przemieszczanie(struct element** poczatek, int ktory);
- int zamiana(struct element* a);
- int sortowanie_imie(struct element* a);
- int sortowanie_nazwisko(struct element* a);
- int sortowanie_grupa(struct element* a);
- void zapis(struct element** poczatek);
- int main()
- {
- struct element* podstawa1;
- struct element* aktualny;
- struct dane nowy_kontakt;
- int i = 0, j, ograniczenie;
- char tablica[20] = { 0 };
- char z, k, l, m, n, o, p;
- setlocale(LC_ALL, "C");
- podstawa1 = NULL;
- wczytaj_z_bazy(&podstawa1);
- aktualny = podstawa1;//zmienna pomocnicza
- do
- {
- system("cls");
- printf("\nPosortuj liste: 1\nUsun kontakt: 2\nwyjscie: ESC\n\n");
- wyswietl_liste(&podstawa1);
- while (!_kbhit());//czyszczenie
- z = _getch();
- switch (z)//co ma zrobić
- {
- case ('1'):
- system("cls");
- printf("Sortuj wedlug:\nImie: 1\nNazwisko: 2\nGrupa: 3\nwyjscie: ESC\n");//wybór sortowania
- do
- {
- while (!_kbhit());
- k = _getch();
- switch (k)
- {
- case('1'):
- setlocale(LC_ALL, "polish_poland");
- sortowanie_imie(podstawa1);
- setlocale(LC_ALL, "C");
- break;
- case ('2'):
- setlocale(LC_ALL, "polish_poland");
- sortowanie_nazwisko(podstawa1);
- setlocale(LC_ALL, "C");// z instrukcji ustawienie
- break;
- case('3'):
- setlocale(LC_ALL, "polish_poland");
- sortowanie_grupa(podstawa1);
- setlocale(LC_ALL, "C");
- break;
- default:
- break;
- }
- system("cls");
- printf("Sortuj wedlug:\nImie: 1\nNazwisko: 2\nGrupa: 3\nWyjscie: ESC\n\n");
- wyswietl_liste(&podstawa1);
- } while (k != 27);
- break;
- case('2'):
- do
- {
- system("cls");
- printf("Usun kontakt z listy: 1\nWyjdz: ESC\n\n");
- while (!_kbhit());
- n = _getch();
- switch (n)
- {
- case('1'):
- do
- {
- if (aktualny == NULL)//oznacza ze lista jest pusta
- {
- printf("USUNIETO JUZ WSZYTKIE KONTAKTY\n\n");
- Sleep(1000);
- o = 27;
- break;
- }
- system("cls");
- printf("Wybierz ktory usunac lub ESC\n\n");
- ograniczenie = wyswietl_liste(&podstawa1);//ilosc wyrazow w liscie
- while (!_kbhit());
- o = _getch();
- if (ograniczenie - 1 < o - 48 || o - 48 < 0)
- {
- break;
- }
- aktualny = przemieszczanie(&podstawa1, o - 48);// przemieszczam wybrany element na sama gore
- usun(&aktualny);//po czym usuwam go i przesuwam liste o 1
- system("cls");
- } while (o != 27);
- break;
- }
- } while (n != 27 && podstawa1 != NULL);
- }
- } while (z != 27);// dlatego że esc - 27
- zapis(&podstawa1);
- return 0;
- }
- int dodaj_na_koniec(struct element** a, struct dane kontakt)
- {
- struct element* nowy;
- struct element* tymczasowy;
- nowy = (struct element*)malloc(sizeof(struct element));
- tymczasowy = (struct element*)malloc(sizeof(struct element));
- if (*a == NULL)
- {
- nowy->kontakt = kontakt;
- nowy->poprzedni = NULL;
- nowy->nastepny = NULL;
- *a = nowy;
- }
- else
- {
- tymczasowy = *a;
- while (tymczasowy->nastepny != NULL)
- tymczasowy = tymczasowy->nastepny;
- nowy->poprzedni = tymczasowy;
- nowy->kontakt = kontakt;
- nowy->nastepny = NULL;
- tymczasowy->nastepny = nowy;
- }
- return 0;
- }
- int wyswietl_liste(struct element** poczatek)
- {
- struct element* aktualny = *poczatek;
- int i = 0;
- while (aktualny != NULL)
- {
- printf("[%d] ", i);
- printf("%s %s %s %s\n", aktualny->kontakt.imie, aktualny->kontakt.nazwisko, aktualny->kontakt.numer_tel, aktualny->kontakt.grupa);
- aktualny = aktualny->nastepny;
- i++;
- }
- return i;
- }
- int wczytaj_z_bazy(struct element** podstawa1)
- {
- struct dane kontakt1;
- FILE* plik;
- plik = fopen("kontakty.csv", "r");
- if (fopen("kontakty.csv", "r") == NULL)
- {
- printf("blad");
- return 1;
- }
- while (feof(plik) == 0)
- {
- fscanf(plik, "%[^;] ; %[^;] ; %[^;] ; %s\n", &kontakt1.imie, &kontakt1.nazwisko, &kontakt1.numer_tel, &kontakt1.grupa);
- dodaj_na_koniec(podstawa1, kontakt1);
- }
- return 0;
- }
- int usun(struct element** a)
- {
- struct element* temp = *a;
- if (temp->poprzedni != NULL)
- {
- temp->poprzedni->nastepny = temp->nastepny;
- }
- else if (temp->nastepny != NULL)
- {
- temp->kontakt = temp->nastepny->kontakt;
- if (temp->nastepny != NULL)
- temp->nastepny = temp->nastepny->nastepny;
- return 0;
- }
- else
- {
- *a = NULL;
- return 0;
- }
- if (temp->nastepny != NULL)
- {
- temp->nastepny->poprzedni = temp->poprzedni;
- }
- return 0;
- }
- int sortowanie_imie(struct element* a)
- {
- int i, j;
- struct element* temp;//pomocnicza
- temp = a;
- for (i = 0; temp->nastepny != NULL; i++)//wykonuj dopoki nasteępny-ostatni
- {
- for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
- {
- if (strcoll(temp->nastepny->kontakt.imie, temp->kontakt.imie) == -1)//funkcja sprawdzająca kolejnośc alfabetyczna, -1 jezeli pierwszy ciag jest wyzej
- {
- zamiana(temp);//zamiana kolejnosci
- }
- temp = przemieszczanie(&a, j);// tyle ile zostało wykonanych porównań o tyle musimy przesunac do gory każdy z elementow
- }
- temp = przemieszczanie(&a, i);
- }
- }
- int sortowanie_nazwisko(struct element* a)
- {
- int i, j;
- struct element* temp;
- temp = a;
- for (i = 0; temp->nastepny != NULL; i++)
- {
- for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
- {
- if (strcoll(temp->nastepny->kontakt.nazwisko, temp->kontakt.nazwisko) == -1)
- {
- zamiana(temp);
- }
- temp = przemieszczanie(&a, j);
- }
- temp = przemieszczanie(&a, i);
- }
- }
- int sortowanie_grupa(struct element* a)
- {
- int i, j;
- struct element* temp;
- temp = a;
- for (i = 0; temp->nastepny != NULL; i++)
- {
- for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
- {
- if (strcoll(temp->nastepny->kontakt.grupa, temp->kontakt.grupa) == -1)
- {
- zamiana(temp);
- }
- temp = przemieszczanie(&a, j);
- }
- temp = przemieszczanie(&a, i);
- }
- }
- int zamiana(struct element* a)
- {
- struct dane tymczasowy1;
- tymczasowy1 = a->kontakt;
- if (a->nastepny != NULL)
- {
- a->kontakt = a->nastepny->kontakt;
- a->nastepny->kontakt = tymczasowy1;
- }
- }
- struct element* przemieszczanie(struct element** poczatek, int ktory)
- {
- struct element* aktualny = *poczatek;//przesuwamy do gory
- while (ktory)
- {
- aktualny = aktualny->nastepny;
- ktory--;
- }
- return aktualny;
- }
- void zapis(struct element** poczatek)
- {
- FILE* plik;
- struct element* aktualny = *poczatek;
- plik = fopen("dane.csv", "w");
- while (aktualny != NULL)
- {
- fprintf(plik, "%s;%s;%s;%s\n", aktualny->kontakt.imie, aktualny->kontakt.nazwisko, aktualny->kontakt.numer_tel, aktualny->kontakt.grupa);
- aktualny = aktualny->nastepny;
- }
- fclose(plik);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement