Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.18 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <math.h>
  5. #include <locale.h>
  6. #include <time.h>
  7. #include <conio.h>
  8. #include <Windows.h>
  9. struct dane
  10. {
  11. char imie[20];
  12. char nazwisko[20];
  13. char numer_tel[20];
  14. char grupa[20];
  15. };
  16. struct element
  17. {
  18. struct dane kontakt;
  19. struct element* poprzedni;
  20. struct element* nastepny;
  21. };
  22. int dodaj_na_koniec(struct element** a, struct dane kontakt);
  23. int wyswietl_liste(struct element** poczatek);
  24. int wczytaj_z_bazy(struct element** podstawa1);
  25. struct element* przemieszczanie(struct element** poczatek, int ktory);
  26. int zamiana(struct element* a);
  27. int sortowanie_imie(struct element* a);
  28. int sortowanie_nazwisko(struct element* a);
  29. int sortowanie_grupa(struct element* a);
  30. void zapis(struct element** poczatek);
  31. int main()
  32. {
  33.  
  34. struct element* podstawa1;
  35. struct element* aktualny;
  36. struct dane nowy_kontakt;
  37. int i = 0, j, ograniczenie;
  38. char tablica[20] = { 0 };
  39. char z, k, l, m, n, o, p;
  40. setlocale(LC_ALL, "C");
  41. podstawa1 = NULL;
  42. wczytaj_z_bazy(&podstawa1);
  43. aktualny = podstawa1;//zmienna pomocnicza
  44. do
  45. {
  46. system("cls");
  47. printf("\nPosortuj liste: 1\nUsun kontakt: 2\nwyjscie: ESC\n\n");
  48. wyswietl_liste(&podstawa1);
  49. while (!_kbhit());//czyszczenie
  50. z = _getch();
  51. switch (z)//co ma zrobić
  52. {
  53. case ('1'):
  54. system("cls");
  55. printf("Sortuj wedlug:\nImie: 1\nNazwisko: 2\nGrupa: 3\nwyjscie: ESC\n");//wybór sortowania
  56. do
  57. {
  58. while (!_kbhit());
  59. k = _getch();
  60. switch (k)
  61. {
  62. case('1'):
  63. setlocale(LC_ALL, "polish_poland");
  64. sortowanie_imie(podstawa1);
  65. setlocale(LC_ALL, "C");
  66.  
  67. break;
  68. case ('2'):
  69. setlocale(LC_ALL, "polish_poland");
  70. sortowanie_nazwisko(podstawa1);
  71. setlocale(LC_ALL, "C");// z instrukcji ustawienie
  72.  
  73. break;
  74. case('3'):
  75. setlocale(LC_ALL, "polish_poland");
  76. sortowanie_grupa(podstawa1);
  77. setlocale(LC_ALL, "C");
  78.  
  79. break;
  80. default:
  81. break;
  82. }
  83. system("cls");
  84. printf("Sortuj wedlug:\nImie: 1\nNazwisko: 2\nGrupa: 3\nWyjscie: ESC\n\n");
  85. wyswietl_liste(&podstawa1);
  86. } while (k != 27);
  87. break;
  88.  
  89. case('2'):
  90.  
  91. do
  92. {
  93. system("cls");
  94. printf("Usun kontakt z listy: 1\nWyjdz: ESC\n\n");
  95. while (!_kbhit());
  96. n = _getch();
  97. switch (n)
  98. {
  99. case('1'):
  100.  
  101. do
  102. {
  103. if (aktualny == NULL)//oznacza ze lista jest pusta
  104. {
  105. printf("USUNIETO JUZ WSZYTKIE KONTAKTY\n\n");
  106. Sleep(1000);
  107. o = 27;
  108. break;
  109. }
  110. system("cls");
  111. printf("Wybierz ktory usunac lub ESC\n\n");
  112. ograniczenie = wyswietl_liste(&podstawa1);//ilosc wyrazow w liscie
  113. while (!_kbhit());
  114. o = _getch();
  115. if (ograniczenie - 1 < o - 48 || o - 48 < 0)
  116. {
  117. break;
  118. }
  119. aktualny = przemieszczanie(&podstawa1, o - 48);// przemieszczam wybrany element na sama gore
  120. usun(&aktualny);//po czym usuwam go i przesuwam liste o 1
  121. system("cls");
  122. } while (o != 27);
  123. break;
  124.  
  125. }
  126. } while (n != 27 && podstawa1 != NULL);
  127.  
  128.  
  129.  
  130. }
  131. } while (z != 27);// dlatego że esc - 27
  132.  
  133.  
  134. zapis(&podstawa1);
  135. return 0;
  136. }
  137.  
  138. int dodaj_na_koniec(struct element** a, struct dane kontakt)
  139. {
  140. struct element* nowy;
  141. struct element* tymczasowy;
  142. nowy = (struct element*)malloc(sizeof(struct element));
  143. tymczasowy = (struct element*)malloc(sizeof(struct element));
  144. if (*a == NULL)
  145. {
  146. nowy->kontakt = kontakt;
  147. nowy->poprzedni = NULL;
  148. nowy->nastepny = NULL;
  149. *a = nowy;
  150. }
  151. else
  152. {
  153. tymczasowy = *a;
  154. while (tymczasowy->nastepny != NULL)
  155. tymczasowy = tymczasowy->nastepny;
  156. nowy->poprzedni = tymczasowy;
  157. nowy->kontakt = kontakt;
  158. nowy->nastepny = NULL;
  159. tymczasowy->nastepny = nowy;
  160.  
  161. }
  162.  
  163. return 0;
  164. }
  165. int wyswietl_liste(struct element** poczatek)
  166. {
  167. struct element* aktualny = *poczatek;
  168. int i = 0;
  169. while (aktualny != NULL)
  170. {
  171. printf("[%d] ", i);
  172. printf("%s %s %s %s\n", aktualny->kontakt.imie, aktualny->kontakt.nazwisko, aktualny->kontakt.numer_tel, aktualny->kontakt.grupa);
  173. aktualny = aktualny->nastepny;
  174. i++;
  175. }
  176. return i;
  177. }
  178. int wczytaj_z_bazy(struct element** podstawa1)
  179. {
  180. struct dane kontakt1;
  181. FILE* plik;
  182. plik = fopen("kontakty.csv", "r");
  183. if (fopen("kontakty.csv", "r") == NULL)
  184. {
  185. printf("blad");
  186. return 1;
  187. }
  188.  
  189. while (feof(plik) == 0)
  190. {
  191. fscanf(plik, "%[^;] ; %[^;] ; %[^;] ; %s\n", &kontakt1.imie, &kontakt1.nazwisko, &kontakt1.numer_tel, &kontakt1.grupa);
  192. dodaj_na_koniec(podstawa1, kontakt1);
  193. }
  194. return 0;
  195. }
  196. int usun(struct element** a)
  197. {
  198. struct element* temp = *a;
  199. if (temp->poprzedni != NULL)
  200. {
  201. temp->poprzedni->nastepny = temp->nastepny;
  202. }
  203. else if (temp->nastepny != NULL)
  204. {
  205. temp->kontakt = temp->nastepny->kontakt;
  206. if (temp->nastepny != NULL)
  207. temp->nastepny = temp->nastepny->nastepny;
  208. return 0;
  209. }
  210. else
  211. {
  212. *a = NULL;
  213. return 0;
  214. }
  215. if (temp->nastepny != NULL)
  216. {
  217. temp->nastepny->poprzedni = temp->poprzedni;
  218. }
  219. return 0;
  220. }
  221.  
  222. int sortowanie_imie(struct element* a)
  223. {
  224. int i, j;
  225. struct element* temp;//pomocnicza
  226. temp = a;
  227. for (i = 0; temp->nastepny != NULL; i++)//wykonuj dopoki nasteępny-ostatni
  228. {
  229. for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
  230. {
  231.  
  232. if (strcoll(temp->nastepny->kontakt.imie, temp->kontakt.imie) == -1)//funkcja sprawdzająca kolejnośc alfabetyczna, -1 jezeli pierwszy ciag jest wyzej
  233. {
  234. zamiana(temp);//zamiana kolejnosci
  235. }
  236. temp = przemieszczanie(&a, j);// tyle ile zostało wykonanych porównań o tyle musimy przesunac do gory każdy z elementow
  237. }
  238. temp = przemieszczanie(&a, i);
  239. }
  240. }
  241. int sortowanie_nazwisko(struct element* a)
  242. {
  243. int i, j;
  244. struct element* temp;
  245. temp = a;
  246. for (i = 0; temp->nastepny != NULL; i++)
  247. {
  248. for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
  249. {
  250.  
  251. if (strcoll(temp->nastepny->kontakt.nazwisko, temp->kontakt.nazwisko) == -1)
  252. {
  253. zamiana(temp);
  254. }
  255. temp = przemieszczanie(&a, j);
  256. }
  257. temp = przemieszczanie(&a, i);
  258. }
  259. }
  260. int sortowanie_grupa(struct element* a)
  261. {
  262. int i, j;
  263. struct element* temp;
  264. temp = a;
  265. for (i = 0; temp->nastepny != NULL; i++)
  266. {
  267. for (j = 0; temp->nastepny != NULL; j++) //pêtla wewnêtrzna
  268. {
  269.  
  270. if (strcoll(temp->nastepny->kontakt.grupa, temp->kontakt.grupa) == -1)
  271. {
  272. zamiana(temp);
  273. }
  274. temp = przemieszczanie(&a, j);
  275. }
  276. temp = przemieszczanie(&a, i);
  277. }
  278. }
  279. int zamiana(struct element* a)
  280. {
  281. struct dane tymczasowy1;
  282. tymczasowy1 = a->kontakt;
  283.  
  284. if (a->nastepny != NULL)
  285. {
  286. a->kontakt = a->nastepny->kontakt;
  287. a->nastepny->kontakt = tymczasowy1;
  288. }
  289.  
  290. }
  291. struct element* przemieszczanie(struct element** poczatek, int ktory)
  292. {
  293. struct element* aktualny = *poczatek;//przesuwamy do gory
  294. while (ktory)
  295. {
  296. aktualny = aktualny->nastepny;
  297. ktory--;
  298. }
  299. return aktualny;
  300. }
  301.  
  302. void zapis(struct element** poczatek)
  303. {
  304. FILE* plik;
  305. struct element* aktualny = *poczatek;
  306. plik = fopen("dane.csv", "w");
  307. while (aktualny != NULL)
  308. {
  309. fprintf(plik, "%s;%s;%s;%s\n", aktualny->kontakt.imie, aktualny->kontakt.nazwisko, aktualny->kontakt.numer_tel, aktualny->kontakt.grupa);
  310. aktualny = aktualny->nastepny;
  311. }
  312. fclose(plik);
  313. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement