Объектно-ориентированное программирование (ооп). Основные понятия. Инкапсуляция. Классы. Конструкторы и деструкторы

Разработайте программу на языке С++, используя пользовательский тип данных – класс. В вариантах задания должны быть реализованы метод инициализаци, метод ввода данных с клавиатуры, метод вывода данных на экран.

Вариант 1. Создайте класс Triangle (треугольник) для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции получения и изменения полей данных, вычисления площади, вычисления периметра, вычисления высот и определения вида треугольника (равносторонний, равнобедренный или прямоугольный).

Вариант 2. Создайте класс Complex (комплекс) для работы с комплексными числами. Комплексное число представляется парой чисел (a, b), где a – действительная часть, b – мнимая часть. Требуется реализовать операции сложения add: (a, b)+(c, d)=(a+b, c+d), вычитания sub: (a, b)-(c, d)=(a-b, c-d), умножения mul: (a, b)*(c, d)=(a*c-b*d, a*d+b*c), деления div: (a, b)/(c, d)=(a*c+b*d, b*c-a*d)/(c*c+d*d), сравнение equ: (a, b)=(c, d), если (a=c) и (b=d), сопряженное число conj: conj(a, b)=(a, -b).

Вариант 3. Создайте класс Account (счет), представляющий банковский счет. В классе должны быть четыре поля: фамилия владельца, номер счета, процент начисления и сумма в рублях. Открытие нового счета выполняется операцией инициализации. Необходимо выполнить следующие операции:

- сменить владельца счета;

- снять некоторую сумму денег со счета;

- положить деньги на счет;

- вычислить проценты;

- перевести сумму в доллары;

- перевести сумму в евро;

- получить сумму прописью (преобразовать в числительное).

Вариант 4. Создайте класс Goods (товары). В классе должны быть представлены поля: наименование товара, дата оформления, цена товара, количество единиц товара, номер накладной, по которой товар поступил на склад. Реализовать методы изменения цены товара, изменения количества товара (увеличения и уменьшения), вычисления стоимости товара. Метод toString() должен выдавать в виде строки стоимость товара.

Вариант 5. Создайте класс Payment (зарплата). В классе должны быть представлены поля: фамилия-имя-отчество, оклад, год поступления на работу, процент надбавки, подоходный налог, количество отработанных дней в месяце, количество рабочих дней в месяце, начисленная и удержанная суммы. Реализовать методы:

- вычисления начисленной суммы;

- вычисления удержанной суммы;

- вычисления суммы, выдаваемой на руки;

- вычисления стажа.

Стаж вычисляется как полное количество лет, прошедших от года поступления на работу, до текущего года. Начисления представляют собой сумму, начисленную за отработанные дни, и надбавки, то есть доли от первой суммы. Удержания представляют собой отчисления в пенсионный фонд (1% от начисленной суммы) и подоходный налог. Подоходный налог составляет 13% от начисленной суммы без отчислений в пенсионный фонд.

Вариант 6. Создайте класс Bill (счет), представляющий собой разовый платеж за телефонный разговор. Класс должен включать в себя поля номера телефона, тарифа за минуту разговора, скидки (в процентах), времени разговора (в минутах) и суммы к оплате. Реализовать метод вычисления суммы к оплате. В программе продемонстрировать создание, инициализацию и обработку массива объектов типа Bill с различными исходными данными для вычисления сумм к оплате. Вычислить общую сумму к оплате.

Вариант 7. Создайте класс AvtoVlad, хранящий информацию о владельце автомобиля: имя, номер автомобиля, номер техпаспорта, дата рождения, телефон, отделение регистрации ГИБДД. Доступ к данным класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- ввод данных с клавиатуры;

- вывод данных массива на экран в виде таблицы;

- поиск и вывод информации о владельцах автомобилей, зарегистрированных в отделении ГИБДД;

- поиск и вывод информации об автовладельце по номеру автомобиля.

Вариант 8. Создайте класс Abonent, хранящий информацию о телефонном абоненте: фамилию, имя, дата рождения, адрес и телефонный номер. Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- ввод данных с клавиатуры;

- вывод данных массива на экран в виде таблицы;

- поиск и вывод информации о телефонных абонентах по номеру телефона.

Вариант 9. Создайте класс Bankomat, моделирующий работу банкомата. В классе должны содержаться поля для хранения идентификационного номера банкомата, информации о текущей сумме денег, оставшейся в банкомате, минимальной и максимальной суммах, которые позволяется снять клиенту в один день. Сумма денег представляется полями-номиналами 10-1000. Реализовать метод инициализации банкомата, метод загрузки купюр в банкомат и метод снятия определенной суммы денег. Метод снятия денег должен выполнять проверку на корректность снимаемой суммы: она не должна быть меньше минимального значения и не должна превышать максимальное значение. Метод toString() должен преобразовать в строку сумму денег, оставшуюся в банкомате.

Вариант 10. Создайте класс HomeLibrary (домашняя библиотека). В классе должны быть представлены поля: универсальный десятичный код (УДК) книги, наименование книги, фамилия-имя-отчество автора, издательство, год издания, цена. Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление книги в библиотеку;

