Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.42 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <iomanip>
  5. #include <iostream>
  6. #include <fstream>
  7. #include <utility>
  8.  
  9. typedef unsigned int uint;
  10.  
  11. struct player
  12. {
  13.     uint age; //возраст
  14.     uint experience; //опыт игрока
  15.     uint goals; //голов за сезон
  16.     std::string name; //ФИО
  17.     std::string group; //группа
  18.     std::string id;//номер
  19. };
  20.  
  21. struct team
  22. {
  23.     uint size;
  24.     player* players;
  25. };
  26.  
  27.  
  28. void free(team &t)
  29. {
  30.     if(t.size != 0)
  31.     {
  32.         delete[] t.players;
  33.         t.players = NULL;
  34.         t.size = 0;
  35.     }
  36. }
  37.  
  38. void flush()
  39. {
  40.     while (std::cin.get() != '\n') continue;
  41. }
  42.  
  43. player create_info()
  44. {
  45.     player R;
  46.     flush();
  47.     std::cout<<"Input name:\n";
  48.     std::getline(std::cin,R.name);
  49.     std::cout<<"Input age:\n";
  50.     std::cin>>R.age;
  51.     std::cout<<"Input group:\n";
  52.     std::cin>>R.group;
  53.     std::cout<<"Input experience:\n";
  54.     std::cin>>R.experience;
  55.     std::cout<<"Input number of goals in season:\n";
  56.     std::cin>>R.goals;
  57.     std::cout<<"Input number of player:\n";
  58.     std::cin>>R.id;
  59.     return R;
  60. }
  61.  
  62. void write(player &p,uint id,std::ofstream &out)
  63. {
  64.     out<<"Игрок № "<<id<<'\n';
  65.     out<<"ФИО:"<<p.name<<'\n';
  66.     out<<"Возраст(полных лет): "<<p.age<<'\n';
  67.     out<<"Группа:"<<p.group<<'\n';
  68.     out<<"Опыт игрока(лет): "<<p.experience<<'\n';
  69.     out<<"Номер игрока:"<<p.id<<'\n';
  70.     out<<"Забил голов за сезон: "<<p.goals<<'\n';
  71. }
  72.  
  73. void add_to_file(player &p,uint id,const std::string &fname)
  74. {
  75.     std::ofstream out(fname.data(),std::ofstream::app/*std::ios_base::app*/);
  76.     if(!out)
  77.     {
  78.         std::cout<<"Can't open file "<<fname<<" for writing\n";
  79.         std::exit(1);
  80.     }
  81.     write(p,id,out);
  82. }
  83.  
  84. void add_to_team(team &id,const std::string &fname)
  85. {
  86.     uint count = id.size + 1;
  87.  
  88.     player* tmp = new player[count]();
  89.  
  90.     if(count != 1)
  91.         for(uint i = 0; i<id.size; i++)
  92.             tmp[i] = id.players[i];
  93.  
  94.     delete []id.players;
  95.     id.players = tmp;
  96.  
  97.     id.players[id.size] = create_info();
  98.     add_to_file(id.players[id.size],count,fname);
  99.     id.size++;
  100. }
  101.  
  102. void add_to_team(team &id,const player &p)
  103. {
  104.     uint count = id.size + 1;
  105.  
  106.     player* tmp = new player[count]();
  107.  
  108.     if(count != 1)
  109.         for(uint i = 0; i<id.size; i++)
  110.             tmp[i] = id.players[i];
  111.  
  112.     delete []id.players;
  113.  
  114.     id.players = tmp;
  115.     id.players[count-1] = p;
  116.     id.size = count;
  117. }
  118.  
  119. void remove_by_name(team &t,const std::string &name,const std::string &fname)
  120. {
  121.     std::ofstream out(fname.data());
  122.     if(!out)
  123.     {
  124.         std::cout<<"Can't open file "<<fname<<" for writing\n";
  125.         std::exit(1);
  126.     }
  127.     player* arr = t.players;
  128.     uint count = 0;
  129.     for(uint i = 0; i<t.size; i++)
  130.         if(arr[i].name != name)
  131.             count++;
  132.     if(count == t.size)
  133.         std::cout<<"Не найдено игроков с именем : "<<name<<'\n';
  134.  
  135.     player* newplayers = new player[count]();
  136.  
  137.     for(uint i = 0,j = 0; i<t.size; i++)
  138.     {
  139.         if(arr[i].name != name)
  140.         {
  141.             newplayers[j] = arr[i];//переносим из старого массива в новый
  142.             write(newplayers[j],j,out);//записываем в файл
  143.             j++;
  144.         }
  145.     }
  146.     delete [] t.players;
  147.     t.players = newplayers;
  148.     t.size = count;
  149. }
  150.  
  151. void find_by_name(team &t,const std::string &name)
  152. {
  153.     auto arr = t.players;
  154.     bool is_found = false;
  155.     for(uint i = 0; i<t.size; i++)
  156.     {
  157.         if(arr[i].name == name)
  158.         {
  159.             is_found = true;
  160.             std::cout<<"ФИО: "<<name<<'\n';
  161.             std::cout<<"Возраст(полных лет): "<<arr[i].age<<'\n';
  162.             std::cout<<"Группа: "<<arr[i].group<<'\n';
  163.             std::cout<<"Опыт игрока(лет): "<<arr[i].experience<<'\n';
  164.             std::cout<<"Номер игрока: "<<arr[i].id<<'\n';
  165.             std::cout<<"Забил голов за сезон: "<<arr[i].goals<<"\n\n";
  166.         }
  167.     }
  168.     if(!is_found)
  169.         std::cout<<"Не найдено игроков с именем : "<<name<<'\n';
  170. }
  171.  
  172. void find_by_group(team &t,const std::string &group)
  173. {
  174.     auto arr = t.players;
  175.     bool is_found = false;
  176.     for(uint i = 0; i<t.size; i++)
  177.     {
  178.         if(arr[i].group == group)
  179.         {
  180.             is_found = true;
  181.             std::cout<<"ФИО: "<<arr[i].name<<'\n';
  182.             std::cout<<"Возраст(полных лет): "<<arr[i].age<<'\n';
  183.             std::cout<<"Группа: "<<arr[i].group<<'\n';
  184.             std::cout<<"Опыт игрока(лет): "<<arr[i].experience<<'\n';
  185.             std::cout<<"Номер игрока: "<<arr[i].id<<'\n';
  186.             std::cout<<"Забил голов за сезон: "<<arr[i].goals<<"\n\n";
  187.         }
  188.     }
  189.     if(!is_found)
  190.         std::cout<<"Не найдено игроков с группой : "<<group<<'\n';
  191.  
  192. }
  193.  
  194. bool check(const std::string &fname)
  195. {
  196.     if(fname != "")
  197.         return true;
  198.  
  199.     std::cout<<"Файл еще не создан\n";
  200.     flush();
  201.     return false;
  202. }
  203.  
  204. void print_file(const std::string &fname)
  205. {
  206.     std::ifstream in(fname);
  207.     std::string line;
  208.  
  209.     while(std::getline(in,line))
  210.         std::cout<<line<<'\n';
  211.  
  212. }
  213.  
  214. team from_file(const std::string &fname)
  215. {
  216.     team data;
  217.     data.players = NULL;
  218.     data.size = 0;
  219.  
  220.     std::ifstream in(fname);
  221.     std::string line;
  222.  
  223.     while(std::getline(in,line))
  224.     {
  225.         player R;
  226.         std::getline(in,line,':');
  227.         if(line != "ФИО")
  228.         {
  229.             std::cout<<"File doesn't contain correct FIO\n";
  230.             return data;
  231.         }
  232.         std::getline(in,R.name);
  233.  
  234.         std::getline(in,line,':');
  235.         if(line != "Возраст(полных лет)")
  236.         {
  237.             std::cout<<"File doesn't contain correct age\n";
  238.             return data;
  239.         }
  240.         in>>R.age;
  241.  
  242.         std::getline(in,line,':');
  243.         if(line != "\nГруппа")
  244.         {
  245.             std::cout<<"File doesn't contain correct group\n";
  246.             return data;
  247.         }
  248.         std::getline(in,R.group);
  249.  
  250.         std::getline(in,line,':');
  251.         if(line != "Опыт игрока(лет)")
  252.         {
  253.             std::cout<<"File doesn't contain correct experience\n";
  254.             return data;
  255.         }
  256.         in>>R.experience;
  257.  
  258.         std::getline(in,line,':');
  259.         if(line != "\nНомер игрока")
  260.         {
  261.             std::cout<<"File doesn't contain correct number\n";
  262.             return data;
  263.         }
  264.         std::getline(in,R.id);
  265.  
  266.         std::getline(in,line,':');
  267.         if(line != "Забил голов за сезон")
  268.         {
  269.             std::cout<<"File doesn't contain correct goals\n";
  270.             return data;
  271.         }
  272.         in>>R.goals;
  273.         add_to_team(data,R);
  274.  
  275.         if(!std::getline(in,line))
  276.             return data;
  277.  
  278.     }
  279.  
  280.     return data;
  281. }
  282.  
  283. int main()   //главная функция
  284. {
  285.     setlocale(LC_ALL,"rus");
  286.     system("chcp 1251");
  287.  
  288.     std::string fname = "";
  289.     team data;
  290.     data.players = NULL;
  291.     data.size = 0;
  292.     while(true)
  293.     {
  294.         std::system("cls");
  295.         std::cout<< "\n                    МЕНЮ : \n"
  296.                  << "\n     Создание(открытие) файла--------------------1"
  297.                  << "\n     Добавление записи в файл--------------------2"
  298.                  << "\n     Просмотр содержимого файла------------------3"
  299.                  << "\n     Поиск в файле по ФИО------------------------4"
  300.                  << "\n     Поиск в файле по названию группы------------5"
  301.                  << "\n     Удаление из файла---------------------------6"
  302.                  << "\n     О программе---------------------------------7"
  303.                  << "\n     Выход--------------------------------- другое";
  304.  
  305.         std::cout<<"\n\n Для выполнения операции введите нужную цифру\n";
  306.  
  307.         switch(std::cin.get())
  308.         {
  309.         case '1':
  310.         {
  311.             std::cout<<"Enter filename: ";
  312.             std::cin>>fname;
  313.             free(data);
  314.             data = from_file(fname);
  315.             flush();
  316.             break;
  317.         }
  318.         case '2':
  319.         {
  320.             if(check(fname))
  321.             {
  322.                 add_to_team(data,fname);
  323.                 flush();
  324.             }
  325.  
  326.             break;
  327.         }
  328.         case '3':
  329.         {
  330.             if(check(fname))
  331.             {
  332.                 print_file(fname);
  333.                 flush();
  334.             }
  335.             break;
  336.         }
  337.         case '4':
  338.         {
  339.             if(check(fname))
  340.             {
  341.                 std::cout<<"Input name for searching:\n";
  342.                 std::string name;
  343.                 flush();
  344.                 std::getline(std::cin,name);
  345.                 find_by_name(data,name);
  346.             }
  347.             break;
  348.  
  349.         }
  350.         case '5':
  351.         {
  352.             if(check(fname))
  353.             {
  354.                 std::cout<<"Input group for searching:\n";
  355.                 std::string group;
  356.                 flush();
  357.                 std::getline(std::cin,group);
  358.                 find_by_group(data,group);
  359.             }
  360.             break;
  361.         }
  362.         case '6':
  363.         {
  364.             if(check(fname))
  365.             {
  366.                 std::cout<<"Input name for removing:\n";
  367.                 std::string name;
  368.                 flush();
  369.                 std::getline(std::cin,name);
  370.                 remove_by_name(data,name,fname);
  371.             }
  372.             break;
  373.         }
  374.         case '7':
  375.         {
  376.             std::cout
  377.                     << "|=====================================|\n"
  378.                     << "|Приложение Команда                   |\n"
  379.                     << "|(работа с файлами с помощью структур)|\n"
  380.                     << "|=====================================|\n";
  381.             flush();
  382.             break;
  383.         }
  384.         default :
  385.         {
  386.             free(data);
  387.             return 0;
  388.         }
  389.         }
  390.  
  391.         std::cout<<"\nДля продолжения нажмите клавишу\n";
  392.         std::cin.get();
  393.     }
  394.  
  395.  
  396.  
  397. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement