Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування

 

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

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

Інститут ІТКІ

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









КУРСОВА РОБОТА

з дисципліни:

Програмування



Розробив:ст. гр. 3KC-01

Лукяненко О.О.

Керівник: асистент

Черняк О. І.









Вiнниця 2002

Завдання до курсової роботи


Скласти програмну оболонку до заданої задачі, яка повинна містити меню з командами:

1.Редагування за допомогою текстового редактора NotePad вхідного файлу даних.

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

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

.Інформація про розробника програми.

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


Анотація


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

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


Зміст


Завдання до курсової роботи.

Анотація.

Зміст.

Вступ.

Загальна структура роботи.

Розробка алгоритму виконання основного завдання.

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

Розробка допоміжних програмних засобів.

Висновки.

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

Додатки.


Вступ


Мова програмування С++ розвинулась із мови С, яка в свою чергу була створена на основі двох попередніх мов - ВСРL і В. Мова програмування ВСРL була створена в 1967 році Мартіном Ричардом як мова для написання компіляторів і програмного забезпечення операційних систем. Кен Томпсон передбачив передбачив багато можливостей в своїй мові В - копії ВСРL і використав В для створення ранніх копій операційної системи UNIX в Bell Laboratories в 1970 році. Мова програмування С була розвинута із В Деннісом Річчі в Bell Laboratories в 1972 році. С використовує багато важливих концепцій ВСРL і В, а також додає типи даних та інші особливості. С++ - розширений С - був розроблений Бєрном Страуструпом на початку 80-х років в Bell Laboratories. С++ забезпечує можливість, що найважливіше, обєктно-орієнтованого програмування. Це виявилось революційною ідеєю в світі програмного забезпечення. Обєкти - це ефективні компоненти програмного забезпечення, що повторно використовуються, і в свою чергу моделюють елементи реального світу.++ - універсальна мова програмування, яка дозволяє зробити програмування приємнішим для серйозного програміста. С++ представляє свої гнучкі і ефективні засоби визначення нових типів, застосування яких значно полегшує та спрощує технологію програмування. Використовуючи визначення нових типів програміст може розділяти свою програму на простіші частини, які легше проконтролювати. Такий метод побудови програм часто називають абстракцією даних. Інформація про типи міститься в деяких обєктах типів, визначених користувачем. Все, чим ми маніпулюємо в програмі, може розглядатися як обєкт. Програмування із застосуванням таких обєктів називають обєктно-орієнтованим. В результаті раціонального використання цього методу одержуємо набагато коротші, доступніші для розуміння та легше контрольовані програми.

Загальна структура роботи


Текст програми, що виконує задачу, поставлену у завданні до курсової роботи розбитий на декілька файлів для спрощення сприйняття коду і модифікації:

ümain.cpp - функція main програми, що реалізує задачу курсової роботи.

üPoint.h - обява класу Point.

üMenu.h - код програми, що реалізує основне меню програмного комплексу.

üKursova.cpp - реалізація завдання.

Вхідні дані програми знаходяться у файлах:

üPoint.dat - координати точок.

üNames.txt - назви пунктів меню.

üAbout.txt - інформацію про програму та її розробника.

Основу структури програмної реалізації завдання складає програма Menu.exe, з якої можна редагувати вхідні дані і запускати програму Kursova.exe, яка реалізує виконання завдання.


Розробка основного алгоритму виконання завдання на курсову роботу


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



де (x1, y1) - координати однієї точки, а (x2, y2) - координати іншої точки.

Відповідно до значень відстаней масив, яких містить координати точок упорядковувався таким чином, щоб координати які відповідають найменшій відстані розміщувались спочатку масива. Після цього з даного масиву брались лише перших десять членів. Новий масив спочатку упорядковувався по координаті х (перший стовпчик), а потім по координаті у (другий стовпчик). Даний упорядкований масив поміщався в цикл, який забезпечував проведення прямих АіВі із такими координатами:


Аі(хі-1, уі-1), Ві(хі, уі),

де і = 1, 2, 3, ...


У роботі потрібно провести сортування масиву даних. Сортування виконується з допомогою вкладеного циклу for. Якщо необхідна перестановка, то вона виконується трьома присвоєннями:

= a [ i ] ;

a [ i ] = a [ i + 1] ;[ i + 1 ] = hold ;

де додаткова змінна hold тимчасово зберігає одне із двох представлених значень.


Програмна реалізація основного алгоритму з використанням засобів обєктно-орієнтованого програмування


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

Основними поняттями обєктно-орієнтованого програмування є:

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

наслідування;

абстракція;

поліморфізм.

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

Дані рівні класів називають полями.

Наслідування полягає у тому, що деякі класи можуть бути створені на основі інших, шляхом введення додаткових елементів.

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

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

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

Обява класів

С++ підтримує обяву класів, які інкапсулюють члени. Члени класу - члени даних і функцфії-члени. В членах-даних зберігаються значення, які представляють стан екземплярів класу (тобто обєктів які належать класу). Функції - члени встановлюють і перевіряють стан екземплярів класа, керуючи значеннями в членах даних. Загальний синтаксис обяви базового класу в С++ має такий вигляд:

