Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sword.h"
- #include "bow.h"
- #include "catapult.h"
- #include "pike.h"
- #include <windows.h>
- #include <list>
- #include <fstream>
- using namespace std;
- using namespace sword;
- using namespace bow;
- using namespace catapult;
- using namespace pike;
- // Вывод списка на экран
- void PrintList(list <Weapon*> &Weap)
- {
- list <Weapon*> :: iterator pos;
- pos = Weap.begin();
- Weapon* w;
- while (pos!=Weap.end())
- {
- w = *pos;
- cout << *w;
- pos++;
- }
- }
- // Запись списка в файл
- void FileWriteList(list <Weapon*> &Weap, string filename)
- {
- const char *c = filename.c_str();
- list <Weapon*> :: iterator pos;
- pos = Weap.begin();
- ofstream file_out(c);
- Weapon* w;
- while (pos!=Weap.end())
- {
- w = *pos;
- file_out << *w;
- pos++;
- }
- file_out.close();
- }
- // Чтение списка из файла
- void FileReadList(list <Weapon*> &Weap, string filename)
- {
- const char *c = filename.c_str();
- ifstream file_in(c);
- if (file_in==NULL)
- {
- cout << "Ошибка чтения файла. Проверьте правильность имени файла и убедитесь, что он существует" << endl;
- }
- else
- {
- string klass;
- Weapon *w;
- do
- {
- getline(file_in,klass);
- if (klass!="")
- {
- if (klass=="оружие - ближний бой - меч") w = new Sword;
- if (klass=="оружие - ближний бой - копье") w = new Pike;
- if (klass=="оружие - дальний бой - лук") w = new Bow;
- if (klass=="оружие - дальний бой - рогатка") w = new Catapult;
- file_in >> *w;
- Weap.push_back(w);
- for (int i=0;i<4;i++)
- getline(file_in,klass);
- }
- } while (!file_in.eof());
- file_in.close();
- }
- }
- // Определить указатель на элемент по номеру
- list <Weapon*> :: iterator Pos(list <Weapon*> &Weap, unsigned int n)
- {
- list <Weapon*> :: iterator pos;
- pos = Weap.begin();
- while (n>0) {pos++; n--;}
- return pos;
- }
- // Добавление по номеру позиции
- void InsertToList(list <Weapon*> &Weap, unsigned int n, Weapon *w)
- {
- if ((Weap.size()>n)&&(n>=0))
- {
- list <Weapon*> :: iterator pos;
- pos = Pos(Weap,n);
- Weap.insert(pos, w);
- }
- }
- // Удаление по номеру позиции
- void EraseFromList(list <Weapon*> &Weap, unsigned int n)
- {
- if ((Weap.size()>n)&&(n>=0))
- {
- list <Weapon*> :: iterator pos;
- pos = Pos(Weap,n);
- Weap.erase(pos);
- }
- }
- // Меню
- void Menu()
- {
- cout << "Курсовая работа по дисциплине \"Основы программирования\" \n"
- << "студента группы ИСТбд-11 Корнева А.Ю.\n"
- << "Связный список \"Оружие\" \n"
- << endl
- << "Меню:\n"
- << "1. Вывод списка на экран\n"
- << "2. Добавление элемента в список\n"
- << "3. Удаление элемента из списка\n"
- << "4. Поиск элемента в списке\n"
- << "5. Запись списка в файл\n"
- << "6. Чтение списка из файла\n"
- << "7. Очистка списка\n"
- << "8. Завершение работы\n"
- << endl
- << "Введите нужное число: ";
- }
- // Поиск элемента в списке по имени
- void SearchByName(list <Weapon*> &Weap, string name)
- {
- list <Weapon*> :: iterator pos;
- pos = Weap.begin();
- while (pos!=Weap.end())
- {
- Weapon *w;
- w = *pos;
- if (w->GetName() == "имя - " + name) cout << *w;
- pos++;
- }
- }
- // Ввод числа
- int ReadInt(int a)
- {
- again:
- cin >> a;
- cin.get();
- if (!cin)
- {
- cin.clear();
- cin.sync();
- cout << "ОШИБКА ввода данных (возможно неверный тип данных), попробуйте снова" << endl;
- goto again;
- }
- return a;
- }
- int main()
- {
- system("chcp 1251 > NUL");
- string action;
- list <Weapon*> Weap;
- int flag;
- while (flag!=-1)
- {
- flag=0;
- Menu();
- getline(cin,action,'\n');
- if (action=="1")
- {
- cout << "**********СПИСОК**********" << endl;
- PrintList(Weap);
- flag=1;
- }
- if (action=="2")
- {
- cout << "Введите название класса числом от 1 до 4 (меч(1)/копье(2)/лук(3)/рогатка(4))" << endl;
- string classes;
- getline(cin,classes,'\n');
- Weapon *w;
- int flag2=0;
- if ((classes=="меч")||(classes=="1")) {w = new Sword; flag2=1;}
- if ((classes=="копье")||(classes=="2")) {w = new Pike; flag2=1;}
- if ((classes=="лук")||(classes=="3")) {w = new Bow; flag2=1;}
- if ((classes=="рогатка")||(classes=="4")) {w = new Catapult; flag2=1;}
- if (flag2==0) {cout << "Такого класса нет" << endl; goto esc;}
- cout << "Теперь введите его имя любыми символами " << endl;
- string name;
- getline(cin,name,'\n');
- w->SetName(name);
- cout << "Теперь введите номер позиции в списке, куда надо добавить элемент (начиная с номера 0)" << endl;
- unsigned int num;
- num = ReadInt(num);
- if (Weap.size()>num) {InsertToList(Weap,num,w);}
- else {cout << "Размер списка не больше номера, элемент добавлен в конец списка" << endl; Weap.push_back(w);}
- cout << "Добавление завершено" << endl;
- flag=1;
- }
- if (action=="3")
- {
- cout << "Введите номер элемента в списке, который надо удалить (начиная с номера 0)" << endl;
- unsigned int num;
- num = ReadInt(num);
- if (Weap.size()>num) {EraseFromList(Weap,num); cout << "Удаление завершено" << endl;}
- else cout << "Размер списка не больше номера, удаление невозможно" << endl;
- flag=1;
- }
- if (action=="4")
- {
- cout << "В данной программе реализован поиск элемента по имени"
- << endl
- << "Введите имя оружия, которое надо найти в списке"
- << endl;
- string name;
- getline(cin,name,'\n');
- cout << "**********Найденное оружие**********" << endl;
- SearchByName(Weap,name);
- flag=1;
- }
- if (action=="5")
- {
- cout << "Введите имя файла" << endl;
- string filename;
- againfileread:
- getline(cin,filename,'\n');
- if (filename=="")
- {
- cout << "ОШИБКА! Попробуйте снова" << endl;
- goto againfileread;
- }
- FileWriteList(Weap,filename);
- cout << "Запись завершена" << endl;
- flag=1;
- }
- if (action=="6")
- {
- cout << "Введите имя файла" << endl;
- string filename;
- againfilewrite:
- getline(cin,filename,'\n');
- if (filename=="")
- {
- cout << "ОШИБКА! Попробуйте снова" << endl;
- goto againfilewrite;
- }
- FileReadList(Weap,filename);
- cout << "Чтение завершено" << endl;
- flag=1;
- }
- if (action=="7")
- {
- Weap.clear();
- cout << "Список очищен" << endl;
- flag=1;
- }
- if (action=="8")
- {
- cout << "Выход из программы" << endl;
- flag=-1;
- }
- if (flag==0)
- {
- cout << "Попробуйте снова" << endl;
- }
- esc:
- system("pause");
- system("cls");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement