Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Задача 14. Домашние животные



Напишите программу, в окне которой формируется круговая диаграмма, иллюстрирующая результат опроса — ответа на вопрос " Есть ли у вас домашние животные? Какие? " (Рис. 74)

Рис 74

Вывод: В этом задании мы создали круговую диаграмму в которой иллюстрирующая результат опроса — ответа на вопрос " Есть ли у вас домашние животные? Какие? "

Листинг

#include < vcl.h>

#pragma hdrstop

#include " Unit1.h"

#include " Math.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm1 *Form1;

#undef PEOPLE

#define ENERGY

#ifdef PEOPLE

#define HB 6

#define OBR

AnsiString Title = " населениеземли";

float datafHB] = {1.25e9, 1е9, 274е6, 216е6, 172е6, 146еб};

float pr[HB];

AnsiString dTitle[HB] = {" Китай", " Индия", " США",

" Индонезия", " Бразилия", " Россия" };

TColor cl[HB] = {clLime, clBlue, clMaroon,

clGreen, clYellow, clTeal};

#endif

#ifdef ENERGY

#define HB 6

#undef OBR

AnsiString Title = " Использованиеэнергии";

float data[HB] = {0.1, 1.3, 3, 22, 30, 40};

float pr[HB];

AnsiString dTitle[HB] = {" Другие",

" попугай",

" рыбки",

" Собака", " Кошка", " Нет" };

TColor cl[HB] = {clLime, clBlue, clPurple, clSkyBlue,

clYellow, clTeal};

#endif

#define R 80 // радиусдиаграммы

#define D 160 // диаметрдиаграммы

#define TORAD 0.0174532

//---------------------------------------------------------------------------

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

int i, j;

// сортировкаисходных данных методом" пузырька"

float bd;

AnsiString bt;

TColor bc;

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

for (j = 0; j < HB-1; j++)

if (data[j+1] < data[j])

{

bd = data[j];

data[j] = data[j+1];

data[j+1] = bd;

 

bt = dTitle[j];

dTitle[j] = dTitle[j+1];

dTitle[j+1] = bt;

bc = cl[j];

cl[j] = cl[j+1];

cl[j+1] = bc;

}

#ifdef OBR

float sum = 0;

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

sum += data[i];

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

pr[i] = ( data[i] / sum) * 100;

#else

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

pr[i] = data[i];

#endif

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: FormPaint(TObject *Sender)

{

int x, y;

int i;

Canvas-> Font-> Name = " Tahoma";

Canvas-> Font-> Size = 12;

x = (ClientWidth - Canvas-> TextWidth(Title)) /2;

Canvas-> Brush-> Style = bsClear;

Canvas-> TextOutA(x, 15, Title);

x = (ClientWidth - D) /2 - R;

y = 15 + Canvas-> TextHeight(Title) + 20;

int x0, y0;

int x1, y1;

int x2, y2;

int a1, a2;

x0 = x + R;

y0 = y + R;

a1 = 0;

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

{

if (i! = HB-1)

a2 = ( a1 + 3.6 * pr[i]);

else

a2 = 359;

x1 = x0 + R * cos (a2 * TORAD);

y1 = y0 + R * sin (a2 * TORAD);

 

x2 = x0 + R * cos (a1 * TORAD);

y2 = y0 + R * sin (a1 * TORAD);

 

if ( abs(a1-a2) < = 6 )

Canvas-> Pen-> Style = psClear;

else

Canvas-> Pen-> Style = psSolid;

Canvas-> Brush-> Color = cl[i];

Canvas-> Pie(x, y, x+D, y+D, x1, y1, x2, y2);

a1 =a2;

Canvas-> Font-> Size -= 2;

int dy = Canvas-> TextHeight(" a" );

x = x + D + 40;

y = y + 20;

for (i =HB-1; i > =0; i--)

{

Canvas-> Brush-> Color = cl[i];

Canvas-> Rectangle(x, y, x+40, y+dy);

Canvas-> Brush-> Style = bsClear;

Canvas-> TextOutA(x+50, y, dTitle[i]+ ", " + FloatToStrF(pr[i], ffGeneral, 2, 2) + " %" );

y = y + dy +10;

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: FormResize(TObject *Sender)

{

Form1-> Refresh();

}

//---------------------------------------------------------------------------


 

Задача 15. Кораблик

Напишите программу, в окне которой " плывет" кораблик. Изображение кораблика формируйте из фафических примитивов. (Рис. 75)

Рис 75

Вывод: В этом задании мы сделали программу, в окне которой " плывет" кораблик.

Листинг

// вычерчивает на поверхности формы кораблик

// илистираетего

procedure Parohod(x, y: integer; mode: boolean);

// x, y - координаты базовой точки кораблика

// mode: True - нарисовать, False - стереть

const

{ Базовые точки кораблика находятся в узлах сетки,

шаг которой определяет размер кораблика. }

dx = 5; // шаг сетки по X

dy = 5; // шаг сетки по Y

var

// корпус и надстройку будем рисовать

// при помощи метода Polygon

p1: array[1..7]of TPoint; // координаты точек корпуса

p2: array[1..8]of TPoint; // координаты точек надстройки

 

pc, bc: TColor; // текущий цвет карандаша и кисти

 

begin

if not mode then

begin

// стереть

Form1.Canvas.Brush.Color: = clNavy;

Form1.Canvas.Pen.Color: = clNavy;

Form1.Canvas.Rectangle(x, y+1, x+17*dx, y-10*dy);

Form1.Canvas.Brush.Color: = clNavy;

// небо

if y-10*dy < 80 then

begin

// конецмачтынафоненеба

Form1.Canvas.Pen.Color: = clSkyBlue;

Form1.Canvas.Brush.Color: = clSkyBlue;

Form1.Canvas.Rectangle(x, y-10*dy, x+17*dx, 80);

end;

exit;

end;

 

// рисуем

with Form1.Canvas do

begin

pc: =Pen.Color; // сохраним текущий цвет карандаша

bc: = Brush.Color; // и кисти

 

Pen.Color: =clBlack; // установим нужный цвет

Brush.Color: = clWhite;

// рисуем...

// корпус

p1[1].X: = x; p1[1].y: = y;

p1[2].X: = x; p1[2].Y: = y-2*dy;

p1[3].X: =x+10*dx; p1[3].Y: = y-2*dy;

p1[4].X: =x+11*dx; p1[4].Y: = y-3*dy;

p1[5].X: =x+17*dx; p1[5].Y: =y-3*dy;

p1[6].X: =x+14*dx; p1[6].Y: =y;

p1[7].X: =x; p1[7].Y: =y;

Polygon(p1);

// надстройка

p2[1].X: = x+3*dx; p2[1].Y: = y-2*dy;

p2[2].X: = x+4*dx; p2[2].Y: = y-3*dy;

p2[3].X: = x+4*dx; p2[3].Y: = y-4*dy;

p2[4].X: = x+13*dx; p2[4].Y: = y-4*dy;

p2[5].X: = x+13*dx; p2[5].Y: = y-3*dy;

p2[6].X: = x+11*dx; p2[6].Y: = y-3*dy;

p2[7].X: = x+10*dx; p2[7].Y: = y-2*dy;

p2[8].X: = x+3*dx; p2[8].Y: = y-2*dy;

Polygon(p2);

MoveTo(x+5*dx, y-3*dy);

LineTo(x+9*dx, y-3*dy);

// капитанский мостик

Rectangle(x+8*dx, y-4*dy, x+11*dx, y-5*dy);

// труба

Rectangle(x+7*dx, y-4*dy, x+8*dx, y-7*dy);

// иллюминаторы

Ellipse(x+11*dx, y-2*dy, x+12*dx, y-1*dy);

Ellipse(x+13*dx, y-2*dy, x+14*dx, y-1*dy);

// мачта

MoveTo(x+10*dx, y-5*dy);

LineTo(x+10*dx, y-10*dy);

// оснастка

Pen.Color: = clWhite;

MoveTo(x+17*dx, y-3*dy);

LineTo(x+10*dx, y-10*dy);

LineTo(x, y-2*dy);

Pen.Color: =pc; // восстановимстарыйцветкарандаша

end;

end;

 

// обработкасигналатаймера

procedure TForm1.Timer1Timer(Sender: TObject);

begin

Parohod(x, y, False); // стеретьрисунок

if x < Form1.ClientWidth

then x: = x+2

else begin // новыйрейс

x: = 0;

y: = Random(50) + 100;

end;

Parohod(x, y, True); // нарисоватьвновойточке

end;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

// небо

Canvas.Brush.Color: = clSkyBlue;

Canvas.Pen.Color: = clSkyBlue;

Canvas.Rectangle(0, 0, ClientWidth, 80);

end;

 

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.DoubleBuffered: =true;

x: =0; y: =80; // исходноеположениепарохода

Form1.Color: =clNavy; // цветморя

Timer1.Interval: = 50; // сигналтаймеракаждые 50 мСек

end;

 

end.


 

Задача 16. Сапер

Внесите такие изменения в программу Сапер, чтобы изображения клеток (пустая клетка; флажок; мина; мина, помеченная флажком) загружались из файла. (Рис. 76)

Рис 76

Вывод: В этой программе мы создали игру сапёр.

Листинг

#include < vcl.h>

#pragma hdrstop

#include " Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

class Cell

{

public:

int BombCol;

bool Opened;

bool Checked;

bool Mined;

};

Cell Pole[100][100];

Graphics:: TBitmap *BombPicture[2];

int BombKol, BombLeft;

TForm1 *Form1;

int Razmer;

//---------------------------------------------------------------------------

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

Razmer=16;

BombPicture[0] = new Graphics:: TBitmap();

BombPicture[1] = new Graphics:: TBitmap();

BombPicture[0]-> LoadFromFile(" Bomb.bmp" );

BombPicture[1]-> LoadFromFile(" Shiiko.bmp" );

BombPicture[0]-> Transparent=true;

BombPicture[1]-> Transparent=true;

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

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

{

Pole[i][j].Opened=false;

Pole[i][j].BombCol=0;

Pole[i][j].Checked=false;

Pole[i][j].Mined=false;

}

BombKol=40;

BombLeft=BombKol;

RandomizeBomb();

UpdateCaption();

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: DrawCell(int x, int y)

{

PoleCanvas-> Canvas-> Pen-> Color=clGray;

 

 

if(! Pole[x][y].Opened)

{

PoleCanvas-> Canvas-> Brush-> Color=clSilver;

PoleCanvas-> Canvas-> Rectangle(x*20, y*20, x*20+20, y*20+20);

if(Pole[x][y].Checked)

{ //Флажок

PoleCanvas-> Canvas-> Rectangle(x*20, y*20, x*20+20, y*20+20);

PoleCanvas-> Canvas-> Brush-> Color=clRed;

PoleCanvas-> Canvas-> Rectangle(x*20+5, y*20+5, x*20+15, y*20+10);

PoleCanvas-> Canvas-> Rectangle(x*20+13, y*20+5, x*20+15, y*20+17);

}

}else

{

PoleCanvas-> Canvas-> Brush-> Color=(TColor)RGB(130, 130, 130);

PoleCanvas-> Canvas-> Rectangle(x*20, y*20, x*20+20, y*20+20);

if(Pole[x][y].Mined)

{

PoleCanvas-> Canvas-> Draw(x*20, y*20,

BombPicture[1& (BombLeft< =(BombKol/2))]);

} else

if(Pole[x][y].BombCol> 0)

{

PoleCanvas-> Canvas-> TextOutA(x*20+4, y*20+0, IntToStr(Pole[x][y].BombCol));

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: PoleCanvasPaint(TObject *Sender)

{

PoleCanvas-> Canvas-> Font-> Size=13;

PoleCanvas-> Canvas-> Font-> Color=clGreen;

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

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

{

DrawCell(i, j);

}

}

//---------------------------------------------------------------------------

 

TForm1:: RandomizeBomb()

{

randomize();

TList*list=new TList();

for(int i=0; i< Razmer*(long)Razmer; i++)list-> Add((void*)i);

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

{

int pos=random(list-> Count);

int mesto=(int)list-> Items[pos];

list-> Delete(pos);

int y=mesto/Razmer;

int x=mesto-(y*Razmer);

Pole[x][y].Mined=true;

}

CountBombsNearCells();

return 1;

}

//---------------------------------------------------------------------------

TForm1:: CountBombsNearCells()

{int num=0;

for(int j=1; j< Razmer-1; j++)

for(int i=1; i< Razmer-1; i++, num=0)

{

if(Pole[i+1][j].Mined)num++; if(Pole[i-1][j].Mined)num++;

if(Pole[i][j+1].Mined)num++; if(Pole[i][j-1].Mined)num++;

if(Pole[i+1][j+1].Mined)num++; if(Pole[i+1][j-1].Mined)num++;

if(Pole[i-1][j-1].Mined)num++; //Центр

if(Pole[i-1][j+1].Mined)num++;

Pole[i][j].BombCol=num;

}

for(int i=1; i< Razmer-1; i++, num=0)

{

if(Pole[0][i-1].Mined)num++; if(Pole[0][i+1].Mined)num++;

if(Pole[1][i-1].Mined)num++; if(Pole[1][i+1].Mined)num++;

if(Pole[1][i].Mined)num++;

Pole[0][i].BombCol=num; //Левыйкрай

}

for(int i=1; i< Razmer-1; i++, num=0)

{

if(Pole[Razmer-1][i-1].Mined)num++; if(Pole[Razmer-1][i+1].Mined)num++;

if(Pole[Razmer-2][i-1].Mined)num++; if(Pole[Razmer-2][i+1].Mined)num++;

if(Pole[Razmer-2][i].Mined)num++; //Правыйкрай

Pole[Razmer-1][i].BombCol=num;

}

for(int i=1; i< Razmer-1; i++, num=0)

{

if(Pole[i-1][0].Mined)num++; if(Pole[i+1][0].Mined)num++;

if(Pole[i+1][1].Mined)num++; if(Pole[i][1].Mined)num++;

if(Pole[i-1][1].Mined)num++; //Верх

Pole[i][0].BombCol=num;

}

for(int i=1; i< Razmer-1; i++, num=0)

{

if(Pole[i-1][Razmer-1].Mined)num++; if(Pole[i+1][Razmer-1].Mined)num++;

if(Pole[i+1][Razmer-2].Mined)num++; if(Pole[i][Razmer-2].Mined)num++;

if(Pole[i-1][Razmer-2].Mined)num++;

Pole[i][Razmer-1].BombCol=num; //Низ

}

num=0;

if(Pole[0][1].Mined)num++;

if(Pole[1][0].Mined)num++;

if(Pole[1][1].Mined)num++;

Pole[0][0].BombCol=num;

 

num=0;

if(Pole[0][Razmer-2].Mined)num++;

if(Pole[1][Razmer-2].Mined)num++;

if(Pole[1][Razmer-1].Mined)num++;

Pole[0][Razmer-1].BombCol=num;

 

num=0;

if(Pole[Razmer-2][0].Mined)num++;

if(Pole[Razmer-2][1].Mined)num++;

if(Pole[Razmer-1][1].Mined)num++;

Pole[Razmer-1][0].BombCol=num;

 

num=0;

if(Pole[Razmer-1][Razmer-2].Mined)num++;

if(Pole[Razmer-2][Razmer-2].Mined)num++;

if(Pole[Razmer-2][Razmer-1].Mined)num++;

Pole[Razmer-1][Razmer-1].BombCol=num;

 

return 1;

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: PoleCanvasMouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

int XPos=X/20;

int YPos=Y/20;

if(Button==mbLeft)

{

if(Pole[XPos][YPos].BombCol==0)

{

CheckRekursively(XPos, YPos);

Repaint();

}

Pole[XPos][YPos].Opened=true;

DrawCell(XPos, YPos);

if(Pole[XPos][YPos].Mined)

{

Sleep(500);

DrawAll();

ShowMessage(" Выпроиграли" );

New(Razmer, BombKol);

}

}

if(Button==mbRight)

{

if(! Pole[XPos][YPos].Opened)

{

if(Pole[XPos][YPos].Checked)

{

Pole[XPos][YPos].Checked=false;

BombLeft++;

}else

{

Pole[XPos][YPos].Checked=true;

BombLeft--;

}

DrawCell(XPos, YPos);

}

}

UpdateCaption();

if(CheckWin())

{

ShowMessage(" Победа!!!!!!!! " );

New(Razmer, BombKol);

}

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: New(int R, int BC)

{

Razmer=R;

 

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

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

{

Pole[i][j].Opened=false;

Pole[i][j].BombCol=0;

Pole[i][j].Checked=false;

Pole[i][j].Mined=false;

}

BombKol=BC;

BombLeft=BombKol;

RandomizeBomb();

PoleCanvas-> Width=20*Razmer;

PoleCanvas-> Height=20*Razmer;

Form1-> ClientWidth=20*Razmer+60;

Form1-> ClientHeight=20*Razmer+20;

UpdateCaption();

Repaint();

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: N5Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: N2Click(TObject *Sender)

{

New(9, 10);

Repaint();

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: N3Click(TObject *Sender)

{

New(30, 99);

Repaint();

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: DrawAll()

{

PoleCanvas-> Canvas-> Font-> Size=13;

PoleCanvas-> Canvas-> Font-> Color=clGreen;

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

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

{

Pole[i][j].Opened=true;

DrawCell(i, j);

if (Pole[i][j].Mined) BombLeft -=1;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: UpdateCaption()

{

Caption=" СаперБомб=" +IntToStr(BombLeft)+" ";

}

//---------------------------------------------------------------------------

bool __fastcall TForm1:: CheckWin()

{

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

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

{

if((Pole[i][j].Mined)& & (! Pole[i][j].Checked))

return false;

}

return true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: N6Click(TObject *Sender)

{

New(16, 40);

Repaint();

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: CheckRekursively(int x, int y)

{

if((x> Razmer-1)||(x< 0)||(y> Razmer-1)||(y< 0))return;

 

if(! Pole[x][y].Opened)

{

Pole[x][y].Opened=true;

if(Pole[x][y].BombCol==0)

{

CheckRekursively(x+1, y);

CheckRekursively(x-1, y);

CheckRekursively(x, y+1);

CheckRekursively(x, y-1);

 

CheckRekursively(x+1, y+1);

CheckRekursively(x-1, y-1);

CheckRekursively(x-1, y+1);

CheckRekursively(x+1, y-1);

}

}

}


 

Задача 17.Экзаменатор

Усовершенствуйте программу Экзаменатор так, чтобы она запрашивала имя тестируемого и сохраняла результат тестирования в файле. Для ввода имени тестируемого используйте стандартное окно ввода, которое выводит функция inputBox. (Рис. 77, 78)

Рис 77

Рис 78

Вывод: В этом задании мы создали Экзаменатор так, чтобы он запрашивал имя тестируемого и сохраняла результат тестирования в файле.

 

Листинг

published: TLabel *Labell; // информационное сообщение, вопрос Tlmage *Image1; // иллюстрация к вопросу TButton *Buttonl; // кнопка OK / Дальше void fastcall FormActivate(TObject *Sender); void fastcall ButtonlClick(TObject * Sender),

private: // варианты ответа - радиокнопки выбора TRadioButton *RadioButton[4]; // щелчок на кнопке выбора ответа void fastcall RadioButtonClick(TObject *Sender); void fastcall ShowVopros(TVopros v); // выводит вопрос void fastcall EraseVopros(void); // удаляет вопрос

public: fastcall TForml(TComponent* Owner);

// *** модульформы *** #include < stdio.h> // длядоступакфункции sscanf iinclude < jpeg.hpp> // обеспечиваетработус // jpg-иллюстрациями

#pragma package(smart_init) #pragma resource " *.dfm"

Игры и другие полезные программы 223

TForml *Forml; // форма

int f; // дескриптор файла теста // имя файла теста берем из командной строки

int level[4]; // кол-во правильных ответов, необходимое // для достижения уровня AnsiString mes[4]; // сообщение о достижении уровня

TVopros Vopros; // вопрос int otv; // номер выбранного ответа

int right =0; // кол-во правильных ответов i

// функции, обеспечивающие чтение вопроса из файла теста int Getlnt(int f); // читает целое int GetStringfint f, AnsiString *st); // читает строку

// конструктор fastcall TForml:: TForml(ТСomponent* Owner): TForm(Owner) { int i; int left = 10;

// создадимрадиокнопкидлявыбора // правильногоответа, носделаемихневидимыми tor (i = 0; i < 4; i++ ) { // создадимрадиокнопку RadioButton[i] = new TRadioButton(Forml); // установимзначениясвойств RadioButton[i]-> Parent = Forml; RadioButton[i]-> Left = left; RadioButton[i]-> Width = Forml->

224 Часть 1. Примерыизадачи

ClientWidth - left - 20; RadioButton[i]-> Visible = false; RadioButton[i]-> Checked = false:

// зададимфункциюобработкисобытия Click RadioButton[i]-> OnClick = RadioButtonClick;

void fastcall TForml:: FormActivate(TObject *Sender)

{

AnsiString st;

// имяфайлатестадолжнобытьуказановкоманднойстроке int n = ParamCount(); if ( n < 1 ) { Labell-> Font-> Style = TFontStyles()« fsBold; Labell-> Caption = " Вкоманднойстрокезапуска" " программынадозадатьимяфайлатеста"; Buttonl-> Tag = 2; return; N

// открытьфайлтеста f = FileOpen(ParamStr(1), fmOpenRead); if ( f == -1 ) { Labell-> Font-> Style = TFontStyles()« fsBold; Labell-> Caption = " Ошибкадоступакфайлутеста" + ParamStr(1); Buttonl-> Tag = 2; return;

Игры и другие полезные программы 225

// вывести информацию о тесте GetString(f, & st); // прочитать название теста Forml-> Caption = st;

GetString(f, & st); // прочитать вводную информацию Labell-> Width = Forml-> ClientWidth - Labell-> Left -20; Labell-> Caption = st; Labell-> AutoSize = true,

// прочитать информацию об уровнях оценки for (int i=0; i< 4; i

level[i] = Getlnt(f); GetString(f, & mes[i]);

// читает из файла очередной вопрос bool GetVopros(TVopros *v)

{

AnsiString st; int p; // если р=1, то к вопросу есть иллюстрация

if ( GetString(f, & (v-> Vopr))! = 0 )

{

/* прочитать кол-во вариантов ответа, номер правильного ответа и признак наличия иллюстрации */ v-> nOtv = Getlnt(f); v-> rOtv = Getlnt(f); p = Getlnt(f);

if (p) //к вопросу есть иллюстрация GetString(f, & (v-> Img) );

226 Часть 1. Примеры и задачи

else v-> Img = " ";

// читаемвариантыответа for (int i = 0; i < v-> nOtv; i { GetStringff, & (v-> 0tv[i]) } return true;

} else return false;

// выводитвопрос void fastcall TForml:: ShowVopros(TVopros v) { int top; int i;

// вопрос Labell-> Width = ClientWidth - Labell-> Le£ t -20;

Labell-> Caption = v.Vopr;

Labell-> AutoSize = true;

if (v.Img! = " " ) //квопросуестьиллюстрация I /* определимвысотуобласти, которуюможноиспользоватьдлявыводаиллюстрации */ int RegHeight = Buttonl-> Top - (Labell-> Top + Labell-> Height +10) - (RadioButton[l]-> Height + 10) * v.nOtv;

Imagel-> Top = Labell-> Top + Labell-> Height + 10; // загрузим картинку и определим ее размер

Игры и другие полезные программы 227

Imagel-> Visible = false; Imagel-> AutoSize = true; Imagel-> Picture-> LoadFromFile(v.Img); if (Imagel-> Height > RegHeight) // картинкане // помещается { Imagel-> AutoSize = false; Imagel-> Height = RegHeight; Imagel-> Proportional = true; } Imagel-> Visible = true; // положениеполейотсчитываемотиллюстрации top = Imagel-> Top + Imagel-> Height + 10;

} else // положение полей отсчитываем от вопроса top = Labell-> Top + Labell-> Height + 10;

// вариантыответа for (i = 0; i < v.nOtv; i++)

{

RadioButton[i]-> Top = top; RadioButton[i]-> Caption = v.0tv[i]; RadioButton[i]-> Visible = true; RadioButton[i]-> Checked = false; top += 20;

// щелчокнарадиокнопокевыбораответа void fastcall TForml:: RadioButtonClick(TObject *Sender) { int i =0; while (! RadioButton[i]-> Checked )

228 Часть 1. Примерыизадачи

otv = i+1; // ответвыбран, сделаемдоступнойкнопкуДальше Buttonl-> Enabled = true;

// удаляетвопроссэкрана void fastoall TForml:: EraseVopros(void)

{

Imagel-> Visible = false, - // скрыть поле вывода иллюстрации // скрыть поля выбора ответа for (int i = 0; i < 4; i

RadioButton[i]-> Visible = falseRadioButton[i]-> Checked = false;

} // сделать недоступной кнопку Дальше Buttonl-> Enabled = false;

// щелчок на кнопке ОК/Дальше/ОК void fastcall TForml:: ButtonlClick(TObject *Sender) { bool ok; // рез-т чтения из файла очередного вопроса

switch (Buttonl-> Tag) {

case 0: // щелчок на кнопке ОК в начале работы

// программы

// прочитать и вывести первый вопрос

GetVopros(& Vopros);

ShowVopros(Vopros);

Buttonl-> Caption - " Дальше";

Игры и другие полезные программы 229

Buttonl-> Enabled = false, Buttonl-> Tag = 1; break;

case 1: //^щелчокнакнопкеДальше if (otv == Vopros.rOtv) // выбранправильный // ответ right++; EraseVopros(); ok = GetVopros(& Vopros); if ( ok ) ShowVopros(Vopros); else

// вопросов больше нет { FileClose(f); // вывести результат AnsiString st; // сообщение int i; // номер достигнутого уровня

Forml-> Caption = " Результат тестирования"; st.printf( " Правильных ответов: %i\n", right

// определим оценку i = 0; // предположим, что испытуемый // ответил на все // вопросы while (( right < level[i]) & & (i < 3))

st = st + mes[i];

230 Часть 1. Примерыизадачи

Labell-> Caption = st;

Buttonl-> Caption = " OK"; Buttonl-> Enabled = true; Buttonl-> Tag = 2;

} break;

case 2: // щелчок на OK в конце работы программы Forml-> Close(); // завершить работу программы

// Функция GetString читает строку из файла // значение функции - кол-во прочитанных символов int GetString(int f, AnsiString *st)

unsigned char buf[300]; // строка (буфер) unsigned char *p = buf; // указатель на строку

int n; // кол-во прочитанных байт (значение ф-и FlleRead) int len = 0; // длина строки

n = FileRead(f, р, 1); while ( п! = 0 )

if ( *р == '\г')

n = FileReacHf, р, 1); // прочитать '\п' break;

len++;

Игры и другие полезные программы 231

n = FileRead(f, p, 1);

*р = '\0'; if ( len! =0) st-> printf(" %s", buf) return len;

// читаетизфайлацелоечисло int Getlnt(int f) { char buf[20]; // строка (буфер) char *p = buf; // указательнастроку

int n; // кол-во прочитанных байт (значение ф-и FileRead) int a; // число, прочитанное из файла

n = FileRead(f, p, 1); while ( (*р> = '0') & & (*р< = '9') ScSc (n > 0) )

{

Р++; n = FileRead(f, p, 1);

if ( *р == Чг') n = FileReadff, р, 1); // прочитать '\п'

*р = ' \0 •;

// преобразуем строку из буфера в целое sscanf(buf, " %i", & а); return a;

Задача 18. База данных " Расходы"

Напишите программу работы с базой данных Расходы. В базе данных должна фиксироваться сумма, дата и то, на что потрачены деньги (по категориям, например: еда, транспорт, образование, развлечения, прочее). Программа должна обеспечивать статистическую обработку — выводить сумму затрат за период. Базу данных в формате Paradox (таблицу rash.db) можно создать при помощи утилиты Database Desktop. Рекомендуемый вид формы программы работы с базой данных приведен на рис. 79

Рис 79

Вывод: В этом задании мы написали программу работы с базой данных Расходы.

Листинг

#include < vcl.h>

#pragma hdrstop

#include " Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: FormShow(TObject *Sender)

{

try {

Table1-> Open();

}

catch ( EDBEngineError & e)

{

ShowMessage(" Для доступа к базе данных надо создать " " псевдоним stock" );

}

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: DataSource1StateChange(TObject *Sender)

{

if ( DataSource1-> State == dsBrowse) StatusBar1-> Panels-> Items[1]-> Text = " Просмотр";

else

StatusBar1-> Panels-> Items[1]-> Text = " Редактирование";

 

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: Table1AfterScroll(TDataSet *DataSet)

{

AnsiString Picture;

if ( Table1-> RecNo! = -1)

{

StatusBar1-> Panels-> Items[0]-> Text = " Запись: " + IntToStr( Table1-> RecNo );

try {

Picture = Table1-> Database-> Directory + DataSet-> FieldValues[" Image" ];

}

catch (EVariantTypeCastError & e)

{

Image1-> Visible = false;

return;

}

ShowPhoto(Picture);

}

else

{

StatusBar1-> Panels-> Items[0]-> Text = " ";

StatusBar1-> Panels-> Items[1]-> Text = " Новаязапись";

Image1-> Visible = false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: ShowPhoto(AnsiString Picture)

{

try

{

Image1-> Picture-> LoadFromFile(Picture);

}

catch ( EFOpenError & e)

{

Image1-> Visible = false;

return;

}

Image1-> Visible = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: FormClose(TObject *Sender, TCloseAction & Action)

{

if (Table1-> State == dsEdit )

Table1-> Post();

}//---------------------------------------------------------------------------

 

 


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 645; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.262 с.)
Главная | Случайная страница | Обратная связь