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

№ п/п Наименование файла Назначение
1 POLLY_LAB_№3.cpp Содержит описание главной функции программы
2 Console_interface.h Содержит описание функций, реализующих интерфейс взаимодействия с пользователем
3 Date.h Содержит описание интерфейса класса Date, предназначенного для представления календарных дат и манипуляций с датами.
4 Date.cpp Содержит реализацию методов Date.
5 Time.h Содержит описание интерфейса класса Time, предназначенного для представления времени и манипуляций с ним.
6 Time.cpp Содержит реализацию методов Time
7 DateTime.h Содержит описание интерфейса класса DateTime, предназначенного для представления даты и времени и манипуляций с ними.
8 DateTime.cpp Содержит реализацию методов DateTime
9 Tlist.h Содержит описание класса шаблонного списка Tlist, предназначенного для представления списка объектов.
10 Appointment.h Содержит описание интерфейса класса Appointment
11 Appointment.cpp Содержит реализацию методов класса Appointment
12 Suitor.h Содержит описание интерфейса класса Suitor
13 Suitor.cpp Содержит реализацию методов класса Suitor

По сравнению с примером кода реализации задачи, приведенным в лабораторной работе №2, в данном проекте для представления и обработки данных в формате даты и времени вместо строкового типа данных используются специальные классы Date, Time и DateTime. Код реализации данных классов приведен в разделе дополнительных примеров (п.6). Для представления спика свиданий используется класс связного шаблонного списка TList.


//-------------------------------------------------------------------------------------------

// файл Appointment.h с определением интерфейса класса Appointment

//-------------------------------------------------------------------------------------------

 

#pragma once // защита от неоднократного включения заголовочного файла

 

#include "DateTime.h" // включение файла с датами

 

#include <string>

#include <sstream>

#include <iomanip>

 

using namespace std;

 

class Appointment

{

public:

           Appointment();

           Appointment(const DateTime& dateTime, Time duration,

                                                                                                         int mark);

           Appointment(const DateTime& dateTime, Time duration);

           ~Appointment();

 

           const DateTime& GetDateAndTime() const;

           Time GetDuration() const;

           int GetMark() const;

 

           void SetDateAndTime(const DateTime& dateTime);

           void SetDuration(Time duration);

           void SetMark(int mark);

 

           wstring ToString(bool IsFull = false);

 

private:

           // поле формата даты и времени

           DateTime _dateAndTime;

           // длительность свидания представляется в формате времени

           Time _duration;

           int _mark;

};


//-------------------------------------------------------------------------------------------

// файл Appointment.cpp с реализацией методов класса Appointment

//-------------------------------------------------------------------------------------------

 

#include "StdAfx.h"

#include "Appointment.h"

 

//-------------------------------------------------------------------------------------------

// Так как конструктор копирования не реализуется явно, при создании

// нового объекта на основе другого объекта, объявленного ранее, будет

// происходить присваивание значений соответстующих полей одного

// объекта другому. Так как все поля данного класса по времени

// создания являются статическими, такое копирование

// не вызовет никаких ошибок.

 

// конструктор по умолчанию

Appointment::Appointment(): _dateAndTime(), _duration(), _mark()

{}

 

// конструктор инициализации

Appointment::Appointment(const DateTime &dateTime, Time duration,

                                                          int mark): _dateAndTime(dateTime),

                                                                                         _duration(duration),

                                                                                         _mark()

{

           if (mark>=0 && mark<=5) _mark = mark;

}

 

// конструктор инициализации

Appointment::Appointment(const DateTime &dateTime, Time duration):

                                                                         _dateAndTime(dateTime),

                                                                         _duration(duration)

{}

 

// деструктор

Appointment::~Appointment()

{

           _dateAndTime.~DateTime();

           _duration.~Time();

}

 

const DateTime& Appointment::GetDateAndTime() const

{         return _dateAndTime; }

 

Time Appointment::GetDuration() const

{         return _duration; }

 

int Appointment::GetMark() const

{         return _mark; }

 

void Appointment::SetDateAndTime(const DateTime &dateTime)

{         _dateAndTime = dateTime; }

 

void Appointment::SetDuration(Time duration)

{         _duration = duration;}

 

void Appointment::SetMark(int mark)

{

           if (mark>=0 && mark<=5) _mark = mark;

}

 

wstring Appointment::ToString(bool IsFull)

{

           wostringstream os;

 

           if (!IsFull)

           {

                          os << setw(12) << _dateAndTime.GetDate().ToString() <<

                           setw(10) << _dateAndTime.GetTime().ToString()<<

                          setw(10)<<_duration.ToString()<<setw(8)<<_mark;

           }

           else

           {

                          os<<L"Дата и время проведения свидания..."<<endl;

                          os<<L"Дата: "<<_dateAndTime.GetDate().ToString()<<endl;

                          os<<L"Время: "<<_dateAndTime.GetTime().ToString()<<endl;

                          os<<L"Продолжительность: "<<

                                                          GetDuration().ToString()<<endl;

                          os<<L"Выставленная оценка: "<<GetMark()<<endl;

           }

 

           if (os) return os.str();

 

           return wstring();

}


//-------------------------------------------------------------------------------------------

// файл Suitor.h с описание интерфейса класса Suitor

//-------------------------------------------------------------------------------------------

 

#pragma once

 

#include <string>

#include <sstream>

#include <iomanip>

 

#include "Appointment.h"

#include "DateTime.h"

#include "TList.h"

 

using namespace std; // включение стандартного пространтва имен

 

class Suitor // описание класса Suitor (поклонник)

{

public: // открытые методы и поля класса

 

//-------------------------------------------------------------------------------------------

 

           Suitor();

           Suitor(wstring surname, wstring name, int height, int weight,  

                                                                          wstring phoneNumber);

           Suitor(const Suitor& suitor);

 

           ~Suitor(); // деструктор

 

           // перегрузка оператора присваивания

           Suitor& operator = (const Suitor& suitor);

 

//-------------------------------------------------------------------------------------------

 

           // методы чтения значений закрытых полей класса

           int GetId() const;

           wstring GetSurname() const;

           wstring GetName() const;

           int GetHeight() const;

           int GetWeight() const;

           wstring GetPhoneNumber() const;

           // методы записи значений закрытых полей класса

           void SetSurname(wstring surname);

           void SetName(wstring name);

           void SetHeight(int height);

           void SetWeight(int weight);

           void SetPhoneNumber(wstring phoneNumber);

 

//-------------------------------------------------------------------------------------------

// работа со списком свиданий

 

           void AddAppointment(const Appointment& app);

           bool DeleteAppointment(const DateTime& dateTime);

           int GetAppointmentsCount() const;

           Appointment FindAppointment(const DateTime& dateTime) const;

           Appointment FindAppointment(int idx) const;

 

//-------------------------------------------------------------------------------------------

 

           static const int MAX_WEIGHT = 500;

           static const int MAX_HEIGHT = 300;

           wstring ToString(bool IsFull = false) const;

 

//-------------------------------------------------------------------------------------------

 

private: // закрытые методы и поля

           int _getUniqueId();

           int _id; // уникальный идентификационный номер поклонника

 

           wstring _surname; // фамилия поклонника

           wstring _name; // имя поклонника

           int _height; // рост поклонника

           int _weight; // вес поклонника

           wstring _phoneNumber; // номер телефона

 

           // список свиданий

           TList<Appointment> _appointmentList;

};


//-------------------------------------------------------------------------------------------

// файл Suitor.cpp с реализацией методов класса Suitor

//-------------------------------------------------------------------------------------------

 

#include "StdAfx.h"

#include "Suitor.h"

 

int Suitor::_getUniqueId()

{

           static int Id = 0;

           return Id++;

}

 

// конструктор по умолчанию

// поле _id инициализируется явно генерируемым значением;

// остальные поля инициализируются автоматически значениями,

// принятыми по умолчанию для системных типов данных string и int

Suitor::Suitor()

{

           _id = _getUniqueId();

}

 

// явно вызываются конструкторы инициализации

// системного типа данных wstring;

// для пользовательского типа TList явно вызывается

// конструктор по умолчанию

Suitor::Suitor(wstring surname, wstring name, int height, int weight,

                          wstring phoneNumber): _surname(surname),

                                                                _name(name),

                                                                    _phoneNumber(phoneNumber),

                                                                _appointmentList()

{

           // поле _id явно инициализируется генерируемым значением

           _id = _getUniqueId();

 

           if (height>0 && height<MAX_HEIGHT) _height = height;

           else _height = 0;

 

           if (weight>0 && weight<MAX_WEIGHT) _weight = weight;

           else _weight = 0;

}

// конструктор копирования

Suitor::Suitor(const Suitor& suitor): _id(suitor._id)

                                                          _surname(suitor._surname),

                                                          _name(suitor._name),

                                                          _phoneNumber(suitor._phoneNumber),

                                                          _height(suitor._height),

                                                          _weight(suitor._weight),

                                          _appointmentList(suitor._appointmentList)

                          // чтобы создать в памяти копию списка свиданий,

                          // для соответствующего поля явно вызывается

                          // конструктор копирования класса TList

{}

 

Suitor::~Suitor() // деструктор

{

           //в данном случае деструктор можно не реализовывать;

           // если не вызывать деструкторы для полей класса явно, при

           // уничтожении объекта они будут вызываться автоматически

           _surname.~basic_string();

           _name.~basic_string();

           _phoneNumber.~basic_string();

           _appointmentList.~TList();

}

 

// так как операторы присвавания системных типов, а также

// пользовательского класса TList корректно создают копии

// соответсвующих полей, нет необходимости вызывать деструктор

// (по сравнению с реализацие класса Suitor в лабораторной работе №2)

Suitor& Suitor::operator =(const Suitor &suitor)

{

           _surname = suitor._surname;

           _name = suitor._name;

           _phoneNumber = suitor._phoneNumber;

           _height = suitor._height;

           _weight = suitor._weight;

           _id = suitor._id;

           _appointmentList = suitor._appointmentList;

 

           return *this;

}

 

// методы чтения-записи значений закрытых полей класса

 

int Suitor::GetId() const

{return _id;}

 

wstring Suitor::GetSurname() const

{return _surname;}

 

wstring Suitor::GetName() const

{return _name;}

 

int Suitor::GetHeight() const

{return _height;}

 

int Suitor::GetWeight() const

{return _weight;}

 

wstring Suitor::GetPhoneNumber() const

{return _phoneNumber;}

 

void Suitor::SetSurname(wstring surname)

{_surname = surname;}

 

void Suitor::SetName(wstring name)

{_name = name;}

 

void Suitor::SetHeight(int height)

{

           if (height>0 && height<MAX_HEIGHT) _height = height;

}

 

void Suitor::SetWeight(int weight)

{

           if (weight>0 && weight<MAX_WEIGHT) _weight = weight;

}

 

void Suitor::SetPhoneNumber(wstring phoneNumber)

{

           _phoneNumber = phoneNumber;

}

 

//-------------------------------------------------------------------------------------------

// работа со списком свиданий

 

// реализация метода добавления нового свидания свелась к вызову

// метода добавления нового элемента в шаблонный связный список

 

void Suitor::AddAppointment(const Appointment &app)

{

           _appointmentList.Add(app);

}

 

// метод удаления свидания, назначенного на некоторую дату и время

// вызывает метод удаления элемента из свзного списка по индексу

 

bool Suitor::DeleteAppointment(const DateTime &dateTime)

{

           int count = _appointmentList.Count();

           for (int i=0; i < count; i++)

                          if (_appointmentList[i].GetDateAndTime() == dateTime)

                          {

                                          _appointmentList.Delete(i);

                                          return true;

                          }

 

           return false;

}

 

int Suitor::GetAppointmentsCount() const

{

           return _appointmentList.Count();

}

 

Appointment Suitor::FindAppointment(const DateTime &dateTime) const

{

           int count = _appointmentList.Count();

           for (int i=0; i<count; i++)

                          if (_appointmentList[i].GetDateAndTime() == dateTime)

                                          return _appointmentList[i];

 

           return Appointment();

}

// методв поиска свидания по индексу оборачивает метод поиска

// элемента в связном списке

 

Appointment Suitor::FindAppointment(int idx) const

{

           if (idx>=0 && idx<_appointmentList.Count())

                          return _appointmentList[idx];

 

           return Appointment();

}

 

//-------------------------------------------------------------------------------------------

 

wstring Suitor::ToString(bool IsFull) const

{

           wostringstream os;

 

           if (!IsFull)

           {

                          os << setw(4) << _id << setw(10) << _name <<

                          setw(10) <<_surname << setw (5) << _height <<

                           L" cm" << setw(5) << _weight << L" kg" <<

                          setw(7) <<GetAppointmentsCount() << L":" <<

                           setw(9) << _phoneNumber;

           }

           else

           {

                          os<<L"Имя: "<<GetName()<<endl;

                          os<<L"Фамилия: "<<GetSurname()<<endl;

                          os<<L"Рост: "<<GetHeight()<<" cm"<<endl;

                          os<<L"Вес: "<<GetWeight()<<" kg"<<endl;

                          os<<L"Номер телефона: "<<GetPhoneNumber()<<endl;

                          os<<L"Число свиданий: "<<

                          GetAppointmentsCount()<<endl;

           }

 

           if (os) return os.str();

 

           else return wstring();

}


//-------------------------------------------------------------------------------------------

// файл Console_interface.h с описанием функций,

// реализующих интерфейс взаимодействия с пользователем

//-------------------------------------------------------------------------------------------

 

#pragma once

 

#include <string>

#include <iostream>

#include <iomanip>

#include <ctime>

#include "DateTime.h"

#include "Appointment.h"

#include "Suitor.h"

#include "TList.h"

 

using namespace std;

 

//-------------------------------------------------------------------------------------------

// объявление функций, реализующих меню иалога с пользователем

 

typedef void(*MenuFunction)(void);

 

const int CountMenuFunctions = 9;

 

void Exit(void);

void AddRandom(void);

void AddSuitor(void);

void DeleteSuitor(void);

void ChangeSuitor(void);

void AddAppointment(void);

void DeleteAppointment(void);

void ChangeAppointment(void);

void FullInformation(void);

 

// дополнительные функции

void PrintSuitorList(void);

void PrintAppointmentList(int numSuitor);

Date InputDate(void);

Time InputTime(void);

DateTime InputDateTime(void);

Suitor InputSuitor(void);

Appointment InputAppointment(void);

int SelectNumberOfSuitor(void);

int SelectNumberOfAppointment(int idx);

wstring GetRandomPhoneNumber();

 

//-------------------------------------------------------------------------------------------

// работа со списком поклонников

 

TList<Suitor> SuitorList; // объявление глобального списка поклонников

 

// добавление поклонника в список SuitorList

void AddToSuitorList(const Suitor& suitor)

{

           SuitorList.Add(suitor);

}

 

// поиск в списке SuitorList поклонника с заданным id

int FindSuitorById(int id)

{             

           int idx = -1;

 

           for (int i=0;i<SuitorList.Count();i++)

                          if (SuitorList[i].GetId() == id)

                          {

                                          idx = i;

                                          break;

                          }

 

           return idx;

}

 

// удаление поклонника из SuitorList

bool DeleteFromSuitorList(int id)

{

           if (!SuitorList.Count()) return false;

           int idx = FindSuitorById(id);

 

           if (idx == -1) return false;

           SuitorList.Delete(idx);

 

           return true;

}


//-------------------------------------------------------------------------------------------

// реализация функций меню взаимодействия с пользователем

 

void MainMenuFunction(void)

{

           MenuFunction Functions[CountMenuFunctions] = {

                                                                         &Exit,

                                                                    &AddRandom,

                                                                     &AddSuitor,

                                                                         &DeleteSuitor,

                                                                         &ChangeSuitor,

                                                                         &AddAppointment,

                                                                         &DeleteAppointment,

                                                                          &ChangeAppointment,

                                                                         &FullInformation };

 

           wcout.imbue(locale("rus_rus.866"));

           wcin.imbue(locale("rus_rus.866"));

           srand((unsigned)time(0));

 

           do

           {

                          int select;

 

                          system("cls");

                          wcout<<L"Привет Полли!!!"<<endl;

                          wcout<<L"Список поклонников содежит... "<<endl;

                          PrintSuitorList();

                          wcout<<endl;

 

                          wcout<<L"Чего ты желаешь?"<<endl;

                                          wcout<<L"1 - Добавить в список случайных поклонников."<<endl;

                          wcout<<L"2 - Добавить поклонника."<<endl;

                          wcout<<L"3 - Удалить поклонника."<<endl;

                                          wcout<<L"4 - Изменить характеристики поклонника."<<endl;

                          wcout<<L"5 - Назначить свидание."<<endl;

                          wcout<<L"6 - Удалить свидание."<<endl;

                                          wcout<<L"7 - Изменить характеристики свидания."<<endl;

                          wcout<<L"8 - Увидеть подробный отсчет."<<endl;

                          wcout<<L"0 - Выйти."<<endl;

 

                          wcout<<L"Ваш выбор: ";

                          do

                          {

                                          wcin>>select;

                          }

                          while (select<0 || select>=CountMenuFunctions);

 

                          wcout<<endl;

                          (Functions[select])();

                          system("pause");

           }

           while (true);

}

 

void AddRandom(void)

{

           int count = rand()%5+1;

           int prevCount = SuitorList.Count();

           wstring Names[10] = {L"Иван", L"Петр", L"Михаил",

                                          L"Евгений", L"Александр", L"Кирилл",

                          L"Василий", L"Станислав", L"Егор", L"Алексей"};

           wstring Surnames[10] = { L"Иванов", L"Петров", L"Сидоров",

                      L"Ушаков", L"Сахаров", L"Смолов",

                      L"Кержаков", L"Лосев", L"Тихонов", L"Титов"};

           for (int i=0; i<count; i++)

           {

                          AddToSuitorList(Suitor(Surnames[rand()%10],

                                          Names[rand()%10], rand()%40+160,

                                          rand()%40+60, GetRandomPhoneNumber()));

                          int num = rand()%5;

                          for (int j=0;j<num;j++)

                          {

                                          SuitorList[i+prevCount].AddAppointment(

                                          Appointment( DateTime::GetRandomDateTime(

                                                     Date(2007,1,1), Date(2009,7,7),

                                                     Time(12,0), Time(22,0)),

                                                     Time::GetRandomTime(Time(0,30),

                                                     Time(2,30)),  rand()%6));

                          }

           }

 

           wcout<<L"Поклонники были добавлены в список!"<<endl;

}

void AddSuitor(void)

{

           wcout<<L"Добавление поклонника... "<<endl;

           Suitor suitor = InputSuitor();

           AddToSuitorList(suitor);

           wcout<<L"Поклонник успшешно добавлен в список!"<<endl;

}

 

void DeleteSuitor(void)

{

           int id;

           wcout<<L"Удаление поклонника... "<<endl;

           wcout<<L"Введите ID поклонника: ";

           wcin>>id;

           if (DeleteFromSuitorList(id))

                          wcout<<L"Удаление завершилось успешно!"<<endl;

           else

                          wcout<<L"Поклонник не был найден... "<<endl;

}

 

void ChangeSuitor(void)

{

           int numSuitor = SelectNumberOfSuitor();

           if (numSuitor == -1) return;

 

           int select, wh;

           wstring str, numb;

 

           wcout<<SuitorList[numSuitor].ToString(true);

           PrintAppointmentList(numSuitor);

 

           wcout<<L"Что вы хотите изменить?"<<endl;

           wcout<<L"1 - имя"<<endl;

           wcout<<L"2 - фамилию"<<endl;

           wcout<<L"3 - рост"<<endl;

           wcout<<L"4 - вес"<<endl;

           wcout<<L"5 - номер телефона"<<endl;

           wcout<<L"0 - отмена"<<endl;

           wcout<<L"Ваш выбор: ";

 

           wcin>>select;

           switch (select)

           {

           case 1:

                          wcout<<L"Введите новое имя: ";

                          wcin>>str;

                          SuitorList[numSuitor].SetName(str);

                          break;

           case 2:

                          wcout<<L"Введите новую фамилию: ";

                          wcin>>str;

                          SuitorList[numSuitor].SetSurname(str);

                          break;

           case 3:

                          wcout<<L"Введите новый рост: ";

                          wcin>>wh;

                          SuitorList[numSuitor].SetHeight(wh);

                          break;

           case 4:

                          wcout<<L"Введите новый вес: ";

                          wcin>>wh;

                          SuitorList[numSuitor].SetWeight(wh);

                          break;

           case 5:

                          wcout<<L"Введите новый номер телефона: ";

                          wcin>>numb;

                          SuitorList[numSuitor].SetPhoneNumber(numb);

                          break;

           default: return;

           }

 

           wcout<<L"Измения были приняты!"<<endl;

           system("pause");

}

 

void AddAppointment(void)

{

           int numSuitor = SelectNumberOfSuitor();

           if (numSuitor == -1) return;

 

           wcout<<L"Информация..."<<endl;

           wcout<<SuitorList[numSuitor].ToString(true);

           PrintAppointmentList(numSuitor);

           wcout<<L"Добавление свидания... "<<endl;

           Appointment app = InputAppointment();

           SuitorList[numSuitor].AddAppointment(app);

 

           wcout<<L"Свидание было успешно добавлено!"<<endl;

           system("pause");

}

 

void DeleteAppointment(void)

{

           int numSuitor = SelectNumberOfSuitor();

           if (numSuitor == -1) return;

 

           int number = SelectNumberOfAppointment(numSuitor);

           if (number == -1) return;

 

           SuitorList[numSuitor].DeleteAppointment(

           SuitorList[numSuitor].FindAppointment(

                                                                    number).GetDateAndTime());

 

           wcout<<L"Удаление было успешно завершено!"<<endl;

}

 

void ChangeAppointment(void)

{

           int numSuitor = SelectNumberOfSuitor();

           if (numSuitor == -1) return;

 

           int number = SelectNumberOfAppointment(numSuitor);

           if (number == -1) return;

 

           int select, mark; Date dt; Time tm; DateTime dtm;

           Appointment temp =

                           SuitorList[numSuitor].FindAppointment(number);

 

           wcout<<L"Что вы хотите изменить?"<<endl;

           wcout<<L"1 - Дату проведения свидания"<<endl;

           wcout<<L"2 - Время проведения свидания"<<endl;

           wcout<<L"3 - Продолжительность свидания"<<endl;

           wcout<<L"4 - Выставленную оценку"<<endl;

           wcout<<L"0 - Выйти"<<endl;

           wcout<<L"Ваш выбор: ";

 

           wcin>>select;

 

           switch (select)

           {

           case 1:

                           wcout<<L"Введите новую дату..."<<endl;

                          dt = InputDate();

                          dtm = DateTime(dt,temp.GetDateAndTime().GetTime());

                          temp.SetDateAndTime(dtm);

                          break;

           case 2:

                          wcout<<L"Введите новое время..."<<endl;

                          tm = InputTime();

                          dtm = DateTime(temp.GetDateAndTime().GetDate(), tm);

                          temp.SetDateAndTime(dtm);

                          break;

           case 3:

                          wcout<<L"Введите  продолжительность..."<<endl;

                          tm = InputTime();

                          temp.SetDuration(tm);

                          break;

           case 4:

                          wcout<<L"Введите новую оценку: ";

                          wcout<<mark;

                          temp.SetMark(mark);

                          break;

           default: return;

           }

 

           SuitorList[numSuitor].DeleteAppointment(

                      SuitorList[numSuitor].FindAppointment(

                                                                         number).GetDateAndTime());

           SuitorList[numSuitor].AddAppointment(temp);

 

           wcout<<L"Изменение характеристик свидания

                                                                                         завершено!"<<endl;

}

 

 

void FullInformation(void)

{

           wcout<<L"/Полная информация/"<<endl;

           system("pause");

           wcout<<L"**************************************"<<endl;

           int count = SuitorList.Count();

           for (int i=0; i<count;i++)

           {

                          wcout<<L"Информация..."<<endl;

                          wcout<<SuitorList[i].ToString(true);

                          PrintAppointmentList(i);

                          wcout<<L"**************************************"<<endl;

           }

}

 

void Exit(void)

{

           int select;

 

           wcout<<L"Вы уверены в том, что хотите выйти?"<<endl;

           wcout<<L"1 - да"<<endl;

           wcout<<L"0 - отмена"<<endl;

 

           wcout<<L"Ваш выбор: ";

 

           wcin>>select;

 

           if (select) exit(1);

}

 

void PrintSuitorList(void)

{

           int count = SuitorList.Count();

           if (!count)

           {

                          wcout<<L"Список поклонников пуст!"<<endl;

                          return;

           }

 

 

           wcout << setw(4) << L"ID" << setw(10) <<

           L"Имя" << setw(10) << L"Фамилия" << setw(8) <<

           L"Рост" << setw(8) << L"Вес" << setw(9) <<

           L"Рейтинг" << setw(9) << L"Телефон" << endl;

 

           for (int i=0;i<count;i++)

                          wcout<<SuitorList[i].ToString()<<endl;

}

 

void PrintAppointmentList(int numSuitor)

{

           if (numSuitor<0 || numSuitor>=SuitorList.Count())

                          return;

           int count = SuitorList[numSuitor].GetAppointmentsCount();

           if (!count)

           {

                          wcout<<L"Список свиданий поклонника пуст!"<<endl;

                          return;

           }

 

           wcout << setw(3) << L"№" << setw(12) <<

           L"Дата" << setw(10) << L"Время" << setw(10) <<

            L"Длилось" << setw(8) << L"Оценка" << endl;

 

           for (int i=0;i<count;i++)

                          wcout << setw(2) << i+1 <<

                          SuitorList[numSuitor].FindAppointment(

                                                                                         i).ToString()<<endl;

 

           wcout<<endl;

}

 

Appointment InputAppointment(void)

{

           int mark = 0;

 

           wcout<<L"Вводим характеристики нового свидания..."<<endl;

 

           wcout<<L"Дата и время назначения..."<<endl;

           DateTime dt = InputDateTime();

 

           wcout<<L"Продолжительность..."<<endl;

           Time tm = InputTime();

 

           wcout<<L"Ставим оценку: ";

           wcin>>mark;

 

           return Appointment(dt,tm,mark);

}

 

Date InputDate(void)

{

           int y,m,d;

           wcout<<L"Вводим дату..."<<endl;

           wcout<<L"Введите год: "; wcin>>y;

           wcout<<L"Введите месяц: "; wcin>>m;

           wcout<<L"Введите день: "; wcin>>d;

 

           return Date(y,m,d);

}

 

DateTime InputDateTime(void)

{

           wcout<<L"Вводим дату и время..."<<endl;

           Date dt = InputDate();

           Time tm = InputTime();

 

           return DateTime(dt,tm);

}

 

Suitor InputSuitor(void)

{

           wstring name, surname, number;

           int height, weight;

           wcout<<L"Вводим характеристики поклонника..."<<endl;

           wcout<<L"Введите имя: "; wcin>>name;

           wcout<<L"Введите фамилию: "; wcin>>surname;

           wcout<<L"Введите рост: "; wcin>>height;

           wcout<<L"Введите вес: "; wcin>>weight;

           wcout<<L"Введите номер телефона: "; wcin>>number;

 

           return Suitor(surname,name,height,weight,number);

}

 

Time InputTime()

{

           int h,m;

 

           wcout<<L"Вводим время..."<<endl;

           wcout<<L"Введите часы: "; wcin>>h;

           wcout<<L"Введите минуты: "; wcin>>m;

 

           return Time(h,m);

}

 

int SelectNumberOfSuitor()

{

           int id;

           wcout<<L"Выберите поклонника... "<<endl;

           wcout<<L"Введите ID поклонника: ";

           wcin>>id;

 

           int idx = FindSuitorById(id);

           if (idx == -1) wcout<<L"Поклонника с таким ID нет..."<<endl;

           return idx;

}

 

int SelectNumberOfAppointment(int idx)

{

           wcout<<L"Информация..."<<endl;

           wcout<<SuitorList[idx].ToString(true);

           PrintAppointmentList(idx);

 

           int number;

           wcout<<L"Введите номер свидания в списке: ";

           wcin>>number; number--;

 

           if (number<0 || number >=

                                          SuitorList[idx].GetAppointmentsCount())

           {

                          wcout<<L"Такого номера не существует!"<<endl;

                          return -1;

           }

           return number;

}










Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: