Композиція та успадкування класів

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    556,33 Кб
  • Опубликовано:
    2015-06-05
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Композиція та успадкування класів

Міністерство освіти та науки України

Національний університет «Львівська політехніка»

Кафедра інформаційних

систем та мереж







Звіт до розрахункової роботи

з дисципліни: «Об’єктно-орієнтоване програмування»

на тему:

«Композиція та успадкування класів»











Львів 2014

Зміст

Завдання для розрахункової роботи

Формулювання задачі

Структура програми

Проектування інтерфейсу користувача

Розроблення графічних схем класів та алгоритмів

Контрольний приклад та аналіз результатів комп’ютерної реалізації програми

Список використаної літератури

Додаток(тексти програм)

Завдання для розрахункової роботи

Завдання 6

. Створити клас ОСОБА (прізвище, ім’я, по батькові, дата народження, стать та ін.).

. Визначити конструктори ініціалізації, копіювання, деструктори та методи для зміни і читання значень полів даного класу.

. Перевантажити операцію () для встановлення значень полів даних, операцію присвоєння об’єктів = , потокові операції введення >> та виведення << об’єктів.

. Створити похідний клас СЛУЖБОВЕЦЬ з додатковими полями - організація, спеціальність за дипломом, посада, оклад, стаж роботи. Визначити необхідні дані, методи, конструктори та деструктори, методи або операторні функції введення-виведення.

. У межах ієрархії класів побудувати поліморфічний кластер на основі віртуального методу читання прізвища особи або назви організації. Продемонструвати механізм пізнього зв’язування.

. Розробити клас ОРГАНІЗАЦІЯ, що містить масив об’єктів класу СЛУЖБОВЕЦЬ. Знайти кількість осіб, стаж роботи яких перевищує наперед задане значення.

. Для роботи з масивом об’єктів побудувати та використати клас-ітератор.

Формулювання задачі

Відповідно до завдання мені потрібно буде побудувати 3 класи:

Особа

Службовець

Організація (з вбудованим класом ітератором)

Клас Особа буде базовим класом та буде містити такі поля: прізвище, ім’я, по батькові, дата народження, стать. Та містити в собі віртуальні інтерфейсні методи та методи з перевантаженими операціями.

Клас Службовець буде доповнювати клас Особа ще декількома полями такими як: організація, спеціальність за дипломом, посада, оклад, стаж роботи.

Клас організація буде містити масив-контейнер для зберігання об’єктів типів Особа та Службовець, а також інтерфейсний метод для маніпулювання даними всередині контейнера.

Структура програми

У створюваній програмі використовується багатофайлова система побудови коду. Головна програма включає в себе заголовкові файли інших програмних модулів які відповідно містять в собі оголошення та визначення класів котрі використовуються у програмі.

При такій організації структури програми її можна утотожнити із загальною структурою побудови програми. Тому буде використана така файлова структура:.cpp - файл коду програми який містить у собі виклики методів та створення базових об’єктів..h - заголовковий файл що оголошує та визначає похідний клас з даним та методами..h - заголовковий файл що містить контейнерний клас з масивом об’єктів та методами маніпулювання ними..h - заголовковий файл що оголошує та визначає базовий клас з даним та віртуальними методами для подальшого перевизначення.

Проектування інтерфейсу користувача

У даній програмі використано консольний інтерфейс користувача. Головне меню запускається за допомого методу класу «Організація» та містити в собі 5 пунктів:

1 - Add Emploee - Додати працівника

- Edit Emploee - Редагувати працівника

- Print Personal Info - Надрукувати персональні дані працівників

- Count of E with Exp > then - Знайти кількість осіб, стаж роботи яких перевищує наперед задане значення

- Exit - вихід з програми

Дане меню створено за допомогою switch-case оператора використаного у циклі.

Розроблення графічних схем класів та алгоритмів

Графічні схеми розроблені та побудовані засобами середовища програмування.

Діаграма залежностей для проекту:

Деталізована діаграма методів класів та алгоритмів:

Класи «Ітератор» та «Організація»


Класи «Персона» , «Службовець» та допоміжна структура «Дата»


Інструкція користувачу

Після запуску програми з’явиться головне меню та базово задані дані створені за допомогою конструкторів різних типів.

При виборі пункту 1 потрібно ввести через пробільні символи дані про нового працівника.