- удаление книги из библиотеки;

- поиск книги по УДК;

- сортировка по цене.

Вариант 11. Создайте класс StudentGroup (студенческая группа). В классе должны быть представлены поля: специальность, номер группы, количество студентов, номер зачетной книжки, фамилия-имя-отчество, дата рождения, балльно-рейтинговая оценка. Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление студента в группу;

- удаление студента из группы;

- поиск студента по номеру зачетной книжки;

- сортировка по балльно-рейтинговой оценке.

Вариант 12. Создайте класс Rational (рациональный) для работы с рациональными дробями. Рациональная (несократимая) дробь представляется парой целых чисел (a,b), где a – числитель, b – знаменатель. Требуется реализовать операции: сложения add: (a, b) + (c, d)=(a*d+b*c, b*d); вычитания sub: (a, b) – (c,d)=(a*d-b*c, b*d); умножения mul: (a, b) * (c,d)=(a*c, b*d); деления div: (a, b)/(c, d)=(a*d, b*c); сравнения equal, greater, less. Должна быть реализована приватная функция сокращения дроби reduce, которая обязательно вызывается при выполнении арифметическихопераций.

Вариант 13. Создайте класс FazzyNumber для работы с нечеткими числами, которые представляются тройками чисел . Для чисел и арифметические операции выполняются по следующим формулам:

- сложение

- вычитание

- умножение

- обратное число

- деление

Вариант 14. Создайте класс SatelliteTV (спутниковое телевидение). В классе должны быть представлены поля: идентификационный номер абонента, фамилия-имя-отчество, город, номер паспорта, серия паспорта, наименование пакета спутниковых программ, регистрация (да/нет). Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление абонента в группу пользователей;

- удаление абонента из группы пользователей;

- поиск абонента по номеру паспорта (фамилии-имени-отчеству);

- сортировка по идентификационному номеру.

Вариант 15. Создайте класс Invoice (накладная), который мог бы использоваться на складе хозяйственных товаров для представления накладных на товары, отпускаемые со склада. Класс должен включать пять полей в качестве элементов данных: идентификационный номер изделия (тип целых чисел), артикул изделия (строковый тип), описание изделия (строковый тип), число отпускаемых единиц изделия (тип целых чисел) и цену за одно изделие (тип целых чисел). Класс должен иметь конструктор, инициализирующий пять элементов данных. Для каждого элемента реализовать set- и get-функции. Предусмотреть функцию getInvoiceAmount(), вычисляющую общую сумму накладной (умножает цену одного изделия на число изделий) и возвращает ее как целое число. Если число изделий не положительно, оно должно устанавливаться равным 0. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление изделия на склад хозяйственных товаров;

- удаление изделия со склада хозяйственных товаров;

- поиск изделия по идентификационному номеру;

- сортировка по цене.

Вариант 16. Создайте класс Time (время), содержащий три типа поля int, предназначенные для хранения часов, минут и секунд. Один из конструкторов класса должен инициализировать поля нулевыми значениями, а другой конструктор – заданным набором значений. Создайте метод класса, который будет выводить значения полей на экран в формате 11:59:59, и метод, складывающий значения двух объектов типа Time, передаваемых в качестве аргументов.

В функции main() следует создать два инициализированных объекта и один неинициализированный объект. Сложите два инициализированных значения, а результат присвойте третьему объекту и выведите его значение на экран. Где возможно, сделайте методы константными.

Вариант 17. В морской навигации координаты точки измеряются в градусах и минутах широты и долготы. Например, координаты бухты Папити на о. Таити равны 149 градусов 34,8 минут восточной долготы и 17 градусов 31,5 минут южной широты. Это записывается следующим образом W, S. Один градус равен 60 минутам (устаревшая система делила одну минуту на 60 секунд, но сейчас минуту делят на обычные десятичные доли). Долгота измеряется величиной от 0 до 180 градусов восточнее или западнее Гринвича. Широта принимает значения от 0 до 90 градусов севернее или южнее экватора.

Создайте класс Angle, включающий три поля: типа int для числа градусов, типа float для числа минут и типа char для указания направления (N, S, E или W). Объект этого класса может содержать значения широты и долготы. Создайте метод, позволяющий ввести координату точки, направление, в котором она измеряется, и метод, выводящий на экран значение этой координаты, например, E. Напишите функцию main(), которая сначала создает переменную с помощью трехаргументного конструктора и выводит ее значение на экран, а затем циклически запрашивает пользователя ввести значение координаты и отображает введенное значение на экране. Для вывода символа градус можно воспользоваться символьной константой ‘\xF8’.

Вариант 18. Создайте класс Fraction для работы с дробными числами. Число должно быть представлено двумя полями: целая часть – длинное целое со знаком, дробная часть – беззнаковое короткое целое. Реализовать арифметические операции сложения, вычитания, умножения и операции сравнения.

Вариант 19. Создайте класс Money (деньги) для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа unsigned char – для копеек. Дробная часть (копейки) при выводе на экран должна быть отделена от целой части запятой. Реализовать сложение, вычитание, деление сумм, деление суммы на дробное число, умножение на дробное число и операции сравнения.

