Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задачи_Делфи.docx
Скачиваний:
9
Добавлен:
14.08.2019
Размер:
1.17 Mб
Скачать

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

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