Разработка автоматизированной информационной системы кинотеатра

 













ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту:

Разработка автоматизированной информационной системы кинотеатра



Крынин Е.Д.,

группа 4293/04










Санкт-Петербург 2013


Содержание


Введение

. Основная часть

.1 Проектирование структуры базы данных

.2 Проектирование базы данных

.3 Основные этапы проектирования баз данных

. Практическая часть

.1 Постановка задачи

.2 Описание схем

.2.1 Схема алгоритма работы программного модуля ЖКХ

.2.2 Схема алгоритма работы программного модуля Авторизация

.2.3 Схема алгоритма работы программного модуля Тарифы

.3 Листинг программных модулей

.3.1 Процедура Авторизация

.3.2 Процедура Оператор

.3.3 Процедура Администратор

.4 Мероприятия по технике безопасности

Список литературы

Приложения


Введение


В современных кинотеатрах часто имеется несколько зрительных залов, обязательна система кондиционирования воздуха, а современные звуковоспроизводящие системы состоят из множества раздельных звуковых каналов (подробнее см. Dolby Surround, Dolby Digital, THX). При проектировании зданий для кинотеатров одной из главных задач считается достижение наилучших акустических характеристик кинозала для качественного звучания. В кинотеатрах обычно также имеются фойе для зрителей, гардероб, буфет, служебные помещения. Ранее кинотеатры СССР были довольно крупными и вмещали до 2500-4000 зрителей единовременно. В конце 1980-х годов в Советском Союзе насчитывалось более 5000 кинотеатров[1]. По другим данным в период застоя в СССР было 4800 кинотеатров и 150 тысяч киноустановок в посёлках городского типа и сельской местности[2]. Современные кинозалы рассчитаны на меньшее количество зрителей, обычно по 200-300 посадочных мест в одном кинозале. Часто это является следствием реконструкции крупных советских кинотеатров, разделённых на несколько мелких залов, заполнить которые гораздо легче. На 2008 год в России насчитывалось 7111 кинотеатров, 5651 из которых находился в сельской местности[1]. Современным оборудованием в 2010 году было оснащено 847 российских кинотеатров, насчитывавших на тот момент 2324 кинозала.

Киноустановка кинотеатра, использующего киноплёнку, состоит не менее, чем из двух кинопроекторов для обеспечения непрерывности демонстрации фильма. Каждый кинопроектор называется «постом» и все имеющиеся посты централизованно управляются специальной автоматизированной системой кинопоказа, обеспечивающей незаметность переходов между отдельными частями фильма для зрителя. Современные многозальные мультиплексы широко применяют бесперемоточные платтеры, позволяющие демонстрировать фильмы любой длительности одним постом без перезарядки. В сочетании с централизованным управлением кинозалами и высоким уровнем автоматизации кинопоказа это позволяет обслуживать весь мультиплекс одним киномехаником. Подавляющее большинство кинотеатров оснащаются кинопроекторами, рассчитанными на киноплёнку шириной 35 или 70-мм, однако в некоторых кинозалах устанавливаются стационарные проекторы формата 16-мм.

В современных цифровых кинотеатрах демонстрация кинофильма происходит цифровым кинопроектором с жесткого диска. Такая технология кинопоказа в настоящее время практически полностью вытеснила традиционную пленочную, вследствие своей гибкости и экономичности. Так, мировые премьеры могут происходить одновременно в разных точках земного шара, благодаря тому, что отпадает необходимость физической доставки фильмокопий в каждый кинотеатр. Цифровые технологии позволяют передавать цифровые данные фильма по защищенному каналу связи через интернет или спутниковый ретранслятор. Цифровая фильмокопия, в отличие от кинопленки, не подвержена механическому износу и количество сеансов с неизменным качеством с одной копии почти не ограничено. Кроме того, цифровой кинопоказ позволяет мгновенно выбирать любой язык фонограммы и субтитров на одной и той же копии фильма. Современные технологии защиты от видеопиратства надежно защищают цифровой кинофильм от несанкционированного копирования. По данным компании «Нева-фильм», на 1 декабря 2010 года в России насчитывалось 713 кинозалов, оборудованных цифровой проекцией.

Специально оборудованные кинотеатры приспособлены для демонстрации трёхмерного кино. Большинство современных цифровых кинотеатров проектируются и строятся в расчете на демонстрацию стереофильмов. При трехмерном кинопоказе, в зависимости от конкретной технологии, используется один или два кинопроектора (пленочных или цифровых). При этом каждый глаз зрителя видит свою часть стереопары, проецируемой на экран. В результате изображение воспринимается объемным. Из существующих на сегодняшний день технологий трёхмерного показа наибольшее распространение в России получила Dolby 3D, из-за дешевизны пассивных очков и пригодности обычного матового экрана, значительно более дешёвого, чем посеребрённые, требующиеся для некоторых других систем с поляризацией.

Отдельная категория кинотеатров, специально проектирующихся для демонстрации кинофильмов в формате IMAX. От обычных отличается размерами экрана, многократно превосходящими традиционные. Зрительный зал рассчитывается таким образом, что зрители располагаются близко к экрану, который в результате перекрывает все поле зрения. Это увеличивает эффект присутствия и обеспечивает полное погружение в сцену.

Целью данной курсовой работы является создание программного обеспечения для автматизации процесса администрирования сеансов кинотеатра и продажи билетов.

Основной задачей курсовой работы является разработка приложений базы данных по учету управления продажи билетов в кинотеатре средствами Microsoft Access.


1. Основная часть


.1 Проектирование структуры базы данных


Услуги кинотеатра - это услуги просмотра фильмов, доводимые до потребителя, для обеспечения комфортных условий процесса просмотра.

В нашем случае данное понятие определяет комплекс мероприятий, связанных с вопросами осуществления продажи билетов, наполнением базы фильмами и сеансами. Другими словами, какой фильм, когда и и в какой момент времени клиент может получить услуги по просмотру того или иного фильма. В целом для того, чтобы раскрыть эту категорию нам необходимо определить, а что же такое все таки кинотеатр. Кинотеатр - общественное учреждение для публичной демонстрации кинофильмов. Главное помещение кинотеатра - зрительный зал с экраном большого размера и системой воспроизведения звука, состоящей из нескольких громкоговорителей, обеспечивающих объёмный звук. Соответственно для большего удобства ведения оказания услуг кинотеатра нужно выделить несколько отдельных таблиц:

.Ассортимент;

.Сеансы;

.Продажи;

.Залы;

.Сотрудники.

А также выделить необходимость контроля продаж билетов или иных коммунальных услуг, а также их стоимость в настоящее время: в таблице Ассортимент выделить полное название фильма, стоимость билета на данный фильм и другая дополнительная информация о фильме.

Кинотеатр - сфера деятельности, направленная на обслуживание клиентов желающим просмотреть тот или иной фильм. Основное функциональное назначение - продажа билетов и сохранение отчетной информации о продажах. В связи с этим необходимо создать удобный и быстрый способ ведения отчетности об проданных билетах и занесением в таблицу «Продажи».


.2 Проектирование базы данных


В качестве выполняемых функций Автоматизированной информационной системы были определены:

. Хранение плана мероприятий и залов, в которых они проходят;

. Определение мест доступных для продажи;

. Продажа билетов и их печать.

. Возможность предоставления скидки;

.Поощрение сотрудников прцентом от продаж;

Для реализации данных функций, была спроектирована база данных, схему которой вы можете увидеть на рисунке 1.


Рис. 1. Схема базы данных


.3 Основные этапы проектирования баз данных


Перед созданием базы данных пользователь должен определить, из каких таблиц должна состоять база данных, какие данные нужно поместить в каждую таблицу, как связать таблицы. Проектирование базы данных, это теоретический этап и выполняется без применения ПЭВМ. В результате проектирования должна быть определена логическая структура данных, т.е. состав реляционных таблиц, их структура и межтабличные связи.

Основные шаги при выполнении проектирования базы данных следующие:

. Определить список данных, которые необходимо хранить в БД.

. Определить состав и структуру таблиц.

. Назначить ключевые поля для каждой таблицы.

. Выполнить нормализацию таблиц.

. Установить связи между таблицами.

Рассмотрим пример проектирования базы данных информационной системы.

Шаг 1. Определяем список данных, которые необходимо хранить в БД.

Шаг 2. Определяем состав и структуру таблиц.

Если все сведения хранить в одной таблице, то таблица станет очень неудобной для работы. В ней начнутся повторы данных. Так никто не работает. Это долго, трудно и чревато многочисленными ошибками.

Гораздо удобнее сделать несколько таблиц. Разделение базы на связанные таблицы не только удобно, но иногда и необходимо. Если данные в разных записях начинают повторяться, это может говорить о том, что база имеет плохую структуру. Каждая таблица содержит сведения об информационном объекте.

Определяем структуру таблиц. Создать структуру таблицы означает:

определить число полей таблицы;

каждому полю присвоить своё имя;

определить тип поля;

назначить число позиций для размещения информации в каждом поле (ширина столбца);

присвоить таблице уникальное имя.

Число полей - определяется из анализа предметной области данной задачи. Анализируя исходную информацию, выбираем из нее всю информацию, которая связана по смыслу с информационным объектом. Имя каждого поля должно быть уникально. Желательно давать такие имена полям базы данных, чтобы они отражали содержимое этих полей и поэтому легче запоминались

Тип поля - определяется характером информации, размещаемой в данном поле.

Шаг 3. Назначаем ключевые поля для каждой таблицы.

Для того чтобы связи между таблицами работали надежно и по записи из одной таблицы можно было однозначно найти записи в другой таблице, надо предусмотреть в таблице уникальные поля. Уникальное поле - это поле, значения в котором не могут повторяться. Например, из таблицы известно, что одним из списка является Иванов. Но в таблице может быть несколько разных Ивановых, и компьютер не разберется, кто же из них выполняет операцию. Это означает, что поле Наименование не является уникальным и потому его нельзя использовать для связи между таблицами.

Если ни одно поле таблицы не приемлемо в качестве уникального, его можно создать искусственно.

Шаг 4. Выполняем нормализацию таблиц.

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

Шаг 5. Установление связей между таблицами.

Между разными информационными объектами, а также между информационным объектом и его характеристиками возникают определенные ассоциации, называемые связями. При проектировании БД принято рассматривать взаимосвязи трех типов: «один к одному»; «один по многим»; «многие по многим».

Следует отметить, что реляционные базы данных не позволяют реализовать связь «многие по многим». В случае выявления такой связи, например связь между сущностями СТУДЕНТ и ПРЕДМЕТ, необходимо ввести дополнительную сущность ИЗУЧЕНИЕ_ПРЕДМЕТА. Каждый экземпляр введенной сущности связан с одним студентом и с одним предметом.

Связь между таблицами реализуется за счет одинаковых полей в связываемых таблицах. Чтобы связать две таблицы необходимо ключ главной таблицы ввести в состав ключа второстепенной таблицы. В противном случае нужно ввести в состав первой таблицы внешний ключ - ключ второй таблицы. Если заданы связи между таблицами, то работать с разными таблицами можно, как с одной цельной базой данных.

Хранение данных в связанных таблицах обладает рядом преимуществ:

экономия времени, поскольку одни и те же данные не приходится вводить в нескольких таблицах;

уменьшение размера базы данных (порой весьма значительное по сравнению с размером плоской таблицы), которое экономит дисковое пространство на компьютере и облегчает перенос базы данных;

существенное сокращение количества ошибок.

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

программный автоматизация листинг учет

2. Практическая часть


.1 Постановка задачи


Необходимо разработать программу Автоматизированной информационной системы кинотеатра. Отразить в ней возможность добавления отчетов по продаже билетов, поощрения сотрудников процентом от продаж в данном месяце. А также реализовать возможность администрирования, для добавления фильмов и сеансов.


.2 Описание схем


.2.1 Схема алгоритма работы программного модуля Оператор

Схема выполнения действий на форме «Оператор» представлена на рисунке 2.


Рис. 2 Схема алгоритма работы программного модуля «ЖКХ»


Рис. 2 Схема алгоритма работы программного модуля «Оператор»


.2.2 Схема алгоритма работы программного модуля Авторизация

Схема выполнения действий на форме «Авторизация» представлена на рисунке 3


Рис. 3 Схема алгоритма работы программного модуля «Авторизация»


.3 Листинг программных модулей


Листинг программных модулей приведен в приложении 1.


.3.1 Процедура Авторизация

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


.3.2 Процедура Оператор

В процедуре оператор производится обработка выбора билета и занесение сведений о продаже в базу.


2.3.3 Процедура «Администратор»

Производится обработка добавления новых сведений в базу кинотеатра.

Текст программы приведен в приложении 1 в соответствии с ГОСТ 19.401-78


.3.4 Мероприятия по технике безопасности

Программа должна нормально функционировать при бесперебойной работе ЭВМ. При возникновении сбоя в работе аппаратуры, восстановление нормальной работы программы должно производиться после: перезагрузки операционной системы; запуска исполняемого файла программы; повторного выполнения действий, потерянных до последнего сохранения информации в файл на магнитном диске.

Уровень надежности программы должен соответствовать технологии программирования, предусматривающей: инспекцию исходных текстов программы; автономное тестирование модулей (методов) программы; тестирование сопряжения модулей (методов) программы; комплексное тестирование программы. Время восстановления после отказа должно состоять из: времени перезапуска пользователем операционной системы; времени запуска пользователем исполняемого файла программы; времени повторного ввода потерянных данных.


Список литературы


1.Архангельский А.Я. Программирование в Delphi г. Москва: издательство «Бином», 2005 г. - 332 с.;

.Ахметов А. Р. Программирование в Delphi 7. г.Москва: издательство «Бином-Пресс», 2003 г. - 780 с.;

.Бобровский С.И. Delphi7 - Учебный курс. г. Санкт-Петербург: издательство «Питер», 2004 г. - 736 с.;

.Глушаков С. В. Delphi 2007 г. Москва: издательство «Хранитель», 2008 г. - 635 с.;

5.<#"justify">Приложения


Приложение 1


Листинг программных модулей

{1}unit Unit1;

{2}interface

{3}uses

{4} Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

{5} Dialogs, StdCtrls, ExtCtrls;

{6}type

{7} TForm1 = class(TForm)

{8} cbb1: TComboBox;

{9} lbledt1: TLabeledEdit;

{10} btn1: TButton;

{11} procedure btn1Click(Sender: TObject);

{12} private

{13} { Private declarations }

{14} public

{15}{ Public declarations }

{16} end;

{17}var

{18} Form1: TForm1;

{19}implementation

{20}uses Unit3, Unit5, Unit2;

{21}{$R *.dfm}

{22}procedure TForm1.btn1Click(Sender: TObject);

{23}var v:string;

{24}begin

{25}with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} SQL.Text:='SELECT *';

{1} SQL.Add('FROM Сотрудники');

{1} SQL.Add('WHERE ((Должность="'+cbb1.Text+'" AND {1} (Пароль="'+lbledt1.Text+'")));');

{1} Open;

{1} v:=Fields[1].AsString+' '+Fields[2].AsString+' '+Fields[3].AsString;

{1} if Fields[0].AsString='' then

{1} begin

{1} Application.MessageBox('Пароля, логиня ввадиль, кнопка жаль, а оно бежельме {1}ашельме и не пустиля','Ашипхе насяльника.',0);

{1} Application.MessageBox('Ашипке насяльника...','Ашипке...',0);

{1} lbledt1.Text:='';

{1} lbledt1.SetFocus;

{1} end

{1} else

{1} begin

{1} if Fields[10].AsString='Оператор' then

{1} begin

{1} Form3.Caption:=v;

{1} Form3.Show;

{1} end

{1} else

{1} if Fields[10].AsString='Администратор' then

{1} begin

{1} Form5.Caption:=v;

{1} Form5.Show;

{1} end

{1} end;

{1} end;

{1} end;

{1}end;

{1}end.

{1}unit Unit2;

{1}interface

{1}uses

{1} SysUtils, Classes, DB, ADODB;

{1}type

{1} TDataModule2 = class(TDataModule)

{1} con1: TADOConnection;

{1}qry1: TADOQuery;

{1} private

{1}{ Private declarations }

{1} public

{1} { Public declarations }

{1} end;

{1}var

{1} DataModule2: TDataModule2;

{1}implementation

{1}{$R *.dfm}

{1}end.

{1}unit Unit3;

{1}interface

{1}uses

{1} Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

{1} Dialogs, StdCtrls, ExtCtrls, Grids;

{1}type

{1} TForm3 = class(TForm)

{1} rg1: TRadioGroup;

{1} rg2: TRadioGroup;

{1} lbledt1: TLabeledEdit;

{1} btn1: TButton;

{1} grp1: TGroupBox;

{1} cbb1: TComboBox;

{1} grp2: TGroupBox;

{1} strngrd1: TStringGrid;

{1} grp3: TGroupBox;

{1} cbb2: TComboBox;

{1} lst1: TListBox;

{1} lst2: TListBox;

{1} lst3: TListBox;

{1} procedure massiv;

{1} procedure FormActivate(Sender: TObject);

{1} procedure FormClose(Sender: TObject; var Action: TCloseAction);

{1}procedure cbb1Change(Sender: TObject);

{1} procedure rg1Click(Sender: TObject);

{1} procedure strngrd1SelectCell(Sender: TObject; ACol, ARow: Integer;

{1} var CanSelect: Boolean);

{1} procedure btn1Click(Sender: TObject);

{1} procedure cbb2Change(Sender: TObject);

{1} procedure rg2Click(Sender: TObject);

{1} private

{1} { Private declarations }

{1} public

{1} { Public declarations }

{1} end;

{1}var

{1} Form3: TForm3;

{1} stb,str:Byte;

{1}implementation

{1}uses Unit2, Unit1, Unit4;

{1}{$R *.dfm}

{1}procedure TForm3.FormActivate(Sender: TObject);

{1}var i:Byte;

{1}begin

{1} rg2.Items.Clear;

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT DISTINCT [Наименование зала], [Ряды]';

{1} SQL.Add('FROM [Залы]');

{1} Open;

{1} for i:=0 to RecordCount-1 do

{1} begin

{1} rg2.Items.Add(Fields.Fields[0].Value);

{1} lst3.Items.Add(Fields.Fields[1].Value);

{1} RecNo:=RecNo+1;

{1} end;

{1} rg2.ItemIndex:=0;

{1} rg2Click(Sender);

{1} Close;

{1} SQL.Text:='SELECT DISTINCT [Наименование]';

{1} SQL.Add('FROM [Ассортимент]');

{1} Open;

{1} for i:=0 to RecordCount-1 do

{1} begin

{1} cbb1.Items.Add(Fields.Fields[0].Value);

{1} RecNo:=RecNo+1;

{1} end;

{1}Close;

{1}end;

{1} end;

{1}end;

{1}procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);

{1}begin

{1} Form1.Close;

{1}end;

{1}procedure TForm3.cbb1Change(Sender: TObject);

{1}var z:TDateTime;

{1} s:string;

{1} i:Byte;

{1}begin

{1} z:=Now;

{1} DateTimeToString(s,'dd.mm.yyyy',z);

{1} cbb2.Clear;

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT [Цена]';

{1} SQL.Add('FROM [Ассортимент]');

{1} SQL.Add('WHERE ([Наименование]="'+cbb1.Text+'")');

{1} Open;

{1} rg1.ItemIndex:=0;

{1} lbledt1.Text:=DataModule2.qry1.Fields.Fields[0].Value;

{1} Close;

{1} SQL.Text:='SELECT [Фильм], [Время], [Дата]';

{1} SQL.Add('FROM [Сеансы]');

{1} SQL.Add('WHERE (([Фильм]="'+cbb1.Text+'")');

{1} SQL.Add('AND ([Дата]="'+s+'"))');

{1} Open;

{1} if Fields.Fields[0].AsString<>'' then

{1} begin

{1} for i:=0 to RecordCount-1 do

{1} begin

{1} cbb2.Items.Add(Fields.Fields[1].Value);

{1} RecNo:=RecNo+1;

{1} end;

{1} end;

{1} Close;

{1} end;

{1} end;

{1} massiv;

{1}end;

{1}procedure TForm3.rg1Click(Sender: TObject);

{1}var prc:Integer;

{1}begin

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1}SQL.Text:='SELECT [Цена] FROM [Ассортимент] WHERE

{1} ([Наименование]="'+cbb1.Text+'")';

{1} Open;

{1} prc:=DataModule2.qry1.Fields.Fields[0].Value;

{1} end;

{1} end;

{1} with lbledt1 do

{1} begin

{1} case rg1.ItemIndex of

{1} 0:Text:=IntToStr(prc);

{1} 1:Text:=FloatToStr(prc-(prc*0.01));

{1} 2:Text:=FloatToStr(prc-(prc*0.03));

{1} 3:Text:=FloatToStr(prc-(prc*0.05));

{1} 4:Text:=FloatToStr(prc-(prc*0.1));

{1} end;

{1} end;

{1}end;

{1}procedure TForm3.strngrd1SelectCell(Sender: TObject; ACol, ARow: Integer;

{1} var CanSelect: Boolean);

{1}begin

{1} stb:=ACol;

{1} str:=ARow;

{1}end;

{1}procedure TForm3.massiv;

{1}var i,j,k:Byte;

{1} z:TDateTime;

{1} s:string;

{1}begin

{1} z:=Now;

{1} DateTimeToString(s,'dd.mm.yyyy',z);

{1} lst1.Clear;

{1} lst2.Clear;

{1} for i:=0 to strngrd1.RowCount-1 do

{1} begin

{1} for j:=0 to strngrd1.ColCount-1 do

{1} begin

{1} strngrd1.Cells[j,i]:='';

{1} end;

{1} end;

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT [Место], [Ряд]';

{1}SQL.Add('FROM [Продажи]');

{1} SQL.Add('WHERE (([Фильм]="'+cbb1.Text+'")');

{1} SQL.Add('AND ([Сеанс]="'+cbb2.Text+'")');

{1} SQL.Add('AND ([Зал]="'+rg2.Items[rg2.ItemIndex]+'")');

{1}SQL.Add('AND ([Дата]=:qr))');

{1} Parameters.ParamByName('qr').Value:=StrToDate(s);

{1}Open;

{1} if Fields.Fields[0].AsString<>'' then

{1} begin

{1} for i:=0 to RecordCount-1 do

{1} begin

{1} lst1.Items.Add(Fields.Fields[0].Value);

{1} lst2.Items.Add(Fields.Fields[1].Value);

{1} RecNo:=RecNo+1;

{1} end;

{1} end

{1} else

{1} begin

{1} lst1.Items.Add(IntToStr(strngrd1.RowCount));

{1} lst2.Items.Add(IntToStr(strngrd1.ColCount));

{1} end;

{1} Close;

{1} end;

{1} end;

{1} with strngrd1 do

{1} begin

{1} for i:=0 to RowCount-1 do

{1} begin

{1} for j:=0 to ColCount-1 do

{1} begin

{1} for k:=0 to lst1.Count-1 do

{1} begin

{1} if (StrToInt(lst1.Items.Strings[k])=i) and (StrToInt(lst2.Items.Strings[k])=j) then

{1} begin

{1} Cells[j,i]:='';

{1} Break;

{1} end

{1} else

{1} Cells[j,i]:=lbledt1.Text;

{1} end;

{1} end;

{1} end;

{1} end;

{1}end;

{1}procedure TForm3.btn1Click(Sender: TObject);

{1}var z:TDateTime;

{1} s:string;

{1}begin

{1} if (cbb1.Text<>'') and (cbb2.Text<>'') and (rg1.ItemIndex<>-1) and (rg2.ItemIndex<>-1) {1}and (lbledt1.Text<>'') then

{1} begin

{1} if strngrd1.Cells[stb,str]<>'' then

{1} begin

{1} z:=Now;

{1} DateTimeToString(s,'dd.mm.yyyy',z);

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='INSERT INTO

{1} [Продажи]([Сотрудник],[Зал],[Фильм],[Сеанс],[Место], [Ряд], [Стоимость], [Дата])';

{1} SQL.Add('VALUES (q,w,e,r,t,y,u,i)');

{1} with Parameters do begin

{1} ParamByName('q').Value:=Form3.Caption;

{1} ParamByName('w').Value:=rg2.Items[rg2.ItemIndex];

{1} ParamByName('e').Value:=cbb1.Text;

{1} ParamByName('r').Value:=cbb2.Text;

{1} ParamByName('t').Value:=str;

{1}ParamByName('y').Value:=stb;

{1} ParamByName('u').Value:=StrToFloat(lbledt1.Text);

{1} ParamByName('i').Value:=s;

{1} end;

{1} ExecSQL;

{1} end;

{1} end;

{1} with Form4 do

{1} begin

{1} qrlbl3.Caption:=cbb1.Text;

{1} qrlbl12.Caption:=cbb2.Text;

{1} qrlbl7.Caption:=rg2.Items[rg2.ItemIndex];

{1} qrlbl8.Caption:=IntToStr(str+1);

{1}qrlbl9.Caption:=IntToStr(stb+1);

{1} qrlbl10.Caption:=lbledt1.Text+' руб.';

{1} qckrp1.PreviewModal;

{1} end;

{1} strngrd1.Cells[stb,str]:='';

{1} end

{1} else

{1} Application.MessageBox('Билет на это место уже продан','Ошибка',0);

{1} end

{1} else

{1} Application.MessageBox('Заполните все поля.','Ошибка',0);

{1}end;

{1}procedure TForm3.cbb2Change(Sender: TObject);

{1}begin

{1} rg1.ItemIndex:=0;

{1} if rg2.ItemIndex>-1 then

{1} massiv;

{1}end;

{1}procedure TForm3.rg2Click(Sender: TObject);

{1}begin

{1} strngrd1.ColCount:=StrToInt(lst3.Items.Strings[rg2.ItemIndex]);

{1} strngrd1.RowCount:=StrToInt(lst3.Items.Strings[rg2.ItemIndex]);

{1} if cbb2.ItemIndex>-1 then

{1} cbb2Change(Sender);

{1}end;

{1}end.

{1}unit Unit4;

{1}interface

{1}uses

{1} Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

{1} Dialogs, QRCtrls, QuickRpt, ExtCtrls;

{1}type

{1} TForm4 = class(TForm)

{1} qckrp1: TQuickRep;

{1} qrbnd1: TQRBand;

{1} qrshp1: TQRShape;

{1} qrlbl1: TQRLabel;

{1} qrlbl2: TQRLabel;

{1} qrlbl3: TQRLabel;

{1} qrlbl4: TQRLabel;

{1} qrlbl5: TQRLabel;

{1} qrlbl6: TQRLabel;

{1} qrlbl7: TQRLabel;

{1} qrlbl8: TQRLabel;

{1}qrlbl9: TQRLabel;

{1} qrlbl10: TQRLabel;

{1} qrlbl11: TQRLabel;

{1}qrlbl12: TQRLabel;

{1} private

{1} { Private declarations }

{1} public

{1} { Public declarations }

{1} end;

{1}var

{1} Form4: TForm4;

{1}implementation

{1}{$R *.dfm}

{1}end.

{1}unit Unit5;

{1}interface

{1}uses

{1} Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

{1} Dialogs, StdCtrls, ExtCtrls, ComCtrls, QuickRpt, QRCtrls;

{1}type

{1} TForm5 = class(TForm)

{1} pgc1: TPageControl;

{1} ts1: TTabSheet;

{1} ts2: TTabSheet;

{1} ts3: TTabSheet;

{1} ts4: TTabSheet;

{1} lbledt1: TLabeledEdit;

{1} lbledt2: TLabeledEdit;

{1} lbledt3: TLabeledEdit;

{1} lbledt4: TLabeledEdit;

{1} lbledt5: TLabeledEdit;

{1} lbledt6: TLabeledEdit;

{1} lbledt7: TLabeledEdit;

{1} lbledt8: TLabeledEdit;

{1} lbledt9: TLabeledEdit;

{1} lbledt10: TLabeledEdit;

{1} cbb1: TComboBox;

{1} btn1: TButton;

{1} btn2: TButton;

{1} btn3: TButton;

{1} lbledt11: TLabeledEdit;

{1} lbledt12: TLabeledEdit;

{1} lbledt13: TLabeledEdit;

{1} lbledt14: TLabeledEdit;

{1} lbledt15: TLabeledEdit;

{1} lbledt16: TLabeledEdit;

{1} lbledt17: TLabeledEdit;

{1}lbledt18: TLabeledEdit;

{1} lbledt19: TLabeledEdit;

{1} lbledt20: TLabeledEdit;

{1} btn4: TButton;

{1} ts5: TTabSheet;

{1} btn5: TButton;

{1} btn6: TButton;

{1} btn7: TButton;

{1} dtp1: TDateTimePicker;

{1}dtp2: TDateTimePicker;

{1} procedure report;

{1} procedure btn1Click(Sender: TObject);

{1} procedure btn2Click(Sender: TObject);

{1} procedure btn3Click(Sender: TObject);

{1} procedure btn4Click(Sender: TObject);

{1} procedure btn5Click(Sender: TObject);

{1} procedure FormClose(Sender: TObject; var Action: TCloseAction);

{1} procedure btn6Click(Sender: TObject);

{1} procedure btn7Click(Sender: TObject);

{1} procedure FormActivate(Sender: TObject);

{1} private

{1} { Private declarations }

{1} public

{1} { Public declarations }

{1} end;

{1}var

{1} Form5: TForm5;

{1}implementation

{1}uses Unit2, Unit3, Unit6, Unit1;

{1}{$R *.dfm}

{1}procedure TForm5.report;

{1}var asd:array of TQRDBText;

{1} ad:array of TQRLabel;

{1} a:array of TQRShape;

{1} dd:array of TQRShape;

{1} qw:TQRLabel;

{1} i:Byte;

{1}begin

{1}Form6.qckrp1.DataSet:=DataModule2.qry1;

{1} with Form6 do

{1} begin

{1} for i:=ComponentCount-1 downto 0 do

{1} if (Components[i] is TQRDBText) then

{1} (Components[i] as TQRDBText).Free;

{1} for i:=ComponentCount-1 downto 0 do

{1} if (Components[i] is TQRLabel) then

{1} (Components[i] as TQRLabel).Free;

{1} for i:=ComponentCount-1 downto 0 do

{1} if (Components[i] is TQRShape) then

(Components[i] as TQRShape).Free;

{1} end;

{1} qw:=TQRLabel.Create(Form6);

{1} qw.Parent:=Form6.qrbnd2;

{1} qw.Left:=296;.Width:=81;.Height:=37;.Top:=0;.Font.Name:='Times New Roman';.Font.Size:=22;.Font.Style:=[fsBold];.Caption:='Отчёт';DataModule2 do(asd,qry1.FieldCount);(ad,qry1.FieldCount);(a,qry1.FieldCount);(dd,qry1.FieldCount);i:=0 to qry1.FieldCount-1 do[i]:=TQRDBText.Create(Form6);[i].Parent:=Form6.qrbnd4;[i].Width:=100;[i].Left:=10+i*150;[i].Top:=8;[i].DataSet:=qry1;[i].DataField:=qry1.Fields.Fields[i].FieldName;[i]:=TQRLabel.Create(Form6);[i].Parent:=Form6.qrbnd3;[i].Width:=100;[i].Left:=10+i*150;[i].Top:=8;[i].Caption:=qry1.Fields.Fields[i].FieldName;[i]:=TQRShape.Create(Form6);[i].Parent:=Form6.qrbnd4;[i].Width:=150;[i].Height:=39;[i].Left:=0+i*151;[i].Top:=0;[i].SendToBack;[i]:=TQRShape.Create(Form6);[i].Parent:=Form6.qrbnd3;[i].Width:=150;[i].Height:=39;[i].Left:=0+i*151;[i].Top:=0;[i].SendToBack;;;;TForm5.btn1Click(Sender: TObject);(lbledt1.Text<>'') and (lbledt2.Text<>'') and (lbledt3.Text<>'') and (lbledt4.Text<>'') and (lbledt5.Text<>'') thenDataModule2 doqry1 do

begin;.Text:='INSERT INTO [Ассортимент]([Наименование],[Описание],[Цена],[Продолжительность],[Возрастное ограничение])';

SQL.Add('VALUES (q,w,e,r,t)');Parameters do('q').Value:=lbledt1.Text;('w').Value:=lbledt2.Text;('e').Value:=lbledt3.Text;('r').Value:=lbledt4.Text;('t').Value:=lbledt5.Text;;;;;

Application.MessageBox('Заполните все поля.','Ошибка',0);

end;TForm5.btn2Click(Sender: TObject);(lbledt6.Text<>'') and (lbledt7.Text<>'') and (lbledt8.Text<>'') thenDataModule2 doqry1 do

begin;.Text:='INSERT INTO [Залы]([Наименование зала],[Вместимость],[Ряды],[Места в ряде])';

SQL.Add('VALUES (q,w,e,r)');Parameters do('q').Value:=lbledt6.Text;('w').Value:=lbledt7.Text;('e').Value:=lbledt8.Text;('r').Value:=lbledt8.Text;;;;;

Application.MessageBox('Заполните все поля.','Ошибка',0);

end;TForm5.btn3Click(Sender: TObject);(cbb1.Text<>'') and (lbledt9.Text<>'') and (lbledt10.Text<>'') thenDataModule2 doqry1 do;.Text:='INSERT INTO [Сеансы]([Дата],[Время])';.Add('VALUES (q,w,e)');Parameters do('q').Value:=cbb1.Text;('w').Value:=lbledt9.Text;('e').Value:=lbledt10.Text;;;;;

Application.MessageBox('Заполните все поля.','Ошибка',0);

end;TForm5.btn4Click(Sender: TObject);(lbledt11.Text<>'') and (lbledt12.Text<>'') and (lbledt13.Text<>'') and (lbledt14.Text<>'') and (lbledt15.Text<>'')(lbledt16.Text<>'') and (lbledt17.Text<>'') and (lbledt18.Text<>'') and (lbledt19.Text<>'') and (lbledt20.Text<>'') thenDataModule2 doqry1 do

