Консультация № 181885
14.01.2011, 11:51
200.00 руб.
0 6 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Разработать консольное приложение на C++ ANSI
Среда - Visual Studio (лучше 2005).

Задача на тему "Наследование"
Создать класс типа - время с полями: час (0-23), минуты (0-59), секунды (0-59). Класс имеет конструктор. Методы: установки времени, получения часа, минуты и секунды, а также два метода печати: печать по шаблону:"16 часов 18 минут 3 секунды" и "4p.m. 18 минут 3 секунды". Методы установки полей класса должны проверять корректность задаваемых параметров.
Создать производный класс типа - элемент распорядка дня. Доопределить в нем поле: выполняемое действие (строка); метод установки поля и получения значения поля. Переопределить методы печати: печать по шаблону "16 часов 18 минут: подъем" и "Подъем - 4p.m. 18 минут".
Написать программу, позволяющую создавать распорядок дня и печатать его на экран (2 способами).

Нужны исходники (файлы проекта) и скомпилированный файл.
С уважением,
Botsman.

Обсуждение

давно
Профессор
230118
3054
14.01.2011, 14:04
общий
Приступаю
Неизвестный
16.01.2011, 22:35
общий
это ответ
Здравствуйте, Botsman!

У меня получился проект состоящий из одного файла, поэтому его не выкладываю. В приложении находится его содержимое.
Среда разработки Visual Studio 2008.

Скомпилированный файл находится по адресу
https://rfpro.ru/upload/4443

Приложение:
#include <iostream>

using namespace std;

class cTime {
int hour;
int minute;
int second;
public:
cTime();
~cTime();
void set_hour(int h);
void set_minute(int m);
void set_second(int s);
void print1();
void print2();
};

class Order_of_day: public cTime {
char task[80];
public:
Order_of_day();
void set_task(char* s);
void print1();
void print2();
};


void error(char* s)
{
cerr << "Ошибка: " << s << "\n";
}

cTime::cTime()
{
hour = 0; minute = 0; second = 0;
}

cTime::~cTime()
{
}

void cTime::set_hour(int h)
{
if ((0<=h)&&(h<=23)) hour = h;
else error("Час должен быть от 0 до 23");
}

void cTime::set_minute(int m)
{
if ((0<=m)&&(m<=59)) minute = m;
else error("Минута должена быть от 0 до 59");
}

void cTime::set_second(int s)
{
if ((0<=s)&&(s<=59)) second = s;
else error("Секунда должена быть от 0 до 59");
}

void cTime::print1()
{
switch (hour)
{
case 1:
case 21: cout << hour << " час ";break;
case 2:
case 3:
case 4:
case 22:
case 23: cout << hour << " часа "; break;
default: cout << hour << " часов "; break;
}

switch (minute)
{
case 1:
case 21:
case 31:
case 41:
case 51: cout << minute << " минута ";break;
case 2:
case 3:
case 4:
case 22:
case 23:
case 24:
case 32:
case 33:
case 34:
case 42:
case 43:
case 44:
case 52:
case 53:
case 54: cout << minute << " минуты "; break;
default: cout << minute << " минут "; break;
}
switch (second)
{
case 1:
case 21:
case 31:
case 41:
case 51: cout << second << " секунда";break;
case 2:
case 3:
case 4:
case 22:
case 23:
case 24:
case 32:
case 33:
case 34:
case 42:
case 43:
case 44:
case 52:
case 53:
case 54: cout << second << " секунды"; break;
default: cout << second << " секунд"; break;
}
}

void cTime::print2()
{
if (hour<12) cout << hour << " a.m. ";
else cout << hour-12 << " p.m. ";

switch (minute)
{
case 1:
case 21:
case 31:
case 41:
case 51: cout << minute << " минута ";break;
case 2:
case 3:
case 4:
case 22:
case 23:
case 24:
case 32:
case 33:
case 34:
case 42:
case 43:
case 44:
case 52:
case 53:
case 54: cout << minute << " минуты "; break;
default: cout << minute << " минут "; break;
}
switch (second)
{
case 1:
case 21:
case 31:
case 41:
case 51: cout << second << " секунда\n";break;
case 2:
case 3:
case 4:
case 22:
case 23:
case 24:
case 32:
case 33:
case 34:
case 42:
case 43:
case 44:
case 52:
case 53:
case 54: cout << second << " секунды\n"; break;
default: cout << second << " секунд\n"; break;
}
}
Order_of_day::Order_of_day():cTime()
{
strcpy_s(task, "");
}
void Order_of_day::set_task(char *s)
{
strcpy_s(task, s);
}

void Order_of_day::print1()
{
cTime::print1();
cout << ": " << task << "\n";
}

void Order_of_day::print2()
{
cout << task << " - ";
cTime::print2();
}

int main() {
setlocale(LC_CTYPE, "Russian");

cTime ct;
Order_of_day ood;

char str[80];
cout << "Ведите задачу: ";
cin >> str;
// преобразуем из ASCII в ANCI
for (int i=0; str[i]!=0; i++)
if ((-128<=str[i])&&(str[i]<=-81)) str[i] += 64;
else if ((-32<=str[i])&&(str[i]<=-17)) str[i] += 16;

int h, m, s;
cout << "Укажите время: ";
cin >> h >> m >> s;

ct.set_hour(h);
ct.set_minute(m);
ct.set_second(s);

ood.set_hour(h);
ood.set_minute(m);
ood.set_second(s);
ood.set_task(str);

ct.print1(); cout << "\n";
ct.print2();

ood.print1();
ood.print2();

system("PAUSE");

return 0;
}
5
Спасибо!
Неизвестный
17.01.2011, 09:39
общий


Не могу найти вот эту часть задания: (может, просто смотрю невнимательно )
Написать программу, позволяющую создавать распорядок дня и печатать его на экран (2 способами).

Подскажите, как запустить программу, чтобы создавался распорядок дня (т.е. более одной задачи)?
Неизвестный
17.01.2011, 12:23
общий
В программе на данный момент можно ввести одну запись и реализован ее вывод

Пользователь программы должен указывать количество записей или оно должно быть предопределено в программе?
Выводить только распорядок дня?
Нужно делать выбор способа вывода на экран?
Неизвестный
17.01.2011, 12:59
общий
количество записей задает пользователь
выводить нужно следующим образом: после ввода очередной записи напечатать двумя способами ее время, а после ввода всех записей - вывести распорядок дня в формате:
"Первый способ:
<первая запись>
...
<последняя запись>"
Ожидание нажатия клавиши для продолжения
"Второй способ:
<первая запись>
...
<последняя запись>"
Ожидание нажатия клавиши для завершения программы.

Выбор способа делать не надо.
Неизвестный
17.01.2011, 14:06
общий
Ссылка на скомпилированный файл https://rfpro.ru/upload/4454

Тогда функция main будет выглядеть следующим образом
Код:

int main() {
setlocale(LC_CTYPE, "Russian");

cTime* ct;
Order_of_day* ood;
int n;

cout << "Введите количество записей: ";
cin >> n;

ct = new cTime[n];
ood = new Order_of_day[n];

for (int i=0; i<n; i++)
{
char str[80];
cout << "Ведите задачу: ";
cin >> str;
// преобразуем из ASCII в ANCI
for (int j=0; str[j]!=0; j++)
{
if ((-128<=str[j])&&(str[j]<=-81)) str[j] += 64;
else if ((-32<=str[j])&&(str[j]<=-17)) str[j] += 16;
};

int h, m, s;
cout << "Укажите время: ";
cin >> h >> m >> s;

ct[i].set_hour(h);
ct[i].set_minute(m);
ct[i].set_second(s);

ood[i].set_hour(h);
ood[i].set_minute(m);
ood[i].set_second(s);
ood[i].set_task(str);

ct[i].print1(); cout << "\n";
ct[i].print2();
}

cout << "\n";

for (int i=0; i<n; i++)
ood[i].print1();

system("PAUSE");
for (int i=0; i<n; i++)
ood[i].print2();

system("PAUSE");

delete[] ood;
delete[] ct;

return 0;
}
Форма ответа