Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование delphi.doc
Скачиваний:
806
Добавлен:
09.02.2015
Размер:
2.97 Mб
Скачать

Индивидуальное задание

Модифицировать созданную программу для выполнения операции с текстом в зависимости от номера варианта:

  1. В считанном тексте подсчитать количество гласных символов.

  2. В считанном тексте подсчитать количество согласных символов.

  3. Заменить все гласные буквы в тексте на порядковые номера – «а»-1, «е»-2 и т. д.

  4. Добавить после каждого слова текста запятую.

  5. Подсчитать количество слов в тексте.

  6. Найти слово с максимальным соотношением согласные/гласные.

  7. Найти в тексте самое длинное слово.

  8. Подсчитать все знаки препинания в тексте.

  9. Найти в тексте самое длинное предложение.

  10. Выводить каждую строчку в обратном порядке.

  11. Выводить только нечетные слова текста.

  12. Выводить только четные слова текста.

  13. Подсчитать количество предложений в тексте.

  14. Выводить только те слова, длина которых больше введенного числа.

  15. Выводить только те строки, которые содержат введенную подстроку.

  16. Каждый символ, считываемый из файла, закодировать его кодом, после кода ставить знак «;».

  17. Выводить каждое считанное предложение с новой строки.

  18. Найти предложение с максимальным количеством слов.

  19. Удалить из текста введенный фрагмент строки.

  20. Заменить в тексте один введенный фрагмент на другой введенный фрагмент.

Итоги

В шестой теме были изучены: функции для работы со строками; функции для работы с текстовыми файлами; стандартные диалоговые окна.

При построении демонстрационной программы получены навыки использования новых компонентов: панели; кнопки быстрого доступа – «горячие кнопки»; главного меню окна; диалоговых окон – открытие файла и сохранение файла; элемента независимого выбора.

7. Работа с базами данных

Цель: создание составных типов данных; изучение оператора присоединения; работа с базами данных.

7.1. Теоретические сведения

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

Для представления подобной информации в языке Паскаль используется структура, которая носит название record (запись). С одной стороны, запись можно рассматривать как единую структуру, а с другой – как набор отдельных элементов, компонентов. Характерной особенностью записи является то, что составляющие её компоненты могут быть разного типа. Другая особенность состоит в том, что каждый компонент записи имеет имя. Итак, запись – это структура данных, состоящая из отдельных именованных компонентов разного типа, называемых полями. Объявление записи может быть двух типов: как новый тип данных для описания переменных этого типа, так и непосредственное описание переменной как запись. В общем виде описание выглядит так:

Имя = record

поле1 : тип1;

поле2 : тип2;

……

полеN : типN;

end;

где

Имя – имя переменной или типа «запись»;

поле1, …, полеNполя записи – имена переменных с указанием их типов (тип1,…, типN);

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

Пример

type

date = record

day : integer;

month : string[8];

year : integer;

end;

var

D : date;

C : record

hour : integer;

minute: integer;

end;

В примере объявлен тип date для описания даты и описаны две переменные: D – типа date и C – типа «запись» для описания времени.

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

Пример

student :record

name : string[15];

born : record

date : integer;

month : string [8];

year : integer;

end;

end;

В примере поле записи born является записью.

Для обращения к полю переменной типа «запись» необходимо указывать имя переменной и через точку имя поля.

Примеры

s.name := ‘Петров’;

s.born.day := 15;

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

with имя do операция,

где

имя – имя переменной типа «запись»;

операция – операции с полями записи.

Пример

Пусть d – переменная типа date для описания даты и требуется заполнить значения полей этой переменной:

with d do

begin

day := 15;

month := ‘Сентябрь’;

year := 2002;

end;

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

Пример

Пусть в разделе переменных описаны переменная d типа запись date для описания даты и переменная F : file of date – файл типа запись date. Требуется записать значение даты в файл и считать его (записать сразу всю запись, а считать только значение месяца):

with d do

begin

day := 15;

month := ‘Сентябрь’;

year := 2002;

end;

write(F,d); //Запись сразу всех полей записи

read(F,d.mounts); //Чтение значения месяца переменной d

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

Базы данных. В состав Delphi входят средства и компоненты для создания и работы с базами данных различных систем: от dBase до Informix и Oracle.

База данных (БД) – это набор однородной, как правило упорядоченной по некоторому критерию, информации. БД представляет собой файл (или набор файлов), состоящий из записей. Каждая запись содержит информацию об одном экземпляре данных. Например, запись из базы данных «студенты» содержит данные только об одном экземпляре – студенте. Записи состоят из полей. Каждое поле содержит информацию об одной характеристике экземпляра. Например, база данных «студенты» состоит из следующих полей: «Идентификационный номер», «Имя», «Дата рождения», «Пол», «Номер группы», «Признак иногороднего», «Стипендия», «Средний балл сессии», «Средний балл аттестата» – это имена полей. Содержание этих полей идентифицирует конкретного студента.

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

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

В Delphi можно предложить следующий порядок создания БД: создание папки; создание псевдонима; создание таблиц.

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

Создание псевдонима. Для создания псевдонимов (Alias) вместе с Delphi поставляется утилита BDE Administrator (значок программы ). Окно программы показано на рис. 7.1.

