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

Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.

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

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

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

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

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

текстовий редактор програмування

Вступ

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

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

Виведення на екран повідомлення про програму.

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

Виконання exe-файлу другої програми.

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

Задача:

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

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

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

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

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

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

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

спадковість;

абстракція;

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

Інкапсуляція полягає утому, що кожний клас має три рівні доступу до елементів:

publik - рівень, дані на якому можуть бути використані будь-якою функцією;

protected - елементи цього рівня можуть бути використані функціями-членами даного класу або функціями-членами похідних класів;

private-елементи цього рівня можуть бути використані функціями-членами даного класу.

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

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

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

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

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

Об'ява класів

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

class className

{

public:

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

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

protected:

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

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

};

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

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

Графiчнi засоби мови С

Мова С має достатньо шиpокi гpафiчнi можливостi. Всi необхiднi визначення для графiчного модуля мови С дано в файлi graphics.h i при виборi вiдповiдного режиму вiн повинен бути включеним в програму за допомогою директиви #include<graphics.h>. Стандартнi функцii для графiчноi системи знаходяться в бiблiотецi graphics.lib, яка повинна бути пiдключена або за допомогою командноi строки (якщо використовуеться компiлятор ТСС), або шляхом створення файла проекта (якщо використовуеться компiлятор ТС).

Перед початком роботи програми повинна бути виконана iнiцiалiзацiя графiчноi системи тобто вказанi графiчнi драйвер та режим роботи цього драйвера (graphdriver & graphmode). А в кiнцi роботи бажано вiдновити той вiдеорежим, в якому находився комп'ютер до запуску програми.

До основних функцiй, реалiзованих даним способом вiдносятся:

-установка вiдеорежима;

-малювання точки заданим кольором;

-визначення кольору точки з заданими координатами;

-очистка активноi сторiнки i т.п.

В програмi були використанi деякi iз вищеперерахованих можливостейстей.

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

Текст програм(menu.exe i main.exe) розбитий на декілька файлів для спрощення модифікації і сприйняття коду:

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

Executer.h - об'ява класу Executer

Executer.cpp - реалізація класу Executer

Triangle.h - об'ява класу Triangle

Triangle.cpp - реалізація класу Triangle

Line.h - об'ява класу Line

Line.cpp - реалізація класу Line

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

Point.cpp - реалізація класу Point

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

Всі файли вихідних даних знаходяться в підкаталозі Data каталогу курсової роботи:

menu.dat - дані, необхідні програмі

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

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

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

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

Для виконання курсової роботи довелося розробити метод, який дозволяє перевірити, чи перетинаються два відрізки. Ідея: продовжуємо відрізки до прямих(, де кінці відрізку - це точки з координатами (x1,y1), (x1,y2), причому для кожної прямої визначаємо по дві змінні: ), і знаходимо точки перетину цих прямих. Якщо їх немає(прямі паралельні), то відрізки не перетинаються, якщо їх безліч, то відрізки накладаються. Якщо точка перетину одна, то її абсциса: , де b1, k1 та b2, k2 - це змінні b та k для першої та другої прямої. Потім ми перевіряємо, чи лежить X в межах від x1 до x2 включно для першого та другого відрізка, де x1 і x2 - абсциси кінців відрізка. Якщо лежить, то відрізки перетинаються, якщо не лежить, то не перетинаються. Для визначення того, чи перетинаються трикутники, визначається, чи перетинається хоч одна з сторін (відрізків) одного трикутника з будь-якою стороною другого(9 перевірок на перетин відрізків).

Для знаходження тупокутних трикутників, я використав теорему косинусів. Визначається кут, що лежить навпроти найбільшої сторони трикутника(), і якщо він більший за /2, то трикутник - тупокутний. Виходячи з значення для кожного трикутника відшукується трикутники з найбільшим та найменшим тупим кутом.

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

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

class Executer {

public:

Executer( char* file );

private:

void delBad( Triangle* triangles[] , int& minAngle, int& maxAngle, char* file );

void drawAll( Triangle* triangles[] );

void areTheyCrossing( Triangle* triangles[], int minAngle, int maxAngle );

};

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

class Triangle : public Line {

public:

Triangle( int a1, int b1, int a2, int b2, int a3, int b3 );

double isObtuse() const;

void draw();

int operator+ ( Triangle& right ) const;

void retValues( int& a1, int& b1, int& a2, int& b2, int& a3, int& b3 ) {

a1 = x1; b1 = y1;

a2 = x2; b2 = y2;

a3 = x3; b3 = y3;

}

protected:

int x3, y3;

int isCrossing( long x1, long y1, long x2, long y2, long a1, long b1, long a2, long b2 ) const;

};

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

class Line : public Point {

public:

Line( int a1, int b1, int a2, int b2 );

protected:

int x2, y2;

};

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

class Point {

public:

Point( int a1, int b1 );

void setColor( int col );

protected:

int x1, y1, color;

};

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

В процесі розробки була використана важлива можливість мови С++ - спадковість, яка дає можливість повторного використання коду.

Ієрархія спадковості:

Рис.

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

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

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

Назви кнопок меню знаходяться в файлі names.txt. З фйла about.txt програма меню бере текст для виконання пункту меню About.

Висновки

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

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

1.Х.М. Дейтел, П.Дж. Дейтел «Как программировать на С++» Москва 2001

2.Намир К. Шаммас «Основы С++ и объектно ориентированого програмирования». «Диалектика» Киев 1996.

Додаток

Лістинги файлів

Main.cpp:

#include <iostream.h>

#include <graphics.h>

#include <stdlib.h>

#include <conio.h>

#include "executer.h"

#include "triangle.h"

main()

{

Executer ex( "data\\tri.dat" );

clrscr();

return 0;

}

Executer.h:

#ifndef EXECUTER_H

#define EXECUTER_H

#include <iostream.h>

#include <stdio.h>

#include "triangle.h"

er {

public:

Executer( char* file );

private:

void delBad( Triangle* triangles[] , int& minAngle, int& maxAngle, char* file );

void drawAll( Triangle* triangles[] );

void areTheyCrossing( Triangle* triangles[], int minAngle, int maxAngle );

};

#endif

Executer.cpp:

#include <iostream.h>

#include <stdlib.h>

#include <ctype.h>

#include <stdio.h>

#include <string.h>

#include <graphics.h>

#include "executer.h"

#include "triangle.h"

#define PI 3.141592654

Executer::Executer( char* file ) {

FILE *fPtr;

Triangle* triangles[50] = {0};

int c, i, count, maxAngle, minAngle, flag, step, val[6] = {0};

char integer[10] = {'\0'};

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");

errorcode = graphresult();

if (errorcode != grOk)

{

printf("Graphics error: %s\n", grapherrormsg(errorcode));

printf("Press any key to halt:");

cin.get();

exit(1);

}

if ( ( fPtr = fopen( file, "r" ) ) == NULL ) {

cout << "Can't open file!" << endl;

exit( 1 );

}

i = 0;

count = 0;

flag = 0;

step = 0;

while ( ( c = getc( fPtr ) ) != EOF ) {

if ( (c == 'A' || c == 'a') && flag == 0 )

flag = 1;

if ( (c == 'N' || c == 'n') && flag == 1 )

flag = 2;

if ( (c == 'G' || c == 'g') && flag == 2 )

flag = 3;

if ( flag == 3 ) {

if ( c == '=' ) {

while ( (c = getc( fPtr )) == ' ' );

integer[count++] = c;

while ( isdigit( c = getc( fPtr ) ) )

integer[count++] = c;

count = 0;

val[step++] = atoi( integer );

for (int j = 0; j < 10; j++)

integer[j] = '\0';

}

}

if ( step == 6 ) {

triangles[i++] = new Triangle( val[0], val[1], val[2], val[3], val[4], val[5] );

step = 0;

flag = 0;

}

}

fclose( fPtr );

delBad( triangles, minAngle, maxAngle, file );

drawAll( triangles );

areTheyCrossing( triangles, minAngle, maxAngle );

}

void Executer::delBad( Triangle* triangles[], int& minAngle, int& maxAngle, char* file )

{

FILE *fPtr;

double angle, min = 999.0, max = -1.0;

int i, val[6] = {0};

char temp0[5] = {'\0'}, temp1[5] = {'\0'}, temp2[5] = {'\0'},

temp3[5] = {'\0'}, temp4[5] = {'\0'}, temp5[5] = {'\0'} ;

if ( ( fPtr = fopen( file, "w" ) ) == NULL ) {

cout << "Can't open file!" << endl;

exit( 1 );

}

for ( i = 0; triangles[i] != 0; i++ )

if ( ( angle = (*triangles[i]).isObtuse() ) > PI / 2 ) {

if ( angle < min ) {

min = angle;

minAngle = i;

}

if ( angle > max ) {

max = angle;

maxAngle = i;

}

fputs("Triangle\n", fPtr);

(*triangles[i]).retValues( val[0], val[1], val[2], val[3], val[4], val[5] );

itoa( val[0], temp0, 10);

itoa( val[1], temp1, 10);

itoa( val[2], temp2, 10);

itoa( val[3], temp3, 10);

itoa( val[4], temp4, 10);

itoa( val[5], temp5, 10);

fprintf( fPtr, "Tri1: x = %s; y = %s\nTri2: x = %s; y = %s\nTri3: x = %s; y = %s\n",

temp0, temp1, temp2, temp3, temp4, temp5 );

}

fclose( fPtr );

if ( max >= 0.0 )

(*triangles[maxAngle]).setColor(12);

if ( min < 900.0 )

(*triangles[minAngle]).setColor(10);

}

