Реализация справочника филателиста на примере консольного приложения на языке C++


Содержание

 
Введение………………………………………………………………………...…3

1 Постановка задачи………..…………………………….….……………………4   

1.1 Исходные данные …………………….………..……………………..……....

1.2 Описание предметной  области…………………………..…………………...4

1.3 Создание объектной  модели………………………………………..………...5

1.4 Терминологический словарь…………………………………………………6

2 Описание программы.……………………….…………………………..….…..7

2.1 Описание иерархии классов  и объектов…………………..…………………7

3 Руководство пользователя…………………………………………………...…9

Заключение……..……………..….…………...……..…………………….……..14

Перечень ссылок.…………….…….………………..…………………….……..15

ПРИЛОЖЕНИЕ ..……………………………..…..…………………….…….....16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

 

Работа  над данным курсовым проектом направлена на разработку заданной вариантом программы, используя при этом MVC схему проектирования, а также знания, полученные в процессе изучения курса по данной дисциплине.

  Разрабатываемый в данной программе справочник филателиста предназначен для коллекционирования марок, имея в своем распоряжении базу данных всех известных вам марок, а также базу данных марок своей собственной коллекции. Идет расчет на то, что в любой момент пользователь может править списки марок любой из этих баз данных. Для облегченного доступа к определенной марке будет разработана поисковая система. Также в программе будет представлен список других коллекционеров, включающий в себя их контактные данные и наличие редких марок. Имеется возможность редактировать данный список.

Основной  целью данной программы ставится облегчение поиска и систематизации марок, а также возможность иметь некоторую информацию о других филателистах.

 

 

 

 

 

 

 

 

 

  1. ПОСТАНОВКА ЗАДАЧИ

 

1.1 Исходные  данные

Справочник филателиста

Марки: страна, номинал, год выпуска, тираж, особенности. Коллекционеры: страна, имя, контактные данные, наличие редких марок в  коллекции.

Собственная коллекция.

 

    1. Описание  предметной области

Справочник филателиста представляет собой каталог, содержащий марки  и коллекции марок. Также он содержит контактные данные филателистов, владеющих  данными коллекциями. Каждая марка  имеет свои личные параметры, такие: страна, национальная стоимость, год  выпуска, тираж и индивидуальные особенность особенности. Имеются  в справочнике и данные по филателистам: страна, имя, контактные данные и наличие  редких марок в коллекции.

Справочник может выдавать информацию о марках в виде общего списка всех марок, в виде списка марок, содержащихся в вашей коллекции, а также  информацию об отдельной марке, при  помощи поисковой системы. Также  можно просмотреть список всех имеющихся  в данный момент филателистов в справочнике.

Доступ  к  справочнику открытый. Но имеется  два типа работы  с  ним. Первый тип - пользовательский, рассчитан  для  поиска и просмотра марок  и филателистов. Второй - администратора. Администратор имеет более широкий  доступ к  справочнику. Он также может  редактировать информацию в справочнике.

 

Работа со справочником начинается с главного меню, где есть несколько  вариантов для продолжения работы: при вводе «1» - пользователь перейдет к просмотру всех имеющихся в справочнике марок, при вводе «2» - к списку всех филателистов, «3» - к просмотру собственной коллекции марок,  «4» - переход к меню поиска, «5» - меню администрирования.

  Если пользователь выбрал опцию «4» -меню поиска, то его вниманию предложены следующие варианты поиска марок: при вводе «1» - пользователь перейдет к поиску марки по стране, «2» - поиск марки по цене, «3» - по году, «4» - поиск марки по тиражу.

При выборе любой  опции поиска пользователю будет  предложено ввести соответствующий  параметр поиска, после чего ему  будет представлен список найденных  марок по заданному параметру.

