Композиція та успадкування класів
Розроблення графічних схем класів та алгоритмів. Контрольний приклад та аналіз результатів комп’ютерної реалізації програми, її лістінг. Проектування інтерфейсу користувача. Послідовність побудування класів "Особа", "Службовець" й "Організація".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 16.06.2014 |
Размер файла | 839,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Міністерство освіти та науки України
Національний університет «Львівська політехніка»
Кафедра інформаційних
систем та мереж
Звіт до розрахункової роботи
з дисципліни: «Об'єктно-орієнтоване програмування»
на тему:
«Композиція та успадкування класів»
Львів 2014
Зміст
Завдання для розрахункової роботи
Формулювання задачі
Структура програми
Проектування інтерфейсу користувача
Розроблення графічних схем класів та алгоритмів
Контрольний приклад та аналіз результатів комп'ютерної реалізації програми
Список використаної літератури
Додаток(тексти програм)
Завдання для розрахункової роботи
Завдання 6
1. Створити клас ОСОБА (прізвище, ім'я, по батькові, дата народження, стать та ін.).
2. Визначити конструктори ініціалізації, копіювання, деструктори та методи для зміни і читання значень полів даного класу.
3. Перевантажити операцію () для встановлення значень полів даних, операцію присвоєння об'єктів = , потокові операції введення >> та виведення << об'єктів.
4. Створити похідний клас СЛУЖБОВЕЦЬ з додатковими полями - організація, спеціальність за дипломом, посада, оклад, стаж роботи. Визначити необхідні дані, методи, конструктори та деструктори, методи або операторні функції введення-виведення.
5. У межах ієрархії класів побудувати поліморфічний кластер на основі віртуального методу читання прізвища особи або назви організації. Продемонструвати механізм пізнього зв'язування.
6. Розробити клас ОРГАНІЗАЦІЯ, що містить масив об'єктів класу СЛУЖБОВЕЦЬ. Знайти кількість осіб, стаж роботи яких перевищує наперед задане значення.
7. Для роботи з масивом об'єктів побудувати та використати клас-ітератор.
Формулювання задачі
Відповідно до завдання мені потрібно буде побудувати 3 класи:
Особа
Службовець
Організація (з вбудованим класом ітератором)
Клас Особа буде базовим класом та буде містити такі поля: прізвище, ім'я, по батькові, дата народження, стать. Та містити в собі віртуальні інтерфейсні методи та методи з перевантаженими операціями.
Клас Службовець буде доповнювати клас Особа ще декількома полями такими як: організація, спеціальність за дипломом, посада, оклад, стаж роботи.
Клас організація буде містити масив-контейнер для зберігання об'єктів типів Особа та Службовець, а також інтерфейсний метод для маніпулювання даними всередині контейнера.
Структура програми
У створюваній програмі використовується багатофайлова система побудови коду. Головна програма включає в себе заголовкові файли інших програмних модулів які відповідно містять в собі оголошення та визначення класів котрі використовуються у програмі.
При такій організації структури програми її можна утотожнити із загальною структурою побудови програми. Тому буде використана така файлова структура:
rozr.cpp - файл коду програми який містить у собі виклики методів та створення базових об'єктів.
Employee.h - заголовковий файл що оголошує та визначає похідний клас з даним та методами.
Organization.h - заголовковий файл що містить контейнерний клас з масивом об'єктів та методами маніпулювання ними.
Person.h - заголовковий файл що оголошує та визначає базовий клас з даним та віртуальними методами для подальшого перевизначення.
Проектування інтерфейсу користувача
У даній програмі використано консольний інтерфейс користувача. Головне меню запускається за допомого методу класу «Організація» та містити в собі 5 пунктів:
1 - Add Emploee - Додати працівника
2 - Edit Emploee - Редагувати працівника
3 - Print Personal Info - Надрукувати персональні дані працівників
4 - Count of E with Exp > then - Знайти кількість осіб, стаж роботи яких перевищує наперед задане значення
0 - 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"
using namespace std;
int main()
{
system("chcp 1251 > nul");
Organization FBI;
Iterator <Employee>I(FBI);
Employee S("Іванов","Іван","Іванович",0,12,5,87,"FBI","CS","Manager",5424,5);
FBI.Add(S);
FBI.Add("Сидорів","Сидір","Сидорович",0,11,2,90,"NASA","SA","Tester",3123,2);
Person * SA = new Employee("Головач","Олена","Федорівна",1,2,9,91,"FBI","FL","Makler",3444,1);
FBI.Add(*dynamic_cast<Employee*>(SA));
delete SA;
FBI.MainMenu();
}
Код класу «Organization»
#pragma once
#include "Employee.h"
int const Amount_Employes = 40;
class Organization
{
Employee Array[ Amount_Employes ];
public:
static int NowCount;
void MainMenu()
{
char c;
while (true)
{
system("cls");
cout<<"Organizationstuff: "<<endl;
PrintAll();
cout<<endl<<"1 - Add Emploee "<<endl;
cout<<"2 - Edit Emploee "<<endl;
cout<<"3 - Print Personal Info "<<endl;
cout<<"4 - Count of E with Exp > then"<<endl;
cout<<"0 - Exit "<<endl;
c = getchar();
Employee temp;
int n;
switch (c)
{
default:
cout<<"Wrong choise "<<endl;
break;
case '0':
cout<<"Exit";
_sleep(200);
putchar('.');
_sleep(200);
putchar('.');
_sleep(200);
putchar('.');
_sleep(200);
exit(0);
break;
case '1':
cout<<"Enter Data:"<<endl;
cin>>temp;
Add(temp);
break;
case '3':
PrintPerson();
break;
case '2':
cout<<"Enter # of Emploee"<<endl;
cin>>n;
while (n>NowCount && n<0)
{
cout<<"Wrong #"<<endl;
cin>>n;
}
n--;
cout<<"Enter new Data:"<<endl;
cin>>temp;
Array[n] = temp;
break;
case '4':
cout<<"Then :"<<endl;
cin>>n;
cout<<"Exp Count:"<<ExpCount(n)<<endl;
break;
}
system("pause");
}
}
void * GetBase()
{
return Array;
}
int ExpCount(int N)
{
int Count = 0;
for (int i = 0; i < NowCount; i++)
{
if ( (Array[i]).GetExperience() > N)
{
++Count;
}
}
return Count;
}
void PrintAll()
{
cout<<"--------------------------------------------------------------------------------------------------------------------------------"<<endl;
cout<<"SNameNameFNameGenderBirth DateOrganizationSpecialtyPositionExperienceSalary"<<endl;
cout<<"--------------------------------------------------------------------------------------------------------------------------------"<<endl;
for (int i = 0; i < NowCount; i++)
{
cout<<Array[i]<<endl;
}
}
void PrintPerson()
{
cout<<"---------------------------------------------------"<<endl;
cout<<"SNameNameFNameGenderBirth Date"<<endl;
cout<<"---------------------------------------------------"<<endl;
for (int i = 0; i < NowCount; i++)
{
cout<<(Person)Array[i]<<endl;
}
}
void Add(Employee & E)
{
Array[NowCount] = E;
++NowCount;
}
void Add(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY,char O[],
char Sp[],char P[],int S,int E)
{
Employee t(SN,N,F,G,DD,MM,YYYY,O,
Sp,P,S,E);
Array[NowCount] = t;
++NowCount;
}
Organization()
{
}
~Organization()
{
}
};
int Organization::NowCount = 0;
template<class T>
class Iterator
{
T * I;
public:
Iterator( Organization &t)
{
I = (T*)t.GetBase();
}
T & GetCurData()
{
return *I;
}
T & operator++()
{
return *I+=1;
}
T & operator++(int)
{
return *I+=1;
}
T & operator--()
{
return *I-=1;
}
T & operator--(int)
{
return *I-=1;
}
T & operator=(T & t)
{
return I=t;
}
Iterator()
{}
~Iterator()
{}
};
Код класу “Person”
#pragma once
#include<cstring>
#include<iostream>
using namespace std;
struct Date
{
int DD;
int MM;
int YYYY;
Date(){}
Date(int D,int M,int Y)
{
DD = D;
MM = M;
YYYY = Y;
}
};
class Person
{
char SName[32];
char Name[32];
char FName[32];
bool Gender;
public:
struct Date BDate;
char * SetSName(char * SN)
{
strcpy(SName,SN);
return SName;
}
char * SetName(char * N)
{
strcpy(Name,N);
return Name;
}
char * SetFName(char * FN)
{
strcpy(FName,FN);
return FName;
}
bool & SetGender(bool G)
{
Gender = G;
return Gender;
}
Date * SetDate(int DD,int MM, int YYYY)
{
BDate.DD = DD;
BDate.MM = MM;
BDate.YYYY = YYYY;
return & BDate;
}
Person(){}
Person(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY):
Gender(G), BDate(DD , MM , YYYY)
{
strcpy(SName,SN);
strcpy(Name,N);
strcpy(FName,F);
}
Person(Person & P)
{
Gender = P.Gender;
strcpy(SName, P.SName);
strcpy(Name,P.Name);
strcpy(FName,P.FName);
BDate.DD = P.BDate.DD;
BDate.MM = P.BDate.MM;
BDate.YYYY = P.BDate.YYYY;
}
virtual ~Person(){}
friend istream & operator >> (istream & is,Person&);
friend ostream& operator<<(ostream&, Person&);
Person & operator () (char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY)
{
Gender = G;
BDate.DD = DD;
BDate.MM = MM;
BDate.YYYY = YYYY;
strcpy(SName,SN);
strcpy(Name,N);
strcpy(FName,F);
}
virtual char *GetSName()
{
return SName;
}
virtual char *GetName()
{
return Name;
}
virtual char *GetFName()
{
return FName;
}
virtual boolGetGender()
{
return Gender;
}
virtual struct Date GetDate()
{
return BDate;
}
virtual int GetExperience(){return 0;}
};
ostream& operator <<(ostream & os,Person & P)
{
cout.widen(10);
return os<<P.GetSName()<<'\t'<<P.GetName()<<'\t'<<P.GetFName()
<<'\t'<<(P.GetGender()?'Ж':'Ч')<<'\t'
<<P.GetDate().DD<<'.'<<P.GetDate().MM<<'.'<<P.GetDate().YYYY;
}
istream& operator >> (istream & is,Person&P)
{
return 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"
class Employee : public Person
{
char Organization[32];
char Specialty[32];
char Position[32];
int Salary;
int Experience;
public:
int GetExperience()
{
return Experience;
}
Employee(Employee & E)
{
strcpy(Organization,E.Organization);
strcpy(Position,E.Position);
strcpy(Specialty,E.Specialty);
Salary = E.Salary;
Experience = E.Experience;
}
Employee(char SN[],char N[],char F[],bool G,int DD,int MM,int YYYY,char O[],
char Sp[],char P[],int S,int E)
:Salary(S),Experience(E),Person(SN,N,F,G,DD,MM,YYYY)
{
strcpy(Organization,O);
strcpy(Position,P);
strcpy(Specialty,Sp);
}
virtual char *GetSName()
{
return Person::GetSName();
}
virtual char *GetName()
{
return Person::GetName();
}
virtual char *GetFName()
{
return Person::GetFName();
}
virtual boolGetGender()
{
return Person::GetGender();
}
virtual struct Date GetDate()
{
return Person::GetDate();
}
Employee(){}
~Employee(){}
friend istream& operator >> (istream & is,Employee& P);
friend ostream& operator <<(ostream & os, Employee& P);
};
ostream& operator <<(ostream & os, Employee & P)
{
cout.widen(10);
return 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;
}
istream& operator >> (istream& is, Employee& P )
{
return 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;
};
Размещено на Allbest.ru
Подобные документы
Послідовність створення бази даних автопарку. Визначення об'єктів та класів і зв’язків між ними. Конструктори та деструктори, успадкування класів. Реалізація програми в середовищі Visual Studio C++, її тестування. Побудова об’єктної моделі додатку.
курсовая работа [529,0 K], добавлен 25.01.2016Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.
курсовая работа [98,0 K], добавлен 06.05.2014Концепції об'єктно-орієнтованого програмування. Конструктори та деструктори. Успадкування класів. Побудова об’єктної моделі. Визначення об'єктів та класів і зв’язків між ними. Реалізація програми в середовищі Visual Studio C++. Інтерфейс програми.
курсовая работа [743,7 K], добавлен 25.01.2016Аналіз предметної галузі задачі моделювання пострілу балісти через стіну по мішені. Структури даних та діаграми класів для розв'язання задачі. Схеми взаємодії об’єктів та алгоритми виконання їх методів. Опис розробленої програми, інструкція користувача.
курсовая работа [1,0 M], добавлен 18.05.2014Аналіз технічного забезпечення, вибір інструментального програмного забезпечення та середовища розробки програм. Створення класів для реалізації необхідних функцій для роботи програмного засобу. Розробка інтерфейсу для користувача та лістинг програми.
курсовая работа [343,9 K], добавлен 24.08.2012Характеристика і функції телефонних довідників. Визначення об'єктів і класів і залежностей (зв'язків) між ними. Побудова діаграми ієрархії класів. Реалізація програми в середовищі Borland Delphi. Її інтерфейс і демонстрація можливостей. Тестовий приклад.
курсовая работа [349,3 K], добавлен 25.01.2016Визначення поняття автоматизації та інформаційної технології. Вибір мови програмування, аналіз бібліотеки класів та системи масового обслуговування. Реалізація інтерфейсу програми Visual C# 2010 Express. Діаграма класів до основних функцій программи.
курсовая работа [1,5 M], добавлен 28.04.2012Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.
лабораторная работа [451,0 K], добавлен 25.01.2014Об’єктно-орієнтований аналіз, визначення класів та методів. Загальна схема функціонування системи. Представлення учбового матеріалу, питань та відповідей. Графічний інтерфейс користувача для роботи з програмою. Використання програми викладачами.
курсовая работа [1,3 M], добавлен 09.01.2014Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010