void Executer::drawAll( Triangle* triangles[] )

{

int i = 0;

while ( triangles[i] != 0 )

(*triangles[i++]).draw();

cin.get();

closegraph();

}

void Executer::areTheyCrossing( Triangle* triangles[], int minAngle, int maxAngle )

{

if ( triangles[0] == 0 )

cout << "Трикутники вiдсутнi." << endl;

else if ( minAngle == maxAngle )

cout << "Трикутники з максимальним i мiнiмальним тупими кутами СПIВПАДАЮТЬ." << endl;

else if ( *triangles[minAngle] + *triangles[maxAngle] == YES )

cout << "Трикутники з максимальним i мiнiмальним тупими кутами ПЕРЕТИНАЮТЬСЯ." << endl;

else

cout << "Трикутники з максимальним i мiнiмальним тупими кутами НЕ ПЕРЕТИНАЮТЬСЯ." << endl;

cin.get();

}

Triangle.h:

#ifndef TRIANGLE_H

#define TRIANGLE_H

#include "line.h"

#define YES 1

#define NO 0

class Triangle : public Line {

public:

Triangle( int a1, int b1, int a2, int b2, int a3, int b3 );

double isObtuse() const;

void draw();

int operator+ ( Triangle& right ) const;

void retValues( int& a1, int& b1, int& a2, int& b2, int& a3, int& b3 ) {

a1 = x1; b1 = y1;

a2 = x2; b2 = y2;

a3 = x3; b3 = y3;

}

protected:

int x3, y3;

int isCrossing( long x1, long y1, long x2, long y2, long a1, long b1, long a2, long b2 ) const;

};

#endif

#include "triangle.h"

#include <math.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

#define MAX3( a, b, c ) ( a > b ? ( a > c ? a : c ) : ( b > c ? b : c ) )

#define MAX( a, b ) ( a > b ? a : b )

#define MIN( a, b ) ( a < b ? a : b )

#define LENGTH( x1, y1, x2, y2 ) sqrt( (double)( (double)((double)x1-x2)*(x1-x2) + (double)((double)y1-y2)*(y1-y2) ) )

Triangle::Triangle( int a1, int b1, int a2, int b2, int a3, int b3 ) : Line( a1, b1, a2 , b2 )

{

color = 15;

x3 = ( a3 >= 0 ? a3 : 0 );

y3 = ( b3 >= 0 ? b3 : 0 );

}

double Triangle::isObtuse() const

{

long a = 0, b = 0, c = 0, max = 0;

double cosa = 0;

a = (long)LENGTH( x1, y1, x2, y2 );

b = (long)LENGTH( x2, y2, x3, y3 );

c = (long)LENGTH( x1, y1, x3, y3 );

max = MAX3( a, b, c );

if ( max == a )

cosa = (double)( b*b + c*c - a*a ) / ( 2 * b * c );

else if ( max == b )

cosa = (double)( c*c + a*a - b*b ) / ( 2 * a * c );

else if ( max == c )

cosa = (double)( b*b + a*a - c*c ) / ( 2 * a * b );

else

cout << "ERROR!!" << endl;

return acos( cosa );

}

void Triangle::draw()

{

setcolor(color);

line(x1, y1, x2, y2);

line(x2, y2, x3, y3);

line(x3, y3, x1, y1);

}

int Triangle::operator+ ( Triangle& right ) const

{

int ans = NO;

isCrossing( x1, y1, x2, y2, right.x1, right.y1, right.x2, right.y2 ) ? ans = YES : ans = ans;

isCrossing( x1, y1, x2, y2, right.x2, right.y2, right.x3, right.y3 ) ? ans = YES : ans = ans;

isCrossing( x1, y1, x2, y2, right.x1, right.y1, right.x3, right.y3 ) ? ans = YES : ans = ans;

isCrossing( x2, y2, x3, y3, right.x1, right.y1, right.x2, right.y2 ) ? ans = YES : ans = ans;

isCrossing( x2, y2, x3, y3, right.x2, right.y2, right.x3, right.y3 ) ? ans = YES : ans = ans;

isCrossing( x2, y2, x3, y3, right.x1, right.y1, right.x3, right.y3 ) ? ans = YES : ans = ans;

isCrossing( x1, y1, x3, y3, right.x1, right.y1, right.x2, right.y2 ) ? ans = YES : ans = ans;

isCrossing( x1, y1, x3, y3, right.x2, right.y2, right.x3, right.y3 ) ? ans = YES : ans = ans;

isCrossing( x1, y1, x3, y3, right.x1, right.y1, right.x3, right.y3 ) ? ans = YES : ans = ans;

return ans;

}

int Triangle::isCrossing( long x1, long y1, long x2, long y2, long a1, long b1, long a2, long b2 ) const

{

int f = YES;

double k1, c1, k2, c2, X;

if ( x1 == x2 )

if ( a1 == a2 )

if ( x1 == a1 )

return YES;

else

return NO;

else {

X = x1;

f = NO;

}

if ( a1 == a2 )

if ( x1 == x2 )

if ( x1 == a1 )

return YES;

else

return NO;

else {

X = a1;

f = NO;

}

if ( f == YES) {

k1 = ((double)y2 - y1) / (x2 - x1);

c1 = ((double)x2*y1 - x1*y2) / (x2 - x1);

k2 = ((double)b2 - b1) / (a2 - a1);

c2 = ((double)a2*b1 - a1*b2) / (a2 - a1);

if ( k1 == k2 )

if ( c1 == c2 )

return YES;

else

return NO;

else

X = ( c2 - c1 ) / ( k1 - k2 );

if ( ( X >= MIN( x1, x2 ) ) && ( X <= MAX( x1, x2 ) ) && ( X >= MIN( a1, a2 ) ) && ( X <= MAX( a1, a2 ) ) )

return YES;

else

return NO;

}

Line.h:

#ifndef LINE_H

#define LINE_H

#include "point.h"

class Line : public Point {

public:

Line( int a1, int b1, int a2, int b2 );

protected:

int x2, y2;

};

#endif

Line.cpp:

#include "line.h"

Line::Line( int a1, int b1, int a2, int b2 ) : Point( a1, b1 )

{

x2 = ( a2 >= 0 ? a2 : 0 );

y2 = ( b2 >= 0 ? b2 : 0 );

}

Point.h:

#ifndef POINT_H

#define POINT_H

#include <iostream.h>

class Point {

public:

Point( int a1, int b1 );

void setColor( int col );

protected:

int x1, y1, color;

};

#endif

Point.cpp

#include "point.h"

Point::Point( int a1, int b1 )

{

x1 = ( a1 >= 0 ? a1 : 0 );

y1 = ( b1 >= 0 ? b1 : 0 );

}

void Point::setColor( int col )

{

color = ( col > 15 || col < 0 ? 15 : col );

}

Tri.dat:

Triangle

Tri1: x = 100; y = 100

Tri2: x = 110; y = 0

Tri3: x = 200; y = 0

Triangle

Tri1: x = 400; y = 100

Tri2: x = 110; y = 10

Tri3: x = 30; y = 0

Triangle

Tri1: x = 30; y = 100

Tri2: x = 340; y = 50

Tri3: x = 210; y = 80

Triangle

Tri1: x = 200; y = 100

Tri2: x = 140; y = 60

Tri3: x = 110; y = 180

Результат виконання основної програми, якщо файл tri.dat містить наведені вище дані:

Рис.

Рис.

Після виконання програми у файлі tri.dat залишились такі дані:

tri.dat:

Triangle

Tri1: x = 100; y = 100

Tri2: x = 110; y = 0

Tri3: x = 200; y = 0

Triangle

Tri1: x = 400; y = 100

Tri2: x = 110; y = 10

Tri3: x = 30; y = 0

Triangle

Tri1: x = 30; y = 100

Tri2: x = 340; y = 50

Tri3: x = 210; y = 80

Triangle

Tri1: x = 300; y = 200

Tri2: x = 240; y = 140

Tri3: x = 280; y = 290

Лістинг файлу menu.cpp

#include <conio.h>

#include <stdio.h>

#include <dos.h>

#include <process.h>

#include <string.h>

#define LEFT 75

#define RIGHT 77

#define ENTER 13

class Button

{

int x1,x2,y1,y2;

char str[20];

public:

void setparam(int X1,int Y1,int X2,int Y2,char *st);

void show(int tcolor,int bcolor);

virtual void run()=0;

};

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

{

x1=X1;y1=Y1;

x2=X2;y2=Y2;

strcpy(str,st);

}

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

{

textcolor(tcolor);

textbackground(bcolor);

window(x1,y1,x2,y2);

clrscr();

gotoxy(1,1);

printf("%s",str);

}

class Button1:public Button

{

public:

void run();

};

void Button1::run()

{

spawnl(P_WAIT,"c:\\windows\\notepad.exe","notepad","data\\tri.dat",NULL);

}

class Button2:public Button

{

public:

void run();

};

void Button2::run()

{

int i,j;

clrscr();

textcolor(15);

textbackground(0);

window(1,23,80,25);

clrscr();

gotoxy(9,25);

printf("Loading: \n\n");

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

{

printf("\\\r");

delay(10);

printf("|\r");

delay(10);

printf("/\r");

delay(100);

}

clrscr();

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

_setcursortype(_NOCURSOR);

clrscr();

}

class Button3:public Button

{

public:

void run();

};

void Button3::run()

{

textbackground(7);

window(22,8,62,18);

clrscr();

textbackground(1);

window(20,7,60,17);

textcolor(10);

clrscr();

FILE* fin=fopen("data\\about.txt","r");

char str[80];

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

{

gotoxy(1,i+2);

fgets(str,80,fin);

printf("%s",str);

}

fclose(fin);

getch();

textbackground(0);

window(1,1,80,25);

clrscr();

}

class Button4:public Button

{

public:

void run();

};

void Button4::run()

{

exit(0);

}

class Menu

{

Button1 B1;

Button2 B2;

Button3 B3;

Button4 B4;

Button *masB[4];

int x,y;

int numAct;

void show();

void onLeft();

void onRight();

void onEnter();

public:

Menu(int X,int Y);

void getmessage(int msg);

};

void Menu::show()

{

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

if (i==numAct)

masB[i]->show(15,1);

else

masB[i]->show(0,7);

}

void Menu::onLeft()

{

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

}

void Menu::onRight()

{

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

}

void Menu::onEnter()

{

masB[numAct]->run();

}

void Menu::getmessage(int msg)

{

switch (msg)

{

case LEFT:

onLeft();

break;

case RIGHT:

onRight();

break;

case ENTER:

onEnter();

break;

};

show();

}

Menu::Menu(int X,int Y)

{

x=X;

y=Y;

numAct=0;

masB[0]=&B1;

masB[1]=&B2;

masB[2]=&B3;

masB[3]=&B4;

FILE* fin=fopen("data\\names.txt","r");

char str[80];

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

{

fgets(str,80,fin);

masB[i]->setparam(x,y,x+strlen(str)-2,y,str);

x=x+strlen(str);

}

fclose(fin);

show();

}

int main()

{

textbackground(0);

clrscr();

Menu mnu(20,1);

_setcursortype(_NOCURSOR);

while (1)

mnu.getmessage(getch());

}

Names.txt:

Edit

Run

About

Exit

About.txt:

Размещено на Allbest.ru


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

  • Редагування за допомогою текстового редактора NotePad вхідного файлу даних. Програмна реалізація основного алгоритму з використанням засобів об'єктно-орієнтованого програмування. Об’ява та опис класів і об'єктів. Розробка допоміжних програмних засобів.

    курсовая работа [69,4 K], добавлен 14.03.2013

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

    курсовая работа [49,6 K], добавлен 26.03.2010

  • Прототип об'єктно-орієнтованого програмування. Управління процесом реалізації програми. Розвиток апаратних засобів. Об'єктно-орієнтовані мови програмування. Надійність і експлуатаційні якості програм. Візуальне об’єктна-орієнтовне проектування Delphi.

    контрольная работа [28,9 K], добавлен 18.05.2009

  • Фундаментальні поняття об'єктно-орієнтованого програмування. Система лінійних нерівностей та опуклі багатогранники. Системи лінійних рівнянь лінійної алгебри як частковий випадок систем лінійних обмежень. Використання середовища програмування Delphi7.

    курсовая работа [222,7 K], добавлен 20.05.2015

  • Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.

    курсовая работа [510,9 K], добавлен 14.03.2013

  • Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.

    отчет по практике [2,0 M], добавлен 19.03.2015

  • Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.

    курсовая работа [211,3 K], добавлен 19.08.2010

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