Если пользователь выбрал опцию  «5» - меню администрирования, то его  внимаю, предложены следующие варианты: «1» - меню редактирования общего списка марок, «2» - меню редактирования списка марок личной коллекции, «3» - меню редактирования списка филателистов. Следует отметить, что каждое меню администрирования  защищено паролем, то есть при выборе «1», «2», «3» в корневом меню администрирования  пользователю сначала придется ввести пароль, и только после он попадете в требуемое меню.

В каждом меню администрирования у пользователя есть возможности добавления либо удаления элементов соответствующих меню списков.

В каждом меню (кроме самого первого)  у пользователя есть возможность вернуться назад  при помощи ввода соответствующего символа, а также выйти из программы про помощи ввода «0».

 

 

 

 

 

 

 

1.3 Создание  объектной модели

Анализируя  постановку задач и предметную область, можно выделить набор возможных  классов:

Марка   Пользователь

Коллекционер  Система

Филателист  Поиск

Коллекция  Информация

Справочник  Элемент

Список

Из этого списка следует исключить  избыточные классы, нерелевантные классы, нечетко определенные классы, возможные  атрибуты, реализационные конструкции. После исключения всех лишних имен возможных классов получаем уточненный список классов, составляющих проектируемую  систему:

Марка

Филателист

 

    1.   Терминологический словарь

Марка - специальный знак почтовой оплаты,  выпускаемый и продаваемый национальными (и иными) почтовыми ведомствами и обладающий определённым номиналом. Также марка имеет свой тираж, страну, год и т.д.

Филателист - собиратель почтовых марок и других знаков почтовой оплаты, руководствующийся при создании своей коллекции принципами филателии.

 

 

 

 

 

  1. ОПИСАНИЕ ПРОГРАММЫ

 

2.1 Описание иерархии классов  и объектов

В ходе создания и анализа модели можно выделить следующие классы и интерфейсы:

Mark

Filatelist

Model

MView

Controller

На рисунке 2.1. представлена диаграмма этих классов.

Рисунок 2.1 - Диаграмма классов

 

 

 

 

 

 

Описание связей диаграммы:

У филателиста есть марки

Одна и та же марка  может быть у нескольких филателистов

Модель содержит списки марок и филателистов

В контроллер передаются данные из модели

Контроллер управляет моделью и представлением

Filatelist – класс, описывающий коллекционера. Ему присущи такие поля:

марки, страна, имя, контактные данные, наличие  редких марок в коллекции.

      Mark – класс, описывающий марку. Ему присущи такие поля: страна, цена, год, тиражи и ее индивидуальные особенности.

MView – класс, который отвечает за отображение информации (визуализацию).

       Controller - обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции. Содержит в себе указатель на представление (View).

      Model – класс отвечающий за работу со списками марок (list<Mark>* mymarks, list<Mark>* allMarks) и филателистов (list<Filatelist>* filatelists). Содержит в себе методы работы с ними.

 

 

 

 

 

 

 

 

 

 

 

  1. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

 

Приложение запускается при  помощи файла Sazonov.exe.

После запуска пользователь видит  корневою меню программы (рисунок 3.1). Пользователь представлено несколько вариантов  для продолжения работы с программой, а именно:

При вводе:  «1» пользователю предложено просмотреть список всех марок в  справочнике;

«2» - просмотр списка филателистов;

«3» - просмотр марок собственной  коллекции;

«4» - меню поиска марки;

«5» - меню администрирования.

Рисунок 3.1 – Корневое меню

При вводе «1» пользователь видит  список всех марок в справочнике (рисунок 3.2), при вводе «2», «3»  он видит аналогичные рисунку 3.2 списки, но уже филателистов и элементов  собственной коллекции соответственно

.

Рисунок 3.2 - Список всех марок в  справочнике

При вводе «4» - пользователь попадет  в меню поиска (рисунок 3.3).

Рисунок 3.3 - Меню поиска

Данное меню включает в себя поиск  марки по заданному параметру. Есть пять параметров, по которым пользователь может искать марку, а именно: поиск по стране, по цене, по году, по тиражу и по индивидуальным особенностям марки. При вводе (рисунок 3.4)  в меню поиска «1», «2», «3», «4», «5» - пользователь переходит к вводу данных для поиска (в данном случае к вводу страны «1»).

Рисунок 3.4- Поиск марки  по стране

 

После ввода критерия поиска, пользователю будет выведен список найденных  марок по заданному параметру (рисунок 3.5).  А также будет предложено продолжить поиск (ввод «y» и переход к меню поиска), либо ввод «n» и выход в главное (корневое) меню.

Рисунок 3.5 - Список найденных по заданному параметру, в данному случае по стране, марок

Поиск по 4 другим параметрам осуществляется по алгоритму, аналогичному поиску по стране.

При вводе  в главном меню программы «5»  пользователь попадет в меню администрирования (рисунок 3.6).

Рисунок 3.6 –  Меню администрирования

 

В данном меню предлагается ввести «1», «2» или  «3» в зависимости от того, какие  данные в программе требуется  изменить. В частности:

при вводе «1» - пользователь перейдет в меню администрирования  списка   всех марок в справочнике;

«2» - меню администрирования  списка марок собственной коллекции;

«3» - меню администрирования  списка филателистов.

Так как работа в каждом из этих трех меню проходит по аналогичному алгоритму, рассмотрим работу в меню администрирования  списка всех марок. Каждое меню администрирования  защищено паролем, как это видно  на рисунке 3.7.

Рисунок 3.7 –  Проверка пароля для входа в меню администрирования списка всех марок

После ввода  пароля пользователь попадает уже в  само меню (рисунок 3.8), где ему предложены 2 опции – добавление либо удаление элементов из списка.

Рисунок 3.8 - Меню администрирования списка всех марок

Добавление  марки осуществляется при помощи клавиатурного ввода ее полей, после  ввода «1» в данном меню (рисунок 3.9)

Рисунок 3.9 –  Добавление новой марки в список

Операция  удаления элемента производиться по его id (рисунок 3.10), которое пользователь может узнать, просмотрев список, который появиться при выборе опции удаления.

Рисунок 3.10 –  Удаление марки из списка

Во всех меню есть возможность вернуться в  предыдущее меню, для этого нужно  ввести «9» в любом меню. Для выхода из программы во всех меню предусмотрен ввод «0».

ЗАКЛЮЧЕНИЕ

 

В ходе выполнения данного курсового проекта было проведено проектирования справочника  филателиста. Предметная область данного проекты была разделена на классы и связи между ними. Сама программа была построена при помощи MVC паттерна.

Стоит отметить, что MVC архитектура программы и разбиение на классы и связи между ними предметной области, значительно облегчили понимание и написание самой программы.

В результате была выполнена программа – справочник филателиста,

которая выступает в своем роде некоторой базой данных марок и коллекционеров. В программе реализованы такие операции над списками марок и филателистов как удаление и добавление элементов, просмотр списка всех марок и филателистов и просмотр списка марок собственной коллекции. Также в программе реализована система поиска марки по заданному параметру. Программа имеет 2 уровня доступа: пользовательский (включает в себя просмотр списков и параметрический поиск) и администраторский (удаление или добавление компонентов в списки)

 

 

ПЕРЕЧЕНЬ  ССЫЛОК

 

1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами на С++/ Г. Буч- М.: БИНОМ , 2000.- 560с.

2. Айра П. Объектно-ориентированное программирование на C++/ П. Айра - М.: БИНОМ ,2001. – 464с.

3. Страуструп Б. Язык программирования С++/ Б. Страуструп. - М.: Радио и связь, 1995. – 353с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПРИЛОЖЕНИЕ 

Листинг программы

 

Файл Mark.h содержащий описание класса Mark:

#include <string>

using namespace std;

class Mark

{

string country;

double price;

int year;

long count;

string features;

public:

Mark(string,double,int,long,string);

Mark();

string GetCountry();

    double GetPrice();

int GetYear();

string GetFeatures();

long GetCount();

void SetCountry(string);

void SetYear(int);

void SetPrice(double);

void SetCount(long);

void SetFeature(string);

bool operator==(const Mark& mark) const;

~Mark(void);

};

 

Файл Mark.cpp содержащий реализацию класса Mark:

#include "StdAfx.h"

#include "Mark.h"

 

 

Mark::Mark(void)

{

}

Mark::Mark(string c,double price,int year,long count,string feat)

{

this->country = c;

this->price = price;

this->year = year;

this->count = count;

this->features = feat;

}

 

string Mark::GetCountry()

{

return this->country;

}

double Mark::GetPrice()

{

return this->price;

}

int Mark::GetYear()

{

return this->year;

}

string Mark::GetFeatures()

{

return this->features;

}

long Mark::GetCount()

{

return this->count;

}

void Mark::SetCountry(string s)

{

this->country = s;

}

void Mark::SetYear(int y)

{

this->year = y;

}

void Mark::SetPrice(double p)

{

this->price = p;

}

void Mark::SetCount(long c)

{

this->count = c;

}

void Mark::SetFeature(string f)

{

this->features = f;

}

 

bool Mark::operator==(const Mark& mark) const

{

if(this->count == mark.count && this->country == mark.country && this->features == mark.features && this->price == mark.price && this->year == mark.year)

{

return true;

}

return false;

}

 

Mark::~Mark(void)

{

}

 

Файл Filatelist.h содержащий описание класса Filatelist:

#include "Mark.h"

#include <list>

class Filatelist

{

list<Mark> marks;

string country;

string name;

string contacts;

bool artefacts;

public:

Filatelist(void);

void AddMark(Mark& mark);

void RemoveMark(Mark& mark);

string GetName();

string GetCountry();

string GetContact();

bool IsArtefact();

void SetName(string name);

void SetContact(string contact);

void SetCountry(string country);

void SetArtefact(bool artefact);

list<Mark>* GetMarks();

bool operator==(const Filatelist& Filatelist) const;

~Filatelist(void);

};

 

Файл Filatelist.cpp содержащий реализацию класса Filatelist:

#include "StdAfx.h"

#include "Filatelist.h"

 

 

Filatelist::Filatelist(void)

{

}

 

void Filatelist::AddMark(Mark& mark)

{

this->marks.push_back(mark);

}

void Filatelist::RemoveMark(Mark& mark)

{

this->marks.remove(mark);

}

string Filatelist::GetName()

{

return this->name;

}

string Filatelist::GetCountry()

{

return this->country;

}

string Filatelist::GetContact()

{

return this->contacts;

}

bool Filatelist::IsArtefact()

{

return this->artefacts;

}

void Filatelist::SetName(string name)

{

this->name = name;

}

void Filatelist::SetContact(string contact)

{

this->contacts = contact;

}

void Filatelist::SetCountry(string country)

{

this->country = country;

}

void Filatelist::SetArtefact(bool artefact)

{

this->artefacts = artefact;

}

list<Mark>* Filatelist::GetMarks()

{

return &marks;

}

 

bool Filatelist::operator==(const Filatelist& filatelist) const

{

if(this->name == filatelist.name) return true;

return false;

}

 

Filatelist::~Filatelist(void)

{

}

 

Файл MView.h содержащий описание класса MView:

#include <string>

using namespace std;

#include "Filatelist.h"

class MView

{

public:

MView(void);

void PrintMyMarks(list<Mark>* mymarks);

void PrintFilatelists(list<Filatelist>* filat);

void PrintMarks(list<Mark>* marks);

string Read();

string ReadLine();

void Write(string str);

void WriteLine(string str);

void WriteLine();

void ShowError(string error);

~MView(void);

};

 

 

Файл MView.cpp содержащий реализацию класса MView:

#include "StdAfx.h"

#include "MView.h"

#include <iostream>

#include <iomanip>

#include <sstream>

MView::MView(void)

{

}

 

string MView::Read()

{

string tmp;

cin>>tmp;

return tmp;

}

string MView::ReadLine()

{

string tmp;

cin>>tmp;

cout<<endl;

return tmp;

}

void MView::Write(string str)

{

cout<<str;

}

void MView::WriteLine(string str)

{

cout<<str<<endl;

}

void MView::WriteLine()

{

cout<<endl;

}

 

void MView::ShowError(string error)

{

cout<<"Error:"<<error;

}

 

MView::~MView(void)

{

}

 

void MView::PrintMarks(list<Mark>* marks)

{

std::ostringstream stream;

int i = 1;

for(list<Mark>::iterator it = marks->begin();it!= marks->end();it++)

{

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << i;

WriteLine("Id:"+stream.str());

stream.str(std::string());

WriteLine("Country:"+it->GetCountry());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetPrice();

WriteLine("Price:"+stream.str());

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetYear();

WriteLine("Year:"+stream.str());

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetCount();

WriteLine("Count:"+stream.str());

WriteLine("Features:"+it->GetFeatures());

WriteLine();

i++;

}

}

 

void MView::PrintMyMarks(list<Mark>* mymarks)

{

std::ostringstream stream;

int i = 1;

for(list<Mark>::iterator it = mymarks->begin();it!= mymarks->end();it++)

{

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << i;

WriteLine("Id:"+stream.str());

stream.str(std::string());

WriteLine("Country:"+it->GetCountry());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetPrice();

WriteLine("Price:"+stream.str());

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetYear();

WriteLine("Year:"+stream.str());

stream.str(std::string());

stream << std::fixed << std::showpoint << std::setprecision(2) << it->GetCount();

WriteLine("Count:"+stream.str());

WriteLine("Features:"+it->GetFeatures());

WriteLine();

i++;

}

}

 

 

 

 

 

void MView::PrintFilatelists(list<Filatelist>* filatelists)

{

for(list<Filatelist>::iterator it = filatelists->begin();it!= filatelists->end();it++)

{

WriteLine();

WriteLine("Name:"+it->GetName());

WriteLine("Country:"+it->GetCountry());

WriteLine("Contacts:"+it->GetContact());

WriteLine("Have artefacts:"+it->IsArtefact());

WriteLine(it->GetName()+" collection:");

PrintMarks(it->GetMarks());

WriteLine();

}

}

 

 

 

 

 

Файл Model.h содержащий описание класса Model:

#include "Filatelist.h"

class Model

{

list<Mark>* mymarks;

list<Filatelist>* filatelists;

list<Mark>* allMarks;

public:

Model(void);

list<Mark>* GetMyMarksList();

list<Filatelist>* GetFilatelistsList();

list<Mark>* GetAllMarksList();

~Model(void);

};

 

 

Файл Model.cpp содержащий реализацию класса Model:

#include "StdAfx.h"

#include "Model.h"

 

 

Model::Model(void)

{

this->allMarks = new list<Mark>();

this->filatelists = new list<Filatelist>();

this->mymarks = new list<Mark>();

}

 

list<Mark>* Model::GetMyMarksList()

{

return mymarks;

}

list<Filatelist>* Model::GetFilatelistsList()

{

return filatelists;

}

list<Mark>* Model::GetAllMarksList()

{

return allMarks;

}

 

 

Model::~Model(void)

{

}

 

 

Файл Controller.h содержащий описание класса Controller:

#include "Model.h"

#include "MView.h"

class Controller

{

MView* view;

Model model;

 

Mark Controller::EnterMark();

Filatelist Controller::EnterFilatelist();

void Controller::ShowMarks();

void SearchMenu();

void AdminMenu();

void SearchByCountry(string input);

void SearchByPrice(string input);

void SearchByYear(string input);

void SearchByCount(string input);

void SearchByFeatures(string input);

void Controller::ShowFilantelists();

void Controller::ShowMyMarks();

void ShowAdminMarksMenu();

void ShowAdminMyMarksMenu();

void ShowAdminFilatelistsMenu();

void AddFilatelist();

void RemoveFilatelist();

void AddMark();

void RemoveMark();

void AddMyMark();

void RemoveMyMark();

void Controller::VivodFail(Mark newMark);

void Controller::VvodFail();

void Controller::VivodFailf(Filatelist newFilatelist);

void Controller::VvodFailf();

public:

Controller(MView* view);

void StartSystem();

~Controller(void);

};

Файл Controller.cpp содержащий реализацию класса Controller:

#include <fstream.h>

#include <iostream.h>

#include "StdAfx.h"

#include "Controller.h"

#include <iomanip>

#include <sstream>

#include <cstdlib>

Controller::Controller(MView* view)

{

this->view = view;

Mark mark1("Ukraine",154.4,1980,25000," T. G.Shevchenko");

this->model.GetMyMarksList()->push_back(mark1);

this->model.GetAllMarksList()->push_back(mark1);

Mark mark2("Germany",244,1960,25000,"A. Gitler");

this->model.GetAllMarksList()->push_back(mark2);

Mark mark3("Italy",234,1991,35000,"Pizza");

this->model.GetAllMarksList()->push_back(mark3);

Mark mark4("France",1000,1970,2500,"Eiffel Tower");

this->model.GetAllMarksList()->push_back(mark4);

Mark mark5("Ukraine",60,1996,40000,"Kiev");

this->model.GetAllMarksList()->push_back(mark5);

this->model.GetMyMarksList()->push_back(mark5);

Mark mark6("Russia",200,1990,6000,"Moscow");

this->model.GetAllMarksList()->push_back(mark6);

this->model.GetMyMarksList()->push_back(mark6);

Mark mark7("England",80,1992,70000,"Stonehenge");

this->model.GetAllMarksList()->push_back(mark7);

Mark mark8("USA",40,2008,250000,"Liberty Island");

this->model.GetAllMarksList()->push_back(mark8);

this->model.GetMyMarksList()->push_back(mark8);

Filatelist fil1;

fil1.AddMark(mark1);

fil1.AddMark(mark4);

fil1.AddMark(mark8);

fil1.SetName("N.Ivanov");

fil1.SetCountry("Ukraine");

fil1.SetContact("ivanov@mail.com");

fil1.SetArtefact("1");

model.GetFilatelistsList()->push_back(fil1);

Filatelist fil2;

fil2.AddMark(mark3);

fil2.AddMark(mark7);

fil2.AddMark(mark5);

fil2.SetName("J.Shepard");

fil2.SetCountry("USA");

fil2.SetContact("shepard@mail.com");

fil2.SetArtefact("0");

model.GetFilatelistsList()->push_back(fil2);

Filatelist fil3;

fil3.AddMark(mark2);

fil3.AddMark(mark6);

fil3.AddMark(mark1);

fil3.AddMark(mark5);

fil3.AddMark(mark4);

fil3.SetName("G.Shulc");

fil3.SetCountry("Germany");

fil3.SetContact("g_shulc@gmail.com");

fil3.SetArtefact("1");

model.GetFilatelistsList()->push_back(fil3);

Filatelist fil4;

fil4.AddMark(mark6);

fil4.AddMark(mark8);

fil4.AddMark(mark3);

fil4.SetName("I.Kozlov");

fil4.SetCountry("Russia");

fil4.SetContact("kozlov@yahoo.com");

fil4.SetArtefact("0");

model.GetFilatelistsList()->push_back(fil4);

 

}

 

void Controller::StartSystem()

{

view->WriteLine();

view->WriteLine("Welcome filatelist!Please choose option!");

view->WriteLine("1 - List of marks");

view->WriteLine("2 - List of filatelists");

view->WriteLine("3 - List of my marks");

view->WriteLine("4 - Search menu");

view->WriteLine("5 - Admin menu");

string input="a";

 

while(!(strcmp(input.c_str(),"1")==0 || strcmp(input.c_str(),"2")==0  || strcmp(input.c_str(),"3")==0  || strcmp(input.c_str(),"4")==0 || strcmp(input.c_str(),"5")==0 || strcmp(input.c_str(),"0")==0))

{

view->WriteLine("Choose option or print 0 for exit");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"1")==0)

{

ShowMarks();

}

else

if(strcmp(input.c_str(),"2")==0)

{

ShowFilantelists();

}

else

if(strcmp(input.c_str(),"3")==0)

{

ShowMyMarks();

}

else

if(strcmp(input.c_str(),"4")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"5")==0)

{

AdminMenu();

}

if(strcmp(input.c_str(),"0")==0)

{

exit(0);

}

}

 

void Controller::AdminMenu()

{

view->WriteLine();

view->WriteLine("Welcome to admin menu");

view->WriteLine("1 - All marks admin menu");

view->WriteLine("2 - My marks admin menu");

view->WriteLine("3 - Filatelists admin menu");

string input="a";

while(!(strcmp(input.c_str(),"1")==0 || strcmp(input.c_str(),"2")==0  || strcmp(input.c_str(),"3")==0 || strcmp(input.c_str(),"0")==0| strcmp(input.c_str(),"9")==0))

{

view->WriteLine("Choose option or print 0 for exit, or 9 for back to the previous menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"1")==0)

{

ShowAdminMarksMenu();

}

else

if(strcmp(input.c_str(),"2")==0)

{

ShowAdminMyMarksMenu();

}

else

if(strcmp(input.c_str(),"3")==0)

{

ShowAdminFilatelistsMenu();

}

else

if(strcmp(input.c_str(),"0")==0)

{

exit(0);

}

else

if(strcmp(input.c_str(),"9")==0)

{

StartSystem();

}

}   

 

 

 

 

void Controller::SearchMenu()

{

view->WriteLine();

view->WriteLine("Welcome to search menu");

view->WriteLine("1 - Search by country");

view->WriteLine("2 - Search by price");

view->WriteLine("3 - Search by year");

view->WriteLine("4 - Search by count");

view->WriteLine("5 - Search by features");

string input="a";

while(!(strcmp(input.c_str(),"1")==0 || strcmp(input.c_str(),"2")==0  || strcmp(input.c_str(),"3")==0 || strcmp(input.c_str(),"4")==0 ||strcmp(input.c_str(),"5")==0 || strcmp(input.c_str(),"9")==0  || strcmp(input.c_str(),"0")==0))

{

view->WriteLine("Choose option or print 0 for exit, or 9 for back to the previous menu");

input = view->ReadLine();

}

if(strcmp(input.c_str(),"0")==0)

{

exit(0);

}

else

if(strcmp(input.c_str(),"6")==0)

{

StartSystem();

}

else

if(strcmp(input.c_str(),"1")==0)

{

view->WriteLine("Enter the search country");

input = view->ReadLine();

SearchByCountry(input);

}

else

if(strcmp(input.c_str(),"2")==0)

{

view->WriteLine("Enter the search price");

    input = view->ReadLine();

SearchByPrice(input);

}

else

if(strcmp(input.c_str(),"3")==0)

{

view->WriteLine("Enter the search year");

    input = view->ReadLine();

SearchByYear(input);

 

}

else

if(strcmp(input.c_str(),"4")==0)

{

view->WriteLine("Enter the search count");

    input = view->ReadLine();

SearchByCount(input);

 

}

else

if(strcmp(input.c_str(),"5")==0)

{

view->WriteLine("Enter the search feature");

    input = view->ReadLine();

SearchByFeatures(input);

 

}

else

if(strcmp(input.c_str(),"9")==0)

{

SearchMenu();

}

}

 

 

void Controller::SearchByCountry(string inp)

{

list<Mark> filteredlist;

for(list<Mark>::iterator it = this->model.GetAllMarksList()->begin();it!= this->model.GetAllMarksList()->end();it++)

{

if((strcmp(inp.c_str(),it->GetCountry().c_str())==0)) filteredlist.push_back(*it);

}

 

view->WriteLine("Finded marks:");

this->view->PrintMarks(&filteredlist);

string input="";

while(!(strcmp(input.c_str(),"y")==0||strcmp(input.c_str(),"n")==0))

{

view->WriteLine("Do you want find other mark (y)? n - main menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"y")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"n")==0)

{

StartSystem();

}

}

 

 

void Controller::SearchByPrice(string inp)

{

double t = atof(inp.c_str());

list<Mark> filteredlist;

for(list<Mark>::iterator it = this->model.GetAllMarksList()->begin();it!= this->model.GetAllMarksList()->end();it++)

{

if((double)it->GetPrice()==t) filteredlist.push_back(*it);

}

 

view->WriteLine("Finded marks:");

this->view->PrintMarks(&filteredlist);

string input="";

while(!(strcmp(input.c_str(),"y")==0||strcmp(input.c_str(),"n")==0))

{

view->WriteLine("Do you want find other mark (y)? n - main menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"y")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"n")==0)

{

StartSystem();

}

}

 

void Controller::SearchByYear(string inp)

{

int t = atoi(inp.c_str());

list<Mark> filteredlist;

for(list<Mark>::iterator it = this->model.GetAllMarksList()->begin();it!= this->model.GetAllMarksList()->end();it++)

{

if((int)it->GetYear()==t) filteredlist.push_back(*it);

}

 

view->WriteLine("Finded marks:");

this->view->PrintMarks(&filteredlist);

string input="";

while(!(strcmp(input.c_str(),"y")==0||strcmp(input.c_str(),"n")==0))

{

view->WriteLine("Do you want find other mark (y)? n - main menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"y")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"n")==0)

{

StartSystem();

}

}

 

void Controller::SearchByCount(string inp)

{

int t = atoi(inp.c_str());

list<Mark> filteredlist;

for(list<Mark>::iterator it = this->model.GetAllMarksList()->begin();it!= this->model.GetAllMarksList()->end();it++)

{

if((int)it->GetCount()==t) filteredlist.push_back(*it);

}

 

view->WriteLine("Finded marks:");

this->view->PrintMarks(&filteredlist);

string input="";

while(!(strcmp(input.c_str(),"y")==0||strcmp(input.c_str(),"n")==0))

{

view->WriteLine("Do you want find other mark (y)? n - main menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"y")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"n")==0)

{

StartSystem();

}

}

 

void Controller::SearchByFeatures(string inp)

{

list<Mark> filteredlist;

for(list<Mark>::iterator it = this->model.GetAllMarksList()->begin();it!= this->model.GetAllMarksList()->end();it++)

{

if((strcmp(inp.c_str(),it->GetFeatures().c_str())==0)) filteredlist.push_back(*it);

}

 

view->WriteLine("Finded marks:");

this->view->PrintMarks(&filteredlist);

string input="";

while(!(strcmp(input.c_str(),"y")==0||strcmp(input.c_str(),"n")==0))

{

view->WriteLine("Do you want find other mark (y)? n - main menu");

input = view->ReadLine();

}

 

if(strcmp(input.c_str(),"y")==0)

{

SearchMenu();

}

else

if(strcmp(input.c_str(),"n")==0)

{

StartSystem();

Реализация справочника филателиста на примере консольного приложения на языке C++