Курсовая. Курсовая работа по дисциплине Объектноориентированный анализ и программирование
Скачать 148.96 Kb.
|
ФГБОУ ВО Национальный исследовательский университет «МЭИ» КУРСОВАЯ РАБОТА по дисциплине «Объектно-ориентированный анализ и программирование» Разработка объектно-ориентированной программы на языке С++ Вариант № 10 Выполнила: Ибрагимова Елизавета Ринатовна группа: ИЭ-65-21 Москва, 2022 ВВЕДЕНИЕ ВВЕДЕНИЕ………………………………………………………………………… 1. ПОСТАНОВКА ЗАДАЧИ……………………………………………………… 2. РАЗРАБОТКА ПРОГРАММЫ………………………………………………… 2.1 Структура программы……………………………………………………… 2.2 Разработка схемы алгоритма……………………………………………… 2.3 Описание пользовательского интерфейса……………………………… 3. РЕАЛИЗАЦИЯ И ТЕСТИРОВАНИЕ ПРОГРАММЫ……………………… 3.1 Описание разработанной программы………………………………………… 3.2 Тестирование программы……………………………………………………… ВЫВОД……………………………………………………………………………... ПРИЛОЖЕНИЕ……………………………………………………………………. ПОСТАНОВКА ЗАДАЧИ 1.1 Цель работы: Понять концептуальные принципов работ объектно-ориентированного программирования, в соответствии с которой тип абстракции данных, наследует не только типы данных, но и их функциональные возможности некоторого другого типа, что в последовая приводит к насилованною. Помимо этого, понять работы механизмов, объединяющих работу данных и кода, изменяет эти данные, а также вводит параметры безопасности или инкапсулирующие данные. 1.2 Задание: 1) Реализовать иерархию классов в соответствии с вариантом. У всех вариантов в качестве базового класса выступает класс “Сотрудник”. Построить диаграмму классов. Примечание: если в задании требуется реализовать функционал для другого класса, которого нет в вашем варианте, делать этого не требуется 2) Реализовать дочерний класс на основе двух классов, реализованных в предыдущем задании. Рассмотрите полученный результат и скажите, какие проблемы возникли при реализации данного множественного наследования (прим.: "алмаз смерти"). Создать новые классы "Инициалы" и "Выплаты", на основе которых реализовать дочерний класс "Данные о работнике". Продемонстрировать работу класса. В случае некорректных данных выбрасывать исключения. 1.3 Используемые классы согласно заданию: 0. Класс Директор: Должен содержать имя, фамилию, отчество и зарплату. Данные поля должны находиться в закрытой области класса. Также класс должен содержать поле, содержащее ФИО сотрудников, которые находятся в подчинении у директора, и их заработную плату. Реализовать методы для увольнения и принятия работников. Реализовать методы, позволяющие читать/писать из/в полей класса. 1. Класс Бухгалтер: Должен содержать имя, фамилию, отчество и зарплату. Данные поля должны находиться в закрытой области класса. Также класс должен содержать поле, содержащее ставку для всех должностей. Реализовать метод для расчета заработной платы работникам, исходя из размера ставки. Реализовать методы, позволяющие читать/писать из/в полей класса. 5. Класс Водитель Должен содержать имя, фамилию, отчество и зарплату. Данные поля должны находиться в закрытой области класса. Класс должен содержать поле, которое хранит в себе массив из категорий прав. Также должен содержать поле, содержащее массив транспортных средств, которыми управляет водитель. Реализовать методы, позволяющие читать/писать из/в полей класса. 6. Класс Программист Должен содержать имя, фамилию, отчество и зарплату. Данные поля должны находиться в закрытой области класса. Класс должен содержать поле, которое хранит уровень программиста (junior, middle, senior, lead). Класс должен содержать поле, которое будет содержать список технологий, которыми владеет программист. Реализовать методы, позволяющие читать/писать из/в полей класса. РАЗРАБОТКА ПРОГРАММЫ 2.1 Алмаз смерти: Алмаз смерти понятие, которое позволит нам разобраться, и увеличить продуктивность при разбирательстве. Таким образом один производный класс имеет под собой два базисных класса, при каждый из них может быть производственной из суперкласса. Та мы получаем ошибку неоднозначности, которая приводит к такому понятию как "Алмаз смерти" Рисунок 2.1 – "Алмаз смерти" Рассмотрим ситуацию: один производный класс имеет два базовых класса, при этом каждый из этих двух являются производным одного и того же суперкласса, такая ситуация демонстрируется на Рис. 2.1. При этом в производных классах есть свойство с одинаковым именем. Как мы знаем если в базовых классах элементы называются одинаково, то в производном классе появляется ошибка неоднозначности. Вот чем сулит «алмаз смерти», а название он свое получил, так как на диаграмме классов такая ситуация выглядит как алмаз. 2.2 Диаграмма классов: По заданию необходимо было составить диаграмму классов, данная диаграмма представлена ниже и построена в среде Flowchart Maker $ Online Diagram Software: Рисунок 2.2 – Диаграмма классов Описание разработки классов: Класс Initials: Поля — string m_firstName – переменная для хранения имени — string m_middleName – переменная для хранения отчества Методы — Initials(string firstName = "", string middleName = "") – конструктор, задает имя и отчество — string getFirstName() – возвращает имя работника — void setFirstName – устанавливает имя работника — string getMiddleName() – возвращает отчество работника — void setMiddleName(string middleName) – устанавливает отчество работника Взаимодействие — Является родительским классом для Employee Класс Finans: Поля — double m_salary – переменная для хранения заработной платы Методы — Finans(double salary = 0.0) – конструктор, задает заработную плату — double getSalary() – возвращает заработную плату работника void setSalary(double salary) – устанавливает заработную плату работнику Взаимодействие — Является родительским классом для Employee Класс Employee: Поля — string m_lastName – хранит фамилию работника string post – хранит должность работника Методы — Employee(string firstName = "", string lastName = "", string middleName = "", double salary = 0.0) – конструктор, задает ФИО и заработную плату сотрудника — string getLastName() – возвращает фамилию работника — string getFullName() – возвращает ФИО работника — int setLastName(string lastName) – устанавливает фамилию работника — virtual string whoAmI() – функция переопределения для производных классов, возвращающая должность работника Взаимодействие — Является дочерним классом для Initials и Finans, а также в свою очередь является родительским для классов Director, Accountant, Secretary и Programmer Класс Director: Поля — vector < Employee* > m_listEmployee – вектор хранит указатели на каждого подчиненного директора — vector < Employee* > m_listProgrammer – вектор хранит указатели на всех программистов Методы — Director(string firstName = "", string lastName = "", string middleName = "", double salary = 0.0) – конструктор устанавливает ФИО и заработную плату для созданного директора — void hireEmployee( Employee * newEmployee, string post) – создает нового работника у конкретного директора, указатели которого сохраняются в m_listEmployee, а в случае если это программист то еще и в m_listProgrammer void printListEmployee() – выводит лист работников — void dismissEmployee(int i) – увольняет работника, убирает его из вектора m_listEmployee Employee * getEmployee(int i) – возвращает указатель на работника по его номеру в m_listEmployee — string whoAmI() – возвращает должность работника Взаимодействие — Является дочерним классом для Employee Класс Accountant: Поля — int rate[4] – массив содержит ставку работника за час работы для всех должностей Методы — Accountant(string firstName = "", string lastName = "", string middleName = "", double salary = 0.0) – конструктор устанавливает ФИО и заработную плату для созданного водителя — void getRate(int i) – выводит ставку заработной платы в час для конкретной должности — void getWages(int i) – производит расчет, а также выводит заработную плату для конкретной должности — string whoAmI() – возвращает должность работника Взаимодействие — Является дочерним классом для Employee Класс Driver Поля — нет Методы — driver(string firstName = "", string lastName = "", string middleName = "", double salary = 0.0) – конструктор устанавливает ФИО и заработную плату для созданного водителя - prinTright () – категория прав _ printAuto () – транспортные средства — string whoAmI() – возвращает должность работника Взаимодействие — Является дочерним классом для Employee Класс Programmer: Поля — string m_levelProgramming – хранит уровень программиста — string m_pullLevel[4] – массив содержит все возможные уровни программиста — vector < string > m_listTech – вектор хранит в себе все технологии, которыми владеет программист Методы — Programmer(string firstName = "", string lastName = "", string middleName = "", double salary = 0.0) - конструктор устанавливает ФИО и заработную плату для созданного программиста — void setLevelProgramming(int i) – устанавливает уровень программисту, данные берутся из m_pullLevel согласно номеру — string getLevelProgramming() – возвращает уровень программиста — void addTech(string newTech) – добавляет технологию которой владеет программист в m_listTech — void dismissTech(int i) – удаляет технологию которой владеет программист из m_listTech — void printListTech() – выводит список технологий, которыми владеет программист — string whoAmI() – возвращает должность работника Взаимодействие — Является дочерним классом для Employee |