begin;.Text:='INSERT INTO [Сотрудники]([Фамилия],[Имя],[Отчество],[Дата приёма],[Адресс], [Телефон], [ИНН], [Дата рождения], [Пароль], [Должность])';

SQL.Add('VALUES (q,w,e,r,t,y,u,i)');Parameters do('q').Value:=lbledt11.Text;('w').Value:=lbledt12.Text;('e').Value:=lbledt13.Text;('r').Value:=lbledt14.Text;('t').Value:=lbledt15.Text;('y').Value:=lbledt16.Text;('u').Value:=lbledt17.Text;('i').Value:=lbledt18.Text;('o').Value:=lbledt19.Text;('p').Value:=lbledt20.Text;;;;;

{1} else

{1} Application.MessageBox('Заполните все поля.','Ошибка',0);

{1}end;

{1}procedure TForm5.btn5Click(Sender: TObject);

{1}begin

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT (Round(sum([Стоимость])*100)/100) AS [Выручка в рублях]';

{1}SQL.Add('FROM [Продажи]');

{1} Open;

{1} report;

{1} Form6.qckrp1.PreviewModal;

{1} end;

{1} end;

{1}end;

{1}procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);

{1}begin

{1} Form1.Close;

{1}end;

{1}procedure TForm5.btn6Click(Sender: TObject);

{1}begin

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT *';

{1} SQL.Add('FROM [Сеансы]');

{1} Open;

{1} report;

{1} Form6.qckrp1.PreviewModal;

{1} end;

{1} end;

{1}end;

{1}procedure TForm5.btn7Click(Sender: TObject);

{1}var s,t:string;

{1}begin

{1} DateTimeToString(s,'dd.mm.yyyy',dtp1.DateTime);

{1} DateTimeToString(t,'dd.mm.yyyy',dtp2.DateTime);

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT [Зал], [Фильм], [Сеанс], Round([Стоимость]*100)/100 AS

{1} [Стоимость], [Дата]';

{1} SQL.Add('FROM [Продажи]');

{1} SQL.Add('WHERE (([Дата]>=:we)');

{1} SQL.Add('AND ([Дата]<=:qr))');

{1} Parameters.ParamByName('we').Value:=StrToDate(s);

{1}Parameters.ParamByName('qr').Value:=StrToDate(t);

{1} Open;

{1} report;

{1} Form6.qckrp1.PreviewModal;

{1} end;

{1} end;

{1}end;

{1}procedure TForm5.FormActivate(Sender: TObject);

{1}var i:Byte;

{1}begin

{1} cbb1.Clear;

{1} with DataModule2 do

{1} begin

{1} with qry1 do

{1} begin

{1} Close;

{1} SQL.Text:='SELECT DISTINCT [Наименование]';

{1} SQL.Add('FROM [Ассортимент]');

{1} Open;

{1} for i:=0 to RecordCount-1 do

{1} begin

{1} cbb1.Items.Add(Fields.Fields[0].Value);

{1} RecNo:=RecNo+1;

{1} end;

{1} Close;

{1} end;

{1} end;

{1}end;

{1}end.

{1}unit Unit6;

{1}interface

{1}uses

{1}Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

{1} Dialogs, QuickRpt, QRCtrls, ExtCtrls;

{1}type

{1} TForm6 = class(TForm)

{1} qckrp1: TQuickRep;

{1} qrbnd1: TQRBand;

{1} qrbnd2: TQRBand;

{1} qrbnd3: TQRBand;

{1} qrbnd4: TQRBand;

{1} qrbnd5: TQRBand;

{1} qrsysdt1: TQRSysData;

{1} qrsysdt2: TQRSysData;

{1} private

{1} { Private declarations }

{1} public

{1} { Public declarations }

{1}end;

{1}var

{1} Form6: TForm6;

{1}implementation

{1}{$R *.dfm}

{1}end.


Приложение 2


Скриншоты работы программы.

После запуска приложения, по нажатию на файл Project1.exe открывается форма изображена на рисунке 1.


Рис. 1


При выборе логина администратора и ввода пароля администратора открывается следующая форма. Рисунок 2.

На которой имеется несколько вкладок.

На вкладке «Ассортимент» производится добавление фильмов в базу данных кинотеатра.


Рис. 2

На вкладке «Залы» производится добавление планов залов в базу данных кинотеатра.


Рис. 3


На вкладке «Сеансы» производится добавление сеансов в базу данных кинотеатра.


Рис. 4


На вкладке «Сотрудники» производится добавление информации о сотрудниках кинотеатра в базу данных кинотеатра.

Рис. 5


На вкладке «Отчеты» производится формирование отчетов.


Рис. 6


При выборе логина оператора и ввода пароля оператора открывается следующая форма.

Рисунок 7. На которой оператор выбирает фильм, сеанс, зал, предоставляемую скидку и место на визуальном плане зала, после чего производится печать билета.


Рис. 7.


ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовому проекту: Разработка автоматизированной информационной системы кинотеатра

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