Слева представлены псевдонимы установленных на компьютере таблиц. Для создания нового псевдонима необходимо выбрать пункт «Object/New» и в появившемся окне выбрать драйвер доступа к данным создаваемой таблицы. Драйвер STANDARD обеспечивает доступ к данным таблиц в формате Paradox. После выбора драйвера надо изменить имя псевдонима, созданного по умолчанию (Standard), и указать путь нахождения файлов таблицы.

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

После создания псевдонима следует выбрать команду «Object/Apply» и подтвердить необходимость сохранения конфигурации.

Создание таблиц. Для создания таблицы сначала анализируются данные, которые необходимо хранить в БД. Можно использовать следующее правило: если предполагается, что при работе с программой будет производиться выборка информации по какому-то критерию, то информацию, обеспечивающую возможность этой выборки, следует поместить в отдельное поле. БД могут состоять как из одной таблицы (в простейшем случае), так и из нескольких таблиц, связанных между собой по некоторым полям (такие БД называются реляционными). После определения структуры БД можно приступить к созданию таблиц, используя утилиту «Database desktop» из папки программ Delphi, ярлык программы – . Эта утилита позволяет создавать и модифицировать БД различных форматов (Paradox, dBase, Microsoft Access и др.). Главное окно утилиты представлено на рис. 7.2.

Для создания новой таблицы необходимо выполнить пункт «File/New/Table». В окне (рис. 7.3) выбрать тип создаваемой БД (по умолчанию это Paradox 7) . В итоге появится окно создания новой БД (рис. 7.4).

Необходимо указать имя поля таблицы в ячейке «FieldName», затем в поле «Type» указать тип поля. Получить список доступных значений поля можно, нажав правую кнопку мыши. В демонстрационной программе будут использоваться следующие типы: Alpha (A) – символьные значения длиной до 255 символов (в скобках указано принятое сокращение); Number (N) – числовые значения с плавающей точкой в диапазоне –10307…+10308, точность до 15 значащих цифр; Money ($) – тип предназначен для хранения денежных сумм, число знаков после запятой по умолчанию – 2, при показе значения выводится знак денежной единицы; Date (D) – значения даты (в диапазоне от 01.01.9999 до н.э. до 31.12.9999); Autoincrement (+) – поле, значения которого изменяются автоматически, оно удобно для создания первичного ключа (см. далее). При использовании типаAlpha в ячейке Size следует указать максимально допустимый размер. Для каждого поля можно указать на обязательную необходимость заполнения его значения (поле ввода «Required Field»), минимально допустимое значение («Minimum Value»), максимально допустимое значение («Maximum Value»), значение по умолчанию («Default Value»), шаблон ввода значения (Picture), для построения которого можно воспользоваться мастером («Assist»).

Во избежании одинаковых данных в таблице одно из полей (или набор полей) должно носить уникальный характер. Такое поле (поля) называется первичным ключом таблицы (должно располагаться в начале списка полей) и обозначается символом «*» в поле «Key» (для назначения поля первичным ключом достаточно в поле Key нажать любую клавишу).

Заполнив значения всех ячеек для вводимого поля, можно перейти к вводу нового поля, нажав клавишу <«стрелка вниз»>. Для ввода поля выше введенного – нажать <Insert>, для удаления ошибочного поля – <Ctrl><Del>.

При сортировке значений таблицы по какому-то из полей или фильтрации поля по какому-то значению необходимо проиндексировать БД по этому полю, т. е. построить вторичный индекс таблицы. Для этих целей в поле «Table Properties» следует выбрать свойство «Secondary Indexes» и запустить мастера настройки, нажав на кнопку «Define». При этом будет выведено окно построения «вторичного индекса» (рис. 7.5.).

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

Рекомендация. Индекс следует называть, начиная со слова «Index», а затем перечислять поля, по которым он построен. В частности, в примере, показанном на рис. 7.5, индекс следует назвать, например, так: Index_Name_Sex – индекс по имени и полу.

Список всех построенных вторичных индексов будет показан в окне под кнопкой «Define». При необходимости индекс можно изменить (кнопка «Modify») или удалить – «Erase».

После создания таблицы её нужно сохранить на диске (кнопка «Save as») в папке, определенной псевдонимом для этой БД.

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

Элемент Table указывает на файл БД и содержит все настройки таблицы (индексные файлы, активность и т. д.). На элемент Table указывает элемент DataSource, который является связкой между элементом Table и всеми видимыми элементами, служащими для отображения полей таблицы.

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

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

Таблица.IndexName := Имя_индекса;

где

Таблица – имя таблицы БД;

Имя_индекса – имя требуемого для сортировки индекса.

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

Таблица.IndexName := Имя_индекса;

Таблица.SetRange([нзн1,нзнN],[кзн1,кзнN]);

здесь в первых квадратных скобках указываются начальные допустимые значения фильтрации по всем фильтруемым полям через запятую, во вторых квадратных скобках – допустимые конечные значения фильтрации (показан случай для поиска по двум значениям нзн1,нзнN и кзн1,кзнN).

Для отмены фильтрации необходимо выполнить команду:

Таблица.CancelRange;

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

Таблица.IndexName := Имя_индекса;

FindNearest([зн1,знN]);

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

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