Advertisement
Guest User

Untitled

a guest
May 27th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.96 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include <conio.h>
  5. #include <stdio.h>
  6. #include <cstdlib>
  7. #include <cstring>
  8. #include <fstream>
  9. #include <sstream>
  10. #include <clocale>
  11.  
  12. #include <stdlib.h>
  13.  
  14. #include <iomanip>
  15. #include <string.h>
  16. #include <Windows.h>
  17. #include <algorithm> // std::sort
  18. #pragma warning(disable : 4996)
  19. using namespace std;
  20. class food1 *t;
  21. class Date
  22. {
  23. public:
  24. int day; // день
  25. int month; // месяц
  26. int year; // год
  27.  
  28.  
  29. Date(int d, int m, int y)
  30. {
  31. day = d;
  32. month = m;
  33. year = y;
  34. }
  35. public:
  36. Date()
  37. {
  38. day = 25;
  39. month = 04;
  40. year = 1999;
  41. }
  42.  
  43. void print_date()
  44. {
  45. cout << day << "." << month << "." << year;
  46. }
  47.  
  48. };
  49. class food1
  50. {
  51.  
  52. public:
  53. char* fam; //название изделия
  54. int type; //тип изделия (1- булочка, 2-пирожок, 3-пирожное)
  55. double weight; //вес
  56. bool shelflife;
  57. Date dat;
  58. int quant; //количество
  59. double cost; //стоимость
  60. static int count; // счетчик существующих объектов класса
  61. friend class Date;
  62.  
  63.  
  64. food1 &operator = (const food1& r)
  65. {
  66. fam = r.fam;
  67. type = r.type;
  68. weight = r.weight;
  69. cost = r.cost;
  70. dat.day = r.dat.day;
  71. dat.month = r.dat.month;
  72. dat.year = r.dat.year;
  73. return *this;
  74. }
  75. bool operator > (const food1& r)
  76. {
  77. if (this->dat.year > r.dat.year)
  78. if (this->dat.month > dat.month)
  79. if (this->dat.day > dat.year)
  80. return true;
  81. }
  82. friend ostream &operator << (ostream& cout, const food1& r);
  83. friend bool operator ! (const food1& r);
  84. food1()
  85. {
  86. fam = (char*)calloc(256, sizeof(char));
  87. fam = strcpy(fam, "По умолчанию");
  88. type = 1;
  89. weight = 1;
  90. quant = 1;
  91. cost = 1;
  92. dat.day = 1;
  93. dat.month = 1;
  94. dat.year = 1;
  95. }
  96. food1(char* f, int t, double w, int q, double c, int day, int month, int year)
  97. {
  98. fam = f;
  99. type = t;
  100. weight = w;
  101. quant = q;
  102. cost = c;
  103. dat.day = day;
  104. dat.month = month;
  105. dat.year = year;
  106. }
  107. food1(food1 &food1)
  108. {
  109. fam = (char*)calloc(256, sizeof(char));
  110. strcpy(fam, food1.fam);
  111. }
  112. ~food1()
  113. {
  114. free(fam);
  115. }
  116. friend void searchtype(int type);
  117. virtual void searсhfam(char *fam)
  118. {
  119. int count1 = 0;
  120. bool k = 0; // для единичного вывода таблицы
  121. for (int i = 0; i < count; ++i)
  122. {
  123. int flag1;
  124. char *p1_tek; // текущий указатель
  125. p1_tek = t[i].fam;
  126. flag1 = strcmp(fam, p1_tek);
  127. if (flag1 == 0)
  128. {
  129. while (k == 0)
  130. {
  131. cout << endl;
  132. cout << endl;
  133. cout << "Вот что удалось найти: " << endl;
  134. cout << endl;
  135. cout << endl;
  136. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  137. for (int i = 0; i < 140; i++)
  138. cout << "-";
  139. cout << endl;
  140. k = 1;
  141. };
  142. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  143. for (int i = 0; i < 140; i++)
  144. cout << "-";
  145. cout << endl;
  146. k = 1;
  147. count1++;
  148. }
  149. }
  150. if (count1 == 0)
  151. {
  152. cout << "Такого изделия нет, хотете добавить? (ДА - 1; НЕТ - 0) " << endl;
  153. int ans;
  154. cin >> ans;
  155. if (ans == 1)
  156. add();
  157. }
  158. }
  159. virtual int start()
  160. {
  161. ifstream f("file.txt");
  162. if (f.fail()) return 0;
  163. t = (class food1*)malloc(64 * sizeof(class food1));
  164. while (!f.eof())
  165. {
  166. t[count].fam = (char*)calloc(256, sizeof(char));
  167. f >> t[count].fam;
  168. f >> t[count].type;
  169. f >> t[count].weight;
  170. f >> t[count].quant;
  171. f >> t[count].cost;
  172. f >> t[count].dat.day;
  173. f >> t[count].dat.month;
  174. f >> t[count].dat.year;
  175. count++;
  176. }
  177. f.close();
  178. return count;
  179. }
  180. virtual void printbase()
  181. {
  182. cout << endl;
  183. cout << endl;
  184. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  185. for (int i = 0; i < 140; i++)
  186. {
  187. cout << "-";
  188. }
  189. cout << endl;
  190. for (int i = 0; i < count; i++)
  191. {
  192. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  193.  
  194. for (int i = 0; i < 140; i++)
  195. cout << "-";
  196. cout << endl;
  197. }
  198. cout << endl;
  199. }
  200. virtual double num(void)
  201. {
  202. double buff;
  203. cin >> buff;
  204. while (cin.fail())
  205. {
  206. cin.clear();
  207. char c[30];
  208. cin >> c;
  209. cout << "Неверное значение, введите занаво:";
  210. cin >> buff;
  211. }
  212. return buff;
  213. }
  214. virtual void addnew(food1 f)
  215. {
  216. static int c = 10;//расширение сруктуры для десятка новых строчек
  217. if (c == 10)//если этот десяток закончился, то добавим
  218. {
  219. t = (class food1*)realloc(t, (count + 10) * sizeof(class food1));
  220. c = 0;
  221. }
  222. c++;
  223. t[count].fam = (char*)calloc(strlen(fam) + 1, sizeof(char));
  224. strcpy_s(t[count].fam, strlen(fam) + 1, fam);
  225. t[count].type = type;
  226. t[count].weight = weight;
  227. t[count].quant = quant;
  228. t[count].cost = cost;
  229. t[count].dat.day = dat.day;
  230. t[count].dat.month = dat.month;
  231. t[count].dat.year = dat.year;
  232. }
  233. virtual int add()
  234. {
  235. fam = (char*)calloc(256, sizeof(char));
  236. int readtype;
  237. double readweight;
  238. int readquant;
  239. double readcost;
  240. int readday;
  241. int readmonth;
  242. int readyear;
  243. class food1 tr;
  244. cout << "Введите название изделия: "; cin >> fam;
  245. tr.fam = fam;
  246. cout << "Введите тип изделия (1- булочка, 2-пирожок, 3-пирожное): "; cin >> readtype;
  247. tr.type = readtype;
  248. cout << "Введите вес изделия: "; cin >> readweight;
  249. tr.weight = readweight;
  250. cout << "Введите количество изделий: "; cin >> readquant;
  251. tr.quant = readquant;
  252. cout << "Введите стоимость изделия: "; cin >> readcost;
  253. tr.cost = readcost;
  254. cout << "Введите день изготовления изделия: "; cin >> readday;
  255. tr.dat.day = readday;
  256. cout << "Введите месяц изготовления изделия: "; cin >> readmonth;
  257. tr.dat.month = readmonth;
  258. cout << "Введите год изготовления изделия: "; cin >> readyear;
  259. tr.dat.year = readyear;
  260. addnew(tr);
  261. count++;
  262. return count;
  263. }
  264. virtual void sortir()
  265. {
  266. // Сортировка массива пузырьком
  267. bool k = 0; // для единичного вывода таблицы
  268. food1 * tmps = new food1[count];
  269. food1 * tmp = new food1;
  270. for (int i = 0; i < food1::count; i++)
  271. tmps[i] = t[i];
  272. for (int i = 0; i < food1::count; i++)
  273. {
  274. for (int j = i; j < food1::count; j++)
  275. {
  276. if (tmps[i].cost < tmps[j].cost) {
  277. // меняем элементы местами
  278. *tmp = tmps[i];
  279. tmps[i] = tmps[j];
  280. tmps[j] = *tmp;
  281.  
  282. }
  283. }
  284. }
  285. double *p_darr = new double[count];
  286. for (int i = 0; i < count; i++)
  287. {
  288. p_darr[i] = t[i].cost;
  289. }
  290. sort(p_darr, p_darr + count);
  291. for (int i = 0; i < count; i++)
  292. {
  293. while (k == 0)
  294. {
  295. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  296. for (int i = 0; i < 140; i++)
  297. {
  298. cout << "-";
  299. }
  300. cout << endl;
  301. k = 1;
  302. };
  303. cout << setw(18) << left << tmps[i].fam << setw(18) << left << tmps[i].type << setw(18) << left << tmps[i].weight << setw(18) << left << tmps[i].quant << setw(18) << left << tmps[i].cost << setw(18) << left << tmps[i].dat.day << setw(18) << left << tmps[i].dat.month << setw(18) << left << tmps[i].dat.year << endl;
  304. for (int i = 0; i < 140; i++)
  305. cout << "-";
  306. cout << endl;
  307. k = 1;
  308. }
  309. delete[] p_darr;
  310. }
  311. virtual void end()
  312. {
  313. ofstream f("file.txt");
  314. for (int i = 0; i < food1::count; i++)
  315. {
  316. f << t[i].fam << endl;
  317. f << t[i].type << endl;
  318. f << t[i].weight << endl;
  319. f << t[i].quant << endl;
  320. f << t[i].cost << endl;
  321. f << t[i].dat.day << endl;
  322. f << t[i].dat.month << endl;
  323. f << t[i].dat.year;
  324. if (i < count - 1) f << endl;
  325. }
  326. f.close();
  327. free(t);
  328. }
  329. virtual void searchdate(int y, int m, int d)
  330. {
  331. int k = 0; //для единождого вывода шапки таблицы
  332. int count1 = 0; //для проверки на наличие владельца в базе
  333. for (int i = 0; i < food1::count; ++i)
  334. {
  335. int flag1;
  336. int flag2;
  337. int flag3;
  338. int p_tekyear; // текущий указатель
  339. int p_tekmonth; // текущий указатель
  340. int p_tekday; // текущий указатель
  341. p_tekyear = t[i].dat.year;
  342. p_tekmonth = t[i].dat.month;
  343. p_tekday = t[i].dat.day;
  344. flag1 = (y == p_tekyear);
  345. if (flag1 == 1)
  346. {
  347. flag2 = (m == p_tekmonth);
  348. if (flag2 == 1)
  349. {
  350. flag3 = (d == p_tekday);
  351. if (flag3 == 1)
  352. {
  353. while (k == 0)
  354. {
  355. cout << endl;
  356. cout << endl;
  357. cout << "Вот что удалось найти: " << endl;
  358. cout << endl;
  359. cout << endl;
  360. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  361. for (int i = 0; i < 140; i++)
  362. cout << "-";
  363. cout << endl;
  364. k++;
  365. };
  366. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  367. for (int i = 0; i < 140; i++)
  368. cout << "-";
  369. cout << endl;
  370. cin.fail();
  371. cin.fail();
  372. k++;
  373. count1++;
  374. }
  375. }
  376. }
  377. }
  378. }
  379. virtual void searchdatemorethan(int y, int m, int d)
  380. {
  381. int k = 0; //для единождого вывода шапки таблицы
  382. int count1 = 0; //для проверки на наличие владельца в базе
  383. for (int i = 0; i < food1::count; ++i)
  384. {
  385. if (dat.year > y)
  386. if (dat.month > m)
  387. if (dat.day > d)
  388. {
  389. while (k == 0)
  390. {
  391. cout << endl;
  392. cout << endl;
  393. cout << "Вот что удалось найти: " << endl;
  394. cout << endl;
  395. cout << endl;
  396. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  397. for (int i = 0; i < 140; i++)
  398. cout << "-";
  399. cout << endl;
  400. k++;
  401. }
  402. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  403. for (int i = 0; i < 140; i++)
  404. cout << "-";
  405. cout << endl;
  406. cin.fail();
  407. cin.fail();
  408. k++;
  409.  
  410. count1++;
  411. }
  412.  
  413. }
  414. for (int i = 0; i < food1::count; ++i)
  415. {
  416. if (!t[i])
  417. cout << t[i];
  418. }
  419. }
  420. };
  421. class food2 : public food1
  422. {
  423. public:
  424. char* fam;
  425. int quant;
  426. double cost;
  427. Date dat;
  428. Date product;
  429.  
  430. food2(char* f, int t, double w, int q, double c, int day, int month, int year)
  431. {
  432. fam = f;
  433. type = t;
  434. weight = w;
  435. quant = q;
  436. cost = c;
  437. dat.day = day;
  438. dat.month = month;
  439. dat.year = year;
  440. }
  441. food2()
  442. {
  443. fam = (char*)calloc(256, sizeof(char));
  444. fam = strcpy(fam, "По умолчанию");
  445. type = 1;
  446. weight = 1;
  447. quant = 1;
  448. cost = 1;
  449. dat.day = 1;
  450. dat.month = 1;
  451. dat.year = 1;
  452. }
  453. food2(food2 &food2)
  454. {
  455. fam = (char*)calloc(256, sizeof(char));
  456. strcpy(fam, food2.fam);
  457. }
  458. ~food2()
  459. {
  460. free(fam);
  461. }
  462.  
  463. int start() override
  464. {
  465. ifstream f("file.txt");
  466. if (f.fail()) return 0;
  467. t = (class food2*)malloc(64 * sizeof(class food2));
  468. while (!f.eof())
  469. {
  470. t[count].fam = (char*)calloc(256, sizeof(char));
  471. f >> t[count].fam;
  472. f >> t[count].type;
  473. f >> t[count].weight;
  474. f >> t[count].quant;
  475. f >> t[count].cost;
  476. f >> t[count].dat.day;
  477. f >> t[count].dat.month;
  478. f >> t[count].dat.year;
  479. count++;
  480. }
  481. f.close();
  482. return count;
  483. };
  484. void printbase() override
  485. {
  486. cout << endl;
  487. cout << endl;
  488. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  489. for (int i = 0; i < 140; i++)
  490. {
  491. cout << "-";
  492. }
  493. cout << endl;
  494. for (int i = 0; i < count; i++)
  495. {
  496. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  497.  
  498. for (int i = 0; i < 140; i++)
  499. cout << "-";
  500. cout << endl;
  501. }
  502. cout << endl;
  503. };
  504. double num() override
  505. {
  506. double buff;
  507. cin >> buff;
  508. while (cin.fail())
  509. {
  510. cin.clear();
  511. char c[30];
  512. cin >> c;
  513. cout << "Неверное значение, введите занаво:";
  514. cin >> buff;
  515. }
  516. return buff;
  517. };
  518. void addnew(food1 f) override
  519. {
  520. static int c = 10;//расширение сруктуры для десятка новых строчек
  521. if (c == 10)//если этот десяток закончился, то добавим
  522. {
  523. t = (class food1*)realloc(t, (count + 10) * sizeof(class food1));
  524. c = 0;
  525. }
  526. c++;
  527. t[count].fam = (char*)calloc(strlen(fam) + 1, sizeof(char));
  528. strcpy_s(t[count].fam, strlen(fam) + 1, fam);
  529. t[count].type = type;
  530. t[count].weight = weight;
  531. t[count].quant = quant;
  532. t[count].cost = cost;
  533. t[count].dat.day = dat.day;
  534. t[count].dat.month = dat.month;
  535. t[count].dat.year = dat.year;
  536. };
  537. int add() override
  538. {
  539. fam = (char*)calloc(256, sizeof(char));
  540. int readtype;
  541. double readweight;
  542. int readquant;
  543. double readcost;
  544. int readday;
  545. int readmonth;
  546. int readyear;
  547. class food1 tr;
  548. cout << "Введите название изделия: "; cin >> fam;
  549. tr.fam = fam;
  550. cout << "Введите тип изделия (1- булочка, 2-пирожок, 3-пирожное): "; cin >> readtype;
  551. tr.type = readtype;
  552. cout << "Введите вес изделия: "; cin >> readweight;
  553. tr.weight = readweight;
  554. cout << "Введите количество изделий: "; cin >> readquant;
  555. tr.quant = readquant;
  556. cout << "Введите стоимость изделия: "; cin >> readcost;
  557. tr.cost = readcost;
  558. cout << "Введите день изготовления изделия: "; cin >> readday;
  559. tr.dat.day = readday;
  560. cout << "Введите месяц изготовления изделия: "; cin >> readmonth;
  561. tr.dat.month = readmonth;
  562. cout << "Введите год изготовления изделия: "; cin >> readyear;
  563. tr.dat.year = readyear;
  564. addnew(tr);
  565. count++;
  566. return count;
  567. };
  568. void sortir() override
  569. {
  570. // Сортировка массива пузырьком
  571. bool k = 0; // для единичного вывода таблицы
  572. food1 * tmps = new food1[count];
  573. food1 * tmp = new food1;
  574. for (int i = 0; i < food2::count; i++)
  575. tmps[i] = t[i];
  576. for (int i = 0; i < food2::count; i++)
  577. {
  578. for (int j = i; j < food2::count; j++)
  579. {
  580. if (tmps[i].cost < tmps[j].cost) {
  581. // меняем элементы местами
  582. *tmp = tmps[i];
  583. tmps[i] = tmps[j];
  584. tmps[j] = *tmp;
  585. }
  586. }
  587. }
  588. double *p_darr = new double[count];
  589. for (int i = 0; i < count; i++)
  590. {
  591. p_darr[i] = t[i].cost;
  592. }
  593. sort(p_darr, p_darr + count);
  594. for (int i = 0; i < count; i++)
  595. {
  596. while (k == 0)
  597. {
  598. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  599. for (int i = 0; i < 140; i++)
  600. {
  601. cout << "-";
  602. }
  603. cout << endl;
  604. k = 1;
  605. };
  606. cout << setw(18) << left << tmps[i].fam << setw(18) << left << tmps[i].type << setw(18) << left << tmps[i].weight << setw(18) << left << tmps[i].quant << setw(18) << left << tmps[i].cost << setw(18) << left << tmps[i].dat.day << setw(18) << left << tmps[i].dat.month << setw(18) << left << tmps[i].dat.year << endl;
  607. for (int i = 0; i < 140; i++)
  608. cout << "-";
  609. cout << endl;
  610. k = 1;
  611. }
  612. delete[] p_darr;
  613. };
  614. void end() override
  615. {
  616. ofstream f("file.txt");
  617. for (int i = 0; i < food2::count; i++)
  618. {
  619. f << t[i].fam << endl;
  620. f << t[i].type << endl;
  621. f << t[i].weight << endl;
  622. f << t[i].quant << endl;
  623. f << t[i].cost << endl;
  624. f << t[i].dat.day << endl;
  625. f << t[i].dat.month << endl;
  626. f << t[i].dat.year;
  627. if (i < count - 1) f << endl;
  628. }
  629. f.close();
  630. free(t);
  631. };
  632. void searchdate(int y, int m, int d) override
  633. {
  634. int k = 0; //для единождого вывода шапки таблицы
  635. int count1 = 0; //для проверки на наличие владельца в базе
  636. for (int i = 0; i < food2::count; ++i)
  637. {
  638. int flag1;
  639. int flag2;
  640. int flag3;
  641. int p_tekyear; // текущий указатель
  642. int p_tekmonth; // текущий указатель
  643. int p_tekday; // текущий указатель
  644. p_tekyear = t[i].dat.year;
  645. p_tekmonth = t[i].dat.month;
  646. p_tekday = t[i].dat.day;
  647. flag1 = (y == p_tekyear);
  648. if (flag1 == 1)
  649. {
  650. flag2 = (m == p_tekmonth);
  651. if (flag2 == 1)
  652. {
  653. flag3 = (d == p_tekday);
  654. if (flag3 == 1)
  655. {
  656. while (k == 0)
  657. {
  658. cout << endl;
  659. cout << endl;
  660. cout << "Вот что удалось найти: " << endl;
  661. cout << endl;
  662. cout << endl;
  663. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  664. for (int i = 0; i < 140; i++)
  665. cout << "-";
  666. cout << endl;
  667. k++;
  668. };
  669. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  670. for (int i = 0; i < 140; i++)
  671. cout << "-";
  672. cout << endl;
  673. cin.fail();
  674. cin.fail();
  675. k++;
  676. count1++;
  677. }
  678. }
  679. }
  680. }
  681. };
  682. void searchdatemorethan(int y, int m, int d) override
  683. {
  684. int k = 0; //для единождого вывода шапки таблицы
  685. int count1 = 0; //для проверки на наличие владельца в базе
  686. for (int i = 0; i < food1::count; ++i)
  687. {
  688. if (dat.year > y)
  689. if (dat.month > m)
  690. if (dat.day > d)
  691. {
  692. while (k == 0)
  693. {
  694. cout << endl;
  695. cout << endl;
  696. cout << "Вот что удалось найти: " << endl;
  697. cout << endl;
  698. cout << endl;
  699. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  700. for (int i = 0; i < 140; i++)
  701. cout << "-";
  702. cout << endl;
  703. k++;
  704. }
  705. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  706. for (int i = 0; i < 140; i++)
  707. cout << "-";
  708. cout << endl;
  709. cin.fail();
  710. cin.fail();
  711. k++;
  712.  
  713. count1++;
  714. }
  715.  
  716. }
  717. for (int i = 0; i < food2::count; ++i)
  718. {
  719. if (!t[i])
  720. cout << t[i];
  721. }
  722. };
  723. };
  724. void searchtype(int type)
  725. {
  726. int k = 0; //для единождого вывода шапки таблицы
  727. int count1 = 0; //для проверки на наличие владельца в базе
  728. for (int i = 0; i < food1::count; ++i)
  729. {
  730. int flag;
  731. int p_tek; // текущий указатель
  732. p_tek = t[i].type;
  733. flag = (type == p_tek);
  734. if (flag == 1)
  735. {
  736. while (k == 0)
  737. {
  738. cout << endl;
  739. cout << endl;
  740. cout << "Вот что удалось найти: " << endl;
  741. cout << endl;
  742. cout << endl;
  743. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  744. for (int i = 0; i < 140; i++)
  745. cout << "-";
  746. cout << endl;
  747. k++;
  748. };
  749. cout << setw(18) << left << t[i].fam << setw(18) << left << t[i].type << setw(18) << left << t[i].weight << setw(18) << left << t[i].quant << setw(18) << left << t[i].cost << setw(18) << left << t[i].dat.day << setw(18) << left << t[i].dat.month << setw(18) << left << t[i].dat.year << endl;
  750. for (int i = 0; i < 140; i++)
  751. cout << "-";
  752. cout << endl;
  753. cin.fail();
  754. cin.fail();
  755. k++;
  756. count1++;
  757. }
  758. }
  759. }
  760. ostream &operator << (ostream& cout, const food1& r)
  761. {
  762. cout << "Изделия с нормальным сроком годности" << endl;
  763. cout << endl;
  764. cout << endl;
  765. cout << setw(18) << left << "Название изделия" << setw(18) << left << "Тип изделия" << setw(18) << left << "Вес изделия" << setw(18) << left << "Кол - во изделий" << setw(18) << left << "Стоимость изделия" << setw(18) << left << "День изготовления" << setw(18) << left << "Месяц изготовления" << setw(18) << left << "Год изготовления" << endl;
  766. for (int i = 0; i < 140; i++)
  767. cout << "-";
  768. cout << endl;
  769. cout << setw(18) << left << r.fam << setw(18) << left << setw(18) << left << r.type << setw(18) << left << r.weight << setw(18) << left << r.quant << setw(18) << left << r.cost << setw(18) << left << r.dat.day << setw(18) << left << r.dat.month << setw(18) << left << r.dat.year << endl;
  770. for (int i = 0; i < 140; i++)
  771. cout << "-";
  772. cout << endl;
  773. return cout;
  774. }
  775. bool operator ! (const food1& r)
  776. {
  777. int day = 2;
  778. int month = 2;
  779. int year = 2;
  780. /*cout << "Введите год создания изделия" << endl;
  781. cin >> day;
  782. cout << "Введите месяц создания изделия" << endl;
  783. cin >> month;
  784. cout << "Введите день создания изделия" << endl;
  785. cin >> year;*/
  786. if (r.dat.year > year)
  787. if (r.dat.month > month)
  788. if (r.dat.day > day)
  789. return true;
  790. return false;
  791. }
  792. int food1::count;
  793. int main()
  794. {
  795. food1 bread;
  796. setlocale(LC_ALL, "Russian");
  797. bread.start(); //считывание из файла
  798. bool cont = 0;
  799. do {
  800. int choose;
  801. cout << "Выберите действие:\n" << "1. Печать всех элементов базы \n" << "2. Добавить новый элемент \n" << "3. Поиск изделия по названию \n" << "4. Фильтр по типу изделия \n" << "5. Сортировать по цене (сначало дорогие изделия) \n" << "6. Поиск по дате изготовления\n" << "7. Поиск изделий, у которых срок годности не истек\n" << "8. Выход (с сохранением данных) \n" << endl;
  802. cout << "Ваш выбор: ";
  803. cin >> choose;
  804. while (cin.fail())
  805. {
  806. cin.clear();
  807. char c[30];
  808. cin >> c;
  809. cout << "Неверное значение, введите ещё раз:";
  810. cin >> choose;
  811. };
  812. cout << "Количество изделий в базе: ";
  813. cout << food1::count << endl;
  814. cout << endl;
  815. switch (choose)
  816. {
  817. case 1: {
  818. bread.printbase(); //печать базы
  819. cout << endl << endl;
  820. break;
  821. };
  822.  
  823. case 2: {
  824. bread.add(); //довавить изделие
  825. cout << endl << endl;
  826. break;
  827. };
  828. case 3: {
  829. char fam[30]; //Поиск изделия по названию
  830. cout << "Введите название: ";
  831. cin >> fam;
  832. bread.searсhfam(fam); cout << endl << endl;
  833. break;
  834. };
  835. case 4: { //Фильтр по типу изделия
  836. int type;
  837. cout << "Введите тип изделия: ";
  838. cin >> type;
  839. searchtype(type); cout << endl << endl;
  840. break;
  841. };
  842. case 5: { //сортироввка по цене
  843. bread.sortir();
  844. cout << endl << endl;
  845. break;
  846. };
  847. case 6: {
  848. int year;
  849. cout << "Введите год создания изделия: ";
  850. cin >> year;
  851. int month;
  852. cout << "Введите месяц создания изделия: ";
  853. cin >> month;
  854. cout << "Введите день создания изделия: ";
  855. int day;
  856. cin >> day;
  857. bread.searchdate(year, month, day);
  858. cout << endl << endl;
  859. break;
  860. }
  861. case 7: {
  862. int year;
  863. cout << "Введите год создания изделия: ";
  864. cin >> year;
  865. int month;
  866. cout << "Введите месяц создания изделия: ";
  867. cin >> month;
  868. cout << "Введите день создания изделия: ";
  869. int day;
  870. cin >> day;
  871. bread.searchdatemorethan(year, month, day);
  872. cout << endl << endl;
  873. break;
  874. }
  875. case 8: bread.end(); //ошибка
  876. break;
  877. default: cout << "Нет такого действия " << endl;
  878. };
  879. cout << "Хотите продолжить? (ДА - 1; НЕТ - 0) ";
  880. cin >> cont;
  881. } while (cont == 1);
  882. system("pause");
  883. return 0;
  884. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement