Advertisement
Guest User

Untitled

a guest
May 29th, 2015
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.01 KB | None | 0 0
  1. // точно окончательный.cpp : Defines the entry point for the console application.
  2. //
  3. // может окончательный.cpp : Defines the entry point for the console application.
  4. //
  5.  
  6. #include "stdafx.h"
  7. #include <stdlib.h>
  8. #include <cstdio>
  9. #include "locale.h"
  10. #include <cstdlib>
  11. #include <Windows.h>
  12. #pragma warning (disable:4996)
  13.  
  14. typedef struct R
  15. {
  16. char name[25];//название книги
  17. char writer[50];//имя автора
  18. char* genre;//жанр
  19. int data;//год издания
  20. }Books;
  21.  
  22. typedef struct T
  23. {
  24. Books *book;//указатель на информационные поля
  25. struct T *next;//указатель на следующий элемент
  26. }List;
  27.  
  28. int Menu();//вывод главного меню
  29. int Menu1();//вывод подменю для добавления элемента
  30. int Menu2();//вывод подменю для удаления элемента
  31. List* InputOne();//ввод элемента списка
  32. char* InputGenre();//ввод поля "жанр"
  33. void OutputList(List*);//вывод списка на экран
  34. void NewEnd(List*);//добавление элемента в конец списка
  35. void DeleteEnd(List*);//удаление последнего элемента
  36. void Free(List*);//освобождение памяти
  37. void OutputFile(List*);
  38. List* InputFile();
  39. void main()
  40. {
  41. List *first = NULL, *second = NULL;
  42. SetConsoleCP(1251);
  43. SetConsoleOutputCP(1251);
  44. int S, s;
  45. bool A = false, B = false;
  46. do
  47. {
  48. system("cls");
  49. S = Menu();
  50. switch (S)
  51. {
  52. // добавление элементов
  53. case 1:
  54. system("cls");
  55. s = Menu1();
  56. switch (s)
  57. {
  58. // с клавиатуры
  59. case 1:
  60. system("cls");
  61. if (A == false)
  62. {
  63. first = InputOne();
  64. A = true;
  65. }
  66. else
  67. {
  68. NewEnd(first);
  69. }
  70. break;
  71. // из файла
  72. case 2:
  73. system("cls");
  74. first = InputFile();
  75. A = true;
  76. break;
  77. case 3:
  78. system("cls");
  79. DeleteEnd(first);
  80. puts("Элемнет удален");
  81. system("pause");
  82. break;
  83. case 0:
  84. break;
  85. default:
  86. puts("Ошибка. Выберите один из пунктов меню");
  87. break;
  88. }
  89.  
  90. break;
  91.  
  92. case 2:
  93. system("cls");
  94.  
  95. if (A == true)
  96. {
  97. s = Menu2();
  98. switch (s)
  99. {
  100. case 1:
  101. system("cls");
  102. OutputList(first);
  103. system("pause");
  104. break;
  105. case 2:
  106. system("cls");
  107. OutputFile(first);
  108. system("pause");
  109. break;
  110. case 3:
  111. break;
  112. default:
  113. puts("Ошибка. Выберите один из пунктов меню");
  114. }
  115. }
  116. else
  117. {
  118. system("cls");
  119. puts("Список не введен");
  120. system("pause");
  121. }
  122.  
  123. break;
  124.  
  125. case 0:
  126. if (A == true)
  127. Free(first);
  128. break;
  129. default:
  130. puts("Ошибка. Выберите один из пунктов меню");
  131. break;
  132. }
  133. } while (S != 0);
  134.  
  135. }
  136.  
  137. //вывод главного меню
  138. int Menu()
  139. {
  140. int S;
  141.  
  142. puts("Выберите один из пунктов меню");
  143. puts("1.Ввод списка");
  144. puts("2.Вывод списка");
  145. puts("0.Выход из программы");
  146.  
  147. scanf_s("%d", &S);
  148. return S;
  149. }
  150. //вывод подменю для добавления элемента
  151. int Menu1()
  152. {
  153. int s;
  154. puts("1.Добавить элементы с клавиатуры");
  155. puts("2.Добавить элементы из файла");
  156. puts("3.Удалить элемент из файла");
  157. puts("0.Вернуться в главное меню");
  158. scanf_s("%d", &s);
  159. return s;
  160. }
  161. //вывод подменю для вывода списка
  162. int Menu2()
  163. {
  164. int s;
  165. puts("1.Вывести список на экран");
  166. puts("2.Вывести список в файл");
  167. puts("0.Вернуться в главное меню");
  168. scanf_s("%d", &s);
  169. return s;
  170. }
  171. //ввод элемента списка
  172. List* InputOne()
  173. {
  174. List *N = NULL;
  175. N = (List*)malloc(sizeof(List));
  176. N->book = (Books*)malloc(sizeof(Books));
  177. N->next = NULL;
  178. do
  179. {
  180. printf("Введите название книги(не более 25 символов):");
  181. fflush(stdin);
  182. fgets((N->book->name), 30, stdin);
  183. if (strlen(N->book->name) > 25)
  184. puts("Извините, поле превышает 25 символов. Повторите ввод.");
  185. if (*(N->book->name) == '\n')
  186. puts("Извините, поле пустое. Повторите ввод.");
  187. } while ((strlen(N->book->name) > 25) || (*(N->book->name) == '\n'));
  188. N->book->name[strlen(N->book->name) - 1] = '\0';
  189.  
  190. do
  191. {
  192. printf("\nВведите автора книги(не более 25 символов):");
  193. fflush(stdin);
  194. fgets(N->book->writer, 55, stdin);
  195. if (strlen(N->book->writer) > 50)
  196. puts("Извините, поле превышает 50 символов. Повторите ввод.");
  197. if (*(N->book->writer) == '\n')
  198. puts("Извините, поле пустое. Повторите ввод.");
  199. } while ((strlen(N->book->writer) > 50) || (*(N->book->writer) == '\n'));
  200. N->book->writer[strlen(N->book->writer) - 1] = '\0';
  201.  
  202. N->book->genre = InputGenre();
  203.  
  204. do
  205. {
  206. printf("\nВведите год издания:");
  207. fflush(stdin);
  208. scanf_s("%d", &(N->book->data));
  209. if ((N->book->data) > 2016)
  210. puts("Извините, книга не может быть выпущена после 2016 года. Повторите ввод.");
  211. if ((N->book->data) <1600)
  212. puts("Извините, книга не может быть выпущена раньше 1600 года. Повторите ввод.");
  213. } while ((((N->book->data) > 2016) || ((N->book->data) < 1600)));
  214.  
  215. return N;
  216. }
  217. //ввод поля "жанр"
  218. char* InputGenre()
  219. {
  220. int a;
  221. puts("\nВыберите жанр книги:");
  222. puts("1.Биография");
  223. puts("2.Детектив");
  224. puts("3.Детская литература");
  225. puts("4.Историческая литература");
  226. puts("5.Научная литература:");
  227. puts("6.Повесть");
  228. puts("7.Поэзия");
  229. puts("8.Роман");
  230. puts("9.Фантастика");
  231. scanf_s("%d", &a);
  232. switch (a)
  233. {
  234. case 1:
  235. return "Биография";
  236. break;
  237. case 2:
  238. return "Детектив";
  239. break;
  240. case 3:
  241. return "Детская_литература";
  242. break;
  243. case 4:
  244. return "Историческая_литература";
  245. break;
  246. case 5:
  247. return "Научная_литература";
  248. break;
  249. case 6:
  250. return "Повесть";
  251. break;
  252. case 7:
  253. return "Поэзия";
  254. break;
  255. case 8:
  256. return "Роман";
  257. break;
  258. case 9:
  259. return "Фантастика";
  260. break;
  261. default:
  262. return ("Жанр_не _указан");
  263. break;
  264. }
  265. }
  266. //вывод списка на экран
  267. void OutputList(List *N)
  268. {
  269. if (N != NULL)
  270. {
  271. while (N->next != NULL)
  272. {
  273. printf("\nНазвание книги: %s", N->book->name);
  274. printf("\nАвтор книги: %s", N->book->writer);
  275. printf("\nЖанр: %s\n", N->book->genre);
  276. printf("Год выпуска: %d\n", N->book->data);
  277. N = N->next;
  278. }
  279. printf("\nНазвание книги: %s", N->book->name);
  280. printf("\nАвтор книги: %s", N->book->writer);
  281. printf("\nЖанр: %s\n", N->book->genre);
  282. printf("Год выпуска: %d\n", (N->book->data));
  283.  
  284. }
  285. else
  286. {
  287. puts("В списке нет элементов");
  288. system("pause");
  289. }
  290. }
  291. //добавление элемента в конец списка
  292. void NewEnd(List *N)
  293. {
  294. List* H;
  295. H = InputOne();
  296. while (N->next != NULL)
  297. N = N->next;
  298. N->next = H;
  299. }
  300. //удаление последнего элемента списка
  301. void DeleteEnd(List* N)
  302. {
  303. if (N != NULL)
  304. {
  305. List* K, *H;
  306. H = N;
  307. while (H->next != NULL)
  308. H = H->next;
  309. K = H;
  310.  
  311. free(K->book);
  312. free(K);
  313. }
  314. else
  315. {
  316. puts("В списке нет элементов");
  317. system("pause");
  318. }
  319. }
  320. //освобождение памяти
  321. void Free(List* N)
  322. {
  323. if (N != NULL)
  324. {
  325. List* H, *K = NULL;
  326. Books* M;
  327.  
  328. while (N->next != NULL)
  329. {
  330. H = N->next;
  331. K = N;
  332. //free(N->book->genre);
  333. M = N->book;
  334. free(M);
  335. free(K);
  336. if (H != NULL)
  337. N = H;
  338. }
  339. free(N->book);
  340. free(N);
  341. }
  342. }
  343.  
  344. void OutputFile(List* N)
  345. {
  346. FILE* f;
  347. f = fopen("test.txt", "w");
  348. while (N != NULL)
  349. {
  350. fprintf(f, "%s\t\%s\t\%s\t\%d\n", N->book->name, N->book->writer, N->book->genre, N->book->data);
  351. N = N->next;
  352. }
  353. fclose(f);
  354. }
  355.  
  356.  
  357. List* InputFile()
  358. {
  359. FILE* f;
  360. List *N, *H = NULL, *P = NULL ;
  361. Books *O ;
  362. if ((f = fopen("test.txt", "r")))
  363.  
  364. {
  365. while (!feof(f))
  366. {
  367. N = (List*)malloc(sizeof(List));
  368. O = (Books*)malloc(sizeof(Books));
  369. O->genre = (char*)malloc(sizeof(char));
  370. N->book = O;
  371. fscanf(f, "%s %s %s %d", N->book->name, N->book->writer, N->book->genre, &(N->book->data));
  372. if (P == NULL)
  373. H = N;
  374. else
  375. P->next = N;
  376. P = N;
  377. }
  378. fclose(f);
  379. P->next = NULL;
  380. }
  381. return H;
  382. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement