Форум программистов, компьютерный форум, киберфорум
acmades
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

С++ «Неделя четвертая - Исключения - Работа с сервером времени» #24

Запись от acmades размещена 24.08.2017 в 14:35

Задание:
Вам дана функция string AskTimeServer(), про которую известно следующее:
  • в процессе своей работы она обращается по сети к удалённому серверу, запрашивая текущее время;
  • если обращение к серверу прошло успешно, функция возвращает текущее время в виде строки;
  • если в процессе обращения к серверу возникла сетевая проблема, функция выбрасывает исключение system_error;
  • функция может выбрасывать другие исключения, чтобы сообщить о других проблемах.
Используя функцию AskTimeServer, напишите класс TimeServer со следующим интерфейсом:
C++
1
2
3
4
5
6
class TimeServer {
public:
  string GetCurrentTime();
private:
  string LastFetchedTime = "00:00:00";
};
Метод GetCurrentTime должен вести себя так:
  • он должен вызвать функцию AskTimeServer, записать её результат в поле LastFetchedTime и вернуть значение этого поля;
  • если AskTimeServer выбросила исключение system_error, метод GetCurrentTime должен его поймать и вернуть текущее значение поля LastFetchedTime. Таким образом мы скрываем от пользователя сетевые проблемы, возвращая значение, которое было получено при последнем успешном обращении к серверу;
  • если AskTimeServer выбросила другое исключение, метод GetCurrentTime должен пробросить его дальше, потому что в рамках класса TimeServer мы не знаем, как обрабатывать проблемы, не связанные со сбоями сети.

Моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <exception>
#include <string>
using namespace std;
 
string AskTimeServer() {
    /* Для тестирования повставляйте сюда код, реализующий различное поведение этой функции:
    * нормальный возврат строкового значения
    * выброс исключения system_error
    * выброс другого исключения с сообщением.
    */
}
 
class TimeServer {
public:
    string GetCurrentTime() {
        try
        {
            LastFetchedTime = AskTimeServer();
            return LastFetchedTime;
        }
        catch (const std::system_error&)
        {
            return LastFetchedTime;
        }
        catch (...) {
            throw;
        }
        /* Реализуйте этот метод:
        * если AskTimeServer() вернула значение, запишите его в LastFetchedTime и верните
        * если AskTimeServer() бросила исключение system_error, верните текущее значение
        поля LastFetchedTime
        * если AskTimeServer() бросила другое исключение, пробросьте его дальше.
        */
    }
 
private:
    string LastFetchedTime = "00:00:00";
};
 
int main() {
    // Меняя реализацию функции AskTimeServer, убедитесь, что это код работает корректно
    TimeServer ts;
    try {
        cout << ts.GetCurrentTime() << endl;
    }
    catch (exception& e) {
        cout << "Exception got: " << e.what() << endl;
    }
    return 0;
}
Даже комментировать нечего ))))
Всего комментариев 3
Комментарии
  1. Старый комментарий
    Фух, с этой задачей мудрил, мудрил. Вы мне очень помогли, одна эта задача в курсе оставалась думал из-за четвертой недели так и не закончу. Спасибо вам. Кстати, а пятая неделя будет? Очень интересно посмотреть, как вы провернете эту задачу. Я решаю их особо не используя функции языка не описанные в курсе, а вот у вас частенько что-то новенькое.
    Запись от Albatrosso размещена 30.08.2017 в 13:44 Albatrosso вне форума
  2. Старый комментарий
    Поспешил я радоваться с пятой неделей, мой код конечно работает, но анализатор его не принимает, если вам интересно, то буду рад поделиться кодом.
    Запись от Albatrosso размещена 30.08.2017 в 14:32 Albatrosso вне форума
  3. Старый комментарий
    Цитата:
    Сообщение от Albatrosso Просмотреть комментарий
    Поспешил я радоваться с пятой неделей, мой код конечно работает, но анализатор его не принимает, если вам интересно, то буду рад поделиться кодом.
    Вот у меня спорное мнение по поводу выкладывания решения 5-й недели, задание в свободном доступе есть. Это все-равно что дать тетрадь списать. В личку конечно скину, но на обозрение не дам )))) жадный )))) хотя нет, не жадный, но это медвежья услуга будет для остальных. Списал - курс сдал.
    Около 10 часов делал, ошибки выискивал, отлаживал. При неопределенных вводных и даже некоторых выходных данных, пришлось постараться. )))))
    Всем спасибо!!!
    Запись от acmades размещена 04.09.2017 в 02:21 acmades вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru