- •Оглавление
- •Введение
- •Глава 1
- •Использование компонентов общего назначения: tLabel, tButton, tEdit, tShape, tTimer, tPanel
- •1.1.1. Проект «Калькулятор»
- •1.1.2. Проект «Таймер»
- •1.1.3. Проект «Светофор»
- •1.1.4. Проект «Движение шарика tShape с отражением»
- •Глава 2
- •2.1. Класс tCanvas, его свойства и методы
- •2.1.1. Рисование узоров
- •2.1.2. Рисование поля для различных игр
- •2.1.3. Рисование координатной сетки
- •2.1.4. Построение графиков элементарных функций
- •2.2. Класс tBitmap и работа с растровыми рисунками
- •2.2.1. Рисование на поле растрового рисунка
- •2.2.2. Движение двоичного образа по фоновой картинке
- •2.3. Компонент tImage и его использование
- •2.3.1. Проект «Движение компонента tImage»
- •2.3.2. Перемещение картинок
- •2.3.3. Проект «Движение компонента tImage
- •Глава 3
- •3.1. События от мыши
- •3.1.1. Проект «Попади в мишень»
- •3.1.2. Проект «Снежинки»
- •3.1.3. Проект «Крестики-нолики»
- •3.1.4. Движение образа по удерживанию левой кнопки мыши
- •3.1.5. Проект «Жизнь клеток»
- •3.2. События от клавиатуры
- •3.2.1. Код клавиши
- •3.2.2. Управляемое движение образа
- •3.2.3. Совмещение управляемого и неуправляемого движений.
- •Глава 4
- •4.1. Проект «Простейший графический редактор»
- •Глава 5
- •5.1. Создание кнопок
- •5.1.1. Проект «Лохотрон»
- •5.1.2. Игра «Пятнадцать»
- •5.2. Создание компонентов tImage
- •5.2.1. Проект «Угадай картинку»
- •5.2.2. Проект «Собери картинку»
- •Глава 6
- •6.1. Компоненты tStringGrid и tDrawGrid
- •6.1.1. Сортировка массива
- •6.1.2. Проект «Таблица успеваемости»
- •6.1.3. Система предварительной продажи билетов
- •6.1.4. Проект «Таблица рисунков»
- •6.1.5. Рисование в таблице tDrawGrid
- •6.2. Компоненты tListBox, tCombobox ,
- •6.2.1. Прорисовка изображений в списке tListBox
- •6.2.2. Проект «Зоомагазин»
- •6.2.3. Проект «Шуточная игра»
- •6.2.4. Проект «Редактирование списка вопросов»
- •Глава 7
- •7.1. Тест «Знаете ли вы загадки?»
- •7.2. Проект «Исторические даты»
- •Глава 8
- •8.1. Компоненты tOpenDialog, tSaveDialog – диалоги
- •8.1.1. Просмотр текстовых файлов
- •8.2. Добавление и удаление записей в файл и из файла
- •8.2.1. Проект «Журнал группы»
- •8.3. Файлы для проекта «Судоку»
- •Глава 9
- •9.1. Просмотр видеофильма с использованием
- •9.2. Простейшая мультипликация
- •Глава 10
- •10.1. Пример использования try… except
- •Глава 11
- •11.1. Оформление проекта
- •11.1.1. Проект «Бегущая строка»
- •11.1.2. Проект «Титры»
- •11.1.3. Общие рекомендации по оформлению
- •11.2. Рекомендации для отчета по проекту
- •11.3. Темы проектов
- •11.3.1. Головоломка «Сквэрворд»
- •11.3.2. Задача «Путешествие по маршруту»
- •11.3.3. Головоломка «Ходом коня»
- •11.3.4. Задача «Извилистый путь»
- •11.3.5. Головоломка «Фишки на поле»
- •Список литературы
- •630058, Новосибирск, ул. Русская, 35
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. Изначально сделайте все места свободными. По мере продажи отмечайте проданные места. Введите продажу по датам.