Автор: Пользователь скрыл имя, 27 Января 2012 в 09:00, курсовая работа
Целью курсовой работы является разработка программы имитирующей работу обычных стрелочных часов.
Первая глава посвящена анализу технического задания, определяется что нужно создать, какие библиотеки будут использоваться.
Во второй главе будет рассказано о выбранном языке программирования, о его возможностях и особенностях.
В третьей главе будет подробно описано создание требуемых для решения задачи классов.
ВВЕДЕНИЕ 3
1. Анализ технического задания 5
2. Выбор языка программирования 6
3. Конструирование классов 15
4. Описание программы 20
ЗАКЛЮЧЕНИЕ 24
Список литературы 25
Имя класса arrow_hour
Класс является наследником класса ARROW. Наследуемый доступ public.
В классе переопределяем
лишь функцию draw.
class arrow_hour:public ARROW
{
public:
void draw(int);
};
void arrow_hour::draw(int m)
{
int cl;
if (m==1)
{
setcolor(color);
setfillstyle(1,color);
cl=color;
}
else
{
setcolor(0);
setfillstyle(1,0);
cl=0;
}
line(x0+7.5*cos(sh),y0-7.5*
line(x0+89*cos(1.4+sh),y0-89*
line(x0+110*cos(1.57+sh),y0-
line(x0+89*cos(1.74+sh),y0-89*
line(x0+7.5*cos(3.14159+sh),
floodfill(x0+77*cos(1.57+sh),
setcolor(0);
line(x0+7.5*cos(sh),y0-7.5*
line(x0+89*cos(1.4+sh),y0-89*
line(x0+110*cos(1.57+sh),y0-
line(x0+89*cos(1.74+sh),y0-89*
line(x0+7.5*cos(3.14159+sh),
setcolor(cl);
fillellipse(x0,y0,15,15);
setcolor(0);
circle(x0,y0,15);
}
В данной программе будет содержаться две функции: clock_face(…) и main(). Функция clock_face(int x0, int y0) предназначена для рисования циферблата часов. Аргументы x0 и y0 задают место циферблата. Радиус циферблата постоянный и равен 222.
Рисуем закрашенную окружность белого цвета:
setfillstyle(1,15);
fillellipse(x0,y0,222,
Устанавливаем цвет рисования черным:
setcolor(0);
Устанавливаем размер шрифта:
settextstyle(0,0,3);
С помощью цикла с параметрами, где 1<i <=60 рисуем деления и расставляем цифры на циферблате. Деления двух видов: короткие и длинные. Выбор вида деления зависит от i, если i делится без остатка на 5 то длинное иначе короткое деление:
for (int i=1; i<=60; i++)
{
if (i%5==0)
line(x0+161*cos(i*Pi/30),y0-
else line(x0+169*cos(i*Pi/30), y0-169*sin(i*Pi/30), x0+178*cos(i*Pi/30), y0-178*sin(i*Pi/30));
}
Pi – константа, равная 3.14159
В зависимости от i выводим цифру с помощью функции outtextxy(x,y,” ”), где x и y координаты места вывода, ” ” – выводимый текст. Выбор осуществляется с помощью переключателя switch:
switch (i)
{
case 5:outtextxy(x0+91,y0-182,"1"); break;
case 10:outtextxy(x0+164,y0-109,"2"
case 15:outtextxy(x0+191,y0-9,"3"); break;
case 20:outtextxy(x0+164,y0+91,"4")
case 25:outtextxy(x0+91,y0+164,"5")
case 30:outtextxy(x0-9,y0+191,"6"); break;
case 35:outtextxy(x0-109,y0+164,"7"
case 40:outtextxy(x0-182,y0+91,"8")
case 45:outtextxy(x0-209,y0-9,"9"); break;
case 50:
{
outtextxy(x0-197,y0-109,"1");
outtextxy(x0-182,y0-109,"0"); break;
}
case 55:
{
outtextxy(x0-124,y0-182,"1");
outtextxy(x0-109,y0-182,"1"); break;
}
case 60:
{
outtextxy(x0-19,y0-212,"1");
outtextxy(x0,y0-212,"2"); break;
}
}
Функция main()
Переходим в графический режим:
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "");
errorcode = graphresult();
if (errorcode != grOk)
{
cout<<"\n Graphics error \n Press any key to halt:";
getch();
exit(1);
}
Определяем координаты центра экрана:
int xc,yc;
xc=getmaxx()/2;
yc=getmaxy()/2;
ARROW::setXY(xc,yc);
Создаем по одному объекту каждого класса, задаем цвет стрелок:
arrow_sec strelka1;
arrow_min strelka2;
arrow_hour strelka3;
strelka1.set_color(4);
strelka2.set_color(8);
strelka3.set_color(8);
Определяем
текущее время с помощью
struct time t;
gettime(&t);
Устанавливаем начальные положения стрелок:
int m,h,i;
m=t.ti_min;
if (t.ti_hour<12) h=t.ti_hour*5+m/12;
else h=(t.ti_hour-12)*5+m/12;
Рисуем циферблат с помощью функции clock_face:
clock_face(xc,yc);
C помощью цикла do … while организуем циклическое повторение изменения положения стрелок. Условием прекращения работы программы будет нажатие любой клавиши.
do
{
. . .
}
while (kbhit()==0);
Действия, выполняемые за один цикл do … while:
Устанавливаем часовую и минутную стрелки в нужное положение:
strelka3.rotate(h);
strelka2.rotate(m);
С помощью цикла изменяем положение секундной стрелки и рисуем все стрелки. С помощью функции sleep из dos.h приостанавливаем работу программы на 1 секунду и стираем все стрелки.
for (i=0; i<60; i++)
{
if (kbhit() != 0) break;
strelka1.rotate(i);
strelka3.draw(1);
strelka2.draw(1);
strelka1.draw(1);
sleep(1);
setfillstyle(1,15);
setcolor(15);
fillellipse(xc,yc,160,160);
}
Опеделяем следующие положения часовой и минутной стрелок:
m++;
if (m==60)
{
m=0;
h++;
}
if (h==24)
h=0;
Закрываем
графический режим: closegraph()
ЗАКЛЮЧЕНИЕ
С++ – это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью, и переносимостью. Указанные преимущества С++ обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование С++ в качестве инструментального языка позволяет получать быстрые и компактные программы. Во многих случаях программы, написанные на С++, сравнимы по скорости с программами, написанными на языке ассемблера.
Перечислим еще раз некоторые существенные особенности языка С++:
Список литературы
Приложение А
#include <graphics.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <dos.h>
#include <iostream.h>
#define Pi 3.14159
class ARROW
{
protected:
static int x0,y0;
int color;
double sh;
public:
static void setXY(int,int);
virtual void draw(int)=0;
void rotate(int);
void set_color(int);
};
void ARROW::setXY(int _x, int _y)
{
x0=_x;
y0=_y;
}
void ARROW::set_color(int _color)
{
color=_color;
}
void ARROW::rotate(int pos)
{
sh=-Pi/30*pos;
}
int ARROW::x0;
int ARROW::y0;
class arrow_sec:public ARROW
{
public:
void draw(int);
};
void arrow_sec::draw(int m)
{
int cl;
if (m==1)
{
setcolor(color);
Информация о работе Разработка программы имитирующей работу обычных стрелочных часов