Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Задача 14. Домашние животные ⇐ ПредыдущаяСтр 5 из 5
Напишите программу, в окне которой формируется круговая диаграмма, иллюстрирующая результат опроса — ответа на вопрос " Есть ли у вас домашние животные? Какие? " (Рис. 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; Нарушение авторского права страницы