У другому пункті також потрібно ввести повні дані якими буде замінено попередню інформацію.

Третій пункт використовуючи пізнє зв’язування виводить інформацію з базового класу.

Четвертий - відповідно до завдання, за допомогою методу класу «Організація» виведе кількість наявних в базі працівників досвід роботи яких перевищує задане число.

П’ятий пункт завершує роботу з програмою, почергово викликаючи деструктори та вивільняючи пам’ять.

Контрольний приклад та аналіз результатів комп’ютерної реалізації програми

Запуск програми

Додавання працівника

Результат


Результат

Друк персональної інформації шляхом видобування інформації із базового класу


Виведення кількості працівників з досвідом більше заданого


Вихід з програми


Список використаної літератури

Конспект лекцій з дисципліни: «Об’єктно-орієнтоване програмування», Кравець П.О., 2013 рік

«Об’єктно-орієнтоване програмування», підручник, Кравець П.О.

Медіа ресурс:

<http://om.univ.kiev.ua/users_upload/15/upload/file/prog_lecture_09.pdf>

Додаток(тексти програм)

клас алгоритм графічний інтерфейс

Код головної програми

#define _CRT_SECURE_NO_WARNINGS

#include <cstdlib>

#include <iostream>

#include "Person.h"

#include "Employee.h"

#include "Organization.h"namespace std;main()

{("chcp 1251 > nul");FBI;<Employee>I(FBI);S("Іванов","Іван","Іванович",0,12,5,87,"FBI","CS","Manager",5424,5);.Add(S);.Add("Сидорів","Сидір","Сидорович",0,11,2,90,"NASA","SA","Tester",3123,2);* SA = new Employee("Головач","Олена","Федорівна",1,2,9,91,"FBI","FL","Makler",3444,1);.Add(*dynamic_cast<Employee*>(SA));SA;.MainMenu();

}

Код класу «Organization»

#pragma once

#include "Employee.h"const Amount_Employes = 40;Organization

{Array[ Amount_Employes ];:int NowCount;MainMenu()

{c;(true)

{("cls");<<"Organizationstuff: "<<endl;();<<endl<<"1 - Add Emploee "<<endl;<<"2 - Edit Emploee "<<endl;<<"3 - Print Personal Info "<<endl;<<"4 - Count of E with Exp > then"<<endl;<<"0 - Exit "<<endl;= getchar();temp;n;(c)

{:<<"Wrong choise "<<endl;;'0':<<"Exit";

_sleep(200);('.');

_sleep(200);('.');

_sleep(200);('.');

_sleep(200);(0);;'1':<<"Enter Data:"<<endl;>>temp;(temp);;'3':();;'2':<<"Enter # of Emploee"<<endl;>>n;(n>NowCount && n<0)

{<<"Wrong #"<<endl;>>n;

}-;<<"Enter new Data:"<<endl;>>temp;[n] = temp;;'4':<<"Then :"<<endl;>>n;<<"Exp Count:"<<ExpCount(n)<<endl;;

}("pause");

}

}* GetBase()

{Array;

}ExpCount(int N)

{Count = 0;(int i = 0; i < NowCount; i++)

{( (Array[i]).GetExperience() > N)

{

++Count;

}

}Count;

}PrintAll()

{<<"--------------------------------------------------------------------------------------------------------------------------------"<<endl;<<"SNameNameFNameGenderBirth DateOrganizationSpecialtyPositionExperienceSalary"<<endl;<<"--------------------------------------------------------------------------------------------------------------------------------"<<endl;(int i = 0; i < NowCount; i++)

{<<Array[i]<<endl;

}

}PrintPerson()

{<<"---------------------------------------------------"<<endl;<<"SNameNameFNameGenderBirth Date"<<endl;<<"---------------------------------------------------"<<endl;(int i = 0; i < NowCount; i++)

{<<(Person)Array[i]<<endl;

}

}Add(Employee & E)

{[NowCount] = E;

++NowCount;

}Add(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY,char O[],Sp[],char P[],int S,int E)

{t(SN,N,F,G,DD,MM,YYYY,O,,P,S,E);[NowCount] = t;

++NowCount;

}()

{

}

~Organization()

{

}

};Organization::NowCount = 0;<class T>Iterator

{= (T*)t.GetBase();

}

& GetCurData()

{*I;

}

& operator++()

{*I+=1;

}& operator++(int)

{*I+=1;

}

& operator--()

{*I-=1;

}

& operator--(int)

{*I-=1;

}

& operator=(T & t)

{I=t;

}

()

{}

~Iterator()

{}

};

Код класу “Person”

#pragma once

#include<cstring>

#include<iostream>namespace std;Date

{DD;MM;YYYY;(){}(int D,int M,int Y)

{= D;= M;= Y;

}

};Person

{SName[32];Name[32];FName[32];Gender;

:Date BDate;* SetSName(char * SN)

{(SName,SN);SName;

}* SetName(char * N)

{(Name,N);Name;

}* SetFName(char * FN)

{(FName,FN);FName;

}& SetGender(bool G)

{= G;Gender;

}* SetDate(int DD,int MM, int YYYY)

{.DD = DD;.MM = MM;.YYYY = YYYY;& BDate;

}

(){}(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY):(G), BDate(DD , MM , YYYY)

{(SName,SN);(Name,N);(FName,F);

}

(Person & P)

{= P.Gender;(SName, P.SName);(Name,P.Name);(FName,P.FName);.DD = P.BDate.DD;.MM = P.BDate.MM;.YYYY = P.BDate.YYYY;

}~Person(){}

istream & operator >> (istream & is,Person&);

ostream& operator<<(ostream&, Person&);

& operator () (char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY)

{= G;.DD = DD;.MM = MM;.YYYY = YYYY;(SName,SN);(Name,N);(FName,F);

}

char *GetSName()

{SName;

}char *GetName()

{Name;

}char *GetFName()

{FName;

}boolGetGender()

{Gender;

}struct Date GetDate()

{BDate;

}int GetExperience(){return 0;}

};& operator <<(ostream & os,Person & P)

{.widen(10);os<<P.GetSName()<<'\t'<<P.GetName()<<'\t'<<P.GetFName()

<<'\t'<<(P.GetGender()?'Ж':'Ч')<<'\t'

<<P.GetDate().DD<<'.'<<P.GetDate().MM<<'.'<<P.GetDate().YYYY;

{is>>P.SetName("")>>P.SetSName("")>>P.SetFName("")

>>P.SetGender("")>>P.BDate.DD>>P.BDate.MM>>P.BDate.YYYY;

};

Код класу «Emploee»

#pragma once

#include <cstring>

#include "person.h"Employee : public Person

{Organization[32];Specialty[32];Position[32];Salary;Experience;:GetExperience()

{Experience;

}(Employee & E)

{(Organization,E.Organization);(Position,E.Position);(Specialty,E.Specialty);= E.Salary;= E.Experience;

}(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY,char O[],Sp[],char P[],int S,int E)

:Salary(S),Experience(E),Person(SN,N,F,G,DD,MM,YYYY)

{(Organization,O);(Position,P);(Specialty,Sp);

}char *GetSName()

{Person::GetSName();

}

char *GetName()

{Person::GetName();

}

char *GetFName()

{Person::GetFName();

}

boolGetGender()

{Person::GetGender();

}struct Date GetDate()

{Person::GetDate();

}(){}

~Employee(){}

istream& operator >> (istream & is,Employee& P);ostream& operator <<(ostream & os, Employee& P);

};& operator <<(ostream & os, Employee & P)

{.widen(10);os<<P.GetSName()<<'\t'<<P.GetName()<<'\t'<<P.GetFName()

<<'\t'<<(P.GetGender()?'Ж':'Ч')<<'\t'

<<P.GetDate().DD<<'.'<<P.GetDate().MM<<'.'<<P.GetDate().YYYY

<<"\t\t"<<P.Organization<<"\t\t"<<P.Specialty<<"\t\t"<<P.Position

<<"\t\t"<<P.Experience<<"\t\t"<<P.Salary;

}& operator >> (istream& is, Employee& P )

{is>>P.SetName("")>>P.SetSName("")>>P.SetFName("")

>>P.SetGender("")>>P.BDate.DD>>P.BDate.MM>>P.BDate.YYYY

>>P.Organization>>P.Specialty>>P.Position>>P.Experience>>P.Salary;

};

Похожие работы на - Композиція та успадкування класів

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!