Автор работы: Пользователь скрыл имя, 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
{
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<
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->
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->
WriteLine();
i++;
}
}
void MView::PrintMyMarks(list<Mark>
{
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->
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->
WriteLine();
i++;
}
}
void MView::PrintFilatelists(list<
{
for(list<Filatelist>::iterator it = filatelists->begin();it!= filatelists->end();it++)
{
WriteLine();
WriteLine("Name:"+it->GetName(
WriteLine("Country:"+it->
WriteLine("Contacts:"+it->
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(
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,
this->model.GetMyMarksList()->
this->model.GetAllMarksList()-
Mark mark2("Germany",244,1960,
this->model.GetAllMarksList()-
Mark mark3("Italy",234,1991,35000,"
this->model.GetAllMarksList()-
Mark mark4("France",1000,1970,2500,
this->model.GetAllMarksList()-
Mark mark5("Ukraine",60,1996,40000,
this->model.GetAllMarksList()-
this->model.GetMyMarksList()->
Mark mark6("Russia",200,1990,6000,"
this->model.GetAllMarksList()-
this->model.GetMyMarksList()->
Mark mark7("England",80,1992,70000,
this->model.GetAllMarksList()-
Mark mark8("USA",40,2008,250000,"
this->model.GetAllMarksList()-
this->model.GetMyMarksList()->
Filatelist fil1;
fil1.AddMark(mark1);
fil1.AddMark(mark4);
fil1.AddMark(mark8);
fil1.SetName("N.Ivanov");
fil1.SetCountry("Ukraine");
fil1.SetContact("ivanov@mail.
fil1.SetArtefact("1");
model.GetFilatelistsList()->
Filatelist fil2;
fil2.AddMark(mark3);
fil2.AddMark(mark7);
fil2.AddMark(mark5);
fil2.SetName("J.Shepard");
fil2.SetCountry("USA");
fil2.SetContact("shepard@mail.
fil2.SetArtefact("0");
model.GetFilatelistsList()->
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@
fil3.SetArtefact("1");
model.GetFilatelistsList()->
Filatelist fil4;
fil4.AddMark(mark6);
fil4.AddMark(mark8);
fil4.AddMark(mark3);
fil4.SetName("I.Kozlov");
fil4.SetCountry("Russia");
fil4.SetContact("kozlov@yahoo.
fil4.SetArtefact("0");
model.GetFilatelistsList()->
}
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(),"
{
view->WriteLine("Choose option or print 0 for exit");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"1")==
{
ShowMarks();
}
else
if(strcmp(input.c_str(),"2")==
{
ShowFilantelists();
}
else
if(strcmp(input.c_str(),"3")==
{
ShowMyMarks();
}
else
if(strcmp(input.c_str(),"4")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"5")==
{
AdminMenu();
}
if(strcmp(input.c_str(),"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(),"
{
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")==
{
ShowAdminMarksMenu();
}
else
if(strcmp(input.c_str(),"2")==
{
ShowAdminMyMarksMenu();
}
else
if(strcmp(input.c_str(),"3")==
{
ShowAdminFilatelistsMenu();
}
else
if(strcmp(input.c_str(),"0")==
{
exit(0);
}
else
if(strcmp(input.c_str(),"9")==
{
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(),"
{
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")==
{
exit(0);
}
else
if(strcmp(input.c_str(),"6")==
{
StartSystem();
}
else
if(strcmp(input.c_str(),"1")==
{
view->WriteLine("Enter the search country");
input = view->ReadLine();
SearchByCountry(input);
}
else
if(strcmp(input.c_str(),"2")==
{
view->WriteLine("Enter the search price");
input = view->ReadLine();
SearchByPrice(input);
}
else
if(strcmp(input.c_str(),"3")==
{
view->WriteLine("Enter the search year");
input = view->ReadLine();
SearchByYear(input);
}
else
if(strcmp(input.c_str(),"4")==
{
view->WriteLine("Enter the search count");
input = view->ReadLine();
SearchByCount(input);
}
else
if(strcmp(input.c_str(),"5")==
{
view->WriteLine("Enter the search feature");
input = view->ReadLine();
SearchByFeatures(input);
}
else
if(strcmp(input.c_str(),"9")==
{
SearchMenu();
}
}
void Controller::SearchByCountry(
{
list<Mark> filteredlist;
for(list<Mark>::iterator it = this->model.GetAllMarksList()-
{
if((strcmp(inp.c_str(),it->
}
view->WriteLine("Finded marks:");
this->view->PrintMarks(&
string input="";
while(!(strcmp(input.c_str(),"
{
view->WriteLine("Do you want find other mark (y)? n - main menu");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"y")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"n")==
{
StartSystem();
}
}
void Controller::SearchByPrice(
{
double t = atof(inp.c_str());
list<Mark> filteredlist;
for(list<Mark>::iterator it = this->model.GetAllMarksList()-
{
if((double)it->GetPrice()==t) filteredlist.push_back(*it);
}
view->WriteLine("Finded marks:");
this->view->PrintMarks(&
string input="";
while(!(strcmp(input.c_str(),"
{
view->WriteLine("Do you want find other mark (y)? n - main menu");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"y")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"n")==
{
StartSystem();
}
}
void Controller::SearchByYear(
{
int t = atoi(inp.c_str());
list<Mark> filteredlist;
for(list<Mark>::iterator it = this->model.GetAllMarksList()-
{
if((int)it->GetYear()==t) filteredlist.push_back(*it);
}
view->WriteLine("Finded marks:");
this->view->PrintMarks(&
string input="";
while(!(strcmp(input.c_str(),"
{
view->WriteLine("Do you want find other mark (y)? n - main menu");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"y")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"n")==
{
StartSystem();
}
}
void Controller::SearchByCount(
{
int t = atoi(inp.c_str());
list<Mark> filteredlist;
for(list<Mark>::iterator it = this->model.GetAllMarksList()-
{
if((int)it->GetCount()==t) filteredlist.push_back(*it);
}
view->WriteLine("Finded marks:");
this->view->PrintMarks(&
string input="";
while(!(strcmp(input.c_str(),"
{
view->WriteLine("Do you want find other mark (y)? n - main menu");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"y")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"n")==
{
StartSystem();
}
}
void Controller::SearchByFeatures(
{
list<Mark> filteredlist;
for(list<Mark>::iterator it = this->model.GetAllMarksList()-
{
if((strcmp(inp.c_str(),it->
}
view->WriteLine("Finded marks:");
this->view->PrintMarks(&
string input="";
while(!(strcmp(input.c_str(),"
{
view->WriteLine("Do you want find other mark (y)? n - main menu");
input = view->ReadLine();
}
if(strcmp(input.c_str(),"y")==
{
SearchMenu();
}
else
if(strcmp(input.c_str(),"n")==
{
StartSystem();