Перехват всех исключений
Если различные
исключения обрабатываются одинаково,
то используется обработчик исключений
вида
catch
(...)
Следующий
пример показываент эту ситуацию. В
функции capture
() могут генерироваться исключения
различного типа, которые обрабатываются
одним блоком catch
(...)
Пример:
void
capture (int
k)
{try
{
switch
(k) {
case
1 : throw
1;
case
2: throw
'a';
case
3 : throw
2.8;
}
}
catch
(...) //
перехват
всех
исключений
{cout<<"all
type capture\n";}
}
void
main()
{
cout<<"Begin\n";
capture (1);
capture (2);
capture (3);
cout<<"The
end"<<endl;
}
Результат
на
экране
:
Begin
all
type capture
all
type capture
all type
capture
The end
Если в
наличии несколько
catch – инструкций,
и
catch
(...) последняя из них, то будет перехват
«всех остальных»
Пример:
void
capture (int
k)
{try
{
switch
(k) {
case
1 : throw
1;
case
2: throw
'a';
case
3 : throw
2.8;
case
4 : throw
"string";
case
5 : throw
except("error!!!");
}
}
catch
(int
i) {
cout<<"catch
int exception:" <<i<<endl;}
catch
(char
s) {
cout<<"catch
char exception:" <<s<<endl;}
catch
(except e)
{cout<<e.msg<<endl;
}
catch
(...) //
перехват
всех
остальных
исключений
{cout<<"all
type capture\n";}
}
void
main()
{
cout<<"Begin\n";
capture
(1);
capture
(2);
capture
(3);
capture
(4);
capture (5);
cout<<"The
end"<<endl;
}
Результат
на
экране
:
Begin
catch
int exception: 1
catch
int exception: а
all
type capture
all
type capture
error!!!
The end
Общие правила и требования
При оформлении
ввода-вывода данных информация на
экране должна быть отформатирована,
согласно требованиям предыдущих
лабораторных работ
В данной лабораторной
работе вы учитесь создавать проект без
точных указаний по реализации базы
данных. Такая постановка задачи
называется работа по техническому
заданию, именно так работает программист
в реальных условиях.
В задании указан
набор обязательных элементов проекта,
но при реализации взаимодействия
классов от вас потребуется добавить
элементы:
необходимые для
работы (счетчики, размеры массивов и
т.п.);
не обязательные,
но упрощающие реализацию алгоритмов
обработки данных (для промежуточных
данных, для хранения общих данных и
т.п.)
вы также можете
усложнить иерархию и расширить интерфейсы
в рамках поставленной задачи (это
добавит вам баллы при защите работы).
Общие требования
к проекту:
Данные во всех
классах должны быть защищенные (private
или protected).
Обработка любых
ошибок должна реализовываться в виде
исключений
Данные, вносимые
по ходу работы программы должны вводиться
с клавиатуры, предусмотреть контроль
корректности ввода и обработку ошибки.
Например:
контроль диапазона
значений: 1-12(для месяца), 0-31 (для дня,
)0-24(для часа), и т.п.;
обработка ошибок
при вычислениях, например запрет деления
на ноль и т.п.
В задании ничего
не говориться о выводе информации на
экран, но от решения этого вопроса
зависит качество проекта в целом. В
целом вывод можно разделить на три
категории:
информация
выводится по умолчанию при запуске
программы;
информация
выводится по запросу пользователя
(пункт меню);
вывод информации
– это результат выполнения какой-либо
операции.
Обычно требуется
использовать все три категории вывода.
Должен быть пункт меню «распечатать
всю информацию».
Номер компьютера
|
Варианты заданий
|
1,11,
21
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Банк :
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Дать
возможность поиска в базах deposit,
credit по заданному
объекту класса man,
обработать ошибки ввода (цифры и
знаки в имени и фамилии), а также
безуспешный поиск.
В
класс redit добавить
поля «срок кредита» (в месяцах) и
сумма платежа в месяц, при создании
нового объекта класса credit
рассчитывать сумму платежа.
Добавить
действие «платеж по кредиту» с
контролем суммы платежа (ошибку ввода
обработать в виде исключения)
Добавить действие
списание денег с депозита. Обработать
ошибку при попытке списания большего
количества, чем есть на счете.
|
2,12,
22
|
При выполнении
задания используйте общие требования
выполнения работы
Добавить
новые элементы к базе данных Клиника
:
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений»
Перегрузить
оператор ввода из потока cin
«>>» для классов doctor,reception
Использовать
только оператор >> для ввода c
клавиатуры объектов класса
doctor,reception
(внести необходимые исправления в
текст программы)
Добавить
действие «запись к врачу на определенную
дату», логика работы следующая:
«число пациентов» - это количество
приемов пациентов в данный день
Подать запрос на «запись к врачу»:
– с клавиатуры ввести объекты классов
man (фамилия и имя врача
)и date, обработать ошибки
ввода (цифры и знаки в имени и фамилии)
, а также все возможные ошибки при
вводе даты;
––
если на данный день приема уже нет
(«число пациентов»=0), то обработать
ошибку,в противном случае записаться
на прием уменьшив на 1 «число пациентов»
|
3,13,
23
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Склад
(товары)
Перегрузить
оператор ввод из входного потока cin
«>>» для классов storage,stock
Использовать
только оператор >> для ввода
с клавиатуры (внести необходимые
исправления в текст программы)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Добавить действие: приход товара на
склад. Если название и цена совпадают,
то добавить количество, а если нет,
то добавить новую позицию склада
Добавить действие:
расход со склада. Обработать ошибку
при попытке списания большего
количества, чем есть на складе.
|
4,14,
24
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Поезд
(заказ билетов)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
оператор == сравнения с объектом
типа man для классов storage,stock
Добавить
действие: найти заданного (по объекту
типа man) пассажира, обработать
ошибки ввода (цифры и знаки в имени и
фамилии) , а также безуспешный поиск,
распечатать полную информацию о
найденных объектах.
Организовать поиск в обоих базах
(storage,stock)
Добавить действие:
«покупка билета», предусмотреть
обработку ошибки, если место уже
занято (проверку вести по полям: вагон,
место дата поездки). Обработать все
возможные ошибки при вводе даты.
|
5,15,
25
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Работник
(зарплата)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
оператор присваивания «=» для
классов work,
personnel
Добавить
действие: найти всех работников,
проработавших более 10 лет, текущую
дату ввести с клавиатуры. Обработать
все возможные ошибки при вводе даты.
При поиске
сформировать динамические массивы
результатов, используя перегруженный
оператор присваивания
|
6,16,
26
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Почта
(ценное письмо)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
оператор ввод из входного потока cin
«>>» для классов letter,
delivery
Использовать
только оператор >> для ввода
с клавиатуры (внести необходимые
исправления в текст программы)
Добавить
действие: поиск получателя по введенному
с клавиатуры объекту класса man,
обработать ошибки ввода (цифры и знаки
в имени и фамилии), а также безуспешный
поиск. Организовать поиск в обоих
базах (letter,
delivery), распечатать
полную информацию о найденных объектах.
Добавить действие:
найти письма с заданной датой вручения,
дату ввести с клавиатуры. Обработать
все возможные ошибки при вводе даты.
|
7,17,27
|
При выполнении задания используйте
общие требования выполнения работы
Добавить
новые элементы к базе данных Производство
(поставщики)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
оператор вывода в поток cout
«<<» для классов supplier, supplier1
Использовать только оператор
<< для вывода на экран объектов
класса supplier, supplier1 (внести
необходимые исправления в текст
программы)
Добавить
действие: поиск поставщика по введенному
с клавиатуры названию фирмы, обработать
ошибки ввода (допускаются только
русские и латинские буквы, цифры и
знаки исключаются), а также безуспешный
поиск. Организовать поиск в обоих
базах (delivery1,
delivery2), распечатать
полную информацию о найденных объектах.
Добавить действие:
найти поставщиков с заданной датой
поставки, дату ввести с клавиатуры.
Обработать все возможные ошибки при
вводе даты.
|
8,18,
28
|
При выполнении задания используйте
общие требования
Добавить
новые элементы к базе данных Институт
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
следующие операторы для классов
leaner, prepod
Использовать
только оператор << для вывода
на терминал (внести необходимые
исправления в текст программы)
Добавить
действие: поиск человека по введенным
с клавиатуры имени и фамилии
Организовать поиск по имени и фамилии
в обоих базах (leaner,
prepod):
Обработать ошибки ввода (цифры и знаки
в имени и фамилии) , а также безуспешный
поиск.
При
поиске сформировать динамические
массивы результатов, используя
перегруженный оператор присваивания
Распечатать полную
информацию о найденных объектах
|
9,19,
29
|
При выполнении задания используйте
общие требования
Добавить
новые элементы к базе данных Культура
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
следующие операторы для классов
movie, concert
Использовать
только оператор >> для ввода
с клавиатуры (внести необходимые
исправления в текст программы)
Добавить
действие: поиск мероприатия (концерта
или сеанса в кинотеатре ) по введенной
с клавиатуры даты. Организовать поиск
в обоих базах (movie,
concert).
При поиске сформировать динамические
массивы результатов, используя
перегруженный оператор присваивания
Обработать ошибки
ввода даты, а также безуспешный поиск,
распечатать полную информацию о
найденных объектах.
|
10,20,
30
|
При выполнении задания используйте
общие требования
Добавить
новые элементы к базе данных Пищевое
производство (расчеты)
Добавить
обработку возможных ошибок во всех
случаях ввода информации с клавиатуры,
там, где это возможно предусмотреть
режим «перехват всех остальных
исключений».
Перегрузить
следующие операторы для классов
product1, product2
Использовать
только оператор >> для ввода с
клавиатуры (внести необходимые
исправления в текст программы)
Добавить
действие: Поиск изделий у которых
дата производства отличается от
текущей даты более чем на 120 часов,
текущую дату ввести с клавиатуры.
Поиск ведется в обоих базах (product1,
product2).
Обработать
ошибки при вводе даты, а также
безуспешный поиск.
Сформировать
динамические массивы результатов,
используя перегруженный оператор
присваивания.
Распечатать полную
информацию о найденных объектах.
|