className

{:

//відкриті члени даних

//відкриті функції члени:

//захищені члени даних

//захищені функції члени

};( )

{obj.<імя функції>

}


Обява класа починається з ключового слова class, після якого слідує імя класу. Декларація членів класа заключається в пару фігурних дужок і закінчуються значком крапка з комою.

Функція, опис якої знаходиться в опису класу називається inline-функцією.

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

Конструктор резервує в оперативній памяті необхідний простір, розбиває його на частини відповідно членам класу, а також присвоює даній області памяті імя.

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

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

Ми розглянули основні поняття обєктно-орієнтованого програмування мовою С++.

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

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

Опис класів і обєктівPoint

рrivate область:X, Y - координати точки;Dis - відстань від центру екрана до даної точки;область:() - конструктор класу, спеціальна функція-член класу, що ініціалізує дані-члени обєкта цього класу;SetXY(int x,int y) - встановлення значень Х, Y;GetX() - функція, що повертає значення Х;GetY()- функція, що повертає значення Y;GetDis() - функція, що повертає значення Dis;Show() - функція, що виводить точку із координатами X, Y;Hide() - функція, що ховає непотрібні точки;


Розробка допоміжних програмних засобів


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

Меню програми має такий вигляд:


Рис. 1.


де пункти меню Edit, Run, About, Exit виконують такі дії:

ØEdit - забезпечує редагування файлу із вхідними даними;

ØRun - запускає головну програму;

ØAbout - забезпечує виведення інформації про розробника програми;

ØExit - виконує вихід із програми.

Графічне зображення результату за вхідними даними має вигляд:

Рис. 2.


В процесі розробки була використана важлива можливість мови С++ - спадковість, яка дає можливість повторного використання коду. В програмі, що забезпечує виконання поставленої задачі існує така ієрархія (усі класи Button1, Button2, Button3, Button4 успадковують клас Button)



Опис класів і обєктів

class Buttonобласть:x1, x2, y1, y2 - координати відповідно верхнього лівого краю кнопки, нижнього правого краю кнопки, лівого верхнього краю кнопки, нижнього правого краю кнопки.str[20] - масив типу char, в який записується текст;область:setparam (int X1, int Y1, int X2, int Y2, char *st) - функція ініціалізації даних класу.show(int tcolor,int bcolor) - функція для виводу на екран.void run()=0 - віртуальна функція, яка не виконує ніякої роботи.Button1:public Buttonобєкти:run() - робоча функція.Button2:public Buttonобєкти:run() - робоча функція.Button3:public Buttonобєкти:run() - робоча функція.Button4:public Buttonобєкти:run() - робоча функція.Menuобєкти:B1 - створюється обєкт класу Button1.B2 - створюється обєкт класу Button2.B3 - створюється обєкт класу Button3.B4 - створюється обєкт класу Button4.*masB[4] - масив вказівників типу Button.x,y - позиція виводу меню;numAct - номер активної кнопки.show() - функція показу кнопок.onLeft() - реакція на натиснення кнопки „вліво.onRight() - реакція на натиснення кнопки „вправо.onEnter() - реакція на натиснення кнопки „ввід.

рublic обєкти:(int X,int Y) - конструктор класу Menu.getmessage (int msg) - функція, що викликає відповідну реакцію під час управління меню клавішами.

Висновки

текстовий файл алгоритм програмний

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


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


  1. Х. М. Дейтел, П. Дж. Дейтел, Как програмировать на С++. Введение в объектно-ориентированое програмирование с использованием UML, третье издание, Издательство БИНОМ, Москва, 2001.
  2. Х. М. Дейтел, П. Дж. Дейтел, Как програмировать на С, Издательство БИНОМ, Москва, 2000.
  3. Тимотти Монк, Стивен Поттс, Borland C++ в примерах, Диалектика, Минск, 1996г.
  4. Н. С. Пискунов, Справочник по висщей математики, том 2, Наука, Москва, 1976.
  5. Стивен Прата Язык програмирования С. Лекции и упражнения, DiaSoft, Киев, 2000.
  6. Том Сван, Освоение Borland C++ 4.5, том 1, 2, Диалектика, Киев, 1996.
  7. А. Д. Хомоненко, Програмирование на С++, КОРОНА принт, Санкт-Петербург, 1999.
  8. Н. Шаммас, Основы С++ и объектно ориентированого програмирования, Диалектика, Киев, 1996.

Додатки


Додаток А


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

Lukianenko_main.cpp

#include <conio.h>

#include "menu.h"main()

{();(0);mnu(20,1);

_setcursortype(_NOCURSOR);(1).getmessage(getch());

_setcursortype(_NORMALCURSOR);

}

Menu.h

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#include <process.h>

#include <string.h>

#define LEFT 75

#define RIGHT 77

#define ENTER 13Button

{x1,x2,y1,y2;str[20];:setparam(int X1,int Y1,int X2,int Y2,char *st);show(int tcolor,int bcolor);void run()=0;

};Button::setparam(int X1,int Y1,int X2,int Y2,char *st)

{=X1;y1=Y1;=X2;y2=Y2;(str,st);

}Button::show(int tcolor,int bcolor)

{(tcolor);(bcolor);(x1,y1,x2,y2);();(1,1);("%s",str);

}Button1:public Button

{:run();

};Button1::run()

{(P_WAIT,"c:\\windows\\notepad.exe","notepad","point.txt",NULL);

}Button2:public Button

{:run();

};Button2::run()

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

}Button3:public Button

{:run();

};Button3::run()

{(7);(22,8,62,18);();* fin=fopen("about.txt","r");str[80];(int i=0;i<4;i++){(1,i+2);(str,80,fin);("%s",str);

}(fin);();(0);(1,1,80,25);();

}Button4:public Button

{:run();

};Button4::run()

{(0);

}Menu

{B1;B2;B3;B4;*masB[4];x,y;numAct;show();onLeft();onRight();onEnter();:(int X,int Y);getmessage(int msg);

};Menu::show()

{(int i=0;i<4;i++)(i==numAct)[i]->show(15,1);[i]->show(0,7);

}Menu::onLeft()

{=(numAct==0)?3:(numAct-=1);

}Menu::onRight()

{=(numAct==3)?0:(numAct+=1);

}Menu::onEnter()

{[numAct]->run();

}Menu::getmessage(int msg)

{(msg){LEFT:();;RIGHT:();;ENTER:();;

};();

}::Menu(int X,int Y)

{x=X;=Y;=0;[0]=&B1;[1]=&B2;[2]=&B3;[3]=&B4;* fin=fopen("names.txt","r");str[80];(int i=0;i<4;i++){(str,80,fin);[i]->setparam(x,y,x+strlen(str)-2,y,str);=x+strlen(str);

}(fin);();

}

Classes.cpp

#include <math.h>

#include <graphics.h>

#include <stdio.h>

#include <iostream.h>Point

{:(int x1=0, int y1=0);GetX();GetY();Show(int color);:x, y;

};Circle: public Point

{:(Point &center, int r);Area();GetRadius();operator+(Circle &RHS);Show(int color=14);Distance(Circle &C);SetFlag();GetFlag();:R, flag;

};

//Implementation:::Point(int x1, int y1)

{=x1;=y1;

}Point::GetX()

{x;

}Point::GetY()

{y;

}Point::Show(int color)

{(color);(x, y, 2);

}::Circle(Point &center, int r):(center.GetX(), center.GetY())

{=r;=0;

}Circle::SetFlag()

{=1;

}Circle::GetFlag()

{flag;

}Circle::Distance(Circle &C)

{sqrt(pow(x-C.GetX(),2)+pow(y-C.GetY(),2));

}Circle::GetRadius()

{R;

}Circle::Show(int color)

{(color);(x, y, R);

}Circle::Area()

{M_PI*pow(R,2);

}Circle::operator+(Circle &RHS)

{d=Distance(RHS);((d>=GetRadius()+RHS.GetRadius())||

(abs(GetRadius()-RHS.GetRadius())>d))0;return 1;

}.cpp

#include "classes.cpp"

#include <graphics.h>

#include <fstream.h>

#include <values.h>()

{*datafile_name="circles.txt",;grdr=DETECT, grmd;lines, r, x, y;(&grdr, &grdr, "");f(datafile_name, ios::binary);(!f)

{<<" Error opening the file "<<datafile_name;.get();1;

}=f.get();=1;(!f.eof())

{(ch=='\n')++;=f.get();

}.close();**circles=new Circle *[lines];.open(datafile_name);(int i=0; i<lines; i++)

{>>ch;(ch!='=')>>ch;>>x;>>ch;(ch!='=')>>ch;>>y;>>ch;(ch!='=')>>ch;>>r;[i]=new Circle(Point(x, y), r);

}(i=0; i<lines; i++)

{[i]->Show();

}.get();();count=0;(i=0; i<lines-1; i++)(int j=i+1; j<lines; j++)((*circles[i])+(*circles[j]))

{[i]->SetFlag();[j]->SetFlag();++;

}double average=0;(i=0; i<lines; i++)(circles[i]->GetFlag())=average+circles[i]->Area();=average/count;(i=0; i<lines; i++)

{(circles[i]->GetFlag())[i]->Show(12);((circles[i]->Area()>average)&&(circles[i]->GetFlag()))[i]->Show(15);

}.get();();0;

}


Додаток Б


Файли вхідних даних

Circles.txt

circle1: x=100, y=100, r=40: x=150, y=150, r=70: x=200, y=200, r=80: x=320, y=350, r=60: x=350, y=310, r=75: x=320, y=350, r=80: x=370, y=380, r=75

About.txt(C) 2002 by Olexandr Lukianenkogroup 3KC-01

"This program shows circleshad been written in file,connects only five, distances from whichthe center of the screen are minimum".txt


Міністерство освiти та науки України Вінницький державний технічний університет Інститут ІТКІ Кафедра обчислювальної технiки

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