dariagalich

Untitled

Nov 28th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <iomanip>
  5. #include <conio.h>
  6. #include <fstream>
  7. #include <locale.h>
  8. #include <windows.h>
  9. using namespace std;
  10. //----КОНСТАНТЫ----------
  11. const int up = 72,
  12. down = 80,
  13. right_btn = 77,
  14. left_btn = 75,
  15. enter = 13,
  16. esc = 27,
  17. del = 83,
  18. d_n = 20;
  19. //-------------------------------------------
  20. struct info {
  21. string autor;
  22. string name;
  23. string izdatelstvo;
  24. string janr;
  25. int d = 0, m = 0, g = 0, cost = 0;
  26. };
  27. struct book {
  28. info inf;
  29. book* next;
  30. book* pred;
  31. };
  32. //-------------------------------------------
  33. book vvod_book();
  34. book* dob(book* end, const book& s);
  35. book* dob_first(const book& s);
  36. book* udal(book* beg);
  37. void print(const book& s);
  38. void prosmotr(book* beg);
  39. void sort(book **beg);
  40. void searchname(book* beg);
  41. void searchautor(book* beg);
  42. int change(book* beg, string& user_autor, string& new_user_autor);
  43. int read_file(char* filename, book** beg, book** end);
  44. int write_file(char* filename, book* temp);
  45. int menu();
  46. int menu2();
  47. //--------основная программа-----------------------------------
  48. int main()
  49. {
  50. ShowWindow(GetConsoleWindow(), SW_MAXIMIZE); // полноэкранный режим
  51. setlocale(LC_ALL, "Rus");
  52. system( "color 8F" );
  53. book* beg = NULL,
  54. * end = NULL, input;
  55. char filename[20];
  56. int Num;
  57. string user_autor, new_user_autor;
  58. while (1) {
  59. switch (menu())
  60. {
  61. case 1://создание списка или добовление нового эл-та в список
  62. if (beg)
  63. end = dob(end, vvod_book());
  64. else
  65. {
  66. beg = dob_first(vvod_book());
  67. end = beg;
  68. }
  69. break;
  70. case 2://удаление всех элементов в списке
  71. beg = udal(beg);
  72. cout << "Нажмите любую клавишу" << endl;
  73. cin.get();
  74. break;
  75. case 3://просмотр
  76. prosmotr(beg);
  77. cin.get();
  78. break;
  79. case 4://запись в файл
  80. write_file(filename, beg);
  81. break;
  82. case 5://чтение из файла
  83. read_file(filename, &beg, &end);
  84. break;
  85. case 6://редактирование списка
  86. cout << "Введите автора, которого вы хотите изменить: " << endl;
  87. cin >> user_autor;
  88. cout << "Введите нового атвора: " << endl;
  89. cin >> new_user_autor;
  90. Num = change(beg, user_autor, new_user_autor);
  91. if (Num == 1) cout << "Автор успешно перезаписан." << endl;
  92. else cout << "Автор не найден!" << endl;
  93. system("pause");
  94. change(beg, user_autor, new_user_autor);
  95. cin.get();
  96. break;
  97. case 7://поиск
  98. {
  99. switch (menu2()) {
  100. case 1://поск по автору
  101. searchautor(beg);
  102. cin.get();
  103. break;
  104. case 2:
  105. searchname(beg);//поиск по названию книги
  106. cin.get();
  107. break;
  108. case 3:
  109. case 9:break;
  110. }
  111. break;
  112. }
  113. case 8: sort(&beg); break;
  114. case 9: return 0;
  115. }
  116. }
  117. return 0;
  118. }
  119.  
  120. //-----------------------------------------------------------------------------
  121. int menu()
  122. {
  123. char buf[7];
  124. int k;
  125. do
  126. {
  127. system("CLS");
  128. cout << "============================" << endl;
  129. cout << " МЕНЮ " << endl;
  130. cout << "============================" << endl;
  131. cout << "Введите номер пункта меню" << endl;
  132. cout << "1 - Создать список или добавить новый эл-т" << endl;
  133. cout << "2 - Удаление всех элементов списка" << endl;
  134. cout << "3 - Просмотр списка" << endl;
  135. cout << "4 - Запись данных в файл" << endl;
  136. cout << "5 - Чтение из файла" << endl;
  137. cout << "6 - Изменить" << endl;
  138. cout << "7 - Поиск" << endl;
  139. cout << "8 - Сортировка по дате" << endl;
  140. cout << "9 - Выход" << endl;
  141. cout << "============================" << endl;
  142. cin >> buf;
  143. cin.get();
  144. k = atoi(buf);
  145. if (!k)
  146. {
  147. cout << "Вам следует вводить число от 1 до 7" << endl;
  148. cin.get();
  149. }
  150. } while (!k);
  151. return k;
  152. }
  153. //-----------------------------------------------------------------------------
  154. int menu2()
  155. {
  156. char buf[7];
  157. int m;
  158. do
  159. {
  160. system("CLS");
  161. cout << "============================" << endl;
  162. cout << "Выберите поле по которому хотите осуществить поиск" << endl;
  163. cout << "1 - Автор книги" << endl;
  164. cout << "2 - Название книги" << endl;
  165. cout << "9 - Выход в главное меню" << endl;
  166. cout << "============================" << endl;
  167. cin >> buf;
  168. cin.get();
  169. m = atoi(buf);
  170. if (!m)
  171. {
  172. cout << "Вам следует вводить число от 1 до 7" << endl;
  173. cin.get();
  174. }
  175. } while (!m);
  176. return m;
  177. }
  178.  
  179. //-----------------------------------------------------------------------------
  180. int change(book* beg, string& user_autor, string& new_user_autor)
  181. {
  182. book* temp = beg;
  183. while (temp != NULL)
  184. {
  185. if (temp->inf.autor == user_autor)
  186. {
  187. temp->inf.autor = new_user_autor;
  188. return 1;
  189. }
  190. else
  191. {
  192. temp = temp->next;
  193.  
  194. }
  195. }
  196. return 0;
  197. }
  198. //------------------------------------------------------------------------------
  199. void searchname(book* beg)
  200. {
  201. book* temp = beg;
  202. char fname[d_n];
  203.  
  204. system("cls");
  205.  
  206. if (!beg)
  207. {
  208. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  209. return;
  210. }
  211.  
  212. cout << "Введите название книги для поиска" << endl;
  213. cin >> fname;
  214.  
  215. while (temp)
  216. {
  217. if (fname == temp->inf.name)
  218. {
  219. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  220. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  221. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  222. print(*temp);
  223. system("pause");
  224. return;
  225. }
  226. temp = temp->next;
  227.  
  228. }
  229. cout << "Книги с таким названием не найдено" << endl;
  230. system("pause");
  231. }
  232. //-----------------------------------------------------------------------------
  233. void searchautor(book* beg)
  234. {
  235. book* temp = beg;
  236. char fa[d_n];
  237. system("cls");
  238. if (!beg)
  239. {
  240. MessageBox(0, L"Список пуст", L"Уведомление", MB_ICONINFORMATION | MB_SETFOREGROUND);
  241. return;
  242. }
  243. cout << "Введите автора для поиска" << endl;
  244. cin >> fa;
  245. while (temp)
  246. {
  247. if (fa == temp->inf.autor)
  248. {
  249. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  250. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  251. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  252. print(*temp);
  253. system("pause");
  254. return;
  255. }
  256. temp = temp->next;
  257. }
  258. cout << "Книги с таким автором не найдено" << endl;
  259. system("pause");
  260. }
  261. //-----------------------------------------------------------------------------
  262. void prosmotr(book* beg)
  263. {
  264. if (!beg)
  265. {
  266. cout << "список пустой" << endl;
  267. cin.get();
  268. return;
  269. }
  270. book* temp = beg;
  271. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  272. cout << "| Автор | Название | Издательство | Жанр | Дата поступления | Стоимость |" << endl;
  273. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  274. while (temp)
  275. {
  276. print(*temp);
  277. temp = temp->next;
  278. }
  279. cout << "+———————————————————+————————————————————+——————————————————+————————————————+——————————————————+———————————————+" << endl;
  280. cin.get();
  281. }
  282. //-----------------------------------------------------------------------------
  283. book vvod_book()
  284. {
  285. book s;
  286. cout << "Введите автора:" << endl;
  287. while (1)
  288. {
  289. cin >> s.inf.autor;
  290. //if (atoi(s.autor)==0)
  291. // if((s.autor[0] <= '0') && (s.autor[0] >= '9' ) )
  292. break;
  293. cout << "Ошибка ввода!" << endl;
  294. }
  295. cout << "Введите название книги:" << endl;
  296. while (1)
  297. {
  298. cin >> s.inf.name;
  299. //if (atoi(s.name)==0)
  300. break;
  301. cout << "Ошибка ввода!" << endl;
  302. }
  303. cout << "Введите издательство:" << endl;
  304. while (1)
  305. {
  306. cin >> s.inf.izdatelstvo;
  307. //if (atoi(s.izdatelstvo) == 0)
  308. break;
  309. cout << "Ошибка ввода!" << endl;
  310. }
  311. cout << "Введите жанр:" << endl;
  312. while (1)
  313. {
  314. cin >> s.inf.janr;
  315. //if (atoi(s.janr) == 0)
  316. break;
  317. cout << "Ошибка ввода!" << endl;
  318. }
  319. cout << "Введите дату поступления:" << endl;
  320. cout << "Введите день:";
  321. while (1)
  322. {
  323. cin >> s.inf.d;
  324. if ((s.inf.d >= 1) && (s.inf.d <= 31))
  325. break;
  326. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  327. }
  328. cout << "Введите месяц:";
  329. while (1)
  330. {
  331. cin >> s.inf.m;
  332. if ((s.inf.m >= 1) && (s.inf.m <= 12))
  333. break;
  334. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  335. }
  336. cout << "Введите год:";
  337. while (1)
  338. {
  339. cin >> s.inf.g;
  340. if ((s.inf.g >= 1900) && (s.inf.g <= 2050))
  341. break;
  342. cout << "Ошибка ввода!Ведите правильную дату!" << endl;
  343. }
  344. cout << "Введите стоимость книги:" << endl;
  345. cin >> s.inf.cost;
  346. return s;
  347. }
  348. //-----------------------------------------------------------------------------
  349. void print(const book& s)
  350. {
  351. cout << "|" << s.inf.autor << setw(20 - (s.inf.autor).length()) << "|";
  352. cout << s.inf.name << setw(21 - (s.inf.name).length()) << "|";
  353. cout << s.inf.izdatelstvo << setw(19 - (s.inf.izdatelstvo).length()) << "|";
  354. cout << s.inf.janr << setw(17 - (s.inf.janr).length()) << "|";
  355. if (s.inf.d < 10) cout << 0 << s.inf.d << ".";
  356. if (s.inf.m < 10) cout << 0 << s.inf.m << "." << s.inf.g << setw(19) << "|";
  357. cout << s.inf.cost << setw(16) << "|" << endl;
  358.  
  359. }
  360. //--------------ф-я добавления или создания эл-та-------------------------------
  361. book* dob(book* end, const book& s)
  362. {
  363. book* newE = new book;
  364. *newE = s;
  365. newE->next = 0;
  366. end->next = newE;
  367. end = newE;
  368. return end;
  369. }
  370. //--------------создание первого эл-та------------------------------
  371. book* dob_first(const book& s)
  372. {
  373. book* beg = new book;
  374. *beg = s;
  375. beg->next = 0;
  376. return beg;
  377. }
  378. //-----------------------------------------------------------------------------
  379. int read_file(char* filename, book** beg, book** end)
  380. {
  381. cout << "Введите название файла" << endl;
  382. cin >> filename;
  383. ifstream fin(filename, ios::in);
  384. if (!fin) {
  385.  
  386. MessageBox(0, L"Невозможно открыть файл!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  387. return 0;
  388.  
  389. }
  390. book s;
  391. *beg = 0;
  392. fin.seekg(0, ios::beg);
  393. while (fin >> s.inf.autor)
  394. {
  395. fin >> s.inf.name;
  396. fin >> s.inf.izdatelstvo;
  397. fin >> s.inf.janr;
  398. fin >> s.inf.d;
  399. fin >> s.inf.m;
  400. fin >> s.inf.g;
  401. fin >> s.inf.cost;
  402. if (*beg)
  403. *end = dob(*end, s);
  404. else
  405. {
  406. *beg = dob_first(s); *end = *beg;
  407. }
  408. }
  409. cout << "Считывание прошло успешно" << endl;
  410. cin.get();
  411. cin.get();
  412. return 0;
  413. }
  414. //-----------------------------------------------------------------------------
  415. int write_file(char* filename, book* temp)
  416. {
  417. cout << "Введите название файла" << endl;
  418. cin >> filename;
  419. ofstream fout(filename, ios_base::app); // открытие файла
  420. if (!fout)
  421. {
  422. cout << "Не могу открыть файл для записи" << endl;
  423. return 1;
  424. }
  425. while (temp)// пока temp!=0 выводим эл-ты в файл
  426. {
  427. fout << temp->inf.autor << endl;
  428. fout << temp->inf.name << endl;
  429. fout << temp->inf.izdatelstvo << endl;
  430. fout << temp->inf.janr << endl;
  431. fout << temp->inf.d << endl;
  432. fout << temp->inf.m << endl;
  433. fout << temp->inf.g << endl;
  434. fout << temp->inf.cost << endl;
  435. temp = temp->next;
  436. }
  437. cout << "Данные сохранены в файле: " << filename << endl;
  438. cout << "==============================" << endl;
  439. cout << "Нажмите любую клавишу" << endl;
  440. cin.get();
  441. return 0;
  442. }
  443. //-----------------------------------------------------------------------------
  444. book* udal(book* beg)
  445. {
  446. book* temp;
  447. if (!beg)
  448. {
  449. cout << "список пустой" << endl;
  450. cin.get();
  451. return 0;
  452. }
  453. while (beg)
  454. {
  455. temp = beg;
  456. beg = beg->next;
  457. delete temp;
  458. }
  459. cout << "==============================" << endl;
  460. cout << "====удаление прошло успешно===" << endl;
  461. cout << "==============================" << endl;
  462. return beg;
  463. }
  464. //----------------------------------------------------------------
  465. void sort( book** beg) {
  466. book *temp = *beg, *temp2;
  467. /*if (!temp)
  468. {
  469. MessageBox(0, L"Не хватает памяти!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  470. }
  471. *temp=*beg;
  472. book *T = new book;
  473.  
  474. if (!T)
  475. {
  476. MessageBox(0, L"Не хватает памяти!", L"Ошибка", MB_ICONERROR | MB_SETFOREGROUND);
  477. }*/
  478.  
  479. do {
  480. temp2 = temp->next;
  481. while (temp2 != NULL)
  482. {
  483. book* T = new book;
  484. if (temp->inf.g != temp->next->inf.g)
  485. {
  486. if (temp->inf.g > temp->next->inf.g)
  487. {
  488. T->inf = temp->inf;
  489. temp->inf = temp->next->inf;
  490. temp->next->inf = temp->inf;
  491. continue;
  492. }
  493. }
  494. else if (temp->inf.m != temp->next->inf.m)
  495. {
  496. if (temp->inf.m > temp->next->inf.m)
  497. {
  498. T->inf = temp->inf;
  499. temp->inf = temp->next->inf;
  500. temp->next->inf = T->inf;
  501. continue;
  502. }
  503. }
  504. else if (temp->inf.d > temp->next->inf.d)
  505. {
  506. T->inf = temp->inf;
  507. temp->inf = temp->next->inf;
  508. temp->next->inf = T->inf;
  509. }
  510. temp2 = temp2->next;
  511. }
  512.  
  513. } while (temp!= NULL);
  514. cout << "Сортировка прошла успешно" << endl;
  515. //system("pause");
  516. }
Advertisement
Add Comment
Please, Sign In to add comment