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

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

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

Міністерство осв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);

{: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;

{(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

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

 

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