44036

Автоматизированная система управления для фитнес клуба

Дипломная

Информатика, кибернетика и программирование

Инспектор Объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий. Если нужно изменить что-нибудь, связанное с определенным компонентом, то Вы обычно делаете это в Инспекторе Объектов. К примеру, Вы можете изменить имя и размер компонента TLabel изменяя свойства Caption, Left, Top, Height, и Width.

Русский

2013-11-09

3.89 MB

150 чел.

Содержание.

Раздел 1.Теоретическая часть…………………………………………………………..

1

Введение…………………………………………………………………………………..

4

1.1.1 Главные составные части среды программирования…………………………..

5

1.1.2 Дополнительные элементы…………………………………………………………

9

1.1.3 Стандартные компоненты…………………………………………………………

10

1.1.4 Структура проекта Delphi………………………………………………………….

11

1.2.Microsoft Access………………………………………………………………………

13

1.2.1 Реляционная модель данных………………………………………………………

18

1.2.2 Иерархическая модель данных…………………………………………………….

20

1.2.3 Сетевая модель данных……………………………………………………………..

21

1.2.4 Локальные базы данных……………………………………………………………

22

1.2.5 Удаленные базы данных……………………………………………………………

23

1.2.6 Архитектура файл-сервер…………………………………………………………..

27

1.2.7 Архитектура клиент-сервер………………………………………………………..

29

1.2.8 Ключи…………………………………………………………………………………

31

1.2.9 Индексы………………………………………………………………………………

35

1.2.10 Механизм транкзакций……………………………………………………………

37

1.2.11 Нормальные формы………………………………………………………………...

40

1.2.12 Первая нормальная форма (1NF)…………………………………………………..

41

1.2.13 Вторая нормальная форма (2NF)…………………………………………………..

42

1.2.14 Третья нормальная форма (3NF)…………………………………………………

43

1.2.15 Основные операторы языка доступа и работы с данными…………………….

44

1.2.16 Функции языка SQL……………………………………………………………….

46

1.2.18 Таблицы……………………………………………………………………………

48

1.2.19 Запросы……………………………………………………………………………..

55

1.2.20 Отчеты………………………………………………………………………………

59

Раздел 2. Конструкторская часть………………………………………………………

60

Раздел 3. Исследовательская часть……………………………………………………

104

Раздел 4. Охрана труда и безопасность жизнедеятельности…………………………..

116

Раздел 5. Организационно-экономический раздел…………………………………………

110

5.1.Расчет трудоемкости проекта…………………………………………………………

111

5.2.Определение численности исполнителей……………………………………………..

113

5.3.Расчет затрат на выполнение проекта и составление таблицы структуры затрат….

114

5.4.Расчет затрат на внедрение проекта………………………………………………….

118

Заключение…………………………………………………………………………………..

120

Список используемых источников…………………………………………………………..

121

Приложения………………………………………………………………………………….

122

1 Листинг приложения……………………………………………………………………..

123

2 Структура базы данных…………………………………………………………………

142

3 Интерфейс приложения…………………………………………………………………..

143

Введение.

Данный дипломный проект посвящен автоматизированной системе управления для фитнес клуба.

Разработка поможет оптимизировать работу с многочисленными данными и документами, такими как данные о посетителях клуба и их посещаемости (и другими), а также систематизировать документооборот для повышения эффективности работы фитнес клуба.

Разработка посвящена работникам, ответственным за документооборот фитнес клуба.

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

Конструкторская часть включает в себя подробное наглядное пошаговое описание создания проекта.

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

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

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

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

Раздел 1.Теоретическая часть. «Технология разработки базы данных и приложения для работы с ней»

1.1.1 Главные составные части среды программирования.

Ниже перечислены основные составные части Delphi:

  1.  Дизайнер Форм (Form Designer)
  2.  Окно Редактора Исходного Текста (Editor Window)
  3.  Палитра Компонент (Component Palette) 5

Инспектор Объектов (Object Inspector)

  1.  Обозреватель дерева объектов (Object TreeView)

Есть, конечно, и другие важные составляющие Delphi, вроде линейки инструментов, системного меню и многие другие, нужные Вам для точной настройки программы и среды программирования.

Программисты на Delphi проводят большинство времени переключаясь между Дизайнером Форм и Окном Редактора Исходного Текста (которое для краткости называют Редактор). Прежде чем Вы начнете, убедитесь, что можете распознать эти два важных элемента. Дизайнер Форм показан на рисунке 1, окно Редактора - на рисунке 2.

Рисунок 1: Дизайнер Форм - то место, где создается визуальный интерфейс программы.

               Рисунок 2: В окне редактора создается логика управления программой.

Дизайнер Форм в Delphi столь интуитивно понятен и прост в использовании, что создание визуального интерфейса превращается в детскую игру. Дизайнер Форм первоначально состоит из одного пустого окна, которое Вы заполняете всевозможными объектами, выбранными на Палитре Компонент.

Несмотря на всю важность Дизайнера Форм, местом, где программисты проводят основное время является Редактор. Логика является движущей силой программы и Редактор - то место, где Вы ее "кодируете".

Палитра Компонент (смотрите рисунок 3) позволяет Вам выбрать нужные объекты для размещения их на Дизайнере Форм. Для использования Палитры Компонент просто первый раз щелкните мышкой на один из объектов и потом второй раз - на Дизайнере Форм. Выбранный Вами объект появится на проектируемом окне и им можно манипулировать с помощью мыши.

Палитра Компонент использует постраничную группировку объектов. Внизу Палитры находится набор закладок - Standard, Additional, Win32 и т.д. Если Вы щелкнете мышью на одну из закладок, то Вы можете перейти на следующую страницу Палитры Компонент. Принцип разбиения на страницы широко используется в среде программирования Delphi и его легко можно использовать в своей программе. (На странице Additional есть компоненты для организации страниц с закладками сверху и снизу).

Рисунок 3: Палитра Компонент - место, где выбираете объекты, которые будут помещены на форму.

Предположим, Вы помещаете компонент TEdit на форму; Вы можете двигать его с места на место. Вы также можете использовать границу, прорисованную вокруг объекта для изменения его размеров. Большинством других компонент можно манипулировать тем же образом. Однако, невидимые во время выполнения программы компоненты (типа TMenu или TDataBase) не меняют своей формы.

Слева от Дизайнера Форм Вы можете видеть Инспектор Объектов (рисунок 4). Заметьте, что информация в Инспекторе Объектов меняется в зависимости от объекта, выбранного на форме. Важно понять, что каждый компонент является настоящим объектом и Вы можете менять его вид и поведение с помощью Инспектора Объектов.

Инспектор Объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий. Если нужно изменить что-нибудь, связанное с определенным компонентом, то Вы обычно делаете это в Инспекторе Объектов. К примеру, Вы можете изменить имя и размер компонента TLabel изменяя свойства Caption, Left, Top, Height, и Width.

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

Рисунок 4: Инспектор Объектов позволяет определять свойства и поведение объектов, помещенных на форму.

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

Обозреватель дерева объектов (смотрите рисунок 3). Эта панель появилась в Delphi 7, и, на мой взгляд, она является лучшим новшеством этой версии. С помощью дерева компонентов легко находить компоненты, потому что они расположены в виде дерева. Если у вас какой-то компонент будет полностью перекрывать другой, то вы можете выделить верхний компонент, а потом, в дереве компонентов, легко найти тот, который находится снизу.

Рисунок 5: Окно Обозревателя дерева объектов.

1.1.2 Дополнительные элементы.

В данном разделе внимание фокусируется на двух инструментах, которые можно воспринимать как вспомогательные для среды программирования:

  1.  Меню (Menu System)
  2.  Панель с кнопками для быстрого доступа (SpeedBar)

Меню предоставляет быстрый и гибкий интерфейс к среде Delphi, потому что может управляться по набору "горячих клавиш". Это удобно еще и потому, что здесь используются слова или короткие фразы, более точные и понятные, нежели иконки или пиктограммы. Вы можете использовать меню для выполнения широкого круга задач; скорее всего, для наиболее общих задач вроде открытия и закрытия файлов, управления отладчиком или настройкой среды программирования.

SpeedBar находится непосредственно под меню, слева от Палитры Компонент (рисунок 6). SpeedBar выполняет много из того, что можно сделать через меню. Если задержать

мышь над любой из иконок на SpeedBar, то Вы увидите что появится подсказка,

объясняющая назначение данной иконки.

Рисунок 6: SpeedBar находится слева от Палитры Компонент.

1.1.3 Стандартные компоненты.

Для дальнейшего знакомства со средой программирования Delphi потребуется рассказать о составе первой страницы Палитры Компонент.

На первой странице Палитры Компонент размещены от 14 до 16 объектов (рисунок 7), в зависимости от версии, в качестве примера используется  Delphi 7. Мало кто обойдется длительное время без кнопок, списков, окон ввода и т.д. Все эти объекты такая же часть Windows, как мышь или окно.

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

Рисунок 7: Компоненты, расположенные на первой странице Палитры.

Стандартные компоненты Delphi перечислены ниже с некоторыми комментариями по их применению. При изучении данных компонент было бы полезно иметь под рукой компьютер с тем, чтобы посмотреть, как они работают и как ими манипулировать.

Frames - позволяет разместить на форме так называемый "фрейм". Фрейм из себя представляет другое окно. Чтобы создать окно-фрейм, следует выбрать пункт меню File -> New -> Frame, либо выделить значок Frame в окне File -> New -> Other на вкладке New. До тех пор, пока в приложении не будет ни одного фрейма, использовать данный объект не удастся. Фреймы удобны в том случае, когда какие-либо настройки запрашиваются во время работы программы в виде отдельной формы, а также, например, на одной из вкладок основной формы.

MainMenu - основное меню окна. Связать его с формой можно через свойство Menu формы. При двойном щелчке по значку MenuMenu появляется дизайнер меню, в котором можно добавлять и удалять пункты. В Caption задаётся текст пунта меню. Чтобы создать черту-разделитель, следует в свойство Caption прописать знак "минус" ("-", без кавычек).

Рисунок 8: MainMenu - основное меню окна.

PopupMenu - контекстное меню (вызывается правой кнопкой мыши). Его можно привязать ко многим компонентам (как правило, это делается через свойство PopupMenu у компонента, которому ассоциируется это меню). Одно и то же меню может быть привязано к нескольким компонентам.

Label - текстовая метка (надпись) на форме. Используется для отображения любого текста в окне. Текст задаётся в свойстве Caption. Свойство Font позволяет настроить шрифт текста.

Edit - поле ввода. Используется для ввода любых данных (текста, числа и т.д.), представленных одной строкой. Свойство ReadOnly позволяет запретить редактирование текста в поле. Текст хранится свойством Text. Свойство MaxLength позволяет задать максимальное число символов, которое может быть введено в поле. Значение 0 означает, что ограничение не установлено.

Memo - многострочный Edit. Используется для ввода больших объёмов текста. Свойство ScrollBars позволяет указать полосы прокрутки, которые будут отображаться у поля при недостатке места для всего текста:

•ssNone - без полос прокрутки;

•ssHorizontal - горизонтальная полоса прокрутки;

•ssVertical - вертикальная;

•ssBoth - обе: и горизонтальная, и вертикальная.

Button - кнопка, самая что ни есть обыкновенная. Caption - текст на кнопке.

CheckBox - флажок-переключатель. Состояние хранится в свойстве Style:

•cbUnchecked - не отмечен;

•cbChecked - отмечен;

•cbGrayed - затемнён.

Само состояние следует изменять с помощью свойства Checked. Таких флажков может быть несколько и каждый может быть отмечен независимо от остальных.

RadioButton - радио-переключатель. Аналогичен CheckBox, но при наличии нескольких переключателей может быть выбран только один из них. Свойство Checked позволяет изменить состояние переключателя.

ListBox - список текстовых строк. Используется для выбора одного из вариантов. Строки задаются в свойстве Items. Чтобы изменить исходные значения, следует щёлкнуть по кнопке с тремя точкам ("...") в строке свойства Items и в открывшемся редакторе ввести требуемые значения. Свойство MultiSelect позволяет включить/выключить одновременный выбор нескольких строк из списка.

ComboBox - ещё один список для выбора, но выпадающий - на экране видна всего одна строка, а сам список появляется при нажатии на кнопку со стрелкой. Установив свойство Style в csDropDownList можно запретить ввод произвольного значения в ComboBox. Текст выбранной строки доступен в свойстве Text.

ScrollBar - полоса прокрутки. Свойство Kind определяет ориентацию полосы на форме: sbHorizontal - горизонтально, sbVertical - вертикально.

GroupBox - "контейнер" для компонент. Используется для объединения элементов в отдельные области. При перемещении GroupBox'а все компоненты, расположенные на нём, также перемещаются. Для размещения компонент в этом контейнере следует после выбора их на Палитры компонент щёлкнуть по самому контейнеру (а не по форме, как обычно). У GroupBox можно задать текст заголовка (свойство Caption).

RadioGroup - группа из нескольких RadioButton'ов. Тексты строк задаются в свойстве Items. Номер выбранной строки - свойство ItemIndex (нумерация строк начинается с нуля!).

Panel - практически такой же контейнер, что и GroupBox, однако без заголовка и с возможностью отключения рельефных границ.

ActionList - позволяет управлять действиями (Actions), которые привязываются к пунктам меню, кнопкам и т.д.

1.1.4 Структура проекта Delphi.

Программа Delphi - это несколько связанных между собой файлов.

Главный файл проекта, изначально называется PROJECT1.DPR. Если необходимо переименовать название проекта, нужно перезаписать этот файл, выбрав в меню File команду Save Project As… При задании имени следует придерживаться правил задания имен в Object Pascal. Имя не должно содержать пробелов (используйте в таком случае знак подчеркивания), должно начинаться с буквы (цифры допустимы, но со второй позиции), не должно содержать других символов, кроме букв и цифр.

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

Модуль программы, который автоматически появляется в начале работы Unit1.

Файл называется UNIT1.PAS по умолчанию, но его можно назвать любым другим именем, вроде MAIN.PAS. Это делается аналогично переименованию названия проекта. Необходимо выбрать в меню File команду Save As… Сохраняется активный модуль в редакторе кода. Файл главной формы, который по умолчанию называется UNIT1.DFM, используется для сохранения информации о внешнем виде формы (окна разрабатываемого приложения). При переименовании названия модуля автоматически меняет свое название.

Файл PROJECT1.RES изначально содержит иконку для проекта. Создается автоматически. Имеет одноименное название с названием проекта. Файл PROJECT1.DSK содержит информацию о состоянии рабочего пространства. Состояние окон во время разработки приложения. Исполняемый EXE файл, который создается в процессе компиляции проекта. Разумеется, если сохранить проект под другим именем, то изменят название и файлы с расширением RES и DSK. После компиляции программы получаются файлы с расширениями: DCU - скомпилированные модули PAS для последующей быстрой компиляции некоторые файлы не перезаписываются EXE - исполняемый файл

~PA, ~DP - backup файлы редактора. Автоматически создаются и содержат информацию, перед последним сохранением.

И так, любая программа всегда состоит из уже знакомого нам файла проекта (такой файл имеет расширение .dpr) и одного или нескольких модулей (файлы с расширением .pas) Файл проекта не предназначен для редактирования пользователем и создаётся автоматически самой системой программирования Delphi.

Для того, чтобы увидеть содержимое файла проекта, необходимо выполнить команду Project|View Source. Содержимое файла проекта может быть, например, следующим:

program Project1;

uses

 Forms,

 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

Файл проекта(главный модуль) начинается словом program, за которым следует имя программы, совпадающее с именем проекта. Далее за словом uses следуют имена используемых модулей: стандартного модуля Forms и модуля формы Unit1.

Похожая на комментарий директива {$R *.RES} указывает компилятору, что нужно использовать файл ресурсов, который содержит описание ресурсов приложения, например, пиктограммы. Звездочка указывает, что имя файла ресурсов такое же, как и у файла проекта, но с расширением .res.

Исполняемая часть главного модуля находится между операторными скобками begin…end. Операторы исполняемой части обеспечивают инициализацию приложения и вывод на экран стартового окна. Помимо главного модуля каждая программа включает как минимум один модуль формы, который содержит описание стартовой формы приложения и поддерживающих ее работу процедур. В Delphi каждой форме соответствует свой модуль. Для переключения между формой и окном редактора кода, содержащего соответствующий модуль, следует нажать на клавишу F12.Модули-это программные единицы, служащие для размещения фрагментов программ. При помощи содержащихся в них текстов программ и реализуется решаемая пользователем задача.

1.2.Microsoft Access.

Microsoft Access - это интерактивная реляционная СУБД(relational database management system - RDBMS ) для WINDOWS . Это программа, которую Вы можете использовать для хранения и извлечения данных в зависимости от отношений, которые Вы установили. Работа с ней упрощена посредством манипулятора мыши. Графические возможности оболочки производят большое впечатление при изготовлении высококачественных отчетов и распечаток. Все это благодаря поддержки True-type  шрифтов и встраивания OLE-объектов (Object Linking and Embeding) в рамках среды WINDOWS. OLE - объект  представляет собой ссылку на определенную информацию, которая остается в своей первоначальной форме. OLE-объектом  может быть EXCEL - таблица, Paintbrush - иллюстрация  или  Sound - файл.

Новинкой программы Access является Cue Cards - Система суфлирования. Это обучающая система, предоставляющая пользователю  рекомендации по выходу из реальных ситуаций при решении прикладных задач. При знании английского языка пользователь всегда  сможет получить подсказку о том, что следует делать далее.

Access также предоставляет в распоряжение пользователя механизмы работы с базами данных различных форматов. К примеру, можно прямо обращаться к базам данных dBASE, Paradox или Btrieve  без конвертирования их в формат, используемый  Access. В состав пакета  Access также входит язык Access Basic (встроенный диалект языка Visual  Basic ), дающий возможность формирования специализированных систем  управления базами данных.

Теперь перейдем к более подробному рассмотрению системы Access. Основными понятиями или объектами этой системы являются: таблицы, запросы, формуляры, отчеты, макросы и модули. И конечно же главным понятием будет база данных (database).

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

  1.  Активизируйте окно Microsoft Access и выберите в меню File директиву New Database (или щелкните кнопкой New Database в строке пиктограмм). Microsoft Access высвечивает диалоговое окно New Database  и автоматически дает имя Вашей базе данных , которое Вы можете заменить.
  2.  В строке File Name, напечатайте Ваш вариант имени базы данных. Оно может содержать до 8 символов без пробелов. Microsoft Access автоматически добавляет расширение .MDB к имени Вашей базы данных, если Вы этого не сделали.
  3.  Если Вы хотите хранить базу данных в определенном месте выберите соответствующую директорию в списке директорий Directories list.
  4.  Нажмите на кнопку  OK.

Microsoft Access создает пустой файл базы данных и открывает окно базы данных Database window.

                                 Рисунок 9: Окно баз данных

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

  1.  Если необходимо, активизируйте Microsoft Access.
  2.  Из меню File  выберите директиву Open Database (или щелкните кнопкой Open Database в строке пиктограмм ). Microsoft Access  высвечивает диалоговое окно Open Database.
  3.  В строке File Name  выберите соответствующее имя базы данных, предварительно выбрав соответствующую директорию в списке директорий Directories list  и соответствующий накопитель в строке Drives.
  4.  Нажмите на кнопку OK.

Microsoft Access высветит окно соответствующей базы данных. При открытии базы данных  можно ограничить возможные операции с базой данных только чтением и ограничить круг  пользователей, имеющих доступ к базе данных только собственной персоной. Такие ограничения могут оказаться полезными, если база данных эксплуатируется в многопользовательской  системе. Если необходимо только просмотреть базу данных и содержащиеся в ней объекты, но не изменять их, то при открытии базы данных необходимо активизировать контрольный индикатор Read Only.

Если необходимо предотвратить изменения данных и объектов данной базы данных со стороны других пользователей, то при открытии базы данных необходимо установить опцию Exlusive .

Базу данных можно подвергнуть сжатию, для этого необходимо выбрать  в меню File директиву Compact Database. Access создает копию базы данных и по-новому размещает ее на диске. После выбора сжимаемого файла в диалоговом окне сжатия базы данных появляется диалоговое окно цели сжатия(Database to Compact Into), в котором можно выбрать имя для сжатой версии базы данных. Если используется то же самое имя, и база данных оказывается успешно сжатой, то по завершении сжатия Access  автоматически уничтожает  исходную(несжатую) версию.

Базу данных можно зашифровать для защиты секретной информации от  просмотра. Это осуществляется с помощью директивы Encrypt Database  В появившемся диалоговом окне  выберите подлежащую шифрованию/дешифрованию базу данных и  щелкните на кнопке OK. В результате откроется диалоговое окно  целевого файла,  где следует указать имя файла, в который будет помещен результат шифрования/дешифрования. Если используется то же самое имя и база данных была успешно зашифрована/расшифрована, то  Access автоматически заменяет оригинальный файл на полученный в результате преобразования.

В некоторых ситуациях база данных может оказаться поврежденной. Для  восстановления базы данных служит директива Repair Database в меню File. Эту операцию рекомендуется  применять в целях профилактики так как Access не замечает, что база данных была повреждена. В диалоговом окне ремонта нужно ввести имя,  директорию и накопитель поврежденной базы данных и нажать кнопку OK. После этого Access займется “починкой” заданной базы данных и спасет то, что еще можно спасти.

Если пользователь закончил работу с базой данных, то ее следует закрыть. Для этого:

  1.  Активизируйте окно базы данных, если это необходимо.
  2.  В меню File выберите директиву Close Database.

Можно закрыть базу данных и с помощью двойного щелчка мышью на  кнопке  вызова управляющего меню окна базы данных или нажатием клавиш (Ctrl + F4).

1.2.1 Реляционная модель данных.

Простые, или атомарные, типы данных не обладают внутренней структурой. Данные такого типа называют скалярами. К простым типам данных относятся следующие типы:

  1.  Логический.
  2.  Строковый.
  3.  Численный.

Различные языки программирования могут расширять и уточнять этот список, добавляя такие типы как:

  1.  Целый.
  2.  Вещественный.
  3.  Дата.
  4.  Время.
  5.  Денежный.
  6.  Перечислимый.
  7.  Интервальный.
  8.  И т.д.…

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

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

Массивы

Записи (Структуры)

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

называемое множеством индексов. Отображение

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

Запись (или структура) представляет собой кортеж из некоторого декартового произведения множеств. Действительно, запись представляет собой именованный упорядоченный набор элементов , каждый из которых принадлежит типу . Таким образом,  запись  есть элемент множества . Объявляя новые типы записей на основе уже имеющихся типов, пользователь может конструировать сколь угодно сложные типы данных.

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

Поясним это следующим образом. При работе с массивами или записями можно манипулировать массивом или записью и как с единым целым (создавать, удалять, копировать целые массивы или записи), так и поэлементно. Для структурированных типов данных есть специальные функции - конструкторы типов, позволяющие создавать массивы или записи из элементов более простых типов.

Работая же с простыми типами данных, например с числовыми, мы манипулируем ими как неделимыми целыми объектами. Чтобы "увидеть", что числовой тип данных на самом деле сложен (является набором битов), нужно перейти на более низкий уровень абстракции. На уровне программного кода это будет выглядеть как ассемблерные вставки в код на языке высокого уровня или использование специальных побитных операций.

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

С этой точки зрения, если рассматривать массив, например, как единое целое и не использовать поэлементных операций, то массив можно считать простым типом данных. Более того, можно создать свой, сколь угодно сложных тип данных, описать возможные действия с этим типом данных, и, если в операциях не требуется знание внутренней структуры данных, то такой тип данных также будет простым с точки зрения реляционной теории. Например, можно создать новый тип - комплексные числа как запись вида , где . Можно описать функции сложения, умножения, вычитания и деления, и все действия с компонентами  и  выполнять только внутри этих операций. Тогда, если в действиях с этим типом использовать только описанные операции, то внутренняя структура не играет роли, и тип данных извне выглядит как атомарный.

Именно так в некоторых пост-реляционных СУБД реализована работа со сколь угодно сложными типами данных, создаваемых пользователями.

1.2.2 Иерархическая модель данных.

Организация данных в СУБД иерархического типа определяется в терминах: элемент, агрегат, запись (группа), групповое отношение, база данных.

 Атрибут (элемент данных) - наименьшая единица структуры данных. Обычно каждому элементу при описании базы данных присваивается уникальное имя. По этому имени к нему обращаются при обработке. Элемент данных также часто называют полем.

Запись - именованная совокупность атрибутов. Использование записей позволяет за одно обращение к базе получить некоторую логически связанную совокупность данных. Именно записи изменяются, добавляются и удаляются. Тип записи определяется составом ее атрибутов. Экземпляр записи - конкретная запись с конкретным значением элементов

Групповое отношение - иерархическое отношение между записями двух типов. Родительская запись (владелец группового отношения) называется исходной записью, а дочерние записи (члены группового отношения) - подчиненными. Иерархическая база данных может хранить только такие древовидные структуры.

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

При графическом изображении групповые отношения изображают дугами ориентированного графа, а типы записей - вершинами (диаграмма Бахмана).

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

1.2.3 Сетевая модель данных.

На разработку этого стандарта большое влияние оказал американский ученый Ч.Бахман. Основные принципы сетевой модели данных были разработны в середине 60-х годов, эталонный вариант сетевой модели данных описан в отчетах рабочей группы по языкам баз данных (COnference on DAta SYstem Languages) CODASYL (1971 г.).

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

Основное различие этих моделей состоит в том, что в сетевой модели запись может быть членом более чем одного группового отношения. Согласно этой модели каждое групповое отношение именуется и проводится различие между его типом и экземпляром. Тип группового отношения задается его именем и определяет свойства общие для всех экземпляров данного типа. Экземпляр группового отношения представляется записью-владельцем и множеством (возможно пустым) подчиненных записей. При этом имеется следующее ограничение: экземпляр записи не может быть членом двух экземпляров групповых отношений одного типа.

Каждый экземпляр группового отношения характеризуется следующими признаками:

  1.  способ упорядочения подчиненных записей:

произвольный,

хронологический /очередь/,

обратный хронологический /стек/,

сортированный.

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

  1.  режим включения подчиненных записей:

автоматический - невозможно занести в БД запись без того, чтобы она была сразу же закреплена за неким владельцем;

ручной - позволяет запомнить в БД подчиненную запись и не включать ее немедленно в экземпляр группового отношения. Эта операция позже инициируется пользователем).

  1.  режим исключения. Принято выделять три класса членства подчиненных записей в групповых отношениях:

Фиксированное. Подчиненная запись жестко связана с записью владельцем и ее можно исключить из группового отношения только удалив. При удалении записи-владельца все подчиненные записи автоматически тоже удаляются. В рассмотренном выше примере фиксированное членство предполагает групповое отношение "Заключает" между записями "Контракт" и "Заказчик", поскольку контракт не может существовать без заказчика.

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

Необязательное. Можно исключить запись из группового отношения, но сохранить ее в базе данных не прикрепляя к другому владельцу. При удалении записи-владельца ее подчиненные записи - необязательные члены сохраняются в базе, не участвуя более в групповом отношении такого типа. Примером такого группового отношения может служить "Выполняет" между "Сотрудники" и "Контракт", поскольку в организации могут существовать работники, чья деятельность не связана с выполнением каких-либо договорных обязательств перед заказчиками.

1.2.4 Локальные базы данных.

Из всего множества локальных баз данных будем рассматривать реляцион-ные, как наиболее распространенные в настоящее время. В то же время этоодин из самых старых типов ДБ.Что такое реляционная база данных (РБД)? Это таблица, в которой в качестве столбцов выступают имена хранимых в ней данных, а каждая строка содержит сами данные. Таблица базы данных похожа на электронную таблицу Excel. Локальные таблицы баз данных могут храниться на локальном жестком диске или централизованно сохраняться на сетевом диске файлового сервера. Файлы БД можно копировать с помощью стандартных средств, как любой другой файл, потому что сами таблицы базы данных не привязаны к определенному месту расположения. Главное, чтобы программа могла найти нужную ей таблицу.В каждой таблице должно быть одно уникальное поле, которое однозначно будет идентифицировать строку. Это поле называется ключевым. Без такого поля таблицу нельзя будет изменять. Ключевые поля очень часто используются для связывания нескольких таблиц между собой. Но даже если у вас таблица не связана, ключевое поле все равно обязательно. Представьте, что вы пишете телефонную базу данных. Сколько у вас будет "Ивановых"? Как вы будете отличать их? Вот тут вам поможет ключ. В качестве ключа желательно использовать численный тип и если позволяет база данных, то будет лучше, если он будет типа "autoincrement" (автоматически увеличивающееся или уменьшающееся число-счетчик).

В современных базах данных есть более надежный способ создания уникальности,например GUID (глобальный уникальный идентификатор) из MS SQL Server. Имена столбцов в таблице баз данных также должны быть уникальными, но в этом случае не обязательно числовыми. Их можно называть как угодно, лишь бы соблюдалась уникальность и было понятно пользователю, а остальное никого не интересует. Каждый столбец (поле базы данных) обязательно должен иметь определенный тип. Количество типов и их разновидность зависят от типа базы данных, например формат dBase (файлы с расширением dbf) поддерживает только 6 типов, а система управления БД (СУБД) — Paradox уже до 15.

База данных может храниться в одном файле (например, СУБД Access) или в нескольких (Paradox, dBase). Точнее сказать, данные таблицы всегда хранятся в одном файле, а вот дополнительная информация может располагаться в отдельных файлах. В качестве дополнительной информации могут быть индексы, ограничения или список значений по умолчанию для конкретных полей. Если хотя бы один из файлов испортится или будет удален,то данные могут стать недоступными для редактирования.Что такое индексы? Очень часто данные из таблиц подвергаются каким-то изменениям, поэтому прежде чем произвести редактирование над какой-либо строкой, необходимо ее найти. Даже статические таблицы, использующиеся в качестве справочников, тоже подвергаются операциям поиска перед выводом запрашиваемых данных.

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

невозможно упорядочить без использования SQL-запросов.

Если вам надо, чтобы какая-то таблица была упорядочена по полю Фамилия, то это поле надо сначала проиндексировать. Затем нужно только указать, что таблица должна работать с таким-то индексом. Далее сортировка производится автоматически. В этом случае индекс используется для сортировки и значительно ускоряет этот процесс. Для большинства баз данных используется правило — если по какому-либо полю (колонке данных) будет происходить сортировка, то эта колонка должна быть проиндексирована, чтобыскорость сортировки была максимальной.

1.2.5 Удаленные базы данных.

Попытки применить программы удаленного подключения, типа NetWare Connect или MS RAS - сервер, и работать напрямую с удаленной базой данных, как с локальной, дают плачевные по скорости результаты. К тому же, модемное соединение имеет свойство обрываться, вызывая, порой, нарушение целостности базы данных ( если не принимать специальных мер по сохранению информации). Cпециальные меры - дублирование информации и аппаратура для ее записи, а также программное обеспечение для управления резервным копированием, -потребует дополнительных расходов.

Можно организовать электронную почту, пересылая, заранее подготовленную в виде файлов, информацию (например, электронные копии накладных на отпуск продукции ). В центральном офисе вся пришедшая информация обрабатывается, готовятся необходимые отчеты, корректируется центральная база данных. Такой способ работы подходит, например, для сети магазинов - к утру имеется четкая картина работы за вчерашний день. Метод простой, дешевый, если не пытаться автоматизировать процессы соединения. Он не требует переработки существующих программ. Но получать оперативную информацию о состоянии дел в фирме (например, какая продукция в данный момент находится на складе, а какая уже отпущена) он не позволяет.

Применение SQL систем управления базами данных (т.е. систем, работающих по технологии "клиент-сервер" ) решает проблему получения оперативной информации. Работа ведется с единой базой данных, все изменения сразу доступны для всех пользователей. Для того, чтобы получить информацию, рабочая станция формирует SQL - запрос, в соответствии с которым система управления базами данных ( сервер баз данных ) формирует ответ. По каналу связи передается лишь запрошенная информация, что значительно снижает нагрузку на линии связи. Современные SQL - системы поддерживают OFFLINE режим работы - своего рода гибрид между электронной почтой и SQL. Каждый удаленный пользователь работает со своей копией центральной базы данных. По заранее определенному графику центральная база данных и ее удаленная копия связываются между собой, происходят взаимные корректировки, после чего связь разрывается. Пользователь даже не догадывается о происходящем, думая, что он работает с удаленной центральной базой. Это отличное решение для фирм, начинающих создавать свои информационные структуры с "чистого листа". Но за все приходится платить. Эти системы весьма дороги, программы, изначально, должны проектироваться соответствующим образом. Требуется значительная мощность как сервера баз данных для обработки множественных запросов, так и рабочей станции - для их быстрого формирования.

Если же фирма уже имеет программы, от которых по разным причинам не желает отказываться, а парк вычислительной техники включает значительное число ПК с процессором 286, 386 с объемом памяти 1 - 2 Мб, то для такой фирмы предлагается третий возможный метод решения той же проблемы - удаленное управление сервером приложений. Сервер приложений - это мощный ПК, работающий под управлением многозадачной ОС , например, OS/2 или Windows NT, находящийся в удаленной локальной сети. Весь большой обмен информацией происходит между файловым сервером (сервером баз данных) и находящимся вблизи сервером приложений. По каналу связи, соединяющему сервер приложений и рабочую станцию, передается лишь небольшой объем управляющей информации.

В качестве примера сервера приложений для данного обзора взят продукт WinView for NetWork фирмы Citrix., реализованный на основе многозадачной многопользовательской ОС OS/2 фирмы IBM.

По разработанной фирмой Citrix технологии Intelligent Console Architicture (ICA), реализующей эффективную архитектуру "клиент - сервер," между сервером приложений и удаленным клиентом идет обмен только кодами клавиш, событиями "мыши" и обновленными фрагментами экрана, что позволяет уменьшить загрузку линии связи.

В общекорпоративных сетях пользователи, находящиеся в территориально удаленных офисах, могут запускать прикладные программы DOS, WINDOWS, OS/2 на удаленном мощном сервере приложений в центральном офисе, не перегружая линии связи. Скорость выполнения прикладных программ не зависит от мощности рабочей станции, а полностью определяется техническими характеристиками сервера приложений и количеством одновременно запущенных сеансов. Разработанное ранее программное обеспечение выполняется на сервере приложений без всяких доработок. Исключение составляют программы, напрямую работающие с аппаратурой ПК (к таким программам относится большинство игр ).

Фирма Citrix реализовала по лицензии Microsoft распределенную архитектуру Windows 3.1. Оболочка Windows устанавливается при генерации сервера. Причем, при сохранении всех достоинств, структуры и настроек известного пакета MS Windows 3.1, добавлена реальная многозадачность, реализованная средствами OS/2. Сетевая поддержка также обеспечивается средствами операционной системы. Популярные пакеты MS WORD, MS EXCEL, MS ACCESS исправно работают на сервере приложений, а распределенность заключается в том, что вышеперечисленные пакеты покупаются и устанавливаются в системе один раз для всех. Для каждого конкретного пользователя сохраняются лишь настройки рабочей среды Windows, что значительно экономит место на жестком диске. Используя в качестве рабочих мест имеющиеся маломощные ПК с 286 / 386 процессором и ОЗУ не более 1 Мб, можно полноценно работать с мощными современными приложениями Windows, такими как MS WORD 6.0, MS EXCEL 5.0, MS ACCESS 2.0. Нет необходимости тратить средства на модернизацию. На демонстрационном стенде фирмы СВЕГА + используется бездисковый ПК с процессором 286 и ОЗУ 1Мб. для работы с MS ACCESS 2.0, MS WORD 6.0.

В случае разрыва соединения между сервером приложений и рабочей станцией программа, запущенная на сервере, продолжает исправно работать - никаких катаклизмов с потерей индексов и разрушением информации не происходит. Это свойство особенно оценят администраторы сетей, измученные работой в сети таких систем управления базами данных, как Clipper. В нашем случае обрыв связи можно сравнить с выключением монитора локального ПК. Более того, для WinView - это штатный режим, когда пользователь подключается к серверу, запускает, например, задачу выполнения годового отчета и отключается. Через некоторое время, подключившись вновь, можно работать уже с готовым отчетом (например, сделав распечатку на принтере, подключенном к серверу в удаленном офисе, можно распечатать отчет и на рабочей станции).

Система защиты WinView for NetWorks обеспечивает управление начальным подключением пользователей, а также регламентацию доступа к ресурсам сервера приложений ( каталогам, файлам, принтерам ). Права могут назначаться как отдельным пользователям, так и группам пользователей. Существует система аудита, постоянно ведется журнал ошибок.

Подключиться к серверу приложений можно по локальной сети, используя протокол IPX/SPX Novell NetWare. При сетевом подключении клиент имеет непосредственный доступ к дискам своей рабочей станции, сервера приложений и файлового сервера NetWare. Поддержка протокола TCP/IP для сервера приложений - отдельно покупаемый продукт. Следует помнить, что основной обмен данными, а следовательно, и наибольший сетевой трафик приходится на сегмент, соединяющий сервер приложений и файловый сервер ( сервер баз данных ), т.е. желательна сетевая карта, обладающая наибольшей производительностью. WinView поддерживает сетевые карты, способные работать с OS/2.

Другой возможный способ подключения - через последовательный порт с применением многопортовой платы. Использование СОМ - портов платы сервера для этих целей возможно, но не рекомендуется, т.к. отвлечение центрального процессора сервера на обработку прерываний СОМ - порта замедляет выполнение приложений. Собственно подсоединение рабочей станции осуществляется либо при помощи нуль-модемного кабеля (от СОМ - порта рабочей станции к последовательному порту многопортовой платы - прямое подключение), либо через модем (удаленное подключение). Причем, в последнем случае, требования к линиям связи весьма скромные : вполне приемлема работа с Windows - приложениями при скорости 9600 бит/с. При подключении через последовательный порт доступны драйвы (диски) файлового сервера и сервера приложений, диски рабочей станции недоступны для непосредственной работы, но можно обмениваться файлами с сервером приложений или файловым сервером.

На базе WinView фирмы Citrix можно строить многотерминальные станции, которые вполне могут заменить небольшие локальные сети. Наибольший выигрыш достигается при использовании однотипного программного обеспечения (напр. при множественном вводе какой - либо информации или в качестве учебных классов). С консоли сервера также можно запускать программы - это нормальное рабочее место.

1.2.6 Архитектура файл-сервер.

В архитектуре «файл-сервер» (File Server, FS-модель) все основные функции приложения информационной системы (презентационная логика, бизнес-логика и функции обработки и управления данными).

На сервере находятся файлы с данными и поддерживается доступ к файлам.

Рисунок 10: Модель архитектуры файлового сервера.

В этой модели клиент обращается к серверу на уровне файловых команд, система управления файлами (СУФ) считывает запрашиваемые данные из БД и поблочно передает эти данные клиентскому приложению. Фактически, FS-модель предполагает автономную работу программного обеспечения ИС на разных машинах в сети. Компоненты ИС взаимодействуют только за счет наличия общего хранилища данных. Безусловно, таким хранилищем должна быть хорошо спроектированная БД под управлением СУБД, поддерживающей FS-модель, например, СУБД Informix SE. Такого рода СУБД нельзя считать «истинным сервером».

При использовании FS-модели копия СУБД создается для каждого инициированного пользователем сеанса работы с СУБД, которая выполняется на том же процессоре, что и пользовательский процесс.

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

К недостаткам архитектуры «файл-сервер» можно отнести:

· высокий сетевой трафик, который связан с передачей по сети множества блоков и файлов, необходимых приложениям клиентов;

· ограниченное множество команд манипулирования данными, фактически это только файловые команды;

· отсутствие развитых средств защиты данных (только на уровне файловой системы).

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

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

1.2.7 Архитектура клиент-сервер.

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

Процессы, реализующие некоторую службу, например службу файловой системы или базы данных, называются серверами (servers). Процессы, запрашивающие службы у серверов путем посылки запроса и последующего ожидания ответа от сервера, называются клиентами (clients) .

По такой схеме могут быть построены системы обработки данных на основе СУБД, почтовые и другие системы. Мы будем говорить о базах данных и системах на их основе. И здесь удобнее будет не просто рассматривать клиент-серверную архитектуру, а сравнить ее с другой - файл-серверной.

В файл-серверной системе данные хранятся на файловом сервере (например, Novell NetWare или Windows NT Server), а их обработка осуществляется на рабочих станциях, на которых, как правило, функционирует одна из, так называемых, "настольных СУБД" - Access, FoxPro, Paradox и т.п..

Приложение на рабочей станции "отвечает за все" - за формирование пользовательского интерфейса, логическую обработку данных и за непосредственное манипулирование данными. Файловый сервер предоставляет услуги только самого низкого уровня - открытие, закрытие и модификацию файлов. Обратите внимание - файлов, а не базы данных. Система управления базами данных расположена на рабочей станции.

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

Рисунок11. Сравнение файл-серверной и клиент-серверной моделей .

В клиент-серверной системе функционируют (как минимум) два приложения - клиент и сервер, делящие между собой те функции, которые в файл-серверной архитектуре целиком выполняет приложение на рабочей станции. Хранением и непосредственным манипулированием данными занимается сервер баз данных, в качестве которого может выступать Microsoft SQL Server, Oracle, Sybase и т.п..

Формированием пользовательского интерфейса занимается клиент, для построения которого можно использовать целый ряд специальных инструментов, а также большинство настольных СУБД. Логика обработки данных может выполняться как на клиенте, так и на сервере. Клиент посылает на сервер запросы, сформулированные, как правило, на языке SQL. Сервер обрабатывает эти запросы и передает клиенту результат (разумеется, клиентов может быть много).

Таким образом, непосредственным манипулированием данными занимается один процесс. При этом, обработка данных происходит там же, где данные хранятся - на сервере, что исключает необходимость передачи больших объемов данных по сети.

Сервер баз данных осуществляет модификацию данных на основе механизма транзакций, который придает любой совокупности операций, объявленных как транзакция, следующие свойства:

атомарность - при любых обстоятельствах будут либо выполнены все операции транзакции, либо не выполнена ни одна; целостность данных при завершении транзакции;

независимость - транзакции, инициированные разными пользователями, не вмешиваются в дела друг друга;

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

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

1.2.8 Ключи.

В SQL-серверах баз данных имеется определение связей: когда одно поле в таблице ссылается на поле другой таблицы, оно называется внешним ключом. А поле, на которое оно ссылается, называется родительским или первичным ключом. Таблицу, которая имеет внешний ключ (ссылку на запись другой таблицы) нередко называют дочерней, а таблицу с родительским ключом - родительской. Еще в определении связей говорят, что родитель может иметь только одну уникальную запись, на которую могут ссылаться несколько записей дочерней таблицы.

Так что в приведенном выше примере таблица продаж имеет два внешних ключа: идентификатор товара, и идентификатор покупателя. А обе таблицы в правой части рисунка имеют родительский ключ "Идентификатор". Поскольку один покупатель или товар могут неоднократно встречаться в таблице продаж, то получается, что обе таблицы в правой части рисунка - родители, а таблица слева - дочерняя. Поскольку сейчас мы изучаем InterBase - SQL сервер БД, этими определениями мы и будем руководствоваться в последующих лекциях. Чтобы далее не ломать голову над этой путаницей, сразу договоримся: дочерняя таблица имеет внешний ключ (Foreign Key) на другую таблицу.

Primary key - первичный ключ, является одним из основных видов ограничений в базе данных. Первичный ключ предназначен для однозначной идентификации записи в таблице, и должен быть уникальным. Первичные ключи PRIMARY KEY находятся в таблицах, которые принято называть родительскими (Parent). Не стоит путать первичный ключ с первичными индексами локальных баз данных, первичный ключ является не индексом, а именно ограничением. При создании первичного ключа InterBase автоматически создает для него уникальный индекс. Однако если мы создадим уникальный индекс, это не приведет к созданию ограничения первичного ключа.          Таблица может иметь только один первичный ключ.

Предположим, имеется таблица со списком сотрудников. Поле "Фамилия" может содержать одинаковые значения (однофамильцы), поэтому его нельзя использовать в качестве первичного ключа. Редко, но встречаются однофамильцы, которые вдобавок имеют и одинаковые имена. Еще реже, но встречаются полные тезки, поэтому даже все три поля "Фамилия" + "Имя" + "Отчество" не могут гарантировать уникальности записи, и не могут быть первичным ключом. В данном случае выход, как и прежде, в том, чтобы добавить поле - идентификатор, которое содержит порядковый номер данного лица.

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

Если в первичный ключ входит единственный столбец (как чаще всего и бывает), спецификатор primary key ставится при определении столбца:

CREATE TABLE Prim_1(

 Stolbec1 INT NOT NULL PRIMARY KEY,

 Stolbec2 VARCHAR(50))

Если первичный ключ строится по нескольким столбцам, то спецификатор ставится после определения всех полей:

CREATE TABLE Prim_2(

 Stolbec1 INT NOT NULL,

 Stolbec2 VARCHAR(50) NOT NULL,

PRIMARY KEY (Stolbec1, Stolbec2))

Как видно из примеров, первичный ключ обязательно должен иметь ограничение столбца (столбцов) not null.

Unique - уникальный ключ. Спецификатор unique указывает, что все значения данного поля должны быть уникальными, в связи с этим такие поля также не могут содержать значения null. Можно сказать, что уникальный ключ unique является альтернативным вариантом первичного ключа, однако имеются различия. Главное различие в том, что первичный ключ должен быть только один, тогда как уникальных ключей может быть несколько. Кроме того, ограничение unique не может быть построено по тому же набору столбцов, который был использован для ограничения primary key или другого unique. Уникальные ключи, как и первичные, находятся в таблицах, которые являются родительскими по отношению к другим таблицам.

Столбец, объявленный с ограничением unique, как и первичный ключ, может применяться для обеспечения ссылочной целостности между родительской и дочерней таблицами. При этом внешний ключ дочерней таблицы будет ссылаться на это поле (поля). Как и в случае первичного ключа, при создании уникального ключа, для него автоматически будет создан уникальный индекс. Но не наоборот. Пример создания таблицы с одним первичным и двумя уникальными ключами:

CREATE TABLE Prim_3(

 Stolbec1 INT NOT NULL PRIMARY KEY,

 Stolbec2 VARCHAR(50) NOT NULL UNIQUE,

 Stolbec3 FLOAT NOT NULL UNIQUE)

Foreign key - внешний ключ. Это очень мощное средство для обеспечения ссылочной целостности между таблицами, которое позволяет не только следить за наличиями правильных ссылок, но и автоматически управлять ими. Внешние ключи содержатся в таблицах, которые являются дочерними (Child) по отношению к другим таблицам. Ссылочная целостность обеспечивается именно внешним ключом, который ссылается на первичный или уникальный ключ родительской таблицы.

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

Для обеспечения достоверности данных и применяют внешний ключ.

Внешний ключ - это столбец или набор столбцов в дочерней таблице, который в точности соответствует столбцу или набору столбцов, определенных в родительской таблице как первичный (или уникальный) ключ, и ссылается на них.

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

CREATE TABLE Roditel(

  R_ID VARCHAR(20) NOT NULL PRIMARY KEY,

  R_Other INT);

COMMIT;

CREATE TABLE Doch(

  D_ID VARCHAR(20),

  D_Other INT,

  FOREIGN KEY (D_ID) REFERENCES Roditel

  ON UPDATE CASCADE ON DELETE NO ACTION);

COMMIT;

список_столбцов_дочерней_таблицы - это один или несколько столбцов, которые являются внешним ключом.

имя_родительской_таблицы - имя родительской таблицы, на которую ссылается внешний ключ дочерней таблицы.

список_столбцов_родительской_таблицы - один или несколько столбцов, являющихся ключевыми для связи таблиц. Это необязательный параметр, его можно не указывать, если связь строится по первичному ключу родительской таблицы, но обязательный, если связываемся с ключом UNIQUE.

Необязательные параметры on delete и on update указывают, что должен делать InterBase соответственно, при удалении или изменении записи первичного ключа. Фактически, для реализации этих механизмов создается системный триггер, который выполняет эти действия. Действия могут быть следующими:

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

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

Set default - При удалении или изменении первичного ключа родительской таблицы, установить все записи дочерней таблицы, которые ссылаются на этот ключ, в значение по умолчанию.

Set null - При удалении или изменении первичного ключа родительской таблицы, установить все записи дочерней таблицы, которые ссылаются на этот ключ, в значение null.

1.2.9 Индексы.

Индекс - это упорядоченный указатель на записи в таблице.

Индексы в InterBase хранятся отдельно от таблицы, и фактически представляют собой упорядоченные пары "значение поля" -> "физическое расположение этого значения в таблице". В одной таблице может быть до 64 индексов, причем сортировку в них можно указывать как в возрастающем, так и в убывающем порядке. Синтаксис создания индекса следующий:

CREATE [UNIQUE] {[ASC[ENDING] | DESC[ENDING]]}

INDEX <IndexName> ON <TableName> (<col> [, <col> … ]);

Как вы уже знаете, в квадратные скобки заключены необязательные параметры команды. То есть, минимальным выражением создания индекса может быть:

CREATE INDEX Sklad_Index ON SKLAD(ID_TOVAR)

Выделив в IBConsole раздел Indexes, в правой части окна вы увидите список индексов БД. Как вы заметили, помимо только что созданного индекса имеются и другие, которые построены по столбцам, указанным в первичных и уникальных ключах. Дело в том, что индексы используют такой же механизм упорядочивания записей, как и ключи, так что разница между ними в основном, логического характера.

Необязательный параметр unique указывает, что запись должна быть уникальной (сравните с уникальным ключом).

Необязательный параметр Asc или Ascending указывает, что индекс должен сортироваться в возрастающем порядке, а Desc (Descending) - в убывающем.

Как и ключ, индекс может быть построен не по одному столбцу, а по нескольким, однако этим увлекаться не стоит - использование составного индекса иногда даже замедляет работу с Бд.

Еще одно замечание: в отличие от локальных Бд, в InterBase нельзя указать индекс, используемый при сортировке. Когда вы делаете запрос, InterBase автоматически применяет наиболее подходящий индекс и использует его для поиска записи.

Удаляется индекс обычным способом:

DROP INDEX <Index_Name>

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

ALTER INDEX <Index_Name> INACTIVE;

ALTER INDEX <Index_Name> ACTIVE;

Первая команда отключает индекс, вторая подключает его вновь. Имеется ряд ограничений на эти действия:

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

Нельзя перестроить индекс, если он использован в первичном, уникальном или внешнем ключе.

Для перестройки индекса необходимо иметь права администратора бд или быть создателем данного индекса.

1.2.10 Механизм транкзакций.

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

Самостоятельная реализация подобного механизма потребовала бы написания сценариев и компонентов, которые отслеживали бы нужные изменения и восстанавливали первоначальные данные при возникновении ошибок. Однако применение служб компонентов позволяет существенно упростить эту задачу. Достаточно просто объявить выполнение сценариев и компонентов в рамках транзакций. После этого их обработка будет координироваться автоматически службами компонентов. Понятие обработки транзакций применимо только к работе с базами данных. Службы компонентов не поддерживают восстановление исходного состояния после изменений в файловой системе или в других ресурсах, с которыми механизм транзакций не работает. Приложения могут работать только с базами данных, которые поддерживаются службами компонентов. На текущий момент имеется возможность работы с базами данных SQL Server, а также с другими базами данных, в которых реализована поддержка протокола транзакций XA (разработан консорциумом X/Open). В будущем службы компонентов смогут поддерживать и другие системы баз данных.

С помощью методов Server.Transfer и Server.Execute в операции может участвовать несколько страниц ASP. После вызова сценария, в котором присутствует директива @TRANSACTION со значением «Required», посредством метода Server.Transfer или Server.Execute, продолжается выполнение транзакции, запущенной вызванным файлом «.asp» (если последний уже участвовал в транзакции). Если файл «.asp» в транзакции еще не участвовал, при его вызове автоматически будет создана новая транзакция.

В следующем примере сценария показан запуск транзакции.

<%@ TRANSACTION=Required %>

<%

 .

 .

 .

 'End transaction.

 Server.Transfer("/BookSales/EndTrans.asp")

%>

Однако в следующем сценарии происходит вызов другого сценария, также запускающего транзакцию.

<%@ TRANSACTION=Required%>

<%

 'Instantiate a custom component to close transactions.

 Set objSale = Server.CreateObject("SalesTransacted.Complete")

 .

 .

 .

%>

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

Объявление страницы как поддерживающей транзакции приводит к тому, что все используемые в ней команды сценариев и объекты выполняются в контексте одной транзакции. Службы компонентов обрабатывают все данные, относящиеся к созданию и выполнению (успешному или неуспешному) транзакции. Чтобы объявить страницу как поддерживающую транзакции, в верхней части страницы необходимо поместить директиву @TRANSACTION.

<%@ TRANSACTION = значение %>

Дополнительные сведения об аргументе значение приводятся в справке по директиве @TRANSACTION.

Директива @TRANSACTION должна быть самой первой строкой на странице. Если это не так, возникает состояние ошибки. Эта директива также должна добавляться на каждую участвующую в транзакции страницу. Завершение текущей транзакции происходит одновременно с окончанием выполнения сценария.

В большинстве приложений контекст транзакции требуется только для определенных операций. Например, на веб-узле авиакомпании сценарии с поддержкой транзакций могут применяться для продажи билетов и бронирования мест. Безопасный запуск всех прочих сценариев может быть обеспечен и вне контекста транзакции. В с необходимостью применения транзакций только в отношении страниц, которые требуют обработки транзакций, объявление файла приложения Global.asa как поддерживающего транзакции невозможно.

Если транзакция завершается с ошибкой, службы компонентов восстанавливают состояние до начала всех изменений по всем ресурсам с поддержкой транзакций. В настоящее время полная поддержка транзакций обеспечивается только серверами баз данных, поскольку безопасной обработке именно этих данных придается особое значение при разработке приложений для организаций. Службы компонентов не поддерживают восстановления после изменений в файловой системе на жестком диске, переменных приложения и сеанса ASP или семейств. Однако, как будет показано дальше, не исключена возможность создания сценариев, которые будут использовать механизм транзакций для решения упомянутых задач. Так, можно разработать сценарий, в котором, транзакция будет успешно завершаться или прерываться в результате ошибки операции (например записи данных в файл).

Наблюдая за выполнением транзакции, службы компонентов определяют результат ее выполнения — успешный или с ошибкой. В сценарии может быть в явном виде объявлено принудительное завершение транзакции посредством вызова процедуры ObjectContext.SetAbort. Например, подобное завершение операции возможно при получении ошибки компонента в результате нарушения правила обработки финансовых данных (например отрицательное сальдо счета) или при ошибке в операции, не относящейся к транзакции (например чтение или запись в файл). Транзакция также принудительно завершается, если время ожидания для страницы истекает до нормального завершения транзакции. Результат выполнения транзакции не может быть определен самим сценарием. Эта задача решается с помощью событий, которые могут быть вызваны при нормальном или принудительном завершении транзакции.

1.2.11 Нормальные формы.

Нормальная форма — требование, предъявляемое к структуре таблиц в теории реляционных баз данных для устранения из базы избыточных функциональных зависимостей между атрибутами (полями таблиц).”

Сразу приведу примеры трудностей, которые могут возникнуть при работе с не нормальной таблицей (если уж Вы на слово не верите  ).

Предположим, что у нас есть таблица – каталог товаров следующего вида:

id, category, product1, product2, product3

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

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

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

Например, для того, чтобы удалить товар, нам нужно просто очистить нужную ячейку нужной строки. Не такая серьезная проблема, для упрямых программистов  . Вопрос в том, сколько лишних действий придется сделать для этого. А именно, придется перебрать все ячейки всех строк и найти в одной из них нужное название товара и очистить эту ячейку. Для редактирования товара нужно будет выполнить такой же объем операций. Добавление товара это вообще ночной кошмар в этой ситуации. Во-первых, если все ячейки отведенные под товары в категории уже заняты (все три), то в таблицу придется добавлять новый столбец.

1.2.12 Первая нормальная форма (1NF)

Основные критерии:

  1.  Все строки должны быть различными.
  2.  Все элементы внутри ячеек должны быть атомарными (не списками). Другими словами, элемент является атомарным, если его нельзя разделить на части, которые могут использовать в таблице независимо друг от друга.

Пример не 1NF таблицы:

Категория

Товары

Книги

Война и Мир, Азбука

Игрушки

Юла

В этом примере в одной из ячеек содержится список из двух элементов: Война и Мир, Азбука, т.е. он является не атомарным.

Исправить можно так:

Категория

Товары

Книги

Война и Мир

Книги

Азбука

Игрушки

Юля

Вот, теперь это таблица в первой нормальной форме.

Методы приведения к 1NF:

  1.  Устраните повторяющиеся группы в отдельных таблицах (одинаковые строки).
  2.  Создайте отдельную таблицу для каждого набора связанных данных.
  3.  Идентифицируйте каждый набор связанных данных с помощью первичного ключа (добавить уникальный id для каждой строки) .

1.2.13 Вторая нормальная форма (2NF).

Основные критерии:

  1.  Таблица должна находиться в первой нормальной форме.
  2.  Любое её поле, не входящее в состав первичного ключа, функционально полно зависит от первичного ключа.

Если Ваша таблица приведена к первой нормальной форме и у нее установлен уникальный id для каждой строки, то она находится и во второй нормальной форме.

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

Например. Эта таблица находится в первой нормальной форме, но не во второй.

Категория

Дата

Скидка

Товар

Книги

10.10.2008

10%

PHP for dummies

Ноутбуки

11.10.2008

20%

Acer

Книги

10.10.2008

10%

Windows XP

В этой таблице первичный ключ составляют первые два столбца (Категория и Дата).

Скидка функционально полно зависит от них обоих, так как определяется одновременно категорией и датой. А вот с товаром проблемы. Она зависит только от категории и не зависит от даты (в любой день будет лежать там, пока не купят). Поэтому, говорят, что он зависит функционально не полно от всего первичного ключа и функционально полно от его части (Категория). Это нарушает требования второй нормальной формы.

Исправляется это разделением этой таблицы на две другие:

Категория

Дата

Скидка

Книги

10.10.2008

10%

Ноутбуки

11.10.2008

20%

Книги

10.10.2008

10%

Категория

Товар

Книги

PHP for dummies

Ноутбуки

Acer

Книги

Windows XP

Вот и все. Теперь эти таблицы находятся во второй нормальной форме.

Методы приведения к 2NF:

  1.  Создайте отдельные таблицы для наборов значений, относящихся к нескольким записям (Выше мы это сделали).
  2.  Свяжите эти таблицы с помощью внешнего ключа (В нашем случае – это поле Категория).

1.2.14 Третья нормальная форма (3NF).

Основные критерии:

  1.  Таблица находится во второй нормальной форме.
  2.  Любой её не ключевой атрибут функционально зависит только от первичного ключа.

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

Например, есть у нас таблица:

Имя Шпиона

Государство

Джеймс Бонд

Великобритания

Ким Филби

СССР

Штирлиц

СССР

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

ID

Государство

1

Великобритания

2

СССР

Имя шпиона

Государство

Джеймс Бонд

1

Ким Филби

2

Штирлиц

2

1.2.15 Основные операторы языка доступа и работы с данными.

Язык SQL существует в нескольких стандартах. Наиболее поддерживаемыми и распространенными являются стандарты SQL-89 и

SQL-92. Последний стандарт также называют стандартом ANSI. Из-за наличия множества стандртов языка существует множество его диалектов. Мы рассмотрим только основные команды SQL для простых операций с таблицами баз данных.

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

SQL-запрос - это команда на языке SQL.

Язык SQL по своей сути ориентирован на доступ к данным, и его обычно включают в состав различных средств разработки. Среда Kylix не осталась в стороне. Более того, все ее компоненты для работы с базами данных поддерживают язык SQL.

Все SQL-запросы можно условно разделить на два вида:

статический SQL-запрос - включается в код приложения во время его разработки и не изменяется во время выполнения приложения. Единственным способом изменить что-либо в запросе такого типа является включение в SQL-запрос параметров и их дальнейшее изменение в ходе работы приложения;

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

Все операторы и команды языка SQL можно разделить на три группы. Рассмотрим эти группы, а также операторы, входящие в каждую из групп.

Операторы определения данных - предназначены для создания, удаления и изменения структуры данных.

Основные операторы определения данных:

Оператор

Описание

Create table

Предназначен для создания таблицы базы данных

Alter table

Изменяет структуру таблицы

Drop table

Удаляет таблицу

Create index

Создает индекс

Drop index

Удаляет индекс

Create view

Создает представление

Drop view

Удаляет представление

Операторы управления данными - предназначены для управления привилегиями доступа к данным/

Основные операторы управления данными:

Оператор

Описание

Grand

Назначает привилегии пользователям

Revoke

Удаляет привилегии пользователей

Операторы манипулирования данными - предназначены для работы с записями таблиц.

Основные операторы манипулирования данными:

Оператор

Описание

Select

Предназначен для выборки записей по определенному формату

Update

Предназначен для изменения и обновления записей

Insert

Вставляет новые записи в таблицу

Delete

Удаляет записи из таблицы

1.2.16 Функции языка SQL.

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

Статистические функции - функции, предназначенные для статистической обработки данных. Наиболее часто используемые статистические функции:

Функция

Описание

Avg ()

Получение среднего значения

Count ()

Определяет количество значений

Count(*)

Определяет количество ненулевых значений

Max()

Максимальное значение

Min()

Минимальное значение

Sum ()

Сумма значений

1.2.17 Операторы манипулирования данными.

Главным оператором манипулирования данными является оператор select. Этот оператор используется для отбора данных, соответствующих сложным условиям. Оператор select имеет вид:

SELECT [DISTINCT]

<Список полей> или *

FROM <Список таблиц>

[WHERE <Условия выбора записей>]

[GROUP BY <Список полей для группировки:"]

[HAVING <Условия группировки полей>]

[ORDER BY <Список полей для сортировки>]

[UNION <Вложенный оператор SELECT >]

Результатом выполнения данного оператора будет набор записей, удовлетворяющих заданным условиям.

Параметр distinct определяет, будут ли включаться в результирующий набор данных повторяющиеся записи. Если он присутствует в операторе select, то повторяющиеся записи будут исключены из набора данных.

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

<Имя таблицы>.<Имя поля>

Операнд where определяет критерии, которым должны удовлетворять записи в результирующем наборе данных.

Операнд group by позволяет группировать записи. Иногда бывает необходимо выполнить какие-либо операции над группой записей.

Операнд having используется вместе с group by и позволяет выбирать записи внутри групп.

Операнд order by содержит список полей, определяющих порядок сортировки записей результирующего набора данных. По умолчанию сортировка выполняется в порядке возрастания значений. Для сортировки в порядке убывания значений необходимо после имени поля поставить параметр decs.

Операнд union используется для организации вложенных операторов select Вложенные операторы select называют иногда подзапросами.

1.2.18 Таблицы.

Следующим шагом в построении базы данных будет ее заполнение, т.е. создание объектов и присвоение последним необходимых свойств. Какого бы типа ни были Ваши данные, Вам придется хранить их в одной или нескольких таблицах. Таким образом, первым шагом в построении базы данных будет создание таблицы.

Таблица - это набор записей(строк таблицы), состоящих из отдельных полей(колонок таблицы), в которых хранится информация и составляющая, собственно, содержание базы данных.

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

  1.  С помощью Конструктора таблиц.
  2.  В окне базы данных щелкните на кнопке Table.
  3.  Выберите кнопку New в окне базы данных.

Microsoft Access высветит диалоговое окно New Table.  

  1.  Выберите кнопку TableWizards.
  2.  В диалоговом окне Конструктора следуйте указаниям по добавлению полей в Вашей таблице.
  3.  Без помощи Конструктора.
  4.   В окне базы данных щелкните на кнопке Table (или выберите директиву Tables в меню View).
  5.  Нажмите кнопку New в окне базы данных.

Microsoft Access высветит диалоговое окно New Table.

  1.   Нажмите кнопку New Table.

Рисунок 12: Окно проектирования таблицы.

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

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

Access различает следующие типы данных полей:

  1.  Text Текстовые поля  содержат текст, длина которого не может быть более 255 символов. Реальная длина поля устанавливается с помощью параметра Field Size(размер поля).
  2.  Memo В Memo-полях сохраняется текст длиной до 32000 символов.  Поля этого типа данных не могут индексироваться.
  3.  Number Числовые поля содержат произвольные числовые значению. Диапазон допустимых значений определяется параметром Field Size (размер поля).
  4.  Date/Time Поля даты/времени содержат значения даты и времени в диапазоне от  100 до 9999 года.
  5.  Currency В денежных полях можно хранить числа с точностью до 15 разрядов слева от запятой и четырех десятичных разрядов справа от запятой.
  6.  Counter Поле счетчика содержит число, которое автоматически увеличивается Access на 1, когда в таблицу добавляется новый блок данных.  
  7.  Yes/No В таких полях сохраняются значения Да или Нет. Поля данного типа не могут индексироваться.
  8.  OLE Object В OLE - полях помещаются объекты, такие как, например, Excel-таблица или Microsoft Draw - графика, обработанные OLE - сервером. Размер поля может быть до 128 МБ. Поля данного типа не могут индексироваться.

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

  1.  Field Size Размер поля устанавливает максимальную длину текстового поля или способ представления чисел в поле типа Number.
  2.  Format Формат определяет способ представления данных. Наряду с предопределенными форматами допускается использование собственных форматов пользователя.
  3.  Decimal Places Десятичные разряды устанавливают количество разрядов справа от десятичной запятой.
  4.  Caption Заголовок  определяет надпись, которая будет использоваться в качестве наименования поля в формуляре или отчете. Если для этого параметра не будет задано никакое значение, то в качестве надписи будет по умолчанию использовано имя поля.
  5.  Default Value Значение по умолчанию устанавливает значение, которое будет автоматически введено в поле при генерации блока данных.
  6.  Validation Rule Ограничение ввода - правило, ограничивающее допустимые для ввода в поле данные.
  7.  Validation Text Сообщение о нарушении - текст возникающий при попытке ввести в поле данные, не удовлетворяющие правилу, сформулированному в Validation Rule.
  8.  Indexed Признак индексирования.

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

Переупорядочение полей:

  1.  Выберите поле, подлежащее переразмещению, щелкнув кнопкой мыши в селекторной колонке, расположенной на левом краю окна таблицы.
  2.  Щелкните в селекторной колонке опять и удерживая правую кнопку мыши нажатой перетащите указатель мыши в нужную позицию.

Microsoft Access расположит маркированное Вами поле в новом месте.

Удаление полей.

  1.  Откройте таблицу в режиме проектирования.
  2.  Маркируйте подлежащее удалению поле, щелкнув кнопкой мыши в селекторной колонке.
  3.  Из меню Edit выберите директиву Delete Row

Microsoft Access удалит поле и все его данные из Вашей таблицы.

Вставка полей.

  1.  Установите указатель строки к полю, над которым Вы бы хотели разместить новое поле, с помощью мыши или клавишами управления курсором.
  2.  Из меню Edit выберите директиву Insert Row(или выберите кнопку Insert Row в строке пиктограмм).

 Microsoft Access вставит пустое поле над текущей строкой.

  1.  Microsoft Access работает наиболее эффективно, если Вы определили первичный ключ. Первичный ключ таблицы состоит из одного или нескольких полей, которые однозначно идентифицируют каждую запись в Вашей таблице. Вам следует всегда определять первичный ключ т.к. при этом таблица имеет следующие преимущества:
  2.  мicrosoft Access автоматически создает индекс для первичного ключа. Этот индекс ускоряет процессы запросов и другие операции.
  3.  Когда Вы просматриваете записи, Microsoft Access покажет их упорядоченными по первичному ключу по умолчанию.
  4.  Когда Вы добавляете данные к Вашей таблице, Access не позволит хранить данные с одним и тем же значением первичного ключа. Поэтому Вы можете быть уверены ,что каждая запись уникальна.

Установка первичного ключа.

  1.  Маркируйте поле, которое Вы хотите использовать в качестве первичного ключа. Для объявления нескольких полей первичным ключом, удерживая клавишу Ctrl маркируйте все необходимые поля.
  2.  В меню Edit выберите директиву Set Primary Key (или нажмите кнопку Set Primary Key в строке пиктограмм).

У полей определенных как первичный ключ слева от строки добавится идентификатор в виде ключа.

В Access-таблицы можно встроить объекты из других поддерживающих интерфейс OLE прикладных программ и связать эти объекты с их родительскими программами.

При встраивании объекта Access сохраняет объект в таблице. Двойным щелчком мышью на объекте запускается прикладная программа, с помощью которой он был изготовлен - в ней можно произвести изменения в объекте. После завершения работы с родительской программой объект в измененной форме будет сохранен в таблице. Объект следует встраивать только в том случае, если его необходимо обрабатывать не покидая Access. Обычно речь идет об объекте , который должен стать фиксированной составной частью базы данных, но его нельзя изготовить прямо в Access, например, Paintbrush-иллюстрация на странице Access-отчета.

Если же объект, порожденный другой прикладной программой, связывается с Access-таблицей без встраивания, то объект сохраняется не в таблице, а в отдельном файле, причем формат этого файла определяется прикладной программой, с помощью которой объект был создан. В момент загрузки и открытия таблицы Access связывается с этим файлом, извлекает его содержимое и вставляет его в таблицу. Связывание объектов (а не встраивание) рекомендуется в тех случаях, когда в Access-базу необходимо включить объект, не подлежащий изменению при работе с Access.  Например, речь может идти о таблице счетов, обрабатываемой Excel и используемой в нескольких Access-базах. Наличие связи этих баз с одним и тем же Excel-файлом гарантирует наличие последней версии таблицы счетов во всех этих базах. Преимущество связи заключается в том, что один оригинальный объект можно связать с несколькими Access-таблицами, и при этом его не нужно многократно подвергать сохранению.

Встраивание объектов.

  1.  В меню Edit обратитесь к директиве Insert Object (Эта директива будет доступна в том случае, если в спецификации таблицы активному в данный момент полю был присвоен тип OLE Object.)
  2.  В списке Object Type выберите необходимую Вам, поддерживающую OLE интерфейс прикладную программу.
  3.   Если объект уже существует, щелкните мышью на кнопке File , чтобы открыть диалоговое окно Insert Object from File.
  4.   Выберите нужный файл и нажмите кнопку OK.

Связывание объектов.

  1.  В меню Edit выберите директиву Past Link. (Однако эта директива становится доступной лишь после того , как подлежащий связыванию объект будет скопирован, т.е. помещен в буфер обмена Clipboard .)
  2.  Нажмите кнопку OK.

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

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

  1.  В меню Edit выберите директиву Relationships, или щелкните мышью на кнопке Relationships в строке пиктограмм. Откроется  окно Relationships , затем окно Add Table.
  2.  Если окно Add Table не появилось, выберите соответствующую директиву в окне Relationships.
  3.  В строке Table/Query выберите таблицу для которой вы хотите создать связь. Для выбора более чем одной таблицы одновременно, удерживая клавишу Ctrl выберите все необходимые таблицы. Чтобы выбрать все или блок таблиц отметьте первую таблицу, а затем удерживая клавишу  Shift укажите последнюю, нажмите кнопку Add. Вы также можете добавлять таблицы перетаскивая их с помощью мыши из окна базы данных в окно отношений.
  4.  Теперь с помощью мыши перетащите поля первичного ключа первичной таблицы в соответствующее положение в связываемой таблице. Microsoft Access выдаст диалоговое окно Relationships.
  5.  Проверьте имена полей подлежащих связыванию, отредактируйте при необходимости. Установите соответствующие опции, например, тип отношения: One(один к одному) или Many(один ко многим).
  6.  Нажмите кнопку Create.

Связанные таблицы, например, могут выглядеть так:

                                 Рисунок 13: Связанные таблицы.

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

Установка опций импорта/экспорта.

  1.  В меню File выберите директиву Import|Export Setup
  2.  Проще всего выбрать уже существующую спецификацию из списка Specification Name, и отредактировать ее при необходимости.
  3.  Если Вы будете использовать свою собственную спецификацию неоднократно, нажмите кнопку Save as  и  впишите имя, нажмите OK.
  4.  Нажмите OK.

Импортирование таблиц.

  1.  В меню File выберите директиву Import или нажмите кнопку Import в строке пиктограмм.
  2.  В диалоговом окне импорта из списка Data Source выберите нужный формат файла базы данных. Он может быть типа:

- Собственный формат

- Текст с символом - разделителем между полями

- Текст с фиксированным форматом полей

- Таблицы Microsoft Excel

- Таблицы Lotus 1-2-3 или 1-2-3/W

- Базы  данных Paradox

- Файлы dBASE iii или iv

- Btrieve (с файлом словаря Xtrieve)

- Microsoft  SQL -сервер

  1.  Нажмите кнопку OK. Появится диалоговое окно для выбора импортируемого файла.
  2.  Выберите нужный файл , нажмите кнопку Import.
  3.   Microsoft Access выдаст сообщение о результате импортирования.

Экспортирование таблиц.

  1.  В меню File выберите директиву Export или нажмите кнопку Export  в строке пиктограмм.(Первоначально нужно активизировать Базу данных из которой Вы хотите экспортировать таблицу).
  2.  В диалоговом окне экспорта из списка Data Source выберите нужный формат файла базы данных, куда Вы хотите экспортировать таблицу. Он может быть типа:

- таблицы Microsoft Access

- базы  данных Paradox

- файлы dBASE iii или iv

- Btrieve (с файлом словаря Xtrieve)

- Microsoft  SQL-сервер

  1.  Нажмите кнопку OK. В зависимости от выбранного формата появится соответствующее диалоговое окно для выбора таблиц из базы-источника, а затем диалоговое окно для выбора  файла назначения.
  2.  Выберите соответствующие спецификации и выполните экспортирование.
  3.  Microsoft Access выдаст сообщение о результате экспортирования.

1.2.19 Запросы.

Запрос можно представить себе как точку зрения на данные, включенные в таблицу. Запросы служат для селекции и фильтрации набора данных. Они позволяют выбрать из базы только необходимую информацию, т.е. ту, которая соответствует определенному критерию(условию) и нужна для решения конкретной задачи. Например, Вам может понадобится информация о поставщиках и поставляемых ими товарах. Вы можете создать запрос типа “Какие товары поставляют московские поставщики” или “Кто из петербургских  поставщиков сигарет продал за последний квартал наибольшую партию”. Результат обработки программой Access такого запроса представляет собой таблицу называемую Dynaset. В эту таблицу включены выбранные из основной таблицы(или нескольких таблиц) блоки данных, которые удовлетворяют критериям запроса. Dynaset  -  динамический, временный набор данных, поэтому при каждом выполнении запроса он строится вновь на основе “свежих” табличных данных.

Microsoft Access дает большие возможности в гибкости проектирования запросов. Вы можете:

  1.  Выбрать поля, Вам не надо включать все поля таблицы в запрос.
  2.  Выбрать записи, Вы можете специфицировать запрос таким образом что получите данные определенного вида. Например, цены на товары за определенный месяц.  
  3.  Отсортировать записи, Вы можете просматривать записи в определенном порядке. Например, Вы можете вывести имена клиентов на экран в алфавитном порядке.
  4.  Запрашивать данные из нескольких таблиц, данные из нескольких таблиц могут обрабатываться вместе и Вы можете просмотреть совмещенные данные. Также Вы можете запрашивать данные из других баз данных, таких как Microsoft FoxPro, Paradox, dBASE, Btrieve и Microsoft или Sybase SQL-серверы.
  5.  Выполнять вычисления, Вы можете создавать новые поля которые будут содержать результаты вычислений.
  6.  Использовать запрос в качестве источника данных для формуляров, отчетов и других запросов. Каждый раз когда Вы будете открывать формуляр или печатать отчет, Ваш запрос будет извлекать новейшую информацию из таблиц. Вы также сможете модифицировать существующие данные прямо в формуляре основанном на запросе.
  7.  Изменять данные в таблицах, Вы можете обновлять, удалять, добавлять группы записей все сразу. Вы также можете создать новую таблицу на базе существующей таблицы или группы таблиц.

Выделяют два типа запросов:  

  1.  QBE-запросы (Query by Example -Запрос по образцу). Пользователь дает им определения, специфицируя отдельные параметры в окне проектирования с использованием подсказок(образцов).
  2.  SQL - запросы (Structured Query Language -Структурированный язык запросов ). Пользователь формулирует их с использованием инструкций и функций, выстраивая описание. QBE-запрос Access легко транслирует в соответствующий SQL-запрос. Обратная операция тоже не составляет труда. Вообще для Access  безразлично, с каким типом запроса работает пользователь.

Запросы можно создавать с помощью Конструктора запросов. Он ускоряет проектирование нескольких специальных типов запросов:

  1.  Запросы кросс-таблиц. Представляют Ваши данные в компактном суммированном формате.
  2.  Запросы нахождения дубликатов. Находят дубликатные записи в выбранной Вами таблице или запросе.
  3.  Запросы нахождения несоответствия. Находят все записи в таблице которые не связаны с записями в другой таблице.
  4.  Запросы архивов. Копируют записи из существующей таблицы в новую и затем удаляют (по желанию) эти записи из таблицы оригинала.

Но для большинства общеиспользуемых запросов не нужна помощь Конструктора запросов.

Создание запроса без помощи Конструктора запросов

  1.  В окне базы данных нажмите кнопку Query.
  2.  Нажмите  кнопку New. Microsoft Access выдаст диалоговое окно New Query.
  3.  Нажмите кнопку New. Откроется окно Select Query.
  4.  Если Ваш запрос основывается на таблицах активизируйте индикатор Tables на панели View. Если на запросах - активизируйте Queries, если  на обоих типах объектов выберите Both. В списке Table / Query  выберите необходимые для запроса источники. Для выбора более чем одной таблицы/запроса одновременно, удерживая клавишу Ctrl выберите все необходимые таблицы/запросы. Чтобы выбрать все или блок  отметьте первый пункт, а затем удерживая клавишу  Shift укажите последний . Нажмите кнопку Add.
  5.  Нажмите кнопку Close.

                  Рисунок 15: Окно проектирования QBE-запроса.

Критерии отбора - это инструкции, посредством которых пользователь сообщает Access ,какие блоки данных должны отбираться по запросу и индицироваться в Dynaset. Критерии могут задаваться для одного или нескольких полей запроса.

Спецификация критерия запроса отбора.

  1.  Войдите в режим проектирования запроса, для этого из меню View выберите директиву Query Design или щелкните мышью на кнопке Design View в пиктографическом меню.
  2.  В нижней части окна проектирования, в строке Criteria в ячейке Category Name введите выражение критерия отбора.

После того как выражение введено и нажата клавиша ввода, Access проверяет корректность выражения по правилам записи критериев и нормализует запись по этим правилам.

Пользователь может воспользоваться запросом для проведения вычислений с блоками данных. Он может задать в каждом поле некоторую функцию, обрабатывающую содержимое этого поля. Результат обработки выдается в Dynaset. Функция обработки задается в строке Total, которая появляется после нажатия в пиктографическом меню кнопки с греческой литерой “сигма”. Саму функцию можно выбрать в этой строке, развернув список возможных значений.

После того как запрос спроектирован, его можно выполнить, щелкнув мышью в строке пиктограмм на кнопке с восклицательным знаком или вызывая в меню Query директиву Run. Access индицирует отобранные по запросу  в Dynaset блоки в виде таблицы.

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

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

Если данный запрос уже был однажды сохранен и пользователь выбрал директиву Save, то старая версия будет заменена новым, измененным проектом запроса. Если изменения не должны испортить предыдущую версию, а должны быть сохранены в другом запросе, то следует вызвать директиву Save As и назначить сохраняемому проекту новое имя. Для сохранения табличного представления запроса следует выбрать директиву Save Query в меню File. Эта директива сохраняет изменения в проекте имеющегося запроса и заменяет предыдущую версию запроса на активную версию. Для того чтобы сохранить запрос впервые или создать копию активного запроса, Dynaset которого виден на экране, следует выбрать директиву Save Query As.

1.2.20 Отчеты.

Отчет это информация, которую Вы оформили в соответствии с Вашими спецификациями. Отчет позволяет извлекать и представлять данные как значимую информацию, которую Вы можете использовать и распространять. Примерами отчетов могут служить почтовые адреса, накладные, суммы продаж или списки телефонов. С помощью Microsoft Access Вы можете спроектировать отчет который представит информацию в том виде в котором Вы пожелаете. Вы можете использовать множество различных элементов проектирования, таких как текст, данные, рисунки, линии, поля и графики для создания Вашего отчета.От Вас зависит, как и какие элементы использовать для построения отчета.

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

Например:

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

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

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

Раздел 2. Конструкторская часть.

Загрузим программную среду Microsoft Access, входящую в среду Microsoft Office, нажав левой кнопкой мыши на ярлык (рисунок 2.1)

Рисунок 2.1 Запуск Microsoft Access

Далее мы создаем новую базу данных, выбираем путь для сохранения и пишем имя нашей базы данных и сохраняем (рисунок 2.2)

                             Рисунок 2.2 Создание базы данных

Теперь создаем первую таблицу “Клиенты”,  создавать ее мы будем в режиме конструктора

(рисунок 2.3)

Рисунок 2.3 Создание таблицы в режиме конструктора

Теперь заполняем поля таблицы (рисунок 2.4)

Рисунок 2.4 Заполняем поля таблицы

Поле “ID” сделаем ключевым, для этого нажмем на него правой кнопкой мыши и выбираем “Ключевое поле” (рисунок 2.5)

Рисунок 2.5 Выбор ключевого поля

Теперь закрываем окно и выбираем пункт “Сохранить”. Теперь переходим к созданию новой таблицы, таблицы “Посещения”. Создание этой таблицы будет происходим таким же способом, как и предыдущая (рисунок 2.6)

Рисунок 2.6 Создание таблицы “Посещения” и выбор ключевого поля

Сохраняем изменения и переходим к новой таблицы. Выбираем режим конструктора и создаем новые поля для новой таблицы “Абонемент” (рисунок 2.7)

Рисунок 2.7 Создание таблицы “Абонемент” и выбор ключевого поля

Теперь нужно создать новую таблицу, назовем ее “Абонемент посещения” , создаем для нее новые поля и выбираем ключевое поле (рисунок 2.8)

Рисунок 2.8 Создание таблицы “Абонемент посещения” и выбор ключевого поля

Мы создали 4 таблицы ,теперь нужно их связать, для этого переходим в “Схема данных” (рисунок 2.9)

Рисунок 2.9 Переход к “Схеме данных”

Кликаем правой кнопкой  мыши по форме и выбираем пункт “Добавление таблицы”, выделяем наши 4 таблицы и жмем “Добавить” (рисунок 2.10)

Рисунок 2.10 Добавляем таблицы

На экране появятся наши 4 таблицы, связывать будем так: выбираем поле ID в таблице ”Клиенты”  и тянем ползунок к полю Номер клиента  таблицы “Посещения”, после этого откроется табличка и в ней мы ставим галочки в “Обеспечении целостности данных”, ”Каскадное обновление связных полей” и нажимаем ОК (рисунок 2.11)

Рисунок 2.11 Связываем таблицы

Далее таким же образом связываем таблицы “Клиенты” и “Абонемент посещения”. Тянет ползунок от ID таблицы “Клиенты” к полю Номер клиенты таблицы “Абонемент посещения” .После этого откроется табличка и в ней мы ставим галочки в “Обеспечении целостности данных”, ”Каскадное обновление связных полей” и нажимаем ОК (рисунок 2.12)

Рисунок 2.12 Связываем таблицы

Затем аналогичным способом связываем таблицы “Абонемент” и ”Абонемент посещения”. Связываем поля “N Абонемента” таблицы “Абонемент” с полем “N Абонемента”  таблицы ”Абонемент посещения”.  После этого откроется табличка и в ней мы ставим галочки в “Обеспечении целостности данных”, ”Каскадное обновление связных полей” и нажимаем ОК (рисунок 2.13)

Рисунок 2.13 Связываем таблицы

После связи таблиц , схема данных должна выглядеть так (рисунок 2.14)

Рисунок 2.14 Схема данных

 

Создание приложения при помощи языка программирования Delphi.

Загружаем программную среду Delphi, входящую в среду Borland Delphi, нажав  левой кнопкой мыши на ярлык (рисунок 2.15)

Рисунок 2.15 Запуск языка программирования Delphi.

Создаем новый проект, для этого переходим в File=>New=>Application (рисунок 2.16)

Рисунок 2.16 Создаем новый проект

Затем сразу же сохраним проект как модуль glv.pas и нажимаем “Сохранить”, ( рисунок 2.17)

Рисунок 2.17 Сохраняем как модуль

И после сохраняем как проект progs.dpr и нажимаем “Сохранить”(рисунок 2.18)

Рисунок 2.18 Сохраняем как проект

После этого начнем работу с главной формой. В свойстве Caption инспектора объектов изменим имя нашей формы на “Фитнес клуб” (рисунок 2.19)

Рисунок 2.19 Изменение имени формы

Для удобства создадим Data Module для этого File=>New=>Data Module (рисунок 2.20)

Рисунок 2.20 Создаем Data Module

И сохраняем его под module.pas (рисунок 2.21)

Рисунок 2.21 Сохраняем как  модуль

После создания Data Module, с палитры компонентов “ADO” поместим на него компоненты: ADO Connection, 4 компонента ADO Table.  С палитры компонентов Data Access 4 компонента Data Sourse.(рисунок 2.22)

Рисунок 2.22 Размещаем компоненты в Data Module

Выделяем компонент ADO Table1 и в свойстве “Connection “выбираем ADO Connection (рисунок 2.23)

Рисунок 2.23 Устанавливаем свойство Connection

Тоже самое повторяем с компонентами ADO Table2 и ADO Table3, ADO Table4. Далее выделяем компонент Data Source1 и в инспекторе объектов в Data Set устанавливаем ему свойство ADO Table1.Для Data Source 2=ADO Table2 Data Source 3=ADO Table3 ,Data Source 4=ADO Table4 соответственно (рисунок 2.24, 2.25, 2.26,27)

Рисунок 2.24 Устанавливаем свойства Data Set для Data Source 1

Рисунок 2.25 Устанавливаем свойства Data Set для Data Source 2

Рисунок 2.26 Устанавливаем свойства Data Set для Data Source 3

Рисунок 2.27 Устанавливаем свойства Data Set для Data Source 4

Далее выделяем компонент ADO Connection кликаем по нему 2 раза, откроется окно, в нем ставим галочку в Use Connection String и нажимаем Build (рисунок 2.28)

Рисунок 2.28 переход к выбору драйвера

Затем у нас откроется окно где нужно выбрать драйвер, в нашем случае выбираем драйвер “Microsoft Jet 4.0 OLEDB Provider” и нажимаем далее(рисунок 2.29)

Рисунок 2.29 Выбираем драйвер

В открывшемся окне мы должны выбрать нашу базу данных и после выбора проверить подключение(рисунок 2.30)

Рисунок 2.30 Выбираем базу данных и проверяем подключение

Выделим компонент ADO Table1 и в свойстве Table Name выбираем таблицу Клиенты, для ADO Table2 выбираем Посещения , и для ADO Table3 выбираем Абонемент, для ADO Table 4 выбираем Абонемент посещения. Для того, чтобы наши таблицы стали активны ставим у них свойство Active=True(рисунок 2.31, 2.32, 2.33,2.34)

Рисунок 2.31 Выбираем таблицу “Клиенты” и активируем ее

Рисунок 2.32 Выбираем таблицу “Посещения” и активируем ее

Рисунок 2.33 Выбираем таблицу “Абонемент” и активируем ее

Рисунок 2.34 Выбираем таблицу “Абонемент посещения” и активируем ее

Теперь нужно выполнить подключение, для этого выбираем ADO Connection  и в инспекторе объектов в свойстве Active ставим TRUE(рисунок 2.35)

Рисунок 2.35 Подключаемся к Базе данных.

Далее помещаем на нашу форму компонент Main Menu, нажмем на него 2 раза и откроется табличка и в свойстве Caption  пишем названия будущих пунктов меню (рисунок 2.36)

Рисунок 2.36 Создание главного меню для главной формы

Теперь нам нужно подключить Data Module с glv.pas. Для этого выберем File=>Use Unit (рисунок 2.37)

Рисунок 2.37 Выбираем пункт Use Unit

И затем выбираем модуль и нажимаем ОК(рисунок 2.38)

Рисунок 2.38 Выбираем модуль и подключаем его

Теперь поместим на главную форму компонент “Image” с палитры компонентов  “Additional” (рисунок 2.39)

Рисунок 2.39 Выбираем компонент Image

Затем помещаем его на форму, растягиваем его так как нам нужно, и в инспекторе объектов выбираем пункт “Picture”(рисунок 2.40)

Рисунок 2.40 Помещаем компонент на форму и выбираем пункт “Picture

После нажатия на троеточие откроется табличка, в ней нажимаем на “Load” (рисунок 2.41)

Рисунок 2.41 переходим к выбору картинки

Далее выбираем соответствующую картинку и нажимаем “Открыть” (рисунок 2.42)

Рисунок 2.42 Выбираем картинку

В конечном итоге у нас должно получиться вот так (рисунок 2.43)

Рисунок 2.43 Вид главной формы с картинкой

После создания главной формы, мы будем создавать форму в котором у нас будут указываться список всех клиентов нашего фитнес клуба. Для этого перейдем в File=>New=>Form (рисунок 2.44)

Рисунок 2.44 Создание новой формы

И сохраним ее как модуль “klientform”. Для того чтобы главная форма знала о существования новой формы, мы подключим новую форму к главной, это мы сделаем так: File=>Use unit (рисунок 2.45)

Рисунок 2.45 Открываем таблицу с новыми модулями

Откроется таблица и в ней мы выделяем 2 модуля и нажимаем ОК (рисунок 2.46)

Рисунок 2.46 Подключаем 2 модуля

Тоже самое проделываем и с главной формой и Data Module.

Для того чтобы перейти от главной формы к форме с клиентами, нужно в главном меню выбрать пункт “Клиенты” и написать для него следующий код:

procedure TForm1.N4Click(Sender: TObject);

begin

Form2.ShowModal;

end;

Изменим имя новой формы на “Клиенты”. Теперь поместим на эту форму компоненты: DB Grid, Main Menu, Label, Edit, Popup Menu.

Выделим компонент Label и в свойстве Caption изменим название на “ Поиск”(рисунок 2.47)

Рисунок 2.47 Помещаем на форму нужные компоненты и меняем название у

компонента Label

Теперь создадим главное меню для нашей формы, для этого кликаем 2 раза на Main Menu в свойстве Caption пишем названия пунктов меню (рисунок 2.48)

Рисунок 2.48 Создание главного меню

Далее мы сделаем изменение строк в таблицы через Popup Menu, для этого свяжем DB Grid  с Popup Menu. Выделяем DB Grid и в его свойстве Popup Menu выбираем Popup Menu(рисунок 2.49)

Рисунок 2.49 Связываем DB Grid с Popup Menu

Выделим DB Grid в свойстве Data Source выбираем Data Module1.DataSource1. Все данные теперь отображаются в таблице(рисунок 2.50)

Рисунок 2.50 Отображение данных в DB Grid

Далее выбираем пункт меню Файл=>Выход и пишем ему код:

procedure TForm2.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form2.Close;

end;

Затем выбираем пункт меню Сохранить и к нему пишем код:

procedure TForm2.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице Клиент?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

datamodule1.ADOTable1.Post;

end;

Далее напишем код для удаление строки из таблицы, для этого нажмем 2 раза на пункт меню Удалить запись и напишем код:

procedure TForm2.N7Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите удалить запись?'+datamodule1.ADOTable1DSDesigner.AsString),'Удалить запись',MB_OKCANCEL)= id_OK then

datamodule1.ADOTable1.Delete;

end;

Затем напишем код для сортировки данных, выберем пункт меню сортировка по фамилии, и к нему напишем следующее:

procedure TForm2.N9Click(Sender: TObject);

begin

DataModule1.ADOTable1.IndexFieldNames:='Фамилия';

end;

Далее создадим поиск. Для этого нам нужно выделить компонент Edit и написать для него программный код:

procedure TForm2.Edit1Change(Sender: TObject);

begin

if Length(Edit1.Text)>0 then

DataModule1.ADOTable1.Filtered:=true

else

DataModule1.ADOTable1.Filtered:=false;

DataModule1.ADOTable1.Filter:='Фамилия='''+Edit1.Text+'''';

end;

Наша форма готова. Теперь нам нужно создать новую форму для добавления данных. И так, создаем новую форму, и сохраняем ее как redactklient.pas  Сразу же изменим название формы на Добавить запись. Для того чтобы форма Клиент знала о существования новой формы, мы подключим новую форму к ней, это мы сделаем так: File=>Use unit так, как мы делали в прошлый раз. Тоже самое делаем и с формой Клиент.

Добавляем на форму DB Edit 6, Label 6 и Button.(рисунок 2.51)

Рисунок 2.51 Оформление формы для добавления записи

Компоненты DBEdit представляют собой простые строки ввода типа TEdit, только они умеют автоматически редактировать указанные поля в базе данных. Чтобы компонент видел данные из нужного поля нужно указать у него в свойстве DataSource нужную таблицу, а в свойстве DataField указать поле, которое надо редактировать (рисунок 2.52)

Рисунок 2.52 Связываем BD Edit с DB Grid

Теперь нужно написать программный код для кнопки Добавить, для этого нажмем на нее 2 раза и напишем:

procedure TForm3.Button1Click(Sender: TObject);

begin

begin

if Application.MessageBox(Pchar('Вы действительно хотите ' +#13#10+'добавить новую запись?')

,'Добавить запись',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

begin

datamodule1.ADOTable1.Post;

datamodule1.ADOTable1.Insert;

Form3.Close;

end;

end;

end;

Теперь вернемся к форме Клиент и в пункте меню Добавить запись напишем:

procedure TForm2.N6Click(Sender: TObject);

begin

datamodule1.ADOTable1.Insert;

Form3.ShowModal;

end;

Выбираем компонент  Popup Menu , нажимаем 2 раза и сделаем пункт меню: Изменить  запись (рисунок 2.53)

Рисунок 2.53 Создание Popup Menu

После этого нажмем на него 2 раза и напишем программный код:

procedure TForm2.N10Click(Sender: TObject);

begin

Form3.ShowModal;

end;

Теперь переходим к следующей форме. Создаем ее так, как и предыдущую форму, сохраняем ее как модуль  posewenie.pas.и сразу изменим название формы на “Посещение”. Затем сделаем нашу форму видимой для главной форме и Data Module , так как мы делали в предыдущей форме. Кидаем на форму компоненты DB Grid, Main Menu, Popup Menu и размещаем их на форме (рисунок 2.54)

Рисунок 2.54 Размещаем компоненты на форме

Перейдем к главной форме и в пункте меню Посещения напишем код:

procedure TForm1.N5Click(Sender: TObject);

begin

Form4.ShowModal;

end;

Теперь создаем пункты меню, для этого нажмем 2 раза на Main Menu и в открывшемся окне запишем пункты меню (рисунок 2.56)

Рисунок 2.56 Создание пунктов меню

Теперь нам нужно сделать видимым нашу таблицу, для этого выделяем DB Grid и в свойстве Data Source выбираем Data Module1.Data Source2 (рисунок 2.57)

Рисунок 2.57 Отображаем данные в сетке

Теперь перейдем к написанию программного кода. Выбираем пункт меню Сохранить и пишем программный код:

procedure TForm4.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице Посещения?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable2.Modified then

datamodule1.ADOTable2.Post;

end;

После переходим к пункту Выход и пишем:

procedure TForm4.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти? ')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form4.Close;

end;

Далее переходим к пункту Удалить строку и в нем пишем :

procedure TForm4.N7Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите удалить ?'+datamodule1.ADOTable1DSDesigner.AsString),'Удалить запись',MB_OKCANCEL)= id_OK then

datamodule1.ADOTable2.Delete;

end;

Теперь переходим к сортировке. Выбираем пункт меню сортировка по дате и пишем код:

procedure TForm4.N9Click(Sender: TObject);

begin

DataModule1.ADOTable2.IndexFieldNames:='Дата';

end;

Теперь выделяем DB Grid и в свойстве Popup Menu выбираем Popup Menu1. После чего создаем пункт Изменить запись, двойным щелчком на компоненту. В открывшемся окне в свойстве Caption укажем название пункта Изменить запись. Сохраняем изменения .

Теперь перейдем к созданию формы для добавления записи в таблицу Посещения.    

              Создаем таблицу таким же способом как и предыдущие, сохраняем модуль как redactpos.pas. Делаем видимыми формы между собой. Помещаем на нее компоненты Label 4, DB Edit 4, Button и размещаем их на форме (рисунок 2.58)

Рисунок 2.58 Оформляем форму для добавления записей

После этого пишем программный код на кнопку Добавить:

procedure TForm5.Button1Click(Sender: TObject);

begin

begin

if Application.MessageBox(Pchar('Вы действительно хотите ' +#13#10+'добавить новую запись?')

,'Добавить запись',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

begin

datamodule1.ADOTable2.Post;

datamodule1.ADOTable2.Insert;

Form5.Close;

end;

end;

end;

Теперь перейдем обратно к форме Посещения и в пункте меню Добавить запись напишем код:

procedure TForm4.N6Click(Sender: TObject);

begin

DataModule1.ADOTable2.Insert;

Form5.ShowModal;

end;

Выбираем пункт Изменить запись и напишем к нему код:

procedure TForm4.N10Click(Sender: TObject);

begin

Form5.ShowModal;

end;

Форма Посещения готова, можно переходить к созданию следующей формы.

Создаем новую форму, называем ее Абонемент, сохраняем модуль aboniment.pas, в use unit делаем ее видимой для Data Module и для главной формы. Тоже самое делаем и в Data Module и в главной форме. Затем помещаем на форму компоненты DB Grid, Main Menu, DB Navigator и размещаем их на форме (рисунок 2.59)

Рисунок 2.59 Размещаем компоненты

В предыдущих двух формах данные мы добавляли через отдельное окно, в этом случае добавлять мы будем через DB Navigator.

Создадим меню для этой формы так, как показано на рисунке (рисунок 2.60)

Рисунок 2.60 Создаем меню для формы “Абонемент”

Теперь подключим DB Grid для отображения таблицы. Для этого в свойстве Data Sourceвыбираем Data Module1.Data Source 3 (рисунок 2.60)

Рисунок 2.61 Отображаем данные в сетке

Теперь подключаем DB Navigator , для этого выделяем его и в свойстве Data Source выбираем Data Module1.Data Source3 (рисунок 2.62)

Рисунок 2.62 Подключаем DB Navigator

Далее перейдем к написание программного кода. Выбираем пункт меня Файл=>Сохранить и напишем код:

procedure TForm6.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице абонемент ?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable3.Modified then

datamodule1.ADOTable3.Post;

end;

Далее напишем программный код для пункта Выход:

procedure TForm6.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти? ')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form2.Close;

end;

Далее переходим к главной форме. В главном меню добавим пункт меню О программе.

Создадим новую форму. Переходим в File=>New=>Form. Сохраним ее как модуль “progaform” . Подключаем к ней модуль glv.pas, к главной форме подключаем модуль progaform.Меняем название формы на “О программе” .

  Поместим на форму компонент Image с палитры компонентов Additional.(рисунок 2.67)

Рисунок 2.68 Помещаем компонент Image на форму

 

Далее в инспекторе объектов выбираем “Picture” и нажимаем на троеточие (рисунок 2.69)

Рисунок 2.69 Переходим к загрузки картинок

После нажатия на троеточие откроется табличка, в ней нажимаем на “Load” и нажимаем “OK” (рисунок 2.70)

Рисунок 2.70 переходим к выбору картинки

Далее выбираем соответствующую картинку и нажимаем “Открыть” (рисунок 2.71)

Рисунок 2.72 Выбираем картинку

   Поместим на форму компонент Label 4, меняем их название так как показано на рисунке (рисунок 2.73)

Рисунок 2.77 Помещаем на форму 4 компонента Lable и меняем для них названия

   Теперь перейдем к главной форме и в главном меню выберем пункт меню О программе, кликаем на него 2 раза и пишем следующий код:

procedure TForm1.N2Click(Sender: TObject);

begin

Form7.showModal;

end;

end.

Далее выбираем пункт меню Выход и пишем код:

procedure TForm1.N2Click(Sender: TObject);

begin

Close;

end;

Раздел 3. Исследовательская часть.

При помощи этой базы дынных можно работать с данными хранящимися в ней самой. Приложение разработано для конкретной базы данных. Оно очень простое в использовании.

Его главная форма выглядит так (рисунок 3.1)

Рисунок 3.1 Главная форма

Нажав на пункт меню Файл  нам откроется пункт меню Выход, при помощи которого мы сможем закрыть программу (рисунок 3.2)

Рисунок 3.2 Пункт меню Выход

Нажав на пункт меню Клиент нам откроется пункт два пункта при помощи которых мы сможем перейти к двум таблицам (рисунок 3.3)

Рисунок 3.3 Список таблиц

Перейдем к таблице Клиенты, щелкнем на пункт Клиенты и перед нами откроется форма с информацией о клиентах фитнес клуба(рисунок 3.4)

Рисунок 3.4 Таблица Клиенты

При нажатии на Файл мы увидим пункт меню для Сохранения изменений в таблице и Выход (рисунок 3.5)

Рисунок 3.5 Пункт меню Файл

Далее идет пункт меню “редактирование таблицы”, нажав на него мы увидим подпункты, при помощи которых можно удалять и добавлять данные в таблицу(рисунок 3.6)

Рисунок 3.6 Пункт меню Редактирование таблицы

Если нажать на “Добавить запись” то откроется новое окно с полями для записи данных в таблицу(рисунок 3.7)

Рисунок 3.7 Окно для добавления данных в таблицу Клиенты

Далее идет пункт Удалить запись. Выбрав нужную нам строку для удаление, нажимаем на него и строка удаляемся.

Далее идет пункт меню Сортировка. Сортировка происходит по фамилиям (рисунок 3.8)

Рисунок 3.8 Пункт меню Сортировка

Затем идет Отчет. Результаты отчета выводятся в Microsoft Exсel (рисунок 3.9)

Рисунок 3.9 Пункт меню Отчет

Так же здесь присутствует поиск. При помощи поиска мы сможем найти нужного нам клиента введя в поле нужную нам фамилию (рисунок 3.10)

Рисунок 3.10 Поиск

Изменять данные в таблице мы будем так: нажимаем правой кнопкой мыши на строку и выбираем Изменить запись и перед нами откроется форма для Добавления записей, но с заполненными полями (рисунок 3.11)

Рисунок 3.11 Изменение записей

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

Рисунок 3.12 Таблица с информацией о посещаемости

Пункты меню идентичны пунктам меню в таблице Клиенты. Нажав на Файл мы так же увидим два пункта Сохранить и Выход (рисунок 3.13)

Рисунок 3.13 Пункт меню Файл

Далее идет пункт меню “редактирование таблицы”, нажав на него мы увидим подпункты, при помощи которых можно удалять и добавлять данные в таблицу (рисунок 3.14)

Рисунок 3.14 Пункт меню Редактирование записи

Нажав на пункт Добавить запись мы перейдем к форме для добавления новой записи (рисунок 3.15)

Рисунок 3.15 Окно для добавления данных в таблицу Посещения

Изменять данные в таблице мы будем так, как и предыдущей форме: нажимаем правой кнопкой мыши на строку и выбираем Изменить запись и перед нами откроется форма для Добавления записей, но с заполненными полями (рисунок 3.16)

Рисунок 3.16 Изменение записей

Далее идем пункт меню Сортировка, сортируем данные по дате (рисунок 3.18)

Рисунок 3.18 Пункт меню Сортировка

Далее перейдем на главную форму и нажмем на пункт меню Клиентские карты , перед нами откроется таблица с абонементами (рисунок 3.19 )

Рисунок 3.19 Таблица Абонемент

В этой форме есть пункт меню Файл, нажав на него мы сможем увидеть пункт для сохранения закрытия формы (рисунок 3.20)

Рисунок 3.20 Пункт меню Файл

Добавлять , удалять данные  мы будем при помощи  компонента DB Navigator (рисунок 3.21)

Рисунок 3.21 Компонент DB Navigator

Для добавления записи нажимаем на плюс на самом компоненте и в самих полях вписываем новые данными нажимаем галочку(рисунок 3.22)

Рисунок 3.22 Добавляем запись

Для удаления записи нажимаем на минус на самом компоненте , у нас высветится окно Удалить запись? И нажимаем ОК, запись удалена (рисунок 3.23)

Рисунок 3.23 Удаляем запись

Перейдем на главную форму, выбираем пункт меню О программе, нажимаем 2 раза и перед нами откроется окно с информацией о программе (рисунок 3.24)

Рисунок 3.24 Окно с информацией о программе

Раздел 4. Охрана труда и безопасность жизнедеятельности.

Правильная позиция занятий за компьютером (рисунок 4.1):

  1. Голова прямо
  2. Плечи расправлены
  3. Спина прямая не имеет опору
  4. Во время работы глаза смотрят вперед
  5. Кисти и предплечья на одной линии
  6. Опора сиденья оказывает незначительное давление на бедро снизу
  7. Стопы расположены на подставке
  8. Монитор расположен на уровне глаз
  9. Рабочие материалы расположены перед учеником

Рисунок 4.1

Расстояние между компьютерами должно быть не менее 2 метров (рисунок 4.2):

Рисунок 4.2

Обязательно нужно соблюдать перерывы во время работы за компьютером (рисунок 4.3)

Рисунок 4.3

Работать за компьютером беременным и кормящим женщинам запрещено (рисунок 4.4):

Рисунок 4.4

Необходимо соблюдать нормы температуры, влажности и освещенности помещений с ПК (рисунок 4.5, 4.6):

Рисунок 4.5

Рисунок 4.6

Перед началом работы проверьте исправность разъемов и соединений компьютера с его аппаратурой (рисунок 4.7):

Рисунок 4.7

Оберегайте компьютер от механических повреждений и жидкостей (рисунок 4.8):

Рисунок 4.8

При работе за компьютером периодически делайте зарядку (рисунок 4.9):

Рисунок 4.9

Делайте гимнастику для глаз – это помогает сохранить зрение (рисунок 4.10):

Рисунок 4.10

Положение работы за компьютером (рисунок 4.11):

Рисунок 4.11

Раздел 5. Экономико-организационный раздел

5.1.Расчет трудоемкости проекта.

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

Q = t1 + t2 + t3 + t 4 +… tвн  

5.1 Общие затраты труда на разработку и внедрение проекта

  

    

где:

ti – затраты труда на выполнение i-го этапа проекта, чел./час.

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

Полный перечень работ с разделением их по этапам выполнения проекта приведен в табл. №1 «Перечень работ проекта»  

 Таблица 1 - Перечень работ проекта

Этап, ti

№ работы

Содержание работы

Продолжительность работ (дни)

1

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

3

2

Предварительный выбор методов проектирования. Определение требований к БД и приложению для работы с ней, выполняемым ею функциям, полученному результату.

2

3

Определение стадий, этапов и сроков разработки и документации на неё

1

4

Разработка технико- экономического обоснования разработки . Проведение маркетинговых исследований (Разработка таблицы аналогов и их стоимости)

4

2.

Техни-

ческий проект

1

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

3

2

Окончательное определение конфигурации технических средств

1

3

Рабочий проект

1

Программирование БД и модулей приложения, подключение и отладка.

3

2

Испытание информационной системы . Тестирование и корректировка по результатам испытаний

5

3

Разработка программной документации. Оформление расчётно- пояснительной записки по конструкторской и исследовательское части (пошаговое проектирование и листинг приложения для работы БД) проекта (оформление результатов тестирования, корректировки, инструкции по эксплуатации)

7

4

Внедрение

1

Разработка плана мероприятий по продаже БД и программного обеспечения.

1

                     Итого:

34

Q = 4+3+1+3+4+1+5+4+7+1=33 (дней).

5.2.Определение численности исполнителей.

Численность исполнителей при реализации проекта разработки и внедрения ПО определяется соотношением:

N=Q/F

5.2 Численность исполнителей

N= 33/166=1

где N – численность исполнителей при реализации проекта разработки и внедрения ПО, чел.;

F – фонд рабочего времени, чел./час.

Величина фонда рабочего времени определяется соотношением:

F = T * Fм. 

5.3 Величина рабочего времени

F=1*166=166        

   где T – время выполнения проекта в месяцах;

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

tсм. * (Dк.Dв.Dп.)

Fм. = –––––––––––––––––

12

8 * (366 – 104 – 12)111111

Fм. = ––––––––––––––––– = 166 (час.)

121

5.4 Фонд рабочего времени

где tсм. – продолжительность рабочего дня, час.;

Dк. – общее число дней в году;

Dв. – число выходных дней в году;

Dп. – число праздничных дней в году

5.3.Расчет затрат на выполнение проекта и составление таблицы структуры затрат.

Затраты на выполнение проекта определяются по формуле:

К = Сзарп. + Соб. + Сорг. + Снакл.

5.5 Затраты на выполнение проекта

где Сзарп. – заработная плата исполнителей, руб.;

Соб. – затраты на обеспечение необходимым оборудованием, руб.;

Сорг. – затраты на организацию рабочего места, руб.;

Снакл. – накладные расходы, руб.

Затраты на заработную плату исполнителей определяются по формуле:

Сзарп. = Сз.осн. + Сз.доп. + Сз.отч.

5.6 Затраты на заработную плату исполнителей

    Сзарп. = 55671+11134+22713=89518

где Сз.осн. – основная заработная плата, руб.;

Сз.доп. – дополнительная заработная плата, руб.;

Сз.отч. – отчисления с заработной платы, руб.

Затраты на основную заработную плату при дневной оплате труда исполнителей определяются по формуле:

Сз.осн. = Тзан. * Одн.

5.7 Затраты на основную заработную плату

Сз.осн. = 33*1687=55671 (руб.)

где Тзан. – число дней, отработанных исполнителем проекта;

Одн. – дневной оклад исполнителя, руб.

О.сн.=(Омес.*Tсм)/Fm

5.8 Дневной оклад

Осн.=35000*8/166=1687

Расчёт затрат на заработную плату исполнителей приведён в таблице №2.

Таблица  2 - Расчёт затрат на заработную плату исполнителей

Должность

Оклад, руб.

Дневной оклад, руб.

Трудозатраты на выполнение, дн.

Заработная плата, руб.

1

Программист

35000

1687

33

55671

Расходы на дополнительную заработную плату рассчитываются по формуле (величина определённых выплат составляет от 15% до 20% ):

Сз.доп. = % з.доп * Сз.осн.

5.9 Расходы на дополнительную заработную плату

   Сз.доп. = 20%*55671=11134

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

Сз.отч. = (Сз.осн. + Сз.доп.) * Нсоц

5.10 Отчисления с заработной платы

где Нсоц. – единый социальный налог, 34%.

Сз.отч. = (55671+11134)*34%=22713

Затраты на обеспечение работ оборудованием определяются исходя их состава оборудования и определяются необходимостью закупки, либо суммы амортизации (в случае уже имеющегося оборудования).

Таблица  3 - Затраты на оборудование

Наименование

Количество, шт.

Стоимость, руб.

AMD Athlon™ 64x2 Dual Core Processor, 2.71 Ghz

ОЗУ 2Гб,  HDD 500Гб, Windows7 Ultimate

1

30000

Принтер HP PhotoSmart C3183

1

10840

Borland Delphi 2007

1

38406

Пакет офисных приложений Microsoft Office Professional 2003 Win32 CD, Russian.

1

10472

Мышь A4Tech X7

1

1090

Итого:

5

90808

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

Норма амортизации для компьютерной техники и конторского оборудования с 01.01.98г в соотв. с указом президента РФ от 08.05.96г №685 составляет 25% и 30%. Таким образом сумма амортизации составит:

   

А = (Ki*Ha*Ti)/100*12

5.11 Норма амортизации

А = 90808*25%*1/100*12=2724

Затраты на организацию рабочего места для исполнителей проекта определяются с учётом требований СНИП (санитарные нормы и правила) и стоимость годичной аренды помещения требуемого уровня сервиса. В соответствии с санитарными нормами, расстояние между рабочими столами с видеомониторами должно быть не менее 2м, а между боковыми поверхностями видеомониторов не менее 1,2 м, площадь на одно рабочее место с терминалом или ПК должна быть не менее 6м^2, а объём- не менее 20 м^3. Площадь, предусмотренная для размещения одного принтера , соответствует 0,5 площади рабочего места исполнителя.

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

В обосновании затрат на размещение исполнителей следует сначала определить число исполнителей, а затем установить площадь для рабочего помещения.

Подбор географической точки рабочего помещения следует осуществить с помощью информации на веб- сайтах по недвижимости.

Затраты на аренду помещения вычисляются исходя из соотношения:

Сар. = Сквм/12*S*Тар.

5.12 Затраты на аренду помещения

где Сквм. – стоимость аренды одного квадратного метра площади за год, руб.;

S – арендуемая площадь рабочего помещения, м2.

Сар.=48000/12*9*1=36000

Накладные расходы, связанные с выполнением проекта определяются в соответствии с методикой в % от основной з/п. Обычно они составляют от 60 до 100%. В состав накладных расходов входят расходы на содержание и эксплуатации оборудования, общепроизводственные расходы, внепроизводственные расходы

Снакл. = %накл * Сз.осн.   

5.13 Накладные расходы                                        

Снакл.=70%*55671=38969

Общая сумма затрат на выполнение проекта определяется по формуле:

К = Сзарп. + Соб. + Сорг. + Снакл.

5.14 Общая сумма затрат на выполнение проекта

К = 89518+2724+36000+38969=167211 (руб.)

Таблица 4 - Структура затрат на создание проекта

№ п/п

Наименование затрат

Величина затрат, руб.

Структура, %

1

Затраты на выплату исполнителям з/п

89518

52

2

Затраты на оборудование

2724

2

3

Затраты на аренду помещения

36000

21

4

Накладные расходы на выполнение проекта

38969

23

5

Затраты на внедрение

3892

2

     Итого:

171103

100

5.4.Расчет затрат на внедрение проекта.

Затраты на внедрение состоят из затрат на з/п исполнителям, со стороны фирмы-разработчика, затраты на закупку оборудования, необходимого для внедрения проекта, затраты на организацию рабочего места и оборудования рабочего помещения и затрат на накладные расходы:

Квн. = Свн.зарп. + Свн.об. + Свн.орг. + Свн.накл.

5.15 затраты на внедрение

Квн. = 2712+0+0+1180=3892

где Квн. – затраты на внедрение, руб.;

Свн.зарп. – заработная плата исполнителя, участвующего во внедрении, руб.;

Свн.об – затраты на обеспечение необходимым оборудованием;

Свн.орг  - затраты на организацию рабочих мест и помещения;

Свн.накл. – накладные расходы внедрения, руб.

Т. к. работы по внедрению могут проводиться на оборудовании, ранее установленном заказчиком и на рабочем месте заказчика, то Свн.об. и Свн.орг. равны нулю.

Расчёт затрат на выплату з/п и накладные расходы вычисляются из размера дневной з/п, времени на внедрение и коэффициента накладных расходов.

Затраты на з/п исполнителям:

Свн.зарп. = Свн.з.осн. + Свн.з.доп. + Свн.з.отч.

5.16 Затраты на з/п исполнителям

Свн.зарп. = 1687+337+688=2712

где Свн.з.осн. – основная заработная плата исполнителя, участвующего во внедрении, руб.;

Свн.з.доп. – дополнительная заработная плата исполнителя, участвующего во внедрении, руб.;

Свн.з.отч. – отчисления с заработной платы исполнителя, участвующего во внедрении, руб.

Затраты на основную заработную плату исполнителя, участвующего во внедрении, определяются по формуле:

Свн.з.осн. = Твн. * Сз.дн.

5.17 Затраты на основную заработную плату исполнителя, участвующего во внедрении

Свн.з.осн. = 1*1687=1687

             

где Твн. – продолжительность работ по внедрению;

Расходы на дополнительную заработную плату исполнителя, участвующего во внедрении, рассчитываются по формуле:

Свн.з.доп. = %доп.з.* Свн.з.осн.

5.18Расходы на дополнительную заработную плату исполнителя, участвующего во внедрении

Свн.з.доп. = 20% * 1687=337 (руб.)

Отчисления с заработной платы рассчитываются по формуле:

Свн.з.отч. = (Свн.з.осн. + Свн.з.доп.) * Нсоц.

5.19 Отчисления с заработной платы

Свн.з.отч. = (1687+337) *34% = 688 (руб.)

Накладные расходы, связанные с внедрением определяются по формуле:

Свн.накл. = 70% * Свн.зарп.

5.20 Накладные расходы, связанные с внедрением

Свн.накл. = 70% *1687  = 1180 (руб.)

Учитывая затраты на разработку и внедрение проекта общие затраты составят:

                                                  Коб = К+Квн  

5.21 Общие затраты

Коб = 3892+167211=171103 (руб.)

Заключение.

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

         В теоретическом разделе была предоставлена информация о среде Delphi 7 и её языке, на котором написан программный продукт, а так же информация о среде Access на котором написана база данных

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

            В исследовательском разделе предоставлены результаты тестирования рабочего приложения. Тестирование показало, что приложение работает без ошибок, все возможные функции программы доступны пользователю

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

   В организационно-экономическом разделе производился расчет основных экономических показателей по разработке и внедрению базы данных для фитнес клуба. Выполнение данного проекта в обшей сложности заняло 33 дня. Общие затраты составили 171103 рублей. Затраты на внедрение проекта – 3892 рублей, на заработную плату исполнителям 89518 рубля, на амортизацию оборудования – 2724 рублей, на организацию рабочего места – 36000 рублей, накладные расходы – 38969 рублей.

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


Список источников.

  1. Жоголев Е. А. Лекции по технологии программирования.  http://lib.mexmat.ru
  2. Фоке Дж. Программное обеспечение и его разработка.  http://www.delphilab.ru
  3. Фленов. М. Е - Библия Delphi  http://soft-plus.ucoz.ru
  4. Владимир Гофман Хомуненко Delphi 7 Быстрый старт. http://lib.mexmat.ru
  5. Никита Культин Delphi 7 в задачах и примерах. http://www.delphilab.ru
  6. Теория БЖД.  http://images.yandex.ru

Приложения

Листинг.

unit glv;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Menus, jpeg, ExtCtrls;

type

 TForm1 = class(TForm)

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   Image1: TImage;

   N7: TMenuItem;

   procedure N4Click(Sender: TObject);

   procedure N5Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N7Click(Sender: TObject);

   procedure N2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

uses klientform, module, posewenie, aboniment, progaform;

{$R *.dfm}

procedure TForm1.N4Click(Sender: TObject);

begin

Form2.ShowModal;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Form4.ShowModal;

end;

procedure TForm1.N6Click(Sender: TObject);

begin

Form6.ShowModal;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

Form7.showmodal;

end;

procedure TForm1.N2Click(Sender: TObject);

begin

Close;

end;

end.

unit redactklient;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Mask, DBCtrls;

type

 TForm3 = class(TForm)

   DBEdit1: TDBEdit;

   DBEdit2: TDBEdit;

   DBEdit3: TDBEdit;

   DBEdit4: TDBEdit;

   DBEdit5: TDBEdit;

   DBEdit6: TDBEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Button1: TButton;

   procedure Button1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form3: TForm3;

implementation

uses klientform, module;

{$R *.dfm}

procedure TForm3.Button1Click(Sender: TObject);

begin

begin

if Application.MessageBox(Pchar('Вы действительно хотите ' +#13#10+'добавить новую запись?')

,'Добавить запись',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

begin

datamodule1.ADOTable1.Post;

datamodule1.ADOTable1.Insert;

Form3.Close;

end;

end;

end;

end.

unit redactpos;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Mask, DBCtrls;

type

 TForm5 = class(TForm)

   DBEdit1: TDBEdit;

   DBEdit2: TDBEdit;

   DBEdit3: TDBEdit;

   DBEdit4: TDBEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Button1: TButton;

   procedure Button1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form5: TForm5;

implementation

uses posewenie, module;

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);

begin

begin

if Application.MessageBox(Pchar('Вы действительно хотите ' +#13#10+'добавить новую запись?')

,'Добавить запись',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

begin

datamodule1.ADOTable2.Post;

datamodule1.ADOTable2.Insert;

Form5.Close;

end;

end;

end;

end.

unit klientform;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Menus, Grids, DBGrids, StdCtrls;

type

 TForm2 = class(TForm)

   Label1: TLabel;

   Edit1: TEdit;

   DBGrid1: TDBGrid;

   MainMenu1: TMainMenu;

   PopupMenu1: TPopupMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   N7: TMenuItem;

   N8: TMenuItem;

   N9: TMenuItem;

   N10: TMenuItem;

   N11: TMenuItem;

   Excel1: TMenuItem;

   procedure N4Click(Sender: TObject);

   procedure N2Click(Sender: TObject);

   procedure N7Click(Sender: TObject);

   procedure N9Click(Sender: TObject);

   procedure Edit1Change(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N10Click(Sender: TObject);

   procedure Excel1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form2: TForm2;

implementation

uses glv, module, redactklient,comobj;

{$R *.dfm}

procedure TForm2.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form2.Close;

end;

procedure TForm2.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице Клиент?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable1.Modified then

datamodule1.ADOTable1.Post;

end;

procedure TForm2.N7Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите удалить запись?'+datamodule1.ADOTable1DSDesigner.AsString),'Удалить запись',MB_OKCANCEL)= id_OK then

datamodule1.ADOTable1.Delete;

end;

procedure TForm2.N9Click(Sender: TObject);

begin

DataModule1.ADOTable1.IndexFieldNames:='Фамилия';

end;

procedure TForm2.Edit1Change(Sender: TObject);

begin

if Length(Edit1.Text)>0 then

DataModule1.ADOTable1.Filtered:=true

else

DataModule1.ADOTable1.Filtered:=false;

DataModule1.ADOTable1.Filter:='Фамилия='''+Edit1.Text+'''';

end;

procedure TForm2.N6Click(Sender: TObject);

begin

datamodule1.ADOTable1.Insert;

Form3.ShowModal;

end;

procedure TForm2.N10Click(Sender: TObject);

begin

Form3.ShowModal;

end;

procedure TForm2.Excel1Click(Sender: TObject);

var

XLApp,Sheet,Colum:Variant;

index, i:integer;

begin

// открываем Excel

XLApp:= CreateOleObject('Excel.Application');

XLApp.Visible:=true;

// Создаём в документе Excel новую книгу

XLApp.Workbooks.Add(-4167);

// В книге один лист, который называется Отчёт

XLApp.Workbooks[1].WorkSheets[1].Name:='Отчёт';

// Переходим к редактированию самого листа Отчёт

// переменная Colum будет указывать на то, что мы работаем со строками

Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Columns;

// Работаем с столбцами листа Отчёт

// изменяем ширину у 1,2,3,4,5,6,7,8 столбца

{ работаем с 8-ю столбцами, потому что столько столбцов таблицы Студент

хотим видеть в отчёте }

// ширина столбцов равна 20

Colum.Columns[1].ColumnWidth:=20;

Colum.Columns[2].ColumnWidth:=20;

Colum.Columns[3].ColumnWidth:=20;

Colum.Columns[4].ColumnWidth:=20;

Colum.Columns[5].ColumnWidth:=20;

Colum.Columns[6].ColumnWidth:=20;

Colum.Columns[7].ColumnWidth:=20;

Colum.Columns[8].ColumnWidth:=20;

// переходим к редактированию строк листа Отчёт

Colum:=XLApp.Workbooks[1].WorkSheets['Отчёт'].Rows;

// задаём жирный шрифт у второй строчки

Colum.Rows[2].Font.Bold:=true;

// задаём жирный шрифт у первой строчки

Colum.Rows[1].Font.Bold:=true;

//задаём у первой строчки цвет шрифта синий

Colum.Rows[1].Font.Color:=clBlue;

//задаём у первой строчки размер шрифта 14

Colum.Rows[1].Font.Size:=14;

// пременная Sheet будет указывать на то, что мы работаем со страницами

Sheet:=XLApp.Workbooks[1].WorkSheets['Отчёт'];

// помещаем в определенные ячейки нужный нам текст

Sheet.Cells[1,2]:='Информация о клиентах';

Sheet.Cells[2,1]:='Фамилия';

Sheet.Cells[2,2]:='Имя';

Sheet.Cells[2,3]:='Отчество';

Sheet.Cells[2,4]:='Дата Рождения';

Sheet.Cells[2,5]:='Телефон';

Sheet.Cells[2,6]:='Адрес';

// переменная index будет указывать на номер строчки

index:=3;

DataModule1.ADOTable1.First;

for i:=0 to DataModule1.ADOTable1.RecordCount-1 do

begin

 Sheet.Cells[index,1]:=DataModule1.ADOTable1.Fields.Fields[1].AsString;

 Sheet.Cells[index,2]:=DataModule1.ADOTable1.Fields.Fields[2].AsString;

 Sheet.Cells[index,3]:=DataModule1.ADOTable1.Fields.Fields[3].AsString;

 Sheet.Cells[index,4]:=FormatDateTime('dddddd',

 DataModule1.ADOTable1.Fields.Fields[4].AsDateTime);

 

 Sheet.Cells[index,6]:=DataModule1.ADOTable1.Fields.Fields[6].AsString;

 Inc(index);

 DataModule1.ADOTable1.Next;

end;

end;

end.

unit module;

interface

uses

 SysUtils, Classes, DB, ADODB;

type

 TDataModule1 = class(TDataModule)

   DataSource1: TDataSource;

   DataSource2: TDataSource;

   DataSource3: TDataSource;

   ADOConnection1: TADOConnection;

   ADOTable1: TADOTable;

   ADOTable2: TADOTable;

   ADOTable3: TADOTable;

   ADOTable4: TADOTable;

   DataSource4: TDataSource;

   ADOTable1DSDesigner: TWideStringField;

   ADOTable1DSDesigner2: TWideStringField;

   ADOTable1DSDesigner3: TWideStringField;

   ADOTable1DSDesigner4: TDateTimeField;

   ADOTable1DSDesigner5: TWideStringField;

   ADOTable1DSDesigner6: TWideStringField;

   ADOTable1DSDesigner7: TBlobField;

   ADOTable2DSDesigner: TDateTimeField;

   ADOTable2DSDesigner2: TDateTimeField;

   ADOTable2DSDesigner3: TIntegerField;

   ADOTable2N: TIntegerField;

   ADOTable3N: TAutoIncField;

   ADOTable3DSDesigner: TDateTimeField;

   ADOTable3DSDesigner2: TWideStringField;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 DataModule1: TDataModule1;

implementation

uses glv, klientform, redactklient, posewenie, aboniment;

{$R *.dfm}

end.

unit progaform;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, jpeg, ExtCtrls, StdCtrls;

type

 TForm7 = class(TForm)

   Image1: TImage;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form7: TForm7;

implementation

uses glv;

{$R *.dfm}

end.

unit posewenie;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Menus, Grids, DBGrids, StdCtrls, Mask, DBCtrls;

type

 TForm4 = class(TForm)

   MainMenu1: TMainMenu;

   PopupMenu1: TPopupMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   N6: TMenuItem;

   N7: TMenuItem;

   N8: TMenuItem;

   DBGrid1: TDBGrid;

   N9: TMenuItem;

   N10: TMenuItem;

   procedure N2Click(Sender: TObject);

   procedure N4Click(Sender: TObject);

   procedure N7Click(Sender: TObject);

   procedure N9Click(Sender: TObject);

   procedure N6Click(Sender: TObject);

   procedure N10Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form4: TForm4;

implementation

uses module, glv, klientform, redactklient, redactpos;

{$R *.dfm}

procedure TForm4.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице Посещения?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable2.Modified then

datamodule1.ADOTable2.Post;

end;

procedure TForm4.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти? ')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form4.Close;

end;

procedure TForm4.N7Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите удалить ?'+datamodule1.ADOTable1DSDesigner.AsString),'Удалить запись',MB_OKCANCEL)= id_OK then

datamodule1.ADOTable2.Delete;

end;

procedure TForm4.N9Click(Sender: TObject);

begin

DataModule1.ADOTable2.IndexFieldNames:='Дата';

end;

procedure TForm4.N6Click(Sender: TObject);

begin

DataModule1.ADOTable2.Insert;

Form5.ShowModal;

end;

procedure TForm4.N10Click(Sender: TObject);

begin

Form5.ShowModal;

end;

end.

unit aboniment;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Menus, ExtCtrls, DBCtrls, Grids, DBGrids;

type

 TForm6 = class(TForm)

   DBGrid1: TDBGrid;

   DBNavigator1: TDBNavigator;

   MainMenu1: TMainMenu;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   procedure N2Click(Sender: TObject);

   procedure N4Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form6: TForm6;

implementation

uses glv, module;

{$R *.dfm}

procedure TForm6.N2Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Сохранить изменения сделанные' +#13#10+'в таблице абонемент ?')

,'Сохранение',MB_OKCANCEL)= id_OK then

if datamodule1.ADOTable3.Modified then

datamodule1.ADOTable3.Post;

end;

procedure TForm6.N4Click(Sender: TObject);

begin

if Application.MessageBox(Pchar('Вы действительно хотите выйти? ')

,'Выход',MB_OKCancel)= id_OK then

Application.Terminate

else

form6.Close;

end;

end.


 

А также другие работы, которые могут Вас заинтересовать

42901. Бухгалтерский учет расчетов с бюджетом и внебюджетными фондами в ООО «Золотой Флок» 12.09 MB
  Еще Ф. Аквинский, известный церковный деятель и философ XIII в. высказывался о проблемах установления и сбора налогов следующим образом: он определял налоги, как «дозволенную форму грабежа». Речь идет о том, что взимание налогов всегда ущемляет чьи-то интересы и в определенной степени отягощает социальное положение.
42902. Комплексный анализ проблем оплаты труда на предприятии питания и предложение направлений совершенствования оплаты труда на предприятии 67.08 KB
  Формы и системы оплаты труда. Фонд оплаты труда и его структура. Направления совершенствования системы оплаты труда на предприятии. Администрация предприятий питания самостоятельно выбирает и применяет различные системы оплаты труда работников.
42903. Розробка блоку зв’язку з електроавтоматикою верстата 16Б16. Пристрій управління шпінделем 875.86 KB
  Числове програмне керування (ЧПК) (англ. Computer numerical control) - комп'ютеризована система керування, яка зчитує командні інструкції спеціалізованої мови програмування (наприклад, G-код) і керує приводами метало-, дерево- чи пластмасообробних верстатів та верстатним оснащенням.
42904. Предпримемательство: эволюционный подход 33.65 MB
  Предпринимательство есть способ хозяйствования, который в результате многовековой эволюции утвердился в экономике всех развитых стран. Первоначально предпринимателями называли предприимчивых людей, действующих на рынке, или просто людей энергичных, азартных, склонных к рискованным операциям. В дальнейшем к предпринимательству стали относить любую деятельность, направленную на увеличение прибыли и не запрещённую законом. Однако возникновение предпринимательства как оформившегося устойчивого явления относят к XVII веку.
42905. Сестринский процесс при ожирении 186.5 KB
  Эта проблема касается всех слоев населения независимо от социальной и профессиональной принадлежности, возраста, места проживания и пола. Так, в странах Западной Европы избыточную массу тела имеет от 10 до 20% мужчин и от 20 до 25% женщин. В некоторых регионах Восточной Европы доля людей, страдающих ожирением, достигла 35%. В России в среднем 30% трудоспособного населения имеют ожирение и 25% - избыточную массу тела.
42906. Разработка программы для реализации модели боя типа «Б» с учетом корректировки огня 66.8 KB
  Исходные данные В качестве исходных данных задачи принимаются следующие величины: N1 – численность наших войск на момент начала бояN2 – численность войск противника на момент начала бояn1 – численность при которой наши подразделения выходят из бояn2 – численность при которой подразделения противника выходят из бояλ1 – скорострельность наших подразделенийλ2 – скорострельность подразделений противникаP1 – вероятность поражения БЕ противника при попаданииP2 – вероятность поражения нашей БЕ при попаданииK1 – коэффициент корректировки огня наших...
42907. Розробка алгоритмів покриття та сортування 733.57 KB
  Алгоритм - це точний припис, що визначає обчислювальний процес, що веде від варійованих вихідних даних до шуканого результату. Саме слово «алгоритм» походить від латинської форми написання імені великого математика IX століття Аль Хорезмі (Мухаммеда ібн Муса аль Horesmi)
42908. Разработка программы по учету покупок 4.71 MB
  Стек – это линейный список в котором добавление новых элементов и удаление существующих производится только с одного конца называемого вершиной стека. Это сокращение помогает запомнить механизм работы стека. Значением указателя представляющего стек является ссылка на вершину стека и каждый элемент стека содержит поле ссылки на соседний нижний элемент.Описание процедур Процедура Функция Параметры Описание dd b:Integer Общее колво элементов p:TPElemВершина стека В стек добавляется элемент.