№ п/п | Наименование файла | Назначение |
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;
}