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

Автор работы: Пользователь скрыл имя, 28 Марта 2013 в 18:18, курсовая работа

Краткое описание

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

Содержание работы

Введение………………………………………………………………………...…3
1 Постановка задачи ................................................................ ......... 4
1,1 Исходные данные ........................................................................ 4
1,2 Описание предметной области ........................................................ 4
1,3 Создание объектной модели ........................................................... 5
1,4 Терминологический словарь ............... .......................................... 6
2 Описание программы ........................................................... ........... 7
2,1 Описание иерархии классов и объектов ............................................ 7
3 Руководство пользователя .................. ............................................. 9
Заключение……..……………..….…………...……..…………………….……..14
Перечень ссылок ....................................... ...................................... 15
ПРИЛОЖЕНИЕ ............................................. ................................. 16

Содержимое работы - 1 файл

OOP_Spravochnik_filatelista.docx

— 233.07 Кб (Скачать файл)

{

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++