Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <iomanip>
- #include <iostream>
- #include <fstream>
- #include <utility>
- typedef unsigned int uint;
- struct player
- {
- uint age; //возраст
- uint experience; //опыт игрока
- uint goals; //голов за сезон
- std::string name; //ФИО
- std::string group; //группа
- std::string id;//номер
- };
- struct team
- {
- uint size;
- player* players;
- };
- void free(team &t)
- {
- if(t.size != 0)
- {
- delete[] t.players;
- t.players = NULL;
- t.size = 0;
- }
- }
- void flush()
- {
- while (std::cin.get() != '\n') continue;
- }
- player create_info()
- {
- player R;
- flush();
- std::cout<<"Input name:\n";
- std::getline(std::cin,R.name);
- std::cout<<"Input age:\n";
- std::cin>>R.age;
- std::cout<<"Input group:\n";
- std::cin>>R.group;
- std::cout<<"Input experience:\n";
- std::cin>>R.experience;
- std::cout<<"Input number of goals in season:\n";
- std::cin>>R.goals;
- std::cout<<"Input number of player:\n";
- std::cin>>R.id;
- return R;
- }
- void write(player &p,uint id,std::ofstream &out)
- {
- out<<"Игрок № "<<id<<'\n';
- out<<"ФИО:"<<p.name<<'\n';
- out<<"Возраст(полных лет): "<<p.age<<'\n';
- out<<"Группа:"<<p.group<<'\n';
- out<<"Опыт игрока(лет): "<<p.experience<<'\n';
- out<<"Номер игрока:"<<p.id<<'\n';
- out<<"Забил голов за сезон: "<<p.goals<<'\n';
- }
- void add_to_file(player &p,uint id,const std::string &fname)
- {
- std::ofstream out(fname.data(),std::ofstream::app/*std::ios_base::app*/);
- if(!out)
- {
- std::cout<<"Can't open file "<<fname<<" for writing\n";
- std::exit(1);
- }
- write(p,id,out);
- }
- void add_to_team(team &id,const std::string &fname)
- {
- uint count = id.size + 1;
- player* tmp = new player[count]();
- if(count != 1)
- for(uint i = 0; i<id.size; i++)
- tmp[i] = id.players[i];
- delete []id.players;
- id.players = tmp;
- id.players[id.size] = create_info();
- add_to_file(id.players[id.size],count,fname);
- id.size++;
- }
- void add_to_team(team &id,const player &p)
- {
- uint count = id.size + 1;
- player* tmp = new player[count]();
- if(count != 1)
- for(uint i = 0; i<id.size; i++)
- tmp[i] = id.players[i];
- delete []id.players;
- id.players = tmp;
- id.players[count-1] = p;
- id.size = count;
- }
- void remove_by_name(team &t,const std::string &name,const std::string &fname)
- {
- std::ofstream out(fname.data());
- if(!out)
- {
- std::cout<<"Can't open file "<<fname<<" for writing\n";
- std::exit(1);
- }
- player* arr = t.players;
- uint count = 0;
- for(uint i = 0; i<t.size; i++)
- if(arr[i].name != name)
- count++;
- if(count == t.size)
- std::cout<<"Не найдено игроков с именем : "<<name<<'\n';
- player* newplayers = new player[count]();
- for(uint i = 0,j = 0; i<t.size; i++)
- {
- if(arr[i].name != name)
- {
- newplayers[j] = arr[i];//переносим из старого массива в новый
- write(newplayers[j],j,out);//записываем в файл
- j++;
- }
- }
- delete [] t.players;
- t.players = newplayers;
- t.size = count;
- }
- void find_by_name(team &t,const std::string &name)
- {
- auto arr = t.players;
- bool is_found = false;
- for(uint i = 0; i<t.size; i++)
- {
- if(arr[i].name == name)
- {
- is_found = true;
- std::cout<<"ФИО: "<<name<<'\n';
- std::cout<<"Возраст(полных лет): "<<arr[i].age<<'\n';
- std::cout<<"Группа: "<<arr[i].group<<'\n';
- std::cout<<"Опыт игрока(лет): "<<arr[i].experience<<'\n';
- std::cout<<"Номер игрока: "<<arr[i].id<<'\n';
- std::cout<<"Забил голов за сезон: "<<arr[i].goals<<"\n\n";
- }
- }
- if(!is_found)
- std::cout<<"Не найдено игроков с именем : "<<name<<'\n';
- }
- void find_by_group(team &t,const std::string &group)
- {
- auto arr = t.players;
- bool is_found = false;
- for(uint i = 0; i<t.size; i++)
- {
- if(arr[i].group == group)
- {
- is_found = true;
- std::cout<<"ФИО: "<<arr[i].name<<'\n';
- std::cout<<"Возраст(полных лет): "<<arr[i].age<<'\n';
- std::cout<<"Группа: "<<arr[i].group<<'\n';
- std::cout<<"Опыт игрока(лет): "<<arr[i].experience<<'\n';
- std::cout<<"Номер игрока: "<<arr[i].id<<'\n';
- std::cout<<"Забил голов за сезон: "<<arr[i].goals<<"\n\n";
- }
- }
- if(!is_found)
- std::cout<<"Не найдено игроков с группой : "<<group<<'\n';
- }
- bool check(const std::string &fname)
- {
- if(fname != "")
- return true;
- std::cout<<"Файл еще не создан\n";
- flush();
- return false;
- }
- void print_file(const std::string &fname)
- {
- std::ifstream in(fname);
- std::string line;
- while(std::getline(in,line))
- std::cout<<line<<'\n';
- }
- team from_file(const std::string &fname)
- {
- team data;
- data.players = NULL;
- data.size = 0;
- std::ifstream in(fname);
- std::string line;
- while(std::getline(in,line))
- {
- player R;
- std::getline(in,line,':');
- if(line != "ФИО")
- {
- std::cout<<"File doesn't contain correct FIO\n";
- return data;
- }
- std::getline(in,R.name);
- std::getline(in,line,':');
- if(line != "Возраст(полных лет)")
- {
- std::cout<<"File doesn't contain correct age\n";
- return data;
- }
- in>>R.age;
- std::getline(in,line,':');
- if(line != "\nГруппа")
- {
- std::cout<<"File doesn't contain correct group\n";
- return data;
- }
- std::getline(in,R.group);
- std::getline(in,line,':');
- if(line != "Опыт игрока(лет)")
- {
- std::cout<<"File doesn't contain correct experience\n";
- return data;
- }
- in>>R.experience;
- std::getline(in,line,':');
- if(line != "\nНомер игрока")
- {
- std::cout<<"File doesn't contain correct number\n";
- return data;
- }
- std::getline(in,R.id);
- std::getline(in,line,':');
- if(line != "Забил голов за сезон")
- {
- std::cout<<"File doesn't contain correct goals\n";
- return data;
- }
- in>>R.goals;
- add_to_team(data,R);
- if(!std::getline(in,line))
- return data;
- }
- return data;
- }
- int main() //главная функция
- {
- setlocale(LC_ALL,"rus");
- system("chcp 1251");
- std::string fname = "";
- team data;
- data.players = NULL;
- data.size = 0;
- while(true)
- {
- std::system("cls");
- std::cout<< "\n МЕНЮ : \n"
- << "\n Создание(открытие) файла--------------------1"
- << "\n Добавление записи в файл--------------------2"
- << "\n Просмотр содержимого файла------------------3"
- << "\n Поиск в файле по ФИО------------------------4"
- << "\n Поиск в файле по названию группы------------5"
- << "\n Удаление из файла---------------------------6"
- << "\n О программе---------------------------------7"
- << "\n Выход--------------------------------- другое";
- std::cout<<"\n\n Для выполнения операции введите нужную цифру\n";
- switch(std::cin.get())
- {
- case '1':
- {
- std::cout<<"Enter filename: ";
- std::cin>>fname;
- free(data);
- data = from_file(fname);
- flush();
- break;
- }
- case '2':
- {
- if(check(fname))
- {
- add_to_team(data,fname);
- flush();
- }
- break;
- }
- case '3':
- {
- if(check(fname))
- {
- print_file(fname);
- flush();
- }
- break;
- }
- case '4':
- {
- if(check(fname))
- {
- std::cout<<"Input name for searching:\n";
- std::string name;
- flush();
- std::getline(std::cin,name);
- find_by_name(data,name);
- }
- break;
- }
- case '5':
- {
- if(check(fname))
- {
- std::cout<<"Input group for searching:\n";
- std::string group;
- flush();
- std::getline(std::cin,group);
- find_by_group(data,group);
- }
- break;
- }
- case '6':
- {
- if(check(fname))
- {
- std::cout<<"Input name for removing:\n";
- std::string name;
- flush();
- std::getline(std::cin,name);
- remove_by_name(data,name,fname);
- }
- break;
- }
- case '7':
- {
- std::cout
- << "|=====================================|\n"
- << "|Приложение Команда |\n"
- << "|(работа с файлами с помощью структур)|\n"
- << "|=====================================|\n";
- flush();
- break;
- }
- default :
- {
- free(data);
- return 0;
- }
- }
- std::cout<<"\nДля продолжения нажмите клавишу\n";
- std::cin.get();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement