русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-27; просмотров: 634; Нарушение авторских прав


Постановка задачи.Пароходная компания имеет один прогулочный пароход. Общее число мест – 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. Изначально сделайте все места свободными. По мере продажи отмечайте проданные места. Введите продажу по датам.

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

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

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

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

 

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

 

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

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

В описание класса TForm1 вставьте такое поле 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;



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


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.646 сек.