Advertisement
Usow_Maxim

Lab_6

Oct 27th, 2017
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.13 KB | None | 0 0
  1. #include <conio.h>
  2. #include <cstdlib>
  3. #include <fstream>
  4. #include <windows.h>
  5. #include <clocale>
  6. #include <iostream>
  7. #include <math.h>
  8.  
  9. using namespace std;
  10.  
  11. struct Book{
  12.     char* Author;
  13.     char* Name;
  14.     int Pages;
  15.     float Price;
  16. };
  17.  
  18. int Write_int(){
  19.     char str[10];
  20.     int value;
  21.     while(true){
  22.         scanf("%s", str);
  23.         value = (atoi(str))? atoi(str) : 0;
  24.         if (value > 0)
  25.             break;
  26.         else
  27.             printf("Введите значение n >0: ");
  28.     }
  29.     return value;
  30. }
  31.  
  32. bool coincidence(int* temp, unsigned int Size, int index){
  33.     for(int i = 0; i <Size; i++)
  34.         if (temp[i] == index)
  35.             return true;
  36.     return false;
  37. }
  38.  
  39. Book* Error_File(int &Size){
  40.     Book* book;
  41.     Size = 1;
  42.     book = new Book[Size];
  43.     book[0].Author = (char*)"Author";
  44.     book[0].Name = (char*)"Name";
  45.     book[0].Pages = 0;
  46.     book[0].Price = 0;
  47.     return book;
  48. }
  49.  
  50. void Message(char* str){
  51.     system("cls");
  52.     printf("%s", str);
  53.     _getch();
  54. }
  55.  
  56. Book* Book_Add(Book* book, int &Size, char* Author, char* Name, int Page, int Price){
  57.     Size++;
  58.     Book* copyBook = new Book[Size];
  59.     for (int i = 0; i < Size - 1; i++){
  60.         copyBook[i] = book[i];
  61.     }
  62.     copyBook[Size - 1].Author = Author;
  63.     copyBook[Size - 1].Name = Name;
  64.     copyBook[Size - 1].Pages = Page;
  65.     copyBook[Size - 1].Price = Price;
  66.     return copyBook;
  67. }
  68.  
  69. Book* Book_Remove(Book* book, int &Size, UINT Index){
  70.     if (Index > Size) return book;
  71.     Size--;
  72.     Book* copyBook = new Book[Size];
  73.     for (int i = 0; i < Index; ++i)
  74.         copyBook[i] = book[i];
  75.     for (int i = Index; i < Size; ++i)
  76.         copyBook[i] = book[i + 1];
  77.  
  78.     return copyBook;
  79. }
  80.  
  81. void Write_File(Book* book, int Size){
  82.     if (Size != 0 || book != NULL){
  83.         ofstream f;
  84.         f.open("Books.txt", ios_base::trunc);
  85.         if (f.is_open()){
  86.             f << Size << "\n";
  87.             for (int i = 0; i < Size; i++){
  88.                 f << book[i].Author << " ";
  89.                 f << book[i].Name << " ";
  90.                 f << book[i].Pages << " ";
  91.                 f << book[i].Price << "\n";
  92.             }
  93.         } else {
  94.             f << "1\nAuthor Name Pages Price\n";
  95.         }
  96.         f.close();
  97.     }
  98. }
  99.  
  100. Book* Read_File(int &Size){
  101.     Book* book;
  102.     ifstream f;
  103.     f.open("Books.txt");
  104.     if (f.is_open()){
  105.         char text[50];
  106.         f >> text;
  107.         Size = (atoi(text))? atoi(text) : 0;
  108.         if (!Size == 0){
  109.             book = new Book[Size];
  110.             for (int i = 0; i < Size; i++){
  111.                 f >> text;
  112.                 book[i].Author = text;
  113.                 f >> text;
  114.                 book[i].Name = text;
  115.                 f >> text;
  116.                 book[i].Pages = atoi(text);
  117.                 f >> text;
  118.                 book[i].Price = atoi(text);
  119.             }
  120.         } else {
  121.             Message("Файл поврежден.");
  122.             book = Error_File(Size);
  123.         }
  124.     } else {
  125.         Message("Не загрузить файл.");
  126.         book = Error_File(Size);
  127.     }
  128.     f.close();
  129.     return book;
  130. }
  131.  
  132. bool Setup(){
  133.     bool Files = true;
  134.     int x, y;
  135.     x = y = 0;
  136.     while(true){
  137.         system("cls");
  138.         cout << "Вас приветствует программа настройки" << endl;
  139.         cout << "Загрузиться из файла:" << endl;
  140.         printf((Files)? "[Да] Нет\n" : " Да [Нет]\n");
  141.         printf((y == 1)? "[Сохраниться]\n" : " Сохраниться\n");
  142.         printf("%d, %d", x, y);
  143.         switch(_getch()){
  144.             case 'w':
  145.                 if (y > 0) y--;
  146.                 break;
  147.             case 'a':
  148.                 if (x > 0) x--;
  149.                 break;
  150.             case 'd':
  151.                 if (x < 1) x++;
  152.                 break;
  153.             case 's':
  154.                 if (y < 1) y++;
  155.                 break;
  156.             case 'f':
  157.                 if (y == 1) return Files;
  158.                 break;
  159.             default:
  160.                 break;
  161.         }
  162.         if (x == 0 && y == 0) Files = true;
  163.         if (x == 1 && y == 0) Files = false;
  164.     }
  165. }
  166.  
  167. void Draw(Book* book, int Size, int Type){
  168.     system("cls");
  169.  
  170.     for (int i = 0; i < Size; ++i){
  171.         printf("%s|", book[i].Author);
  172.         printf("%s|", book[i].Name);
  173.         printf("%s|", book[i].Pages);
  174.         printf("%s|\n", book[i].Price);
  175.     }
  176. }
  177.  
  178. void Menu(Book* &book, int &Size){
  179.     bool RUN = true;
  180.     while(RUN){
  181.         system("cls");
  182.         cout << "[Меню]\n1.Вывод списка\n2.Редактирование списка\n3.Автор\n4.Выход\nВыбор: ";
  183.         switch(Write_int()){
  184.             case 1:
  185.             {
  186.                 bool RUN1 = true;
  187.                 while(RUN1){
  188.                     system("cls");
  189.                     cout << "[Вывод списка]\n1.По индексу\n2.По Автору\n3.По Имени\n4.По Кол. стр.\n5.По Цене\n6.Назад\nВыбор: ";
  190.                     switch(Write_int()){
  191.                         case 1:
  192.                             system("cls");
  193.                             cout << "[Вывод списка/По индексу]\n";
  194.                             for (int i = 0; i < Size; i++){
  195.                                 cout << i << ") ";
  196.                                 cout << book[i].Author << " ";
  197.                                 cout << book[i].Name << " ";
  198.                                 cout << book[i].Pages << " ";
  199.                                 cout << book[i].Price << endl;
  200.                             }
  201.                             cout << "\nНажмите любую клавишу для продолжения...\n";
  202.                             _getch();
  203.                             break;
  204.                         case 2:
  205.                             system("cls");
  206.                             cout << "[Вывод списка/По автору]\n";
  207.                             break;
  208.                         case 3:
  209.                             system("cls");
  210.                             cout << "[]\n";
  211.                             break;
  212.                         case 4:
  213.                         {
  214.                             system("cls");
  215.                             cout << "[Вывод списка/По  Кол. стр.]\n";
  216.                             int* temp = new int[Size];
  217.                             //Заполение temp
  218.                             for (int i = 0; i < Size; i++){
  219.                                 int thelongerelement = 0;
  220.                                 int thelongindex = 0;
  221.                                 //Поиск наибольшего числа с исключением уже найденых
  222.                                 for(int j = 0; j < Size; j++){
  223.                                     if (coincidence(temp, Size, j))
  224.                                         continue;
  225.                                     if (thelongerelement < book[j].Pages){
  226.                                         thelongerelement = book[j].Pages;
  227.                                         thelongindex = j;
  228.                                     }
  229.                                 }
  230.                                 temp[i] = thelongindex;
  231.                             }
  232.  
  233.                             for (int i = 0; i < Size; i++){
  234.                                 cout << temp[i] << " ";
  235.                                 cout << book[temp[i]].Author << " ";
  236.                                 cout << book[temp[i]].Name << " ";
  237.                                 cout << book[temp[i]].Pages << " ";
  238.                                 cout << book[temp[i]].Price << "\n";
  239.                             }
  240.                             cout << "Для продолжения нажмите любую клавишу...\n";
  241.                             _getch();
  242.                             break;
  243.                         }
  244.                         case 5:
  245.                         {
  246.                             system("cls");
  247.                             cout << "[Вывод списка/По  Цене]\n";
  248.                             int* temp = new int[Size];
  249.                             //Заполение temp
  250.                             for (int i = 0; i < Size; i++){
  251.                                 int thelongerelement = 0;
  252.                                 int thelongindex = 0;
  253.                                 //Поиск наибольшего числа с исключением уже найденых
  254.                                 for(int j = 0; j < Size; j++){
  255.                                     if (coincidence(temp, Size, j))
  256.                                         continue;
  257.                                     if (thelongerelement < book[j].Price){
  258.                                         thelongerelement = book[j].Price;
  259.                                         thelongindex = j;
  260.                                     }
  261.                                 }
  262.                                 temp[i] = thelongindex;
  263.                             }
  264.  
  265.                             for (int i = 0; i < Size; i++){
  266.                                 cout << temp[i] << " ";
  267.                                 cout << book[temp[i]].Author << " ";
  268.                                 cout << book[temp[i]].Name << " ";
  269.                                 cout << book[temp[i]].Pages << " ";
  270.                                 cout << book[temp[i]].Price << "\n";
  271.                             }
  272.                             cout << "Для продолжения нажмите любую клавишу...\n";
  273.                             _getch();
  274.                             break;
  275.                         }
  276.                         case 6:
  277.                             RUN1 = false;
  278.                             break;
  279.                         default:
  280.                             break;
  281.                     }
  282.                 }
  283.                 break;
  284.             }
  285.             case 2:
  286.             {
  287.                 bool RUN2 = true;
  288.                 while(RUN2){
  289.                     system("cls");
  290.                     cout << "[Редактирование списка]\n1.Добавление в список\n2.Редактирование по индексу\n3.Удаление по индексу\n4.Назад\nВыбор: ";
  291.                     switch(Write_int()){
  292.                         case 1:
  293.                         {
  294.                             bool RUN21 = true;
  295.                             while(RUN21){
  296.                                 system("cls");
  297.                                 cout << "[Редактирование списка/Добавление в список]\n";
  298.                                 break;
  299.                                 //printf()
  300.                             }
  301.                             //Book_Add(book, Size, Author, Name, Pages, Price);
  302.                             break;
  303.                         }
  304.                         case 2:
  305.                             break;
  306.                         case 3:
  307.                             break;
  308.                         case 4:
  309.                             RUN2 = false;
  310.                             break;
  311.                         default:
  312.                             break;
  313.                     }
  314.                 }
  315.                 break;
  316.             }
  317.             case 3:
  318.                 system("cls");
  319.                 cout << "[Автор]\nИмя: Усов Максим Андреевич\nКонтакты:\nE-mail: usow.maxim2016@yandex.ru\nVK: vk.com/merykov\n";
  320.                 cout << "Для продолжения нажмите любую клавишу...\n";
  321.                 _getch();
  322.                 break;
  323.             case 4:
  324.                 system("cls");
  325.                 cout << "[Выход]\n";
  326.                 RUN = false;
  327.                 break;
  328.             default:
  329.                 break;
  330.         }
  331.     }
  332. }
  333.  
  334. int main(){
  335.     SetConsoleCP(65001);
  336.     SetConsoleOutputCP(65001);
  337.  
  338.     Book* book;
  339.     int Size;
  340.  
  341.     if(Setup())
  342.         book = Read_File(Size);
  343.     else
  344.         book = Error_File(Size);
  345.  
  346.     Menu(book, Size);
  347.  
  348.     delete[] book;
  349.     return 0;
  350. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement