МИНИСТЕРСТВО ОБРАЗОВАНИЯ РФ
НГТУ
КАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИ
ЛАБОРАТОРНАЯ РАБОТА № 3
ПО ДИСЦИПЛИНЕ:
ОБЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
«ОБЪЕКТЫ»
ГРУППА: ПМ-21
СТУДЕНТ: Воронов А.С.
ПРЕПОДАВАТЕЛЬ: Полетаева И. А.
НОВОСИБИРСК 2003 г.
Разработать программу на языке С++, в которой был бы определен класс-контейнер для объектов класса, разработанного в предыдущей лабораторной работе. Контейнер должен быть реализован как динамическая структура данных, для представления элементов контейнера разработать класс типа «элемент». Предусмотреть функции для помещения объектов-фигур в контейнер, их удаления, поиска в контейнере, «распечатки содержимого» контейнера – последовательного вывода на экран содержащихся в объекте-контейнере фигур.
Основной файл Vor3.cpp
#include "vor3_f.cpp"
void main()
{int gd,gm,error,i=0;
spis_Sect spis;
clrscr();
detectgraph(&gd,&gm);
initgraph (&gd,&gm,"c:\\borlandc\\bgi");
error=graphresult();
if (error!=grOk)
{printf ("Oshibka graph");
printf (grapherrormsg(error));
exit (1);
}
// ----- Рисование меню Рисование меню Рисование меню-----------------while (i!=4)
{
i=mainmenu();
switch (i)
{case 1:{spis=print_menu(spis); break;}
case 2:{spis=options(spis); break;}
case 3:{spis=dann(spis); break;}
} }
closegraph();
}
Дополнительный файл vor3_f.cpp
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <stdlib.h>
typedef class sect
{int x,y,r1,r2,fillStyle,lineColor,fillColor,nu1,ku1,nu2,ku2;
public:
void interDan(void); // Ввод данных о фигуре
void showDan(void); // Вывод данных о фигуре
void drawSect(void); // Рисование фигуры
void save(void); // Сохранение данных в файл
short load(void); // Загрузка из файла
void change(void); // Изменение параметров сектора
void setfillStyle(int);
void setfillColor(int);
sect(){x=320;y=240;r1=50;r2=25;nu1=0;ku1=360;nu2=10;ku2=350;
fillStyle=1;lineColor=15;fillColor=0;}
};
void sect::drawSect()
{cleardevice();
setfillstyle (fillStyle,fillColor);
pieslice (x,y,nu1,ku1,r1);
setfillstyle (1,0);
pieslice (x,y,nu2,ku2,r2);
}
void sect::change()
{int c=-1;
drawSect();
while ((c=getch())!=27)
{switch (c)
{case 'w': {if (r1<240) r1+=5; break;}
case 's': {if (r1>r2) r1-=5; break;}
case 't': {if (r1>r2) r2+=5; break;}
case 'g': {if (r2>0) r2-=5; break;}
case 'a': {if (nu1<nu2) nu1+=1; break;}
case 'z': {if (nu1>0) nu1-=1; break;}
case 'd': {if (ku1<360) ku1+=1; break;}
case 'c': {if (ku1>ku2)ku1-=1; break;}
case 'f': {if (nu2<ku2) nu2+=1; break;}
case 'v': {if (nu2>nu1) nu2-=1; break;}
case 'h': {if (ku2<ku1) ku2+=1; break;}
case 'n': {if (ku2>nu2) ku2-=1; break;}}
drawSect();}
}
void sect::setfillStyle(int i)
{fillStyle=i;}
void sect::setfillColor(int i)
{fillColor=i;}
void sect::interDan()
{outtextxy (330,80,"Введите радиус сектора");
do
{gotoxy(50,8);
scanf ("\n%d",&r1);}
while (r1<0);
r2=r1;
outtextxy (330,140,"Введите начальный и конечный углы");
gotoxy(50,12);
scanf ("\n%d%d",&nu1,&ku1);
nu2=nu1;
ku2=ku1;
outtextxy (330,200,"При рисовании 2-го сектора его");
outtextxy (330,220,"данные равны 1-му");
getch();}
void sect::save()
{FILE *f=fopen ("sect.txt","w");
fprintf (f,"%d %d %d %d %d %d %d %d",r1,r2,nu1,nu2,ku1,ku2,fillStyle,fillColor);
fclose (f);}
short sect::load()
{FILE *f=fopen ("sect.txt","r");
if (f==NULL) return 0;
fscanf (f,"%d%d%d%d%d%d%d%d",&r1,&r2,&nu1,&nu2,&ku1,&ku2,&fillStyle,&fillColor);
fclose (f);
return 1;}
int mainmenu()
{int c=1,x=15,y=75,i=1;
setbkcolor(0); setcolor (15); cleardevice();
outtextxy (x+5,80,"Рисовать сектор");
outtextxy (x+5,110,"Настройки");
outtextxy (x+5,140,"Работа с данными");
outtextxy (x+5,170,"Выход");
rectangle (x,y,x+135,y+15);
while (c!=13)
{setcolor (0);
rectangle (x,y,x+135,y+15);
if (c==80) {y+=30;i++;} if (c==72) {y-=30;i--;} if (i==0) {i=4;x=15;y=165;}
if (i==5) {i=1;x=15;y=75;}
setcolor (15);
rectangle (x,y,x+135,y+15);
c=getch();}
return i;
}
int color ()
{ int c=1,x=350,y=10,i=0;
setcolor (15);
outtextxy (x+5,15,"0-Черный"); outtextxy (x+5,45,"1-Синий");
outtextxy (x+5,75,"2-Зеленый"); outtextxy (x+5,105,"3-Голубой");
outtextxy (x+5,135,"4-Красный"); outtextxy (x+5,165,"5-Фиолетовый");
outtextxy (x+5,195,"6-Коричневый"); outtextxy (x+5,225,"7-Светлосерый");
outtextxy (x+5,255,"8-Темносерый"); outtextxy (x+5,285,"9-Светлосиний");
outtextxy (x+5,315,"10-Светлозеленый"); outtextxy (x+5,345,"11-Светлоголубой");
outtextxy (x+5,375,"12-Светлокрасный"); outtextxy (x+5,405,"13-Светлофиолетовый");
outtextxy (x+5,435,"14-Желтый"); outtextxy (x+5,465,"15-Белый");
rectangle (x,y,x+170,y+15);
while (c!=13&&c!=27)
{c=getch();
setcolor (0); rectangle (x,y,x+170,y+15);
setfillstyle (1,0); bar (x+175,y,x+190,y+15);
if (c==80) {y+=30;i++;}
if (c==72) {y-=30;i--;}
if (i==-1) {i=15;x=350;y=460;}
if (i==16) {i=0;x=350;y=10;}
setcolor (15);
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.