Advertisement
Guest User

Untitled

a guest
Apr 24th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <windows.h>
  4.  
  5. char header[] =
  6. "|------------------------------------------------------------------------------|"
  7. "| № | Фамилия | Имя | Телефон | Улица | Класс |"
  8. "|------------------------------------------------------------------------------|";
  9.  
  10. typedef struct elem {
  11. int data;
  12. char surname[16];
  13. char name[15];
  14. int tel[15];
  15. struct elem* next;
  16. struct elem* prev;
  17. struct elem* new_elem;
  18. struct elem* new_elem1;
  19. } ITEM;
  20.  
  21. ITEM* AddItem(ITEM* Head, int new_data, char new_surname[16], char new_name[15], int new_tel[15]);
  22. ITEM* DelItem(ITEM* Head, int n);
  23. ITEM* ShowItem(ITEM* Head);
  24. ITEM* SearchItem(ITEM* Head, int search_data);
  25. ITEM* NumElm(ITEM* Head, int kol_data);
  26. ITEM* Save(ITEM* Head);
  27. ITEM* Load(ITEM* Head);
  28. ITEM* recurs19(ITEM* Head);
  29. ITEM* recursAB_sur(ITEM* Head);
  30.  
  31. int main()
  32. {
  33. ITEM* Head = NULL;
  34. ITEM* q = Head;
  35. char key;
  36. int data, n, m;
  37. char surname[16];
  38. char name[15];
  39. int tel[15];
  40.  
  41. SetConsoleCP(1251);
  42. SetConsoleOutputCP(1251);
  43.  
  44. while (1) {
  45. system("cls");
  46.  
  47. puts("|\t\tМеню\t\t |");
  48. puts("=======================================");
  49. puts("|\t1 - Добавить элемент \t |");
  50. puts("|\t2 - Удалить элемент\t |");
  51. puts("|\t3 - Поиск элемента\t |");
  52. puts("|\t4 - Показать элементы\t |");
  53. puts("|\t5 - Изменить элемент\t |");
  54. puts("| |");
  55. puts("|\t6 - Сохранить в файл |");
  56. puts("|\t7 - Загрузить из файла |");
  57. puts("| |");
  58. puts("|\t8 - Сортировка по номерам |");
  59. puts("|\t9 - Сортировка по фамилии |");
  60. puts("---------------------------------------");
  61. puts("|\t ESC - Выход \t |\n");
  62.  
  63. key = getch();
  64. if (key == 27)
  65. break;
  66. switch (key) {
  67. case '1':
  68. printf("Введите Номер: ");
  69. scanf("%d", &data);
  70. printf("Введите Фамилию: ");
  71. scanf("%s", &surname);
  72. printf("Введите Имя: ");
  73. scanf("%s", &name);
  74. printf("Введите Телефон: ");
  75. scanf("%s", &tel);
  76. Head = AddItem(Head, data, surname, name, tel);
  77. getch();
  78. break;
  79. case '2':
  80. puts("Введите номер элемента для удаления");
  81. scanf("%d", &n);
  82. Head = DelItem(Head, n);
  83. getch();
  84. break;
  85. case '3':
  86. puts("Введите номер: ");
  87. scanf("%d", &data);
  88. SearchItem(Head, data);
  89. getch();
  90. break;
  91. case '4':
  92. ShowItem(Head);
  93. getch();
  94. break;
  95. case '5':
  96. puts("Введите старый номер");
  97. scanf("%d", &data);
  98. Head = DelItem(Head, data);
  99. if(q != NULL) {
  100. puts("Введите новый Номер");
  101. scanf("%d", &data);
  102. puts("Введите новую Фамилию");
  103. scanf("%s", &surname);
  104. puts("Введите еще новое Имя");
  105. scanf("%s", &name);
  106. printf("Введите новый Телефон: ");
  107. scanf("%s", &tel);
  108. Head = AddItem(Head, data, surname, name, tel);
  109. }
  110. getch();
  111. break;
  112. case '6':
  113. Save(Head);
  114. puts("Сохранено...");
  115. getch();
  116. break;
  117. case '7':
  118. Head = Load(Head);
  119. getch();
  120. break;
  121. case '8':
  122. recurs19(Head);
  123. getch();
  124. break;
  125. case '9':
  126. recursAB_sur(Head);
  127. getch();
  128. break;
  129.  
  130. }
  131. }
  132. }
  133.  
  134. ITEM* recursAB_sur(ITEM* Head)
  135. {
  136. ITEM* q = Head;
  137.  
  138. if(Head != NULL) {
  139. recursAB_sur(Head -> next);
  140. printf("%s", Head -> surname);
  141. printf("\n");
  142. }
  143.  
  144. }
  145.  
  146. ITEM* recurs19(ITEM* Head)
  147. {
  148. ITEM *new_elem, *prev, *next;
  149. ITEM* q = Head;
  150.  
  151. int data;
  152. char surname;
  153. char name;
  154. int tel;
  155.  
  156. if(Head != NULL) {
  157. recurs19(Head -> next);
  158. printf("%d", Head -> data);
  159. prev->next = new_elem;
  160. new_elem->next = NULL;
  161. printf("\n");
  162. }
  163.  
  164. }
  165.  
  166. ITEM* AddItem(ITEM* Head, int new_data, char new_surname[16], char new_name[15], int new_tel[15])
  167. {
  168. ITEM *q, *new_elem, *prev;
  169. new_elem = (ITEM*)malloc(sizeof(ITEM));
  170.  
  171. if (new_elem == NULL) {
  172. puts("Ошибка выделения памяти");
  173. return Head;
  174. }
  175.  
  176. new_elem->data = new_data;
  177. new_elem->data = new_data;
  178.  
  179. strcpy(new_elem->surname, new_surname);
  180. strcpy(new_elem->name, new_name);
  181. strcpy(new_elem->tel, new_tel);
  182.  
  183. new_elem->data = new_data;
  184. if (Head == NULL) {
  185. new_elem->next = NULL;
  186. return new_elem;
  187. }
  188. prev = Head;
  189.  
  190. while (prev->next != NULL) {
  191. prev = prev->next;
  192. }
  193.  
  194. printf("Элемент вставлен в конец\n ", new_data);
  195. prev->next = new_elem;
  196. new_elem->next = NULL;
  197.  
  198. return Head;
  199. }
  200.  
  201. ITEM* DelItem(ITEM* Head, int delete_data)
  202. {
  203.  
  204. ITEM *q, *prev;
  205. prev = NULL;
  206. q = Head;
  207.  
  208. while (q != NULL) {
  209. if (q->data == delete_data) {
  210. if (prev == NULL) {
  211. Head = Head->next;
  212. }
  213. else {
  214. prev->next = q->next;
  215. }
  216. }
  217. prev = q;
  218. q = q->next;
  219. }
  220. if (q == NULL) {
  221. printf("Такой элемент отсутсвует");
  222. return NULL;
  223. }
  224. return Head;
  225. }
  226.  
  227. ITEM* SearchItem(ITEM* Head, int search_data)
  228. {
  229. ITEM* q = Head;
  230. while (q != NULL) {
  231. if (q->data == search_data) {
  232. printf("\nчисло: %d \n", search_data);
  233. printf("строка: %s", q->surname);
  234. return q;
  235. }
  236. q = q->next;
  237. }
  238. printf("Числа %d не существует в списке\n", search_data);
  239. return NULL;
  240. }
  241.  
  242. ITEM* ShowItem(ITEM* Head)
  243. {
  244. ITEM* q = Head;
  245. if (q == NULL) {
  246. printf("Пустой список");
  247. return Head;
  248. }
  249. system("cls");
  250. printf("%s", header );
  251.  
  252. while (q != NULL) {
  253. printf("\n %3d %9s %11s %s", q->data, q->surname, q->name, q->tel);
  254. q = q->next;
  255. }
  256. return Head;
  257. }
  258.  
  259. ITEM* Save(ITEM* Head)
  260. {
  261.  
  262. ITEM *q = Head;
  263.  
  264. if (q == NULL) {
  265. printf("Стек пуст");
  266. getch();
  267. return Head;
  268. }
  269.  
  270. FILE* fout;
  271.  
  272. fout = fopen("C:/School.txt", "w+");
  273.  
  274. while (q != NULL) {
  275. fprintf(fout, " %3d\n%9s\n %11s\n %s", q->data, q->surname, q->name, q->tel);
  276. q = q->next;
  277. }
  278.  
  279. fclose(fout);
  280. }
  281.  
  282. ITEM* Load(ITEM* Head)
  283. {
  284.  
  285. ITEM* q = Head;
  286. FILE* fin;
  287.  
  288. if ((fin = fopen("C:/School.txt", "rb+")) == NULL) {
  289. printf("Не удается открыть файл\n");
  290. exit(1);
  291. }
  292.  
  293. char str1[50];
  294. int data;
  295. char surname;
  296. char name;
  297. int tel;
  298.  
  299. while (q != NULL) {
  300. q = q->next;
  301. free(q);
  302. }
  303.  
  304. Head = q = NULL;
  305.  
  306. while(fgets(str1, sizeof(str1), fin)) {
  307. data = atoi(str1);
  308. fgets(str1, sizeof(str1), fin);
  309. str1[strlen(str1)-1] = 0;
  310. Head = AddItem(Head, data, surname, name, str1);
  311. }
  312.  
  313. printf("Данные загружены\n");
  314.  
  315. fclose(fin);
  316. return Head;
  317. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement