Создание программы "Библиотека"

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.11.2012
Размер файла 1,0 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧЕРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

Рязанский государственный радиотехнический университет

Кафедра вычислительной и прикладной математики

ИНФОРМАЦИОННО-СПРАВОЧНАЯ СИСТЕМА

"Библиотека"

Пояснительная записка к курсовой работе

по дисциплине

"Алгоритмы и языки программирования"

Выполнила: студентка гр.778

Гришакина И.С.

Проверила: доцент каф. ВПМ

Чистякова В.И.

Рязань 2009

Задание

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

Содержание

  • Задание
  • 1. Описание предметной области
  • 2. Функциональная архитектура приложения
  • 3. Описание интерфейса приложения
  • 3.1 Главная форма приложения, её функции, компоненты
  • 3.2 Форма редактирования, её свойства и компоненты
  • 3.3 Форма пароля, её свойства и компоненты
  • 3.4 Форма выбора, её свойства и компоненты
  • 3.5 Форма сортировки, её свойства и компоненты
  • 3.6 Форма отчёта, её свойства и компоненты
  • 3.7 Форма Справки, её свойства и компоненты
  • 3.8 Описание внутренних функций приложения
  • 3.9 Описание и реализация событий главной формы и ее компонентов
  • 3.10 Описание и реализация событий дополнительных форм и их компонентов
  • 3.10.1 Реализация событий формы редактирования
  • 3.10.2 Реализация событий формы пароля
  • 3.10.3 Реализация событий формы выборки
  • 4. Текст программы
  • 5. Файлы с исходными данными и файлы отчетов
  • Библиографический список

1. Описание предметной области

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

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

type

tYear=1900.2009;

tBook=record // тип "Запись о книге"

Name: string [30]; // поле "название"

Author: string [27]; // поле "автор"

Issue: string [12]; // поле "издательство"

Year: tYear; // поле "год издания"

Code: Integer; // поле-"Код книги"

Remote: Boolean; // поле-признак удаления

Visible: Boolean; // поле-признак видимости

end;

var

Book: array [0.300] of tBook; // массив записей об одной книге

Num: Integer; // количество записей в массиве записей

Поля Name, Author, Isue, Year служат для хранения данных о книге. Поле Name представляет собой строку с названием книги, Author - строку с именем автора, Issue - строку с названием издательства и, наконец, Year - число с годом издания книги. Остальные поля Code, Remote, Visible предназначены для осуществления операций с данными. Поле Code служит для поиска товаров в базе данных, оно является уникальным кодом для каждой книги. Поле Remote предназначено для удаления выбранной записи. И, наконец, поле Visible определяет "видимость" текущей записи о книге. Если запись "не видима", то книга не выводится в таблицу данных.

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

программа приложение главная форма

2. Функциональная архитектура приложения

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

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

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

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

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

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

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

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

Для получения информации о программе и её разработчике необходимо выбрать пункт меню "О программе".

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

3. Описание интерфейса приложения

Программа состоит из семи форм. Каждая из них имеет свои функции.

3.1 Главная форма приложения, её функции, компоненты

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

Внешний вид формы

Основные свойства.

Свойство

Значение

Name

fmMain

Caption

Библиотека

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 14; цвет - черный

Hint

Библиотека

ShowHint

True

Компоненты главной формы.

В центре формы расположена таблица sgBooks. Она отображает всю информацию о книгах.

Свойства

Свойство

Значение

ColCount

6

Name

sgBooks

FixedCols

1

FixedRows

1

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 12; цвет - черный

Hint

Информация о книгах

RowCount

2

ShowHint

True

ScrollBars

ssVertical

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

Сверху, снизу, а также справа от таблицы находятся кнопки bbtLoad, bbtAdd, bbtChange, bbtSave, bbtDel, bbtChoice, bbtSorting, bbtSaveReport, bbtClose (tBitBtn) - "Загрузить", "Добавить", "Изменить", "Сохранить", "Удалить", "Выбрать", "Сортировать", "Сохранить отчёт", "Закрыть". Они позволяют пользователю реализовывать различные действия над информацией о книгах.

Основные свойства кнопок TBitBtn.

Кнопка bbtClose

Свойство

Значение

Name

bbtClose

Caption

Закрыть

Enabled

True

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 14; цвет - бирюзовый

Hint

Завершение работы программы

ShowHint

True

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

Для загрузки новых данных и сохранения существующих данных используются компоненты

OpenDialog и SaveDialog соответственно.

Свойства класса OpenDialog.

Свойство

Назначение

FileName

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

Filter

Набор масок, в соответствии с которыми отбираются имена файлов для отображения в диалоговом окне. Каждая маска состоит из двух частей: названия и шаблона, - разделенных символом |. Одному названию могут соответствовать несколько шаблонов. Маски отделяются друг от друга символом |.

FilterIndex

Номер текущей маски. Нумерация начинается с 1.

InitialDir

Текущий каталог, содержимое которого отображается при первом открытии диалогового окна.

Title

Заголовок диалогового окна

Свойства класса SaveDialog аналогичны вышеприведённым свойствам.

На форме fmMain расположены две метки lbNum и lbSorting. lbNum отражает количество книг в таблице, эта метка всегда видима. lbSorting по умолчанию является невидимой. Она появляется только после реализации действий по выбору книг на основе определённого критерия (изданных после введенного года) и отображает данный признак.

Внизу формы присутствует компонент StatusBar, отображающий подсказки, а также текущие дату и время. Подсказки выводятся в 0-ю панель компонента, дата в 1-ю, а время - во 2-ю.

Для того, чтобы определить дату и время, на форме расположен компонент Timer.

Его свойства

Свойство

Значение

Enabled

True

Interval

1000

Name

Timer

Последний компонент, расположенный на главной форме XPManifes (XPMan). Он служит для отображения кнопок на форме в стиле Windows XP.

3.2 Форма редактирования, её свойства и компоненты

Форма редактирования fmEdit предназначена для редактирования таблицы sgBooks. Она позволяет добавить новую запись в таблицу или изменить существующую. Внешний вид формы fmEdit следующий

Свойства формы.

Свойство

Значение

Name

fmEdit

Caption

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 10; цвет - синий

Hint

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

ShowHint

True

Свойство Caption будет принимать значения в зависимости от назначения формы редактирования - Добавления или Изменения.

На форме расположены 4 метки lbNameOfBook, lbAuthor, lbIssue, lbYear, имеющие заголовки "Название", "Автор", "Издание" и "Год издания" соответственно. Для ввода информации о книге используются однострочные редакторы edNameOfBook, edAuthor, edIsuue и edYear. В процессе работы программы пользователь может вводить в них название книги, имя автора, издание и год издания соответственно.

Свойства однострочных редакторов

Свойство

Значение

Hint

Введите название книги (имя автора, издание, год издания)

ReadOnly

False

ShowHint

True

Text

Visible

True

Для добавления или изменения записи используются кнопки типа TBitBtn: bbtEditOK и bbtEditCancel.

Свойство Hint определяется в соответствии с назначением формы редактирования.

3.3 Форма пароля, её свойства и компоненты

Если происходит загрузка данных из файла SpecialBooks. txt, то осуществляется работа с конфиденциальными данными, поэтому при загрузке происходит запрос пароля. При этом появляется форма пароля fmKey.

Свойства.

Свойство

Значение

Caption

Пароль

Name

fmKey

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 12; цвет - черный

Hint

Окно пароля

ShowHint

True

На форме расположены две метки lbKey1 и lbKey2. Они определяют название заголовка формы. Посередине формы расположен однострочный редактор edKey, куда непосредственно вводится пароль.

Для подтверждения пароля необходимо нажать кнопку bbtKeyOK (TBitBtn).

Свойства данной кнопки:

Свойство

Значение

Caption

OK

Enabled

True

Kind

bkOK

ModalResult

mrOK

Name

bbtEditOK

Visible

True

3.4 Форма выбора, её свойства и компоненты

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

Основные свойства.

Свойство

Значение

Caption

Выборка данных

Name

fmChoice

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 8; цвет - темно-синий

Hint

Окно выбора

ShowHint

True

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

Чтобы осуществить выборку, необходимо нажать на кнопку bbtChoiceOK (TBitBtn), для отмены - кнопку bbtChoiceCancel (TBitBtn). Их свойства аналогичны свойствам кнопок bbtEditOK и bbtEditCance формы редактирования, за исключением свойства Hint (для первой кнопки - "Подтвердить", для второй - "Отказаться").

3.5 Форма сортировки, её свойства и компоненты

Форма fmSorting позволяет отсортировать информацию о книгах по одному из выбранных критериев. Она имеет следующий внешний вид

Основные свойства.

Свойство

Значение

Caption

Сортировка данных

Name

fmSorting

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 8; цвет - чёрный

Hint

Окно сортировки данных

ShowHint

True

На форме расположена метка lbSorting, имеющая постоянное свойство Caption "Выберите метод сортировки". Для выбора способа сортировки на форме присутствуют три радио кнопки rbNameOfBook, rbAuthor и rbYear.

Основные свойства данных кнопок.

По умолчанию выбрана сортировка по названию книги.

Также на форме присутствует компонент Bevel для отделения группы радио кнопок от остальных компонентов.

Чтобы осуществить сортировку необходимо нажать кнопку bbtSortingOK, для отмены действий - кнопку bbtSortingCancel. Свойства данных кнопок совпадают со свойствами кнопок bbtEditOK и bbtEditCancel соответственно, за исключением свойства Hint (для кнопки bbtSortingOK - "Подтвердить сортировку", для кнопки bbtSortingCancel - "Отказаться от сортировки").

3.6 Форма отчёта, её свойства и компоненты

Форма fmReporting позволяет сохранить отчёт в виде таблицы в текстовый файл. Она имеет следующий внешний вид.

Основные свойства данной формы.

Свойство

Значение

Caption

Отчет

Name

fmReporting

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 10; цвет - малиновый

Hint

Окно отчета

ShowHint

True

На форме расположена метка lbReporting, имеющая свойство Caption - "Отчёт".

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

Свойства компонента mmReporting следующие

Свойство

Значение

Name

mmReporting

Font

Шрифт - Courier New; начертание -

обычный; размер - 10; цвет - черный

Hint

Отчет

ScrollBars

ssVertical

Чтобы сохранить отчёт в текстовый файл, необходимо нажать кнопку bbtReportingOK (TBitBtn), для отмены действия - кнопку bbtReportingCancel. Их свойства аналогичны свойствам кнопок bbtEditOK и bbtEditCancel формы редактирования, за исключением свойства Hint. Для кнопки bbtReportingOK - "Сохранить", для кнопки bbtReportingCancel - "Отказаться".

3.7 Форма Справки, её свойства и компоненты

Для просмотра информации о программе используется форма AboutBoxHelp, реализованная на основе шаблона AboutBox.

Внешний вид формы таков

Основные свойства.

Свойство

Значение

Caption

О программе

Name

AboutBoxHelp

Font

Шрифт - MS Sans Serif; начертание -

обычный; размер - 8; цвет - бирюзовый

Hint

Окно справки

ShowHint

True

На форме располагаются следующие стандартные компоненты - OKButton, ProductName, Version, Copyright, Panel, Comments. Их соответствующие свойства Caption таковы "OK", "Программа "Библиотека"", "Версия 1.01", "Владелец Гришакина Ирина Сергеевна, студентка группы 778", "Комментарии: программа предназначена для хранения данных о книгах".

3.8 Описание внутренних функций приложения

Чтобы отобразить информацию о книгах в таблице sgBooks, необходима процедура TfmMain. Output. Она позволяет вывести из массива записей в таблицу, расположенную на главной форме, те элементы, которые должны быть видимы пользователю на данном этапе. Для этого необходимо проверить поля каждой записи массива с названиями Remote и Visible. При выводе каждой новой записи о книге данной процедурой добавляется новая строка в таблице, а после вывода метке, расположенной внизу таблицы и предназначенной для отображения числа записей в таблице, присваивается соответствующее значение. Если число записей равно 0, то закрывается доступ к кнопкам "Сохранить", "Изменить", "Удалить", "Выбрать" и "Сортировать". В противном же случае доступ к ним открывается (Сортировать можно более одной записи).

procedure TFmMain. Output;

// вывод элементов из массива записей в таблицу sgBooks

var

Number, i: Integer; // номер записи в таблице

begin

for i: =0 to 5 do

sgBooks. Cols [i]. Clear; // очистка столбцов таблицы

Number: =0;

sgBooks. RowCount: =2; // число строк таблицы равно 2

for i: =0 to Num-1 do begin

// если данная запись не удалена и видима

if not Book [i]. Remote and Book [i]. Visible then begin

Number: =Number+1; // номер увеличивается

if Number>1 then // если в таблице больше одной записи

// увеличиваем число строк

sgBooks. RowCount: =sgBooks. RowCount+1;

// заполняем добавленную строку данными о книге из массива записей

with sgBooks do begin

Cells [0,Number]: =IntToStr (Number);

Cells [1,Number]: =Book [i]. Name;

Cells [2,Number]: =Book [i]. Author;

Cells [3,Number]: =Book [i]. Issue;

Cells [4,Number]: =IntToStr (Book [i]. Year);

Cells [5,Number]: =IntTostr (Book [i]. Code);

end; // with sgBooks

end; // if

end; // for

// заполняем нулевую строку таблицы

with sgBooks do begin

cells [0,0]: ='Номер';

cells [1,0]: =' Наименование';

cells [2,0]: =' Автор';

cells [3,0]: =' Издание';

cells [4,0]: ='Год издания';

end; // with

// строка с информацией о количестве записей в таблице

lbNum. Caption: ='Количество книг: '+IntToStr (Number);

// если количество записей не равно нулю то открываем доступ к кнопкам

// Изменить, Удалить, Сохранить, Выбрать, Сортировать

if Number>0

then begin

bbtChange. Enabled: =True; miChange. Enabled: =True;

bbtDel. Enabled: =True; miDel. Enabled: =True;

bbtSave. Enabled: =True; miSave. Enabled: =True;

bbtChoice. Enabled: =True; miChoice. Enabled: =True;

bbtSaveReport. Enabled: =true; miSaveReport. Enabled: =True;

end // if

else begin // иначе - закрыть доступ

bbtChange. Enabled: =False; miChange. Enabled: =False;

bbtDel. Enabled: =False; miDel. Enabled: =False;

bbtSave. Enabled: =False; miSave. Enabled: =False;

bbtChoice. Enabled: =False; miChoice. Enabled: =False;

bbtSorting. Enabled: =False; miSorting. Enabled: =False;

bbtSaveReport. Enabled: =false; miSaveReport. Enabled: =false;

end; // else begin

if Number>1 // если в таблице больше одной записи

then begin

bbtSorting. Enabled: =True; // открываем доступ к кнопке Сортировать

miSorting. Enabled: =True;

end

else begin // иначе - закрываем

bbtSorting. Enabled: =False;

miSorting. Enabled: =False;

end;

end; // procedure

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

function TFmMain. CodeOfBook (Code: Integer): Integer;

// определение индекса в массиве записей по его полю записи-"код"

var

i: Integer; // индекс книги в массиве записей

begin

Result: =-1;

for i: =0 to Num-1 do

// если поле "код" данного элемента совпадает с искомым, то

if Book [i]. Code=Code then

Result: =i; // индекс этого элемента в массиве равен i

end; // function TFmMain. CodeOfBook

Чтобы отсортировать данные по названию книги, используется процедура TFmMain. SortingOfName. Она позволяет отобразить названия книг в таблице в алфавитном порядке.

procedure TFmMain. SortingOfName;

// сортировка по алфавиту

var

i,j: Integer; // переменные для реализации циклов

buf: tBook; // буфер обмена

begin

repeat

j: =0;

for i: =0 to Num-2 do

if Book [i]. Name>Book [i+1]. Name

then begin

buf: =Book [i];

Book [i]: =Book [i+1];

Book [i+1]: =buf;

j: =j+1;

end; // if

until j=0;

end; // procedure

Чтобы отсортировать данные по имени автора, используется процедура TFmMain. SortingOfAuthor.

procedure TFmMain. SortingOfAuthor;

// сортировка по имени автора

var

i,j: Integer;

buf: tBook;

begin

repeat

j: =0;

for i: =0 to Num-2 do

if Book [i]. Author>Book [i+1]. Author

then begin

buf: =Book [i];

Book [i]: =Book [i+1];

Book [i+1]: =buf;

j: =j+1;

end; // if

until j=0;

end; // procedure

Чтобы отсортировать данные по году издания, используется процедура TFmMain. SortingOfYear.

procedure TFmMain. SortingOfYear;

// сортировка по году издания

var

i,j: Integer; // перемнные для реализации цикла

buf: tBook; // буфер обмена

begin

repeat

j: =0;

for i: =0 to Num-2 do

if Book [i]. Year>Book [i+1]. Year

then begin

buf: =Book [i];

Book [i]: =Book [i+1];

Book [i+1]: =buf;

j: =j+1;

end; // if

until j=0;

end; // procedure

Для выбора данных с заданным критерием используется процедура TFmMain. Choice, которая осуществляет из массива записей выборку только тех книг, которые будут изданы после введённого пользователем года.

procedure TFmMain. Choice (Y: tYear; var Exist: Boolean);

// выбор книг, изданных после введенного года

var

i: Integer; // номер записи в массив записей

begin

Exist: =false;

for i: =0 to Num-1 do begin

if Book [i]. Year>Y // если книга издана после введённого года

then begin

Book [i]. Visible: =true; // запись о книге становится видимой

Exist: =true; // существует хотя бы одна книга, подходящая по параметру

DataChange: =true; // произошло изменение

end // then

else begin

Book [i]. Visible: =false; // запись о книге невидима

DataChange: =true; // произошло изменение

end; // else

end; // for i

end; // procedure TFmMain. Choice

3.9 Описание и реализация событий главной формы и ее компонентов

При создании главной формы fmMain заполняются фиксированные столбцы таблицы, являющиеся названиями полей записи о книге. Очевидно, что при запуске приложения число записей массива равно нулю, поэтому переменной Num присваивается значение 0, а создание формы не может привести к изменению массива, поэтому переменной DateChange присваивается значение False. Необходимо учесть, что элементы главного меню имеют свойство Hint, но автоматическая выдача кратких справок для них не реализована. Реализуется возможность выводить справку по элементу меню через свойство Hint объекта Application. В это свойство помещается значение свойства Hint компонента, для которого генерируется событие OnHint (когда компонент окажется под курсором мыши). В секции private описания класса формы fmMain помещается заголовок обработчика события OnHint: Procedure MenuHint (Sender: TObject). Обработчик события OnHint будет работать всякий раз, когда появится событие OnHint. Далее событию OnHint приложения Application присваивается указатель на созданный ранее обработчик MenuHint, что делается в обработчике события OnCreate создания формы fmMain приложения:

procedure TfmMain. FormCreate (Sender: TObject);

// создание главной формы

begin

// закрываем доступы к кнопкам Изменить Удалить Сохранить

// Выбрать Сортировать

bbtChange. Enabled: =False; miChange. Enabled: =False;

bbtDel. Enabled: =False; miDel. Enabled: =False;

bbtSave. Enabled: =False; miSave. Enabled: =False;

bbtSaveReport. Enabled: =False; miSaveReport. Enabled: =False;

bbtSorting. Enabled: =False; miSorting. Enabled: =False;

bbtChoice. Enabled: =False; miChoice. Enabled: =False;

Application. Title: ='Библиотека';

Application. OnHint: =MenuHint;

// заполнение нулевой строки таблицы sgBooks

with sgBooks do begin

cells [0,0]: ='Номер';

cells [1,0]: =' Наименование';

cells [2,0]: =' Автор';

cells [3,0]: =' Издание';

cells [4,0]: ='Год издания';

end; // with

Num: =0; // число записей равно 0

DataChange: =false; // изменений нет

end; // procedure TFmMain. FormCreate

Обработчик события, помещающий текст справки из свойства Hint приложения Application в свойство Text нулевой панели (нумерация начинается с 0) строки состояния StatusBar имеет вид:

procedure TfmMain. MenuHint (Sender: TObject);

// Обработчик события вывода краткой справки

begin

StatusBar. Panels [0]. Text: =Application. Hint;

end; // procedure TfmMain. MenuHint

Для вывода даты и времени используется обработчик события onTimer - процедура TFmMain. TimerTimer. Текущая дата выводится в первую панель статуса, а текущее время - во вторую панель статуса.

procedure TFmMain. TimerTimer (Sender: TObject);

// Обработчик события вывода даты и времени

begin

StatusBar. Panels [1]. Text: =DateToStr (Date);

StatusBar. Panels [2]. Text: =TimeToStr (Time);

end; // procedure TfmMain. TimerTimer

В случае нажатии кнопки "Загрузить" на главной форме, выполняется процедура TfmMain. bbtLoadClick, которая загружает данные из текстового файла. Далее полученная информация записывается в массив записей, а оттуда с помощью процедуры TfmMain. Output выводится в таблицу sgBooks. В случае если файл не подходит для загрузки (происходит ошибка конвертирования), то возникает исключительная ситуация EConvertError, и пользователь видит соответствующее сообщение об ошибке. При загрузке файла SpecialBooks. txt осуществляется работа с конфиденциальными данными - будет запрашиваться пароль.

Внешний вид процедуры таков

procedure TfmMain. bbtLoadClick (Sender: TObject);

// загрузка данных из текстового файла

var

i,Number: Integer;

Acess: Boolean; // доступ к файлу

begin

try

Acess: =True; // доступ к файлу открыт

// выбираем текстовый файл для загрузки

OpenDialog. Filter: ='Все файлы (*. *) |*. * |Текстовые файлы (*. txt) |*. txt';

OpenDialog. Title: ='Открытие файла;

OpenDialog. FilterIndex: =2;

if OpenDialog. Execute then

// если выбранный файл 'Special Books. txt'

if ExtractFileName (OpenDialog. FileName) ='Special Books. txt'

then begin

Acess: =False; // закрываем доступ к файлу

fmKey. ShowModal; // форма fmKey становится модальной

if fmKey. ModalResult=mrOk // если нажата кнопка OK

then begin

// пароль верный, открываем доступ

if fmKey. edKey. Text='778'

then Acess: =True

else ShowMessage ('Пароль не верный! ');

end; // if fmKey. edKey. Text

end; // if ExtractFileName

if Acess // если доступ открыт

then begin

ListOfStr: =TStringList. Create;

ListOfStr. LoadFromFile (OpenDialog. FileName);

Number: =0;

i: =0;

while i<ListOfStr. Count-1 do begin

with Book [Number] do begin

Code: =Number+1;

Name: =ListOfStr [i];

Author: =ListOfStr. Strings [i+1];

Issue: =ListOfStr. Strings [i+2];

Year: =StrToInt (ListOfStr. Strings [i+3]);

Inc (i,4);

Visible: =true;

Remote: =false;

end; // with

Number: =Number+1;

end; // while

ListOfStr. Clear; ListOfStr. Destroy;

Num: =Number+1;

Output;

end // if Acess

else if ListOfStr. Count-1 mod 4 <>0 then begin