Вариант 20. Создайте класс TouristGroup (туристическая группа). В классе должны быть представлены поля: наименование туристического маршрута, номер группы, количество туристов, фамилия-имя-отчество, дата рождения, цена тура. Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление туриста в группу;

- удаление туриста из группы;

- поиск туриста по фамилии зачетной книжки;

Вариант 21. Пункт приема платежей взимает оплату за проезд по автостраде. Каждая проезжающая машина должна заплатить за проезд 500 рублей, однако часть машин платит за проезд, а часть проезжает бесплатно. В кассе ведется учет числа проехавших машин и суммарная выручка от платы за проезд.

Создайте класс TollBooth, содержащий два поля. Одно из них, типа unsigned int, предназначено для учета количества проехавших автомобилей, а второе, имеющее тип double, содержит суммарную выручку от оплаты проезда. Конструктор должен инициализировать оба поля нулевыми значениями. Метод payingCar() инкрементирует число машин и увеличивает на 500 рублей суммарную выручку. Другой метод nopayCar(), увеличивает на 1 число автомобилей, но оставляет без изменения выручку. Метод display() выводит оба значения на экран. Там, где это возможно, сделайте методы константными.

Разработайте программу, которая продемонстрирует работу класса. Программа должна предложить пользователю нажать одну клавишу для того, чтобы сымитировать эаплатившего автолюбителя, и другую клавишу, чтобы сымитировать недобросовестного водителя. Нажатие клавиши Esc должно привести к выдаче текущих значений количества машин, выручки и завершению программы.

Вариант 22. Создайте класс Ship (корабль), который содержит данные об учетном номере корабля и координаты его расположения. Для задания номера корабля следует использовать механизм, заключающийся в следующем: одно из полей класса хранит «порядковый номер» объекта, т.е. для первого созданного объекта значение этого поля равно 1, для второго созданного объекта значение равно 2 и т.д. Для того чтобы создать такое поле, Вам необходимо иметь еще одно поле, в которое будет записываться количество созданных объектов класса (это означает, что последнее поле должно относиться не к отдельным объектам класса, а ко всему классу в целом. Вспомните какое ключевое слово необходимо при описании такого поля). Каждый раз при создании нового объекта конструктор может получить значение этого поля и в соответствии с ним назначить объекту индивидуальный порядковый номер.

Для хранения координат и направления движения корабля используйте три поля: типа int для числа градусов, типа float для числа минут и типа char для указания направления движения корабля (N, S, E или W). Создайте метод, позволяющий ввести координаты корабля и направление, а также метод, выводящий на экран значение этой координаты, например, E. Напишите функцию main(), создающую три объекта класса ship, а затем запрашивающую ввод пользователем информации о каждом из кораблей и выводящую на экран всю полученную информацию. Для вывода символа градус можно воспользоваться символьной константой ‘\xF8’.

Вариант 23. Создайте класс CabelTV (кабельное телевидение). В классе должны быть представлены поля: идентификационный номер абонента, фамилия-имя-отчество, город, номер паспорта, серия паспорта, наименование пакета кабельных программ, регистрация (да/нет). Доступ к полям класса организовать посредством соответствующих методов. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление абонента в группу пользователей;

- удаление абонента из группы пользователей;

- поиск абонента по номеру паспорта (фамилии-имени-отчеству);

- сортировка по идентификационному номеру.

Вариант 24. Создайте класс Account, которым мог бы воспользоваться банк для представления банковских счетов своих клиентов. В классе должны быть следующие поля: номер счета (тип целых чисел), фамилия-имя-отчество (строковый тип), дата рождения (строковый тип), банковский баланс (тип целых чисел), номер-серия паспорта (строковый тип). Класс должен предусматривать конструктор, используемый для инициализации данных. Конструктор должен подтверждать значение начального баланса и гарантировать, что оно больше или равно 0. Если нет, баланс должен устанавливаться равным 0, и конструктор должен выводить сообщение об ошибке, указывающее, что начальный баланс был недействителен. В классе должны быть предусмотрены методы: метод credit() добавляет указанную сумму из текущего баланса, метод debit() снимает деньги со счета, предварительно убедившись, что указанная сумма не превосходит баланса счета, метод getBalance() возвращает текущий баланс. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление клиента банка;

- удаление клиента банка;

- поиск клиента банка по номеру счета;

- сортировка по банковскому балансу.

Вариант 25. Создайте класс Employee (служащий), включающий в качестве элементов данных следующие поля: идентификационный номер (тип целых чисел), фамилию-имя-отчество (строковый тип), дату рождения (строковый тип), стаж (тип целых чисел), месячную зарплату (тип целых чисел). Класс должен иметь конструктор, инициализирующий элементы данных. Для каждого элемента реализовать set- и get-функции. Если зарплата не положительна, устанавливайте ее равной 0. Разработать программу, в которой создается массив объектов данного класса. В программе организовать:

- добавление служащего;

- удаление служащего;

- поиск служащего по идентификационному номеру;

- сортировка по месячной зарплате.


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



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