Об‘єктно-орієнтовне програмування

Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 14.03.2013
Размер файла 104,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

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

Вінницький національний технічний університет

Кафедра обчислювальної техніки

Курсовий проект

на тему:

“Об`єктно-орієнтовне програмування”

Виконав: ст. гр. 2КС-02

Коробко А.В.

Перевірив: Черняк О.І.

Вінниця 2009

1. Анотація

В даній курсовій роботі була виконана розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування, яка включала в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою.

2. Технічне завдання

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

Програма меню повинна містити п'ять пунктів:

Про програму.

Редагування файлу даних.

Редагування програми.

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

Вихід.

Програма варіанту задачі зчитує вхідні данні з файлу динамічно виділивши під них пам`ять, обробляє інформацію відповідно завдання та виводить результати на екран у графічному режимі. Програма виконана таким чином, щоб при зміні вхідних даних програма обробляла їх без перекомпіляції. Обидві програми повинні бути реалізовані мовою С++ з використанням об`єктно-орієнтованого програмування. Необхідно використовувати такі поняття як інкапсуляція, наслідування, дружні зв`язки, конструктори, конструктори, віртуальні функції.

Умова задачі:

У файлі задані координати кінців відрізків прямої . Вивести на екран відрізки, що перетинаються. Окремим кольором виділити ті з них, які мають сумарну найбільшу довжину.

3. Опис методу вирішення задачі та узагальнений алгоритм

Математична модель

Задані координати відрізків прямої.

1. Потрібно визначити чи перетинаються дані відрізки.

Для знаходження скористаємось рівнянням прямої :

.

Перетворимо цей вираз

()*()=()*()

Розглянемо приклад:

Складемо рівняння прямої для відрізку AB і CD.

По черзі підставимо координати точок А і В у рівняння прямої відрізку CD, якщо значення різні, то відрізок CD перетинає відрізок АВ. Підставляємо в рівняння АВ координати точок C і D, якщо знаки також різні, то відрізок CD дійсно перетинає відрізок АВ. Якщо ж знаки в першому або другому випадках будуть однакові, то відрізки не перетинаються.

2. Знайти довжину відрізка. Нехай є відрізок ВС. Спроектуємо його на осі координат. Розглянемо трикутник ВСD: DВ=х2-х1; СD=у2-у1; Скористуємось теоремою Піфагора, тоді

4. Короткі теоретичні відомості

У 80-х роках мова С++ стала одною з найбільш розповсюджених та універсальних мов програмування. З допомогою цієї мови можна створювати програми для широкого класу комп'ютерів. В 70-х роках серед створювачів мов програмування популярною стала концепція об'єкту. Об'єкт є сукупністю коду і даних, що створена для відтворення властивостей фізичних предметів чи абстрактних понять.

Об'єктно-орiєнтоване програмування - результат природної еволюції бiльш раннiх методологiй програмування. Воно виинкло з нроцедурного програмування. В об'єктно-орiєнтованому програмуванні ви відходите від ділення задач на під задачі. Ви намагаєтесь побачити вашу задачу, утворену з взаємодій між абстракціями - ідеалізованими об'єктами реального світу. Таким чином, ціль у тому, щоб використовувати в програмуванні повсякденний досвід і знання про поведінку звичайних об'єктів. Об'єкт - це абстракція, але з чітко визначеними властивостями чи ролями. Об'єктно-орiєнтоване програмування є методом програмування, який імітує виконання людиною якої-небудь роботи. Воно бiльш структуроване i бiльш модульне i абстрактне, нiж традицiйне програмування.

За винятком другорядних деталей C++ є надмножиною мови програмування C. Крім можливостей, що дає C, C++ надає гнучкі й ефективні засоби визначення нових типів. Використовуючи визначення нових типів, програміст може розділяти розроблювальну програму на піддающіся легкому контролю частини. Такий метод побудови програм часто називають абстракцією даних. Інформація про типи утримується в деяких об'єктах типів, визначених користувачем. Такі об'єкти прості й надійні у використанні в тих ситуаціях, коли їхній тип не можна встановити на стадії компіляції. Програмування з застосуванням таких об'єктів часто називають об'єктно-орієнтованим. При правильному використанні цей метод дає більш короткі й зрозуміліші контрольовані програми.

Ключовим поняттям в С++ є клас. Клас - це тип, визначений користувачем. Класи забезпечують захист (закриття) даних, гарантовану ініціалізацію даних, не явне перетворення типів для типів, визначених користувачем, динамічне завдання типу, контрольоване користувачем керування пам'яттю і механізми перевантаження операцій. C++ надає набагато кращі, чим у C, засоби вираження модульності програми і перевірки типів. У мові є також удосконалення, не пов'язані безпосередньо з класами, що включають у себе символічні константи, inline- підстановку функцій, параметри функції по замовчуванню, перевантажені імена функцій, операції керування вільною пам'яттю. У C++ збережені можливості мови C по роботі з основними об'єктами апаратного забезпечення (біти, байти, слова, адреси і т.п.). Це дозволяє дуже ефективно реалізовувати типи, обумовлені користувачем.

Об'єктно-орієнтовне програмування - методологія, яка концентрується більше на зв'язках між об'єктами, ніж на деталях реалізаціїъ . Дані зв'язку зазвичай розвиваються по принципу дерев, при цьому нові типи об'єктів утворюються із вже існуючих.

В С++ деякі об'єкти є частиною самоъ мови. Але в цілому задача створення нових об'єктів полягає на користувача. В Borland C++ є велика кількість типів об'єктів, але реальне використання мови потребує утворення нових типів. Ефективність ООП проявляється тільки при утворенні і застосуванні груп зв'язаних між собою об'єктів. Такі групи зазвичай називають ієрархіями класів. Розвиток цих ієрархій класів є основою в діяльності ООП.

C++ і його стандартні бібліотеки спроектовані так, щоб забезпечувати мобільність. Наявна на сучасний момент реалізація мови буде йти в більшості систем, що підтримують C. З C++ програм можна використовувати C бібліотеки, і з C++ можна використовувати велику частину інструментальних засобів, що підтримують програмування на C.

Всі мови об'єктно орієнтованого програмування (ООП), включаючи С++, основані на трьох основних концепціях, які називаються: інкапсуляція, поліморфізм і наслідування.

5. Характеристики об'єктів

Об'єкт - щось абстрактне, але з чітко визначеними властивостями чи ролями. У такому випадку схожі об'єкти володіють схожими властивостями і ролями, а несхожі, відповідно, ні. В об'єктно-орієнтованому програмуванні схожі об'єкти належать до тих самих, чи до схожих класів, так само як і в реальному житті.

Розподіл ролей і властивостей можна спостерігати також і в надрах комп'ютерних програм - і метою об'єктно-орієнтованого програмування є виявлення цих залежностей. У сутності в С++ об'єкти є екземплярами класу, зовсім як в інших системах наукової класифікації. Однак перш ніж зануритися в обєктно-орієнтовану розробку, давайте розглянемо деякі з властивостей, загальні для класу "об'єктів".

Абстракція

Ціль об'єктно-орієнтованого програмування полягає в тому, щоб побачити в задачі абстракції об'єктів реального світу. Що за реальні об'єкти малися на увазі? Буквально будь-які, аби вони давали представлення про функціонування програм. Ці об'єкти можуть бути матеріальними -- ракети, кулінарні книги, інструменти. Або вони можуть бути ролями -- сторож, батько, художник. Вони можуть бути подіями -- недостача пам'яті, розпродаж, закривання дверей. Тобто усе, що дає поняття про те, що в дійсності представляє із себе об'єкт.

Інкапсуляція

У той час як абстракція має справу з ролями і властивостями об'єкта, інкапсуляція відноситься до реалізації і структури об'єкта. Узагалі говорячи, клієнту об'єкта немає справи до того, як об'єкт працює (це може мати значення, якщо його послуги занадто повільні чи помилкові); йому важливо лише, щоб декларований об'єктом сервіс неухильно надавався. Таким чином, конструкція об'єкта звичайно захована від очей клієнта; синонімом інкапсуляції може служити більш зрозумілий термін приховання інформації. Інкапсуляція дозволяє користувачам об'єкта ігнорувати подробиці реалізації, що знижує складність систем. Те, що кінцеві користувачі об'єкта не мають відносини до його реалізації, дуже вигідно, зокрема, при роботі над великомасштабними програмними проектами і бібліотеками .

Модульність

Інкапсуляція дозволяє сховати від кінцевого користувача деталі реалізації і зробити систему менш складною і більш зрозумілою. Концепція модульності йде далі. Тепер, коли об'єкти визначені і непотрібні подробиці заховані, потрібно згрупувати об'єкти в логічні модулі, що поєднують взаємозалежні об'єкти і класи, а іншим модулям нехай будуть доступні тільки ті деталі інтерфейсу, що абсолютно необхідні. Інтерфейсні частини знаходяться у файлах заголовків (за традицією вони мають розширення .h чи .hpp). При цьому деталі реалізації, що не представляють інтересу для інших модулів, залишаться у файлах типу .с, .сс, .ср чи .срр. У чому переваги такого підходу?

По-перше, уявимо собі програмний проект, у якому беруть участь кілька програмістів. Коли класи й об'єкти рознесені по окремих модулях, кожен програміст може працювати незалежно від інших. Один з одним модулі поєднують тільки інтерфейсні частини об'єктів, що знаходяться в заголовних файлах і визначені звичайно до стадії реалізації. Модульність підтримує великомасштабне програмування - на противагу програмуванню маломасштабному, що має схильність валити всі класи й об'єкти в одну купу. У об'єктно-орієнтованій розробці фізичному втіленню передує визначення абстрактних і логічних взаємин.

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

Третьою перевагою модульності є легкість, з якою уміло згруповані по модулях об'єкти і класи можна повторно використовувати в інших проектах з мінімальними змінами чи без них взагалі. Повторне використання програмного забезпечення -- це одна з найвищих цілей об'єктно-орієнтованої розробки; немає кращого шляху полегшити собі роботу, чим використовувати класи, об'єкти і модулі, що уже добре відомі!

Ієрархія

Навіть маючи на озброєнні абстракцію, інкапсуляцію і модульність, можна упустити загальну картину системи: навколо стільки абстрактних об'єктів, що за всіма просто не устежити. І отут приходить на допомогу ієрархія. Ієрархію можна вважати, мабуть, візитною карткою об'єктно-орієнтованого стилю. Найбільш затяті його адепти стверджують навіть, що якщо в проекті не використовується ієрархія ( частіше називають наслідуванням), то він просто не об'єктно-орієнтований.

При розгляді абстракції великі переваги дає виділення об'єктів з певною визначеною функціональністю. При аналізі проблемної області часто буває, що кілька об'єктів мають очевидно схожі структури чи функціональність. Якщо поводження об'єкта чи класу аналогічно поводженню іншого класу, то ми маємо справу з простим наслідуванням. Якщо ж у функціональності чи структурі класу присутні риси декількох класів, то має місце випадок множинного наслідування.

Наслідування часто пояснюють як можливість установити відношення "приналежності" між об'єктами, класами і типами даних. Явний приклад множинного спадкування: качконіс - успадковує характерні риси як ссавців, так і пернатих. Без механізму спадкування вам доведеться постійно повторюватися. Таким чином, ієрархія -- це ще одна характеристика об'єктів, яку завжди варто відшукувати, займаючись об'єктно-орієнтованими аналізом і проектуванням.

Поліморфізм

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

6. Огляд аналізу і проектування

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

З об'єктно-орієнтованого аналізу, як правило, починається цикл розробки; ми розглядаємо задачу з погляду класів і об'єктів.

На стадії проектування в нас уже сформувалося виразне уявлення про проблему як сукупності сутностей і їхніх взаємин, і ми починаємо розбивати задачу на реальні класи й об'єкти.

Об'єктно-орієнтоване програмування полягає власне у втіленні в життя наших класів і об'єктів (використовуючи, у даному випадку, C++).

Темі об'єктно-орієнтованого аналізу і проектування присвячено чимало чудових глибоких праць: але практично всі автори -- як теоретики, так і практики-- згодні з думкою батька-засновника C++ Бъярна Страуструпа (Bjarne Stroustrop), який стверджує, що досконалих правил ідентифікації об'єктів проблемної області не буває. Експериментування, навчання на своїх успіхах і своїх помилках -- це найкраще правило.

Методи аналізу

Об'єктно-орієнтований аналіз переслідує своєю ціллю розглянути об'єкти у вашій проблемній області. Можна намагатися класифікувати об'єкти по подібності в поведінці чи характерних рисах. Це непроста задача, але давайте згадаємо -- існує безліч наук набагато більш древніх, ніж обчислювальна техніка, у яких класифікація об'єктів своєї предметної області дотепер залишається улюбленим проводженням часу. Так що нічого немає правильного або неправильного -- потрібно працювати з тим, що працює!

Аналіз поведінки

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

Аналіз області застосування

Коли йде розробка якоїсь системи, то це, найчастіше, не перша система такого роду. Можна поговорити із людьми, знайомими з предметом. Наприклад, якщо йде розробка вексельної системи для юридичної фірми, можна поговорити з юристами і нотаріусами. Вони, напевно, користалися схожими системами і можуть розповісти масу цікавого не тільки про те, що повинна робити нова система, але і про те, чого вона робити не повинна. І ще вони прекрасно знайомі з "об'єктами", що будуть фігурувати в системі -- протоколами, звітами і т.п. Ніколи не можна недооцінювати знання і можливу допомогу кінцевих користувачів.

Аналіз "з кінця"

Експерти в предметній області абсолютно незамінні, коли розглядається задача з погляду майбутнього використання продукції. Спілкуючись з користувачами, потрібно уявити собі різні схеми роботи системи. А потім, програючи ці сценарії, вичленувати об'єкти, взаємозв'язки і моделі поведінки, необхідні для забезпечення адекватної функціональності.

Структурний аналіз

Ми всі дуже добре знайомі з практикою поділу задачі на підзадачі. Чи то це обумовлено нашим освітою, чи це в нашій природі, але для більшості з нас це не представляє особливих зусиль. Виділивши етапи і під етапи, спробуємо побачити об'єкти і їхні взаємозв'язки.

Який би аналітичний підхід до проблеми не застосовувався, завжди потрібно пам'ятати, що ж ми шукаємо. Ключові характеристики об'єктів -- це абстракція, інкапсуляція, модульність і ієрархія. Коли ми окреслили об'єкти -- будь-яким доступним нам методом -- почнемо з того, що постараємося зрозуміти, яка інформація абсолютно необхідна взаємодіючим класам (інкапсуляція). Розберемося, які класи взаємозалежні, а які ні (модульність). І нарешті подивимося, які класи мають схожі характеристики і функціонування (ієрархія). Поки ми перебуваємо в стадії аналізу і проектування, ми вільні як завгодно комбінувати об'єкти, розділяти їх і так далі. Коли ж почнеться реалізація, повертатися буде вже занадто пізно. Давайте експериментувати, поки є можливість!

Проектування

Як уже згадувалося, об'єктно-орієнтовані аналіз і проектування -- дуже близькі родичі. Коли задача проаналізована, залишається насправді тільки уточнити деталі реалізації. Тут самий час зосередитися на взаємозв'язках між об'єктами і модулями. Роздивитися типи спадкування між об'єктами, визначити необхідні типи повідомлень, число параметрів і так далі. Існує ряд систем позначення для відтворення проекту на папері. Гарне документування проекту може істотно полегшити його втілення в життя.

Вигоди

Тепер, розглянувши характеристики об'єктів і деякі технології аналізу і проектування, можна коротенько резюмувати вигоди об'єктно-орієнтованої розробки.

Проект повинен

* Грамотно використовувати об'єктно-орієнтовані конструкції C++. Широко використовуйте класи і наслідування.

* Створювати по можливості самодостатні класи -- вони будуть гарними кандидатами на повторне використання.

* Бути зрозумілим. Найбільша вигода об'єктно-орієнтованого проектування -- в представленні проблеми в легкодоступному, тим хто розуміє, вигляді

Захоплення ресурсів при ініціалізації

Одне з достоїнств об'єктно-орієнтованого програмування, яке упускається часто з виду, -- це концепція захоплення ресурсів при ініціалізації, що належить Бьерну Страуструпу. Конструктори в C++ викликаються при створенні об'єкта, а деструктори -- при його видаленні, оскільки він стає більш не потрібний. Об'єкти, що вимагають ресурсів, такі як файли або блоки пам'яті повинні успішно захоплювати потрібні ресурси ще до того, як їх можна буде вважати дійсно створеними.

У такий спосіб в об'єктно-орієнтованому програмуванні досягається одна з заповітний цілей - якщо об'єкт створений, то можна бути упевненим у тому, що він створений цілком а не залишається в якому-небудь нестійкому половинчатому стані.

7. Структура класів і об'єктів

Програма.

У програмі використовуються такий клас:

lin - робочий клас, клас лінія.

class lin

{

int xp; Об'ява координати точки прямої

int yp; Об'ява координати точки прямої

int xk; Об'ява координати точки прямої

int yk; Об'ява координати точки прямої

public:

lin(int xxp,int yyp,int xxk,int yyk)

{

xp=xxp;

yp=yyp;

xk=xxk;

yk=yyk;

}

lin()

{}

void setlin(int xxp,int yyp,int xxk,int yyk) Функція установки координат класу лінія.

{

xp=xxp;

yp=yyp;

xk=xxk;

yk=yyk;

}

int getxp(){return xp;} Функція, що повертає координату точки.

int getyp(){return yp;} Функція, що повертає координату точки.

int getxk(){return xk;} Функція, що повертає координату точки.

int getyk(){return yk;} Функція, що повертає координату точки.

void draw(){line(xp,yp,xk,yk);} Функція, що виводить відрізки на екран.

int DLINA(lin a) Функція, що повертає довжину відрізка.

{

long x0,x1,y0,y1;

x0=a.getxp();

y0=a.getyp();

x1=a.getxk();

y1=a.getyk();

double dlina=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));

return dlina;

}

};

8. Лістинг програми

kursova.cpp

#include<iostream.h>

#include<stdio.h>

#include<conio.h>

#include<graphics.h>

#include<math.h>

class lin

{

int xp;

int yp;

int xk;

int yk;

public:

lin(int xxp,int yyp,int xxk,int yyk)

{

xp=xxp;

yp=yyp;

xk=xxk;

yk=yyk;

}

lin()

{}

void setlin(int xxp,int yyp,int xxk,int yyk)

{

xp=xxp;

yp=yyp;

xk=xxk;

yk=yyk;

}

int getxp(){return xp;}

int getyp(){return yp;}

int getxk(){return xk;}

int getyk(){return yk;}

void draw(){line(xp,yp,xk,yk);}

int DLINA(lin a)

{

long x0,x1,y0,y1;

x0=a.getxp();

y0=a.getyp();

x1=a.getxk();

y1=a.getyk();

double dlina=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));

return dlina;

}

};

long peretyn(lin a,lin b)

{

long x0,x1,y0,y1;

long x2,x3,y2,y3;

x0=a.getxp();

y0=a.getyp();

x1=a.getxk();

y1=a.getyk();

x2=b.getxp();

y2=b.getyp();

x3=b.getxk();

y3=b.getyk();

if

((y2*(x1-x0)+x2*(y0-y1)+x0*(y1-y0)+y0*(x0-x1)>0 &&

y3*(x1-x0)+x3*(y0-y1)+x0*(y1-y0)+y0*(x0-x1)>0)

||

(y2*(x1-x0)+x2*(y0-y1)+x0*(y1-y0)+y0*(x0-x1)<0 &&

y3*(x1-x0)+x3*(y0-y1)+x0*(y1-y0)+y0*(x0-x1)<0))

return 0;

if

((y0*(x3-x2)+x0*(y2-y3)+x2*(y3-y2)+y2*(x2-x3)>0 &&

y1*(x3-x2)+x1*(y2-y3)+x2*(y3-y2)+y2*(x2-x3)>0)

||

(y0*(x3-x2)+x0*(y2-y3)+x2*(y3-y2)+y2*(x2-x3)<0 &&

y1*(x3-x2)+x1*(y2-y3)+x2*(y3-y2)+y2*(x2-x3)<0))

return 0;

return 1;

};

int main()

