Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Система предварительной продажи билетов

В динамических приложениях | Перемещение картинок | События от мыши | Движение образа по удерживанию левой кнопки мыши | Код клавиши | По нажатию клавиши со стрелкой | Совмещение управляемого и неуправляемого движений. | В графических приложениях | Создание кнопок | Сортировка массива |


Читайте также:
  1. A. Организация, деятельность которой направлена на систематическое получение прибыли от пользования имуществом, продажи товаров, выполнения работ или оказания услуг.
  2. I. Религиозная система древнего Двуречья
  3. I. Система цен на акции
  4. II. Система показателей, характеризующих доходность акции
  5. III. МИРОВАЯ СИСТЕМА СОЦИАЛИЗМА
  6. ISTJ – Инспектор / Опекун / Систематик, ЛСИ
  7. IV. Повторение, обобщение и систематизация полученных знаний

Постановка задачи. Пароходная компания имеет один прогулочный пароход. Общее число мест – 25, из них 5 – места первого класса, 20 – места экономкласса. Программа должна запрашивать необходимое число билетов, комфортность (первый класс или эконом), «выдавать билет» с указанием места и уровня комфортности. Если заказ выполнить невозможно – печатать сообщение об отсутствии мест в данной категории. Проект обучает работе с массивами.

Реализация. Для решения задачи используем два массива: для первого и «эконом» классов. Опишем глобальные данные:

 

procedure SchitatPM(var class1, classe:integer);

const n1=5; // Места в 1-м классе

ne=20; // Места в экономклассе

var

mesta1:array[1..n1] of integer;

mestae:array[1..ne] of integer;

zakaz1, zakaze, pusto1,pustoe:integer;

i,j:integer;

s:string;

 

Ниже приведен код необходимых обработчиков.

 

procedure TForm1.FormCreate(Sender: TObject);

begin

for i:= 1 to n1 do

mesta1[i]:=0;

for i:= 1 to ne do

mestae[i]:=0;

end;

 

procedure Tform1.SchitatPM(var class1:integer; var classe:integer);

var i:integer;

begin

class1:=0;

for i:=1 to n1 do

if mesta1[i]=0 then class1:=class1+1;

classe:=0;

for i:=1 to ne do

if mestae[i]=0 then classe:=classe+1;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

var p1,pe:integer;

begin

SchitatPM(pusto1,pustoe);

if edit1.Text<>'' then

zakaz1:=strtoint(edit1.Text)

else

zakaz1:=0;

if edit2.Text<>'' then

zakaze:=strtoint(edit2.Text)

else

zakaze:=0;

if pusto1<zakaz1 then

 

begin

showmessage('Недостаточно мест в первом классе');

exit;

end;

if pustoe<zakaze then

begin

showmessage('Недостаточно мест в эконом классе');

exit;

end;

 

// Занимаем места в первом классе

for i:= 1 to n1 do

begin

if zakaz1>0 then

if mesta1[i]=0 then

begin

mesta1[i]:=2;

zakaz1:=zakaz1-1;

end;

end;

 

// Занимаем места в экономклассе

for i:= 1 to ne do

begin

if zakaze>0 then

if mestae[i]=0 then

begin

mestae[i]:=2;

zakaze:=zakaze-1;

end;

end;

 

// Выдаем номера мест в первом классе

s:='';

for i:=1 to n1 do

begin

if mesta1[i]=2 then

begin

s:=s+ ' '+inttostr(i);

mesta1[i]:=1;

end;

end;

showmessage(' В первом классе места:'+s);

 

// Выдаем номера мест в эконом классе

s:='';

for i:=1 to ne do

begin

if mestae[i]=2 then

begin

s:=s+ ' '+inttostr(i);

mestae[i]:=1;

end;

end;

showmessage(' В эконом классе места:'+s);

end;

 

Задание 1. Продумайте интерфейс и самостоятельно реализуйте его так, чтобы пользователю было удобно «купить» билет. Сделайте наглядным план расположения мест, отметьте свободные и проданные. Используйте для плана компонент TStringGrid.

Задание 2. Изначально сделайте все места свободными. По мере продажи отмечайте проданные места. Введите продажу по датам.

6.1.4. Проект «Таблица рисунков»

Постановка задачи. Простейший проект знакомит с компонентом TDrawGrid и его свойствами.

Компонент TDrawGrid является непосредственным родителем строковой таблицы TStringGrid, поэтому передает ей все свои свойства, методы и события за исключением специфичных для строк свойств Cells, Cols, Objects и Rows.

В приведенном примере компонент TDrawGrid используется для показа картинок и текста одновременно. Результат работы проекта приведен на рис. 35.

 

Рис. 35. Проект «Таблица рисунков»

 

Реализация. Найдите подходящие рисунки примерно одинакового размера и сохраните их в папке проекта. Создайте пустую форму для данного приложения и положите на нее таблицу DrawGrid. Значения фиксированных строки и столбца сделайте равными 0. Задайте число строк и столбцов так, чтобы число ячеек таблицы равнялось числу файлов с картинками. В приведенном примере шесть файлов с изображениями, поэтому таблица имеет три столбца и две строки. Установите для компонента DrawGrid 1 следующие значения свойств.

В свойствах DrawGrid 1 найдите DefaultRowHeight и DefaultRowWidth и сделайте их значения такими, чтобы они были немного больше размеров растрового рисунка. Установите свойство
ScrollBars таблицы, равным ssNone. Оно означает – не вставлять полосы прокрутки.

В описание класса TForm 1 вставьте такое поле sBitMap:

 

public

sBitMap: TStringList;

 

Это поле будет использоваться для хранения картинок и текстовых строк. Его необходимо создать и наполнить в момент создания окна, и уничтожить при его уничтожении. Поэтому создайте следующие обработчики событий OnCreate и OnDestroy для формы:

procedure TForm1.FormCreate(Sender: TObject);

// Эта процедура создает и наполняет список slBitMap

const fname:array[0..5] of String=('Ананас.bmp','Вишня.bmp',

'Апельс.bmp','Яблоко.bmp','Арбуз.bmp','Груша.bmp');

mas:array[0..5] of String=('Ананас','Вишня', 'Апельсин',

'Яблоко','Арбуз','Груша');

var k:integer;

begin

// Создаем список строк

sBitMap:=TStringList.Create;

// Вставляем в него названия картинок

for k:=0 to 5 do

begin

sBitMap.Add(mas[k]);

// Свойство Objects служит для хранения картинок

sBitMap.Objects[k]:=TBitMap.Create;

(sBitMap.Objects[k] as TBitMap).LoadFromFile(fname[k]);

end;

end;

 

procedure TForm1.FormDestroy(Sender: TObject);

begin

sBitMap.Free; // Уничтожает список строк

end;

 

Теперь необходимо создать обработчик события OnDrawCell. Этот обработчик обязателен для компонента TDrawGrid, так как без него компонент не сможет заполнить пустые клетки каким-либо изображением или текстом.

 

procedure TForm1.DrawGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);

var k,w,wr: integer;

{Рисует картинку из sBitMap.Objects[k] и текст из sBitMap}

begin

// Уменьшаем высоту картинки для вывода под ней текста:

Rect.Bottom:=Rect.Bottom-DrawGrid1.Canvas.TextHeight('1') – 2;

// Пересчитываем координаты ячейки в индекс списка:

k:=2*ACol + ARow;

{ Рисуем картинки в ячейках, при этом картинка растягивается по ячейке, поэтому ячейки не делайте слишком большими }

DrawGrid1.Canvas.StretchDraw(Rect,(sBitMap.Objects[k] as TBitMap));

// Центрируем текст по горизонтали и выводим его

w:=DrawGrid1.Canvas.TextWidth(sBitMap[k]);

wr:= (Rect.Right – Rect.Left - w) div 2;

DrawGrid1.Canvas.TextOut(Rect.Left + wr, Rect.Bottom + 1,

sBitMap[k]);

end;


Дата добавления: 2015-08-20; просмотров: 44 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Метод обмена| Рисование в таблице TDrawGrid

mybiblioteka.su - 2015-2024 год. (0.011 сек.)