raise Exception. Create ('Недопустимая структура файла);

end; // if ListOfStr. Count-1 mod 4 <>0

except // исключительная ситуация

on EConvertError do ShowMessage (' Данный файл#10#13'не может быть открыт! ');

on E: Exception do ShowMessage ('Недопустимая структура файла);

end; // try

end; // procedure TfmMain. bbtLoadClick

При нажатии кнопки "Сохранить" выполняется процедура TfmMain. bbtSaveClick, позволяющая сохранять информацию о книгах в текстовый файл. Сохраняются только те элменты массива, поля записей Remote и Visible которых равны соответственно False и True. В последующем данный файл можно загрузить, нажав кнопку "Загрузить".

procedure TfmMain. bbtSaveClick (Sender: TObject);

// Сохранение существующих данных

var

f: Textfile;

i: Integer;

begin

// выбираем текстовый файл для загрузки

SaveDialog. Filter: ='Все файлы (*. *) |*. * |Текстовые файлы (*. txt) |*. txt';

SaveDialog. Title: ='Сохранение файла';

SaveDialog. FilterIndex: =2;

if SaveDialog. Execute=true // если нажата кнопка Сохранить, тогда

then begin

i: =Pos ('. txt',SaveDialog. FileName);

// если у файла есть расширение. txt

if i>0

then AssignFile (f,SaveDialog. FileName)

else AssignFile (f,SaveDialog. FileName+'. txt');

Rewrite (f); // открываем файл для записи

for i: =0 to Num-1 do begin

// если данная запись не удалена и видима

if (Book [i]. Remote=false) and (Book [i]. Visible=true)

then begin

// записываем данную запись в текстовый файл

Writeln (f,Book [i]. Name);

Writeln (f,Book [i]. Author);

Writeln (f,Book [i]. Issue);

Writeln (f, IntToStr (Book [i]. Year));

end; // if

end; // for

CloseFile (f); // закрываем файл

end; // if

DataChange: =false; // все изменения сохранены

end; // procedure

При нажатии кнопки "Добавить" выполняется процедура TfmMain. bbtAddClick, которая создает новую запись о книге в файле записей и с помощью процедуры TfmMain. Output выводит её в таблицу sgBooks.

procedure TfmMain. bbtAddClick (Sender: TObject);

// Добавление новой записи

begin

with fmEdit do begin

Caption: ='Добавление новой записи;

bbtEditOK. Caption: ='Добавить';

bbtEditOK. Hint: ='Добавить новую запись;

edNameOfBook. Text: ='';

edAuthor. Text: ='';

edIssue. Text: ='';

edYear. Text: ='';

ShowModal;

if Result then begin // если нажата кнопка Добавить

Num: =Num+1; // число записей возрастает

// добавление в массив записей нового элемента

Book [Num-1]. Code: =Num;

Book [Num-1]. Name: =edNameOfBook. Text;

Book [Num-1]. Author: =edAuthor. Text;

Book [Num-1]. Issue: =edIssue. Text;

Book [Num-1]. Year: =StrToInt (edYear. Text);

Book [Num-1]. Remote: =false;

Book [Num-1]. Visible: =true;

// количество книг увеличивается

lbNum. Caption: ='Количество книг: '+IntToStr (Num);

Output; // вывод элементов массива записей в таблицу

DataChange: =true; // произошло изменение

end; // if

end; // with

end; // procedure

При нажатии кнопки "Изменить" выполняется процедура TfmMain. bbtChangeClick, которая с помощью процедуры TfmMain. CodeOfBook определяет номер выбранной записи, а затем пользователь имеет возможность изменить данную запись.

procedure TfmMain. bbtChangeClick (Sender: TObject);

// Изменение существующей записи

var

Number: Integer;

begin

with fmEdit do begin

Caption: ='Изменение существующей записи;

bbtEditOK. Caption: ='Изменить';

bbtEditOK. Hint: ='Изменить существующую запись;

Number: =CodeOfBook (StrToInt (sgBooks. Cells [5,sgBooks. Row]));

with Book [Number] do begin

edNameOfBook. Text: =Name;

edAuthor. Text: =Author;

edIssue. Text: =Issue;

edYear. Text: =IntToStr (Year);

end; // with

ShowModal; // форма становится модальной

if Result then begin // если нажата кнопка Изменить

// изменяем запись в массиве записей

Book [Number]. Name: =edNameOfBook. Text;

Book [Number]. Author: =edAuthor. Text;

Book [Number]. Issue: =edIssue. Text;

Book [Number]. Year: =StrToInt (edYear. Text);

Book [Number]. Remote: =false;

Book [Number]. Visible: =true;

Output; // вывод элементов массива записей в таблицу

DataChange: =true; // произошло изменение

end; // if

end; // with

end; // procedure

Нажатие кнопки "Удалить" запускает процедуру TfmMain. bbtDelClick, которая с помощью процедуры TfmMain. CodeOfBook определяет номер выбранной записи, а затем пользователь имеет возможность удалить данную запись. Причём перед удалением появляется окно с подтверждением удалить. После удаление удалённой записи в поле Remote присваивается значение true. Далее процедура TfmMain. Output выводит элементы массива записей в таблицу sgBooks, но уже без удалённой записи.

procedure TfmMain. bbtDelClick (Sender: TObject);

// Удаление выбранной записи

var

Number: Integer;

begin

if MessageDlg ('Удалить данную запись? ',mtWarning, mbYesNoCancel,0) =mrYes

then begin

Number: =CodeOfBook (StrToInt (sgBooks. Cells [5,sgBooks. Row]));

Book [Number]. Remote: =true;

Book [Number]. Visible: =true;

Output;

DataChange: =true; // произошло изменение

end;

end; // procedure

Нажатие кнопки "Выбрать" запускает процедуру TfmMain. bbtChoiceClick.

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

В зависимости от условий выборки данным обработчиком изменяются свойства Caption и Visible метки lbSorting и элементов массива записей.

procedure TfmMain. bbtChoiceClick (Sender: TObject);

// выборка данных

var

Exist: Boolean;

begin

with fmChoice do begin

edChoice. Text: ='1900';

ShowModal; // форма становится модальной

// если нажата кнопка OK

if ChoiceResult=true then begin

// обращаемся к процедуре Choice

Choice (StrToInt (edChoice. Text),Exist);

// если книг с данным параметром нет

if Exist=false

then begin

ShowMessage ('Таких книг нет! ');

Choice (1900,Exist); // выбираем все книги

end // then

else begin

lbSorting. Visible: =True;

// метка lbSorting видима

lbSorting. Caption: ='Книги, изданные после '+ fmChoice. edChoice. Text+ ' года';

end; // else

end; // with

Output;

end; // if

end; // procedure

Нажатие кнопки "Сортировать" запускает процедуру TfmMain. bbtSortingClick, которая предлагает пользователю три способа сортировки. В зависимости от выбранного способа после нажатия кнопки Сортировать выполняется одна из трёх процедур сортировки (TfmMain. SortingOfName, TfmMain. SortingOfAuthor, TfmMain. SortingOfYear). Далее с помощью процедуры TfmMain. Output отсортированные элементы выводятся на экран.

procedure TfmMain. bbtSortingClick (Sender: TObject);

// Сортировка по выбранному параметру

begin

// если нажата кнопка OK

if fmSorting. ShowModal=mrOK then begin

// если выбрана кнопка Сортировать по названию книги

if fmSorting. rbNameOfBook. Checked

then SortingOfName;

// если выбрана кнопка Сортировать по названию автора

if fmSorting. rbAuthor. Checked

then SortingOfAuthor;

// если выбрана кнопка Сортировать по году издания

if fmSorting. rbYear. Checked

then SortingOfYear;

Output; // вывод результатов в таблицу

DataChange: =true; // произошло изменение

end; // if

end; // procedure

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

procedure TfmMain. bbtSaveReportClick (Sender: TObject);

// Сохранение отчёта

var

i,j,Number: Integer;

s: String; // строка для выдачи отчёта

begin

with fmReporting do begin

mmReporting. Clear; // очистка поля mmReporting

// добавляем новую строку с заголовком

mmReporting. Lines. Add (' Библиотека');

if lbSorting. Visible=true then mmReporting. Lines. Add (lbSorting. Caption);

// выводим в поле многострочного редактора mmReporting заголовки таблицы

mmReporting. Lines. Add (Lin1);

mmReporting. Lines. Add (Lin2);

mmReporting. Lines. Add (Lin3);

// для всех элементов массива

Number: =0;

s: ='';

for i: =0 to Num-1 do begin

// если запись не удалена и видима

if (Book [i]. Remote=false) and (Book [i]. Visible=true) then begin

Number: =Number+1;

// формируем таблицу

s: ='|'+IntToStr (Number);

for j: =1 to w1-Length (IntToStr (Number)) do s: =s+' ';

s: =s+'|';

with Book [i] do begin

s: =s+Name;

for j: =1 to w2-Length (Name) do s: =s+' ';

s: =s+'|'+Author;

for j: =1 to w3-Length (Author) do s: =s+' ';

s: =s+'|'+Issue;

for j: =1 to w4-Length (Issue) do s: =s+' ';

s: =s+'|'+IntToStr (Year);

for j: =1 to w5-Length (IntToStr (Year)) do s: =s+' ';

s: =s+'|';

end; // with Book

mmReporting. Lines. Add (s);

end; // if

end; // for

mmReporting. Lines. Add (Lin3);

// выводим строку с числом книг

mmReporting. Lines. Add (' '+lbNum. Caption);

ShowModal;

if ModalResult=mrOK then begin

SaveDialog. Filter: ='Все файлы (*. *) |*. * |Текстовые файлы (*. txt) |*. txt';

SaveDialog. Title: ='Сохранение файла'; // заголовок окна SaveDialog

SaveDialog. FilterIndex: =2;

If SaveDialog. Execute then begin // если нажата кнопка OK

i: =Pos ('. txt',SaveDialog. FileName); // проверяем, есть ли в имени файла '. txt'

if i>0 then mmReporting. Lines. SaveToFile (SaveDialog. FileName)

// иначе - связываем файловую переменную с файлом + расширение

else mmReporting. Lines. SaveToFile (SaveDialog. FileName+'. txt');

ShowMessage ('Отчёт сохранён! ');

end; // if

end; // if ShowModal=mrOK

end; // with

end; // procedure TfmMain. bbtSaveReportClick

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

procedure TfmMain. FormCloseQuery (Sender: TObject; var CanClose: Boolean);

var

res: Integer; // переменная для результата диалога

begin

if DataChange=true then begin

res: =MessageDlg ('Сохранит изменения? ',mtWarning, mbYesNoCancel,0);

case res of

mrYes: fmMain. bbtSaveClick (fmMain);

mrCancel: begin CanClose: =False; end;

end; // case

end; // if

end; // procedure TfmMain. FormCloseQuery

Непосредственное закрытие формы осуществляется процедурой TFmMain. bbtCloseClick.

procedure TfmMain. bbtCloseClick (Sender: TObject);

// Закрыти формы

begin

Close;

end;

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

procedure TfmMain. miAboutClick (Sender: TObject);

// вывод справки

begin

AboutBoxHelp. ShowModal; // форма становится модальной

end;

procedure TfmMain.miloadClick (Sender: TObject);

// кнопка загрузки файла

begin

bbtLoadClick (Sender);

end;

procedure TfmMain. miSaveClick (Sender: TObject);

// кнопка сохранения файла

begin

bbtSaveClick (Sender);

end;

procedure TfmMain. miAddClick (Sender: TObject);

// кнопка добавления записи

begin

bbtAddClick (Sender);

end;

procedure TfmMain. miChangeClick (Sender: TObject);

// кнопка изменения записи

begin

bbtChangeClick (Sender);

end;

procedure TfmMain. miDelClick (Sender: TObject);

// кнопка удаления записи

begin

bbtDelClick (Sender);

end;

procedure TfmMain. miSaveReportClick (Sender: TObject);

// кнопка сохранения отчёта

begin

bbtSaveReportClick (Sender);

end;

procedure TfmMain. miSortingClick (Sender: TObject);

// кнопка сортировки

begin

bbtSortingClick (Sender);

end;

procedure TfmMain. miChoiceClick (Sender: TObject);

// кнопка выборки

begin

bbtChoiceClick (Sender);

end;

procedure TfmMain. miCloseClick (Sender: TObject);

// кнопка закрытия

begin

Close;

end;

3.10 Описание и реализация событий дополнительных форм и их компонентов

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

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

Процедуры TFmMain. bbtChangeClick и TfmMain. bbtAddClick вызывают появление формы fmEdit. В появившемся окне курсор по умолчанию установлен в окне однострочного редактора для ввода наименования книги. Это действие реализуется обработчиком TfmEdit. FormShow.

procedure TfmEdit. FormShow (Sender: TObject);

// отображение формы

begin

edNameOfBook. SetFocus;

end;

Для добавления (изменения) информации необходимо нажать кнопку OK. Обработчик события - нажатие на данную кнопку TfmEdit. bbtEditOKClick предусматривает обработку всевозможных исключительных ситуаций.

Если все данные введены соответствующим образом, переменной Result присваивается значение true, определяющее последовательность действий в дальнейшем.

procedure TfmEdit. bbtEditOKClick (Sender: TObject);

// обработчик нажатия на кнопку OK

begin

try

Result: =false;

if edNameOfBook. Text=''

then raise Exception. Create ('Отсутствует наименование книги! ');

if edAuthor. Text=''

then raise Exception. Create ('Отсутствует имя автора! ');

if edIssue. Text=''

then raise Exception. Create ('Год введён с ошибкой! ');

if (StrToInt (fmEdit. edYear. Text) <1900) or (StrToInt (fmEdit. edYear. Text) >2009)

then raise Exception. Create ('Год введён с ошибкой! ');

Result: =true;

except // обработка исключительных ситуаций

on E: EConvertError do begin

ShowMessage ('Год не введён! ');

fmEdit. edYear. SetFocus;

fmEdit. Close;

end;

on E: Exception do begin ShowMessage (E. Message);

edNameOfBook. SetFocus;

end; // try

end;

end; // procedure TfmEdit. bbtEditOKClick

3.10.2 Реализация событий формы пароля

При попытке работы с конфиденциальными данными программа запрашивает пароль. Процедура TFmParol. FormShow отображает форму для ввода пароля с очищенным окном редактирования и установленным фокусом ввода на это окно.

procedure TfmKey. FormShow (Sender: TObject);

// Отображение формы

begin

edKey. Text: ='';

edKey. SetFocus;

end; // procedure TfmKey. FormShow;

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

В разделе interface модуля Choice объявлена логическая переменная ChoiceResult, хранящая информацию о выбранном действии (добавить или отказаться). При нажатии на кнопку "Выбрать" управление передается обработчику TfmChoice. bbtChoiceOKClick. При работе данной процедуры возможно появление двух исключительных ситуаций: ошибки преобразования в функции StrToInt иjib,rb rjydthnbhjdfybz. Каждое из данных исключений имеет собственный обработчик. Если параметры выборки заданы корректно и исключительные ситуации не возникли, переменной ChoiceResult присваивается значение true.

procedure TfmChoice. bbtChoiceOKClick (Sender: TObject);

// Обработчик нажатия на кнопку OK

begin

try

ChoiceResult: =False;

if (StrToInt (fmChoice. edChoice. Text) <1900) or (StrToInt (fmChoice. edChoice. Text) >2009)

then raise Exception. Create ('Год введён с ошибкой! ');

ChoiceResult: =true;

except // обработка исключительных ситуаций

on E: EConvertError do begin

ShowMessage ('Год не введён! ');

fmChoice. edChoice. SetFocus;

fmChoice. Close;

end;

on E: Exception do begin

ShowMessage (E. Message);

fmChoice. edChoice. SetFocus;

end;

end; // try

end; // procedure

Нажатие на кнопку "Отказаться" обрабатывает процедура TfmChoice. bbtChoiceCancelClick. Форма закрывается, а переменной ChoiceResult присваивается значение false.

procedure TfmChoice. bbtChoiceCancelClick (Sender: TObject);

// Обработчик нажатия на кнопку Cancel

begin

ChoiceResult: =false;

fmChoice. Close;

end;

4. Текст программы

program Report;

uses

Forms,

Main in 'Main. pas' {fmMain},

Choice in 'Choice. pas' {fmChoice},

Sorting in 'Sorting. pas' {fmSorting},

Reporting in 'Reporting. pas' {fmReporting},

Key in 'Key. pas' {fmKey},

Helping in 'Helping. pas' {AboutBoxHelp},

Edit in 'Edit. pas' {fmEdit};

{$R *. res}

begin

Application. Initialize;

Application. CreateForm (TfmMain, fmMain);

Application. CreateForm (TfmChoice, fmChoice);

Application. CreateForm (TfmSorting, fmSorting);

Application. CreateForm (TfmReporting, fmReporting);

Application. CreateForm (TfmKey, fmKey);

Application. CreateForm (TAboutBoxHelp, AboutBoxHelp);

Application. CreateForm (TfmEdit, fmEdit);

Application.run;

end.

// Курсоавя работа. Приложение "Библиотека"

// Главнй модуль

// Выполнила Гришакина Ирина, группа 778.

unit Main;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Buttons, Menus, ExtCtrls, Grids, ComCtrls, XPMan;

const

w1=3; w2=25; w3=27; w4=17; w5=5; // размеры столбцоа таблицы

// вспомогательные строковые константы для оформления таблицы

type

tYear=1900.2009;

tBook=record // тип "Запись о книге"

Name: string [30]; // поле "Название"

Author: string [27]; // поле "автор"

Issue: string [17]; // поле "издание"

Year: tYear; // поле "год издания"

Code: Integer; // поле "Код книги"

Remote: Boolean; // поле - признак удаления

Visible: Boolean; // поле - признак видимости

end;

TfmMain = class (TForm)

bbtLoad: TBitBtn;

bbtSave: TBitBtn;

bbtAdd: TBitBtn;

bbtChange: TBitBtn;

bbtDel: TBitBtn;

bbtClose: TBitBtn;

lbNum: TLabel;

MainMenu: TMainMenu;

miFile: TMenuItem;

miEdit: TMenuItem;

miLoad: TMenuItem;

miSave: TMenuItem;

miLine1: TMenuItem;

miClose: TMenuItem;

miAdd: TMenuItem;

miChange: TMenuItem;

miDel: TMenuItem;

miHelp: TMenuItem;

miAbout: TMenuItem;

sgBooks: TStringGrid;

Timer: TTimer;

bbtSorting: TBitBtn;

bbtChoice: TBitBtn;

miService: TMenuItem;

miSorting: TMenuItem;

miChoice: TMenuItem;

StatusBar: TStatusBar;

OpenDialog: TOpenDialog;

lbSorting: TLabel;

SaveDialog: TSaveDialog;

bbtSaveReport: TBitBtn;

XPManifest: TXPManifest;

miSaveReport: TMenuItem;

miLine2: TMenuItem;

procedure FormCreate (Sender: TObject);

procedure FormCloseQuery (Sender: TObject; var CanClose: Boolean);

procedure bbtLoadClick (Sender: TObject);

procedure bbtSaveClick (Sender: TObject);

procedure bbtAddClick (Sender: TObject);

procedure bbtChangeClick (Sender: TObject);

procedure bbtDelClick (Sender: TObject);

procedure miLoadClick (Sender: TObject);

procedure miSaveClick (Sender: TObject);

procedure miAddClick (Sender: TObject);

procedure miChangeClick (Sender: TObject);

procedure miDelClick (Sender: TObject);

procedure miCloseClick (Sender: TObject);

procedure miAboutClick (Sender: TObject);

procedure Output;

function CodeOfBook (Code: Integer): Integer;

procedure Choice (Y: tYear; var Exist: Boolean);

procedure bbtSortingClick (Sender: TObject);

procedure bbtChoiceClick (Sender: TObject);

procedure bbtCloseClick (Sender: TObject);

procedure bbtSaveReportClick (Sender: TObject);

procedure TimerTimer (Sender: TObject);

procedure SortingOfName;

procedure SortingOfAuthor;

procedure SortingOfYear;

procedure miSaveReportClick (Sender: TObject);

procedure miSortingClick (Sender: TObject);

procedure miChoiceClick (Sender: TObject);

private

{ Private declarations }

procedure MenuHint (Sender: TObject);

public

{ Public declarations }

end;

var

fmMain: TfmMain;

Book: array [0.300] of tBook; // массив записей об одной книге

Num: Integer; // количество записей в массиве записей

ListOfStr: TStringList; // строки для промежуточного хранения данных

DataChange: Boolean; // возможное изменение

implementation

uses StrProc, Edit, Choice, Helping, Key, Reporting, Sorting;

{$R *. dfm}

procedure TfmMain. FormCreate (Sender: TObject);

// создание главной формы

begin

// закрываем доступы к кнопкам Изменить Удалить Сохранить

// Выбрать Сортировать

bbtChange. Enabled: =False; miChange. Enabled: =False;

bbtDel. Enabled: =False; miDel. Enabled: =False;

bbtSave. Enabled: =False; miSave. Enabled: =False;

bbtSaveReport. Enabled: =False; miSaveReport. Enabled: =False;

bbtSorting. Enabled: =False; miSorting. Enabled: =False;

bbtChoice. Enabled: =False; miChoice. Enabled: =False;

Application. Title: ='Библиотека';

Application. OnHint: =MenuHint;

// заполнение нулевой строки таблицы sgBooks

with sgBooks do begin

cells [0,0]: ='Номер';

cells [1,0]: =' Наименование';

cells [2,0]: =' Автор';

cells [3,0]: =' Издание';

cells [4,0]: ='Год издания';

end; // with

Num: =0; // число записей равно 0

DataChange: =false; // изменений нет

end; // procedure TFmMain. FormCreate

procedure TfmMain. FormCloseQuery (Sender: TObject; var CanClose: Boolean);

var

res: Integer; // переменная для результата диалога

begin

if DataChange=true then begin

res: =MessageDlg ('Сохранит изменения? ',mtWarning, mbYesNoCancel,0);

case res of

mrYes: fmMain. bbtSaveClick (fmMain);

mrCancel: begin CanClose: =False; end;

end; // case

end; // if

end; // procedure TfmMain. FormCloseQuery

procedure TfmMain. bbtLoadClick (Sender: TObject);

// загрузка данных из текстового файла

var

i,Number: Integer;

Acess: Boolean; // доступ к файлу

begin

try

Acess: =True; // доступ к файлу открыт

// выбираем текстовый файл для загрузки

OpenDialog. Filter: ='Все файлы (*. *) |*. * |Текстовые файлы (*. txt) |*. txt';

OpenDialog. Title: ='Открытие файла;

OpenDialog. FilterIndex: =2;

if OpenDialog. Execute then

// если выбранный файл 'Special Books. txt'

if ExtractFileName (OpenDialog. FileName) ='Special Books. txt'

then begin

Acess: =False; // закрываем доступ к файлу

fmKey. ShowModal; // форма fmKey становится модальной

if fmKey. ModalResult=mrOk // если нажата кнопка OK

then begin

// пароль верный, открываем доступ

if fmKey. edKey. Text='778'

then Acess: =True

else ShowMessage ('Пароль не верный! ');

end; // if fmKey. edKey. Text

end; // if ExtractFileName

if Acess // если доступ открыт

then begin

ListOfStr: =TStringList. Create;

ListOfStr. LoadFromFile (OpenDialog. FileName);

Number: =0;

i: =0;

while i<ListOfStr. Count-1 do begin

with Book [Number] do begin

Code: =Number+1;

Name: =ListOfStr [i];

Author: =ListOfStr. Strings [i+1];

Issue: =ListOfStr. Strings [i+2];

Year: =StrToInt (ListOfStr. Strings [i+3]);

Inc (i,4);

Visible: =true;

Remote: =false;

end; // with

Number: =Number+1;

end; // while

ListOfStr. Clear; ListOfStr. Destroy;

Num: =Number+1;

Output;

end // if Acess

else if ListOfStr. Count-1 mod 4 <>0 then begin

raise Exception. Create ('Недопустимая структура файла);

end; // if ListOfStr. Count-1 mod 4 <>0

except // исключительная ситуация

on EConvertError do ShowMessage (' Данный файл#10#13'не может быть открыт! ');

on E: Exception do ShowMessage ('Недопустимая структура файла);

end; // try

end; // procedure TfmMain. bbtLoadClick

procedure TfmMain. bbtSaveClick (Sender: TObject);

// Сохранение существующих данных

var

f: Textfile;

i: Integer;

begin

// выбираем текстовый файл для загрузки

SaveDialog. Filter: ='Все файлы (*. *) |*. * |Текстовые файлы (*. txt) |*. txt';

SaveDialog. Title: ='Сохранение файла';

SaveDialog. FilterIndex: =2;

if SaveDialog. Execute=true // если нажата кнопка Сохранить, тогда

then begin

i: =Pos ('. txt',SaveDialog. FileName);

// если у файла есть расширение. txt

if i>0

then AssignFile (f,SaveDialog. FileName)

else AssignFile (f,SaveDialog. FileName+'. txt');

Rewrite (f); // открываем файл для записи

for i: =0 to Num-1 do begin

// если данная запись не удалена и видима

if (Book [i]. Remote=false) and (Book [i]. Visible=true)

then begin

// записываем данную запись в текстовый файл

Writeln (f,Book [i]. Name);

Writeln (f,Book [i]. Author);

Writeln (f,Book [i]. Issue);

Writeln (f, IntToStr (Book [i]. Year));

end; // if

end; // for

CloseFile (f); // закрываем файл


Подобные документы

  • Обзор существующих объектных архитектур. Архитектура программного обеспечения. Создание веб-сервиса "Библиотека", предоставляющего механизмы работы с данными на стороне клиентского приложения. WEB-сервис и трехуровневая архитектура в основе приложения.

    лабораторная работа [1,5 M], добавлен 16.06.2013

  • Разработка приложений для смартфонов на ОС Android для сети аптек "Фармация". Архитектура операционной системы Android. Архитектура и реализация приложения. Его функциональность. Описание работы мобильного приложения. Расчет затрат на создание продукта.

    дипломная работа [1,6 M], добавлен 17.06.2017

  • Разработка и реализация демонстрационного многопоточного приложения. Выбор основных средств реализации. Описание логики работы приложения и разработка программного обеспечения. Описание пользовательского интерфейса. Реализация потоков в Delphi.

    курсовая работа [462,5 K], добавлен 10.08.2014

  • Описание процесса проектирования информационно–справочной системы с помощью среды разработки PascalABC.Net, ее использование для регистрации обращений в медицинское учреждение. Логическая структура программы, алгоритм ее работы, особенности интерфейса.

    курсовая работа [628,8 K], добавлен 07.06.2017

  • Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.

    курсовая работа [1,2 M], добавлен 16.08.2012

  • Реализация информационно-справочной системы на языке программирования C#. ее тестирование и отладка. Назначение, состав и структура программы "Адресная книга", описание операций. Программные и аппаратные требования к системе. Блок-схема и код программы.

    курсовая работа [709,5 K], добавлен 11.06.2019

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

    курсовая работа [1,2 M], добавлен 07.07.2012

  • Создание программного приложения для осуществления основных функций по заказу мебели, регистрации клиентов, сотрудничеству с поставщиками. Разработка интерфейса прикладной программы. Логическое проектирование базы данных и SQL-скрипт генерации таблиц.

    курсовая работа [2,4 M], добавлен 11.02.2013

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

  • Визуальная разработка приложений баз данных. Характеристика визуальных компонентов среды разработки Builder 6.0, используемых в данном приложении. Программная реализация приложения, разработка форм и вкладок. Тестирование приложения, листинг программы.

    курсовая работа [3,1 M], добавлен 28.03.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.