{

clrscr();

int gdriver=DETECT,gmode,errorcode;

initgraph(&gdriver,&gmode,"c:\\tc\\bgi");

long xp,xk,yp,yk;

FILE* f;

int num=0;

lin* Line;

char s[256];

f=fopen("koordyna.txt","r");

while(!feof(f))

{

fscanf(f,"%s%d%d%d%d",&s,&xp,&yp,&xk,&yk);

num++;

}

Line=new lin[num];

rewind(f);

for(int i=0;i<num;i++)

{

fscanf(f,"%s%d%d%d%d",&s,&xp,&yp,&xk,&yk);

Line[i].setlin(xp,yp,xk,yk);

} setbkcolor(9);

for(i=0;i<num;i++)

Line[i].draw();

getch();

setcolor(0);

for(i=0;i<num;i++)

Line[i].draw();

setcolor(11);

double* dlina;

dlina=new double[num];

for(i=0;i<num;i++)

{

dlina[i]=Line[i].DLINA(Line[i]);

}

int lin1=0,p;

int a=dlina[0],k;

for(i=0;i<num;i++)

{

for(p=i+1;p<num;p++)

if(a<dlina[p])

{

a=dlina[p];

lin1=p;

}

}

dlina[lin1]=0;

int lin2=0;

a=dlina[0];

for(i=0;i<num;i++)

{

for(p=i+1;p<num;p++)

if(a<dlina[p])

{

a=dlina[p];lin2=p;

}

}

for(i=0;i<num;i++)

for(p=i+1;p<num;p++)

{

int y=peretyn(Line[i],Line[p]);

if(y==1)

{

Line[i].draw();

Line[p].draw();

}

}

setcolor(4);

Line[lin1].draw();

Line[lin2].draw();

getch();

fclose(f);

closegraph();

}

Програма-меню.

menu.cpp

//Menu

#include<stdio.h>

#include<conio.h>

#include<process.h>

#include<string.h>

#include<bios.h>

#define COLMENUITEM 5

#define ACTTCOLOR 11

#define PASTCOLOR 0

#define ACTBCOLOR 4

#define PASBCOLOR 6

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define ENTER 0x1c0d

enum MESSAGE {LShift,RShift,Push};

class MenuItem

{

private:

static int X;

int begX;

int begY;

int length;

char str[80];

public:

void init(int Y,char *strItem);

void showact(void);

void showpas(void);

virtual void run(void)=0;

};

int MenuItem::X=1;

void MenuItem::init(int Y,char *strItem)

{

begY=Y;

begX=X;

strcpy(str,strItem);

X+=strlen(str)+1;

};

void MenuItem::showact(void)

{

textbackground(ACTBCOLOR);

textcolor(ACTTCOLOR);

window(begX,begY,begX+strlen(str),begY);

_setcursortype(_NOCURSOR);

clrscr();

printf(" %s",str);

};

void MenuItem::showpas(void)

{

textcolor(PASTCOLOR);

textbackground(PASBCOLOR);

window(begX,begY,begX+strlen(str),begY);

_setcursortype(_NOCURSOR);

clrscr();

printf(" %s",str);

};

class MenuItem0:public MenuItem

{

public:

virtual void run(void);

};

void MenuItem0::run(void)

{

spawnl(P_WAIT,"c:\\windows\\system32\\notepad.exe"," ","koordyna.txt",NULL);

};

class MenuItem1:public MenuItem

{

public:

virtual void run(void);

};

void MenuItem1::run(void)

{

spawnl(P_WAIT,"c:\\TC\\BIN\\TC.exe"," ","",NULL);

};

class MenuItem2:public MenuItem

{

public:

virtual void run(void);

};

void MenuItem2::run(void)

{

spawnl(P_WAIT,"kursova.exe",NULL);

};

class MenuItem3:public MenuItem

{

public:

virtual void run(void);

};

void MenuItem3::run(void)

{

FILE *fin;

char ch,str[80];

window(1,3,78,20);

textcolor(3);

textbackground(0);

clrscr();

fin=fopen("c:\\tc\\bin\\menu.hlp","r");

for(int i=0;!feof(fin);i++)

{

fgets(str,80,fin);

window(1,3,78,20);

gotoxy(1,i+3);

cputs(str);

}

ch=getch();

clrscr();

};

class MenuItem4:public MenuItem

{

public:

virtual void run(void);

};

void MenuItem4::run(void)

{

exit(0);

};

class Menu

{

private:

int begY;

int NomAct;

MenuItem *(menu[COLMENUITEM]);

MenuItem0 mi0;

MenuItem1 mi1;

MenuItem2 mi2;

MenuItem3 mi3;

MenuItem4 mi4;

public:

void MenuInit(int Y);

void transmission(MESSAGE msg);

};

void Menu::MenuInit(int Y)

{

int i;

char str[80];

FILE *fin;

menu[0]=&mi0;

menu[1]=&mi1;

menu[2]=&mi2;

menu[3]=&mi3;

menu[4]=&mi4;

begY=Y;

NomAct=0;

fin=fopen("c:\\tc\\bin\\menudat.dat","r");

for(i=0;i<COLMENUITEM;i++)

{

fgets(str,81,fin);

menu[i]->init(Y,str);

if(i)

menu[i]->showpas();

else

menu[i]->showact();

}

};

void Menu::transmission(MESSAGE msg)

{

switch(msg)

{

case LShift:

{

menu[NomAct]->showpas();

if(NomAct==0)

NomAct=COLMENUITEM-1;

else

NomAct--;

menu[NomAct]->showact();

}

break;

case RShift:

{

menu[NomAct]->showpas();

if(NomAct==COLMENUITEM-1)

NomAct=0;

else

NomAct++;

menu[NomAct]->showact();

}

break;

case Push:

{

menu[NomAct]->run();

clrscr();

for(int i=0;i<COLMENUITEM;i++)

if(i==NomAct)

menu[i]->showact();

else

menu[i]->showpas();

}

break;

}

};

void main()

{

Menu mnu;

MESSAGE msg;

int ch;

textbackground(0);

clrscr();

mnu.MenuInit(2);

while(ch=bioskey(0))

{

switch(ch)

{

case LEFT:

msg=LShift;

mnu.transmission(msg);

break;

case RIGHT:

msg=RShift;

mnu.transmission(msg);

break;

case ENTER:

msg=Push;

mnu.transmission(msg);

break;

}

}

}

9. Лістинг файлів даних

Файл koordyna.txt

LINE1: 231 310 520 170

LINE2: 151 350 40 50

LINE3: 270 136 170 360

LINE4: 269 135 120 20

LINE5: 210 95 120 260

LINE6: 190 200 20 200

LINE7: 200 280 340 170

10. Роздруківка графічних результатів роботи програми

Виведення всіх прямих координати яких містяться в файлі даних.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Виведення результату роботи програми.

Размещено на http://www.allbest.ru

Размещено на http://www.allbest.ru

Червоним кольором виділенні найдовші відрізки, відрізки, що не перетинаються не виводяться.

Роздруківка меню:

Висновки

В ході курсової роботи я на практиці примінив свої знання з об'єктно-орієнтованого програмування. Поглибив розуміння основних принципів об'єктно-орієнтованої ідеології програмування. Відпрацював на практиці основні методи та засоби об'єктно-орієнтованого програмування. Навчився розробляти ієрархію класів. Практично застосував такі поняття, як інкапсуляція, наслідування, перевантаження та перевизначення функцій. Набув практичних навиків роботи.

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

програма графіка клас файл

1. В.В. Подбєльский, С.С. Фомін “Програмування на мові Сі”

2. М. Уєйт, С. Прата, Д. Мартін “Мова Сі”

3. П. Кіммел “Borland C++ 5”

4. Девіс.С. „С++ для чайников”.”Диалектика” Киев. 1996

5. Том Сван „Borland C++ практический курс”.“Диалектика” Киев 1996 р. Стор. 543.

6. Уолнеш К. „Объектно-ориентированое програмирование Borland C++” Пер.000 “ Попури” 1997 р. стор.637.

7. Ален І. Голуб „Правила програмирования С & С++ „.“Бином” Москва 1996г.

8. С. В. Глушаков „Язык программирования С++”. „Фолио” Харьков 2003г. стран. 500.

Размещено на www.allbest.


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.