Министерство образования Российской Федерации Алтайская Академия Экономики и Права
С.В. Бутаков
МЕТОДИЧЕСКИЕ УКАЗАНИЯ ...
15 downloads
189 Views
753KB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Министерство образования Российской Федерации Алтайская Академия Экономики и Права
С.В. Бутаков
МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ ПО КУРСУ «ВЫСОКОУРОВНЕВЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ» для студентов специальностей «Прикладная информатика в экономике» и «Прикладная информатика в юриспруденции» всех форм обучения
Барнаул 2002
2 УДК 519.8 Рецензент к.т.н., доцент каф. ИСЭ АлтГТУ Смолин Д.В.
Бутаков С.В. Методические указания к практическим работам по курсу «Высокоуровневые методы программирования» для студентов специальностей «прикладная информатика в экономике» и «прикладная информатика в юриспруденции» всех форм обучения / Алтайская Академия Экономики и Права – 58 с.
Рассмотрены темы занятий по курсу «Высокоуровневые методы программирования». Кратко приведены основные теоретические положения, касающиеся данных работ и передоложены варианты заданий студентам для самостоятельной работы.
Методические указания рекомендованы к изданию на заседании кафедры информационных технологий ААЭП.
3
ВВЕДЕНИЕ .................................................................................................. 4 ЛАБОРАТОРНАЯ РАБОТА № 1. ОСНОВЫ РАБОТЫ С BORLAND DELPHI. ................................................................................... 5 ЛАБОРАТОРНАЯ РАБОТА № 2. РАЗРАБОТКА ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ ПРОГРАММНОЙ СИСТЕМЫ............................ 17 ЛАБОРАТОРНАЯ РАБОТА № 3. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ОБРАБОТКИ СИМВОЛЬНЫХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ. ............................................................... 28 ЛАБОРАТОРНАЯ РАБОТА № 4. ОРГАНИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ ПРИКЛАДНОЙ ПРОГРАММЫ С БАЗОЙ ДАННЫХ.................................................................................................... 32 ЛАБОРАТОРНАЯ РАБОТА № 5. РАБОТА СО СВЯЗАННЫМИ ТАБЛИЦАМИ. .......................................................................................... 41 ЛАБОРАТОРНАЯ РАБОТА № 6. ОСНОВЫ ПРОГРАММИРОВАНИЯ В ОФИСНЫХ ПРИЛОЖЕНИЯХ. ......... 47 КОНТРОЛЬНЫЕ ВОПРОСЫ................................................................ 57 ЛИТЕРАТУРА ДЛЯ ПОДГОТОВКИ И ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ..................................................................... 58
4 •••••••• Цель настоящих лабораторных работ – получение студентами знаний и навыков по основам использования современных систем визуального программирования (на примере Borland Delphi и Visual Basic for Application), а также развитие и закрепление навыков разработки программ и алгоритмов. Практические занятия по данному курсу предусмотрены в объеме 34 часа. Общий план работ: 1. Изучение основ работы в среде Borland Delphi, разработка и отладка однооконной программы – 4 часа. 2. Разработка интерфейса пользователя программной системы – 8 часов. 3. Разработка алгоритмов, отладка и тестирование программ – 5 часов. 4. Работа с однотабличной базой данных – 4 часа. 5. Работа с несколькими таблицами – 4 часа. 6. Основы работы с Visual Basic for Applications – 9 часов.
5 •••••••••••• •••••• • 1. •••••• •••••• • Borland Delphi. Технические характеристики занятия Занятие предусмотрено объемом 4 часа (в компьютерном классе). На урок студент должен принести дискету 3,5". Цели занятия Ознакомиться со средой разработки Borland Delphi (в дальнейшем – Delphi), научиться создавать формы, добавлять на них компоненты, изменять их свойства. А также получить первоначальное представление об использовании отладчика. Задачи занятия • Изучить основные компоненты среды программирования Delphi. • Научиться создавать форму и размещать на ней компоненты. • Изучить основные типы файлов, входящих в проект. • Изучить окно установки свойств компонент, запомнить наиболее важные свойства компонент. • Научиться запускать программу. Ознакомиться с возможностями отладки и пошагового выполнения программ в Delphi. Указания по выполнению работы Среда Delphi 5 представляет собой интегрированную оболочку разработчика (IDE), в которую входит набор специализированных программ, ответственных за разные этапы создания готового приложения [1]. Компоненты главного окна приведены на Рис. 1. Каждый компонент имеет свое назначение: − Инспектор объектов (Object Inspector) – позволяет осуществлять доступ к свойствам и событиям компонентов. − Проектировщик форм – позволяет создавать внешний вид формы в визуальном режиме, а также добавлять в форму различные невидимые элементы. − Проводник – позволяет осуществлять быстрый переход между частями редактируемого текста в Редакторе. − Редактор – предназначен для создания и коррекции программного кода, обладает возможностями подсветки синтаксиса и ускорения ввода текста. − Панели компонентов – содержат основные элементы интерфейса программы, а также неотображаемые компоненты. Запомните назначение указанных элементов среды Delphi 5 !
6 Инспектор объектов
Проводник
Редактор
Панели компонентов
Проектировщик форм
Рис. 1. Основные компоненты среды разработчика Delphi
1. 2. 3.
Задание к выполнению Запустите Delphi 5: Пуск\Программы\Borland Delphi 5\Delphi 5. Определите расположение основных компонентов, указанных на Рис. 1. Соотнесите расположение данных компонентов на экране Вашего ПК с Рис. 1. Изучите панель инспектора объектов. На закладке Properties (Свойства) найдите строку Caption (Заголовок) и измените значение с Form1 на Лабораторная работа № 1 (Рис. 2). Обратите внимание, как изменился заголовок окна в проектировщике форм. Вывод: свойство Caption изменяет заголовок компонента (в нашем случае – окна).
7
1. Измените название здесь.
2. Обратите внимание на изменения в проектировщике форм.
Рис. 2. Изменение свойства Caption. 4. 5.
6.
7.
Измените свойство Caption, добавив к нему свою фамилию (например, Лабораторная работа № 1 Иванова И.И.). На той же закладке Properties для объекта TForm1 найдите свойство Color (оно устанавливает цвет формы). В открывшемся списке найдите значение clNone и установите его. Форма должна стать бесцветной. Попробуйте установить какой-либо другой цвет (устанавливать темные цвета не рекомендуется). Сохраните проект. Для этого нажмите кнопку (Save All). В появившемся окне сохраните файлы проекта в указанный преподавателем каталог (как правило, Ваш сетевой каталог). При сохранении файла проекта следует изменить имя с Project1 на английскую транскрипцию Вашей фамилии (например, Ivanov). Откройте какой-либо файловый менеджер (FAR, NC и пр.) и просмотрите содержимое папки, в которую Вы сохранили проект. В ней должны содержаться следующие типы файлов: файл основной программы проекта; − *.dpr файлы модулей; − *.pas файл ресурсов проекта; − *.res файл конфигурации проекта; − *.cfg − *.dfm файл описания формы; откомпилированные модули форм. − *.dcu
8
8.
Запишите имена файлов Вашей работы и просмотрите их содержание (клавиша F3). Запишите в какой папке и на каком диске сохранен Ваш проект! Разместите несколько различных компонентов на форме: 8.1. Компонент TButton. На панели компонентов, на закладке Standart найдите соответствующий компонент (см. Рис. 3) и нажмите на него. Далее щелкните мышью на форме и на ней должна появиться кнопка с названием Button1. Измените свойство Caption данной кнопки – в окне Инспектора объектов вместо Button1 впишите OK. Результат должен быть аналогичен Рис. 4. TPopupMenu TEdit выпадающее однострочный меню текст
TButton TComboBox выпадающий кнопка TButton список зависимый переключатель
TMemo TListBox многострочный список текст TCheckBox TLabel независимый текстовая метка переключатель
TMainMenu главное меню
Рис. 3. Панель компонентов "Стандартные"
1. Разместите кнопку на форме.
2. Измените свойство Caption
Рис. 4. Изменение надписи на кнопке
9 8.2. Самостоятельно добавьте на форму компоненты TLabel и TEdit (см. Рис. 3). Для компоненты TLabel установите свойство Caption - Введите Ваше имя, а для компоненты TEdit в свойство Text (это свойство отвечает за начальную инициализацию строки) впишите свое имя. Результат – см. Рис. 5.
Рис. 5. Образец формы.
9.
10.
11. 12. 13.
8.3. Для компонент TLabel и TEdit установите значение свойства Font (Шрифт): Courier, Полужирный. 8.4. Установите для этих компонентов значения свойств Color по своему выбору (устанавливать темные цвета не рекомендуется). Запустите созданную программу, нажав в главном окне Delphi в меню Run подпункт Run (или клавишу F9). Попробуйте вводить символы в строку ввода и нажимать кнопку ОК. Закройте окно программы, нажав кнопку закрытия окна в заголовке окна. Сохраните проект (см. п. 6 выше). Покажите Ваш проект преподавателю. Добавим функциональность в приложение. Нажмите два раза на кнопку ОК на форме в окне конструктора форм. В открывшемся окне редактора Delphi подготовит процедуру TForm1.Button1Click, которая предназначена для обработки нажатия на кнопку Button1. Между операторами begin … end процедуры впишите вызов процедуры вывода сообщений: Application.MessageBox('Привет', 'Сообщение', MB_OK); см. Рис. 6. Сохраните проект (см. п. 9 выше) и запустите его. Нажмите кнопку ОК и оцените, в какой момент происходит вызов окна сообщения. Измените заголовок окна сообщения на слово Запрос и текст сообщения на номер своей группы и свою фамилию. Сохраните проект (кнопка ), запустите его (клавиша F9) и продемонстрируйте результат преподавателю.
10
Рис. 6. Редактирование процедуры TForm1.Button1Click. 14. Перейдите в окно редактирования модуля Unit1, для этого в главном меню выберите пункт View, подпункт Window List …. В списке активных окон выберите нужное - Unit1.pas. Запомните данный способ перехода между окнами! Он необходим при работе с большими проектами! 15. Выделите слово MessageBox (Рис. 6) дважды щелкнув по нему мышью. Вызовите помощь по данной функции, нажав клавишу F1. В появившемся окне (Рис. 7. Выбор раздела справки.Рис. 7) выберите пункт TApplication.MessageBox (Visual Component Library Reference) и нажмите «Показать».
Рис. 7. Выбор раздела справки. 16. В справке указан вызов процедуры: function MessageBox(const Text, Caption: PChar; Flags: Longint): Integer; Обратите внимание на возвращаемые этой функцией значения (IDOK … IDNO). В частности запишите, что значения IDYES и IDNO будут возвращены, если пользователь нажал в диалоговом окне кнопки Да или Нет соответственно. Закройте справку. 17. В модуле Unit1 исправьте тип кнопок, заменив значение флага с MB_OK на MB_YESNO. Запустите приложение. Нажмите кнопку ОК, окно сообщения должно содержать две кнопки – «Да» и «Нет»
11 (Рис. 8). На данный момент внешний вид простого приложения фактически сформирован.
Рис. 8. Вид окна сообщения (кнопки "Да" и "Нет"). Цель дальнейшей работы над программой: Придадим кнопке ОК на форме функции кнопки выхода, а окно сообщения будет использоваться для подтверждения выхода. 18. Измените надпись на кнопке с «ОК» на «Выход» (измените свойство Caption, см. 8.1 выше). 19. Предполагаем, что в запросе на выход будем обращаться к пользователю по имени, введенном им в форме. То есть обращение к пользователю будет состоять из переменной части – имени, введенном в строке ввода и постоянной части вопроса. Измените процедуру TForm1.Button1Click следующим образом: procedure TForm1.Button1Click(Sender: TObject); var S1, S2:PChar; Size: Byte; begin S2:=', Вы действительно желаете закрыть программу?'; {записали постоянную часть строки запроса в буфер} Size := Edit1.GetTextLen+StrLen(S2)+1; {получили длину текстовой строки из поля ввода Text1} GetMem(S1, Size);
12 {отвели место в памяти под строку} Edit1.GetTextBuf(S1,Size); {получили строку (переменную часть вопроса) в буфер} StrCat(S1,S2); {объединили строки} Application.MessageBox(S1, 'Запрос', MB_YESNO); FreeMem(S1); {освободили память} end; 20. Отключите системные меню в форме. Для этого в свойстве BorderIcons формы Form1 измените свойство biSystemMenu в False (см. Рис. 9). 21. Отключите возможность изменения размеров окна. Для этого в свойстве BorderStyle формы Form1 установите значение bsSingle (см. Рис. 9). 22. Сохраните проект и запустите программу (см. п. 13 выше). Для завершения работы программы используйте функцию прерывания программы (пункты Run \ Program Reset главного меню). 1. Раскройте список свойств
2. Установите значение False
3. Установите значение bsSingle
Рис. 9. Установка свойств формы Form1. 23. Вспомните, что метод Application.MessageBox может возвращать различные значения, в зависимости от того, какая кнопка была нажата (см. п.16 выше) пользователем. Изменим процедуру Application.MessageBox заменив последние две строки следующими: if Application.MessageBox(S1, 'Запрос', MB_YESNO)=IDYES then begin close; {закрываем форму} FreeMem(S1); {освободили память}
13 end; FreeMem(S1); {освободили память} 24. Сохраните проект (кнопка ), запустите его (клавиша F9) и продемонстрируйте результат преподавателю. 25. Перейдите в окно проектировщика форм. Выберите однократным нажатием кнопку c надписью «Выход». В окне инспектора объектов (Object Inspector см. Рис. 1) откройте закладку Events (События). Обратите внимание, что заполнено поле только напротив события OnClick – действительно Вы обработали только событие нажатия на эту кнопку. Обработайте еще два события – OnMouseDown и OnMouseUp. 26. Дважды нажмите на пустое поле напротив события OnMouseDown (см. Рис. 10). 1. Дважды нажмите здесь в пустом поле 2. Дважды нажмите здесь в пустом поле
Рис. 10. Добавление обработчиков событий объекта. 27. В окне редактора впишите между операторами begin и end процедуры TForm1.Button1MouseDown оператор изменения цвета поля текстового ввода: Edit1.Color:=clWhite;. 28. Дважды нажмите на пустое поле напротив события OnMouseUp (см. Рис. 10). 29. В окне редактора впишите между операторами begin и end процедуры TForm1.Button1MouseUp оператор изменения цвета поля текстового ввода: Edit1.Color:= clAqua;. Результат редактирования – см. Рис. 11 . 30. Сохраните проект (кнопка ), запустите его (клавиша F9) и продемонстрируйте результат преподавателю. 31. Изучите основы отладки программ. Для этого откройте в редакторе текст процедуры TForm1.Button1Click и нажмите один раз левую
14 кнопку мыши слева от оператора StrCat(S1,S2); (см. Рис. 12), должна появиться красная точка. Этот оператор будет точкой останова при выполнении программы.
Рис. 11. Текст процедур Button1MouseDown Button1MouseUp.
и
1. Один раз нажмите здесь для установки точки останова 2. Подведите указатель мыши для отображения значения переменной S2. 3. Нажмите клавишу Insert для добавления переменных в список просмотра.
Рис. 12. Работа с отладчиком. 32. Запустите программу и нажмите кнопку «Выход». Выполнение программы прервется на строке, где Вы поставили точку останова (breakpoint). Подведите указатель мыши к символам S2 для отображения значения переменной S2 (Рис. 12). Попробуйте подвести указатели мыши к другим переменным (S1, Size).
15 33. Откройте окно просмотра значений переменных (Watch List). Для этого в главном меню выберите пункты Run \ Add Watch …(Рис. 12). Продолжите пошаговое выполнение программы: нажмите F8 (Run \ Step Over). Обратите внимание на то, как изменилось значение переменной S1. Продолжите выполнение программы, нажав F9. Продемонстрируйте результат преподавателю.
1. 2. 3. 4. 5. 6.
После выполнения задания к выполнению Вам необходимо знать: Порядок запуска среды Borland Delphi. Порядок изменения свойств формы в инспекторе объектов. Назначение свойств Caption, Color, BorderStyle. Порядок редактирования событий. Порядок получения данных из элементов формы. Общие приемы работы с отладчиком.
Самостоятельная работа. Создайте новый проект (File \ New … \ Application). Сохраните проект под именем lab1b в Вашу папку. Создайте форму с компонентами в соответствии с Вашим вариантом (см. табл. 1). Кроме указанных в варианте на форме обязательно должны быть одна или несколько компонент TLabel. Указанные обработчики событий должны выполнять какие – либо действия, из перечисленных ниже: − изменять цвет (компонент, форм, текста и т.д.); − вызывать диагностические сообщения; − вносить изменения в свойство Caption других компонентов и всей формы. 4. Для формы Form1 выполните обработку события OnClose (закрытие формы) – запросите у пользователя подтверждение на закрытие формы. 5. Сохраните проект (кнопка ), запустите его (клавиша F9) и продемонстрируйте результат преподавателю. 6. Составьте отчет по лабораторной работе № 1 и представьте его к защите. 1. 2. 3.
16 Таблица 1. Варианты заданий к лабораторной работе № 1.
Образец
№
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Компонента 1 TEdit
События Компоненты 1 Задание к выполнению (см. выше)
Компонента 2 TButton
События Компоненты 2 OnClick OnMouseDown OnMouseUp
TEdit
OnEnter
TCheckBox
OnMouseMove
TEdit TRadioGroup TMemo TMemo TRadioGroup TScrollBar TEdit TRadioGroup TEdit TComboBox TMemo TListBox TMemo TListBox
OnMouseMove OnExit OnExit OnKeyDown OnEnter OnChange OnExit OnExit OnExit OnKeyPress OnEnter OnDblClick OnExit OnClick
TRadioButton TMemo TRadioGroup TEdit TMemo TRadioGroup TListBox TEdit TComboBox TMemo
OnEnter OnKeyDown OnEnter OnExit OnKeyPress OnExit OnDblClick OnExit OnKeyPress OnExit OnKeyPress OnEnter OnEnter OnEnter
TMemo TComboBox TComboBox
17 •••••••••••• •••••• • 2. •••••••••• •••••••••• •••••••••••• ••••••••••• •••••••. Технические характеристики занятия Занятие предусмотрено объемом 8 часов (в компьютерном классе). Цели занятия Приобрести практические навыки разработки оконного программного интерфейса. Закрепить навыки отладки и документирования программного обеспечения. Задачи занятия • Изучить наборы компонентов «Additional», «Win32» и «Dialogs». • Отработать технологию передачи данных между окнами приложения. • Научиться работать со стандартными диалогами Windows. Указания по выполнению работы Многооконное приложение в среде Delphi 5 представляет собой набор форм, взаимодействующих между собой и, как правило, с некоторым набором данных (которые хранятся в оперативной или дисковой памяти). Основная задача данной работы – изучить технологию передачи данных между несколькими формами. Условным примером будет служить программа – ежедневник. Основные задачи: − записать, удалить или отредактировать событие; − просмотреть список событий; 1. 2. 3.
4.
Задание к выполнению Запустите Delphi 5: Пуск\Программы\Borland Delphi 5\Delphi 5. Создайте новый проект. Сохраните его в папку, указанную преподавателем под именем Lab2. На первой форме расположим главное меню приложения. На панели компонент Standard выберите компоненту TMainMenu и расположите ее на форме. Дважды нажмите на ней левую кнопку мыши. В меню верхнего уровня создайте два пункта: Файл и Событие. В меню Файл создайте подпункты Сохранить, Загрузить и Выход. В меню События создайте подпункты Добавить, Удалить и Корректировать (см. Рис. 13). Нажмете два раза на подпункт Выход созданного главного меню. В открывшейся процедуре TForm1.N5Click напишите оператор close. Запросите у пользователя подтверждение на выход из программы, для этого обработайте событие закрытия формы (событие OnClose для
18 формы Form1). Нажмите на событие OnClose в инспекторе объектов и далее клавишу F1. Изучите справку по событию OnClose и обратите внимание, что если возвращаемая переменная Action примет значение caNone, то форма не будет закрыта. Следовательно, если пользователь не подтвердит закрытие формы, то в обработчике события OnClose необходимо выполнить присвоение переменной Action значения caNone. Напишите обработчик. Результат – см. Рис. 14.
А
Б
Рис. 13. Создание главного меню приложения. 5.
Запустите программу. Проверьте работу написанного Вами обработчика, попробовав закрыть форму через главное меню окна или через меню Файл \ Выход.
Рис. 14. Процедура TForm1.FormClose. 6.
Отключите возможность пользовательского изменения размера экрана. Для этого у формы Form1 установите свойство BorderIcons \ biMaximize в false и BorderStyle в bsSingle.
19 7.
Создайте еще одну новую форму (File \ New Form). Для первой формы (Form1) запишите в свойство Caption – Ежедневник (Фамилия Автора), а для второй (Form2) – Просмотр Событий. 8. На панели компонент выберите дополнительные компоненты (закладка Additional). Разместите на форме Form2 компоненту TBitBtn. Установите для нее свойство в Kind значение bkОК – это будет кнопка закрытия формы. Разместите на форме Form2 еще одну такую же кнопку. Установите у нее свойство в Kind значение bkCancel – это будет кнопка закрытия формы. Исправьте надпись на кнопке с «Cancel» на «Отмена». 9. Перейдите в конструкторе форм к форме Form1 и в главном меню нажмите на пункт События \ Добавить. В процедуре TForm1.N6Click впишите оператор модального вызова второй формы: Form2.ShowModal; (модальный вызов означает, что в данном приложении активным может быть только модально вызванное окно). Здесь же, в тексте первого модуля (Unit1) перейдите выше в раздел Uses и допишите там: Unit2. Это необходимо для того, чтобы из первой формы мы могли вызывать вторую. 10. Отключите возможность пользовательского изменения размера и закрытия окна формы Form2 (скорректируйте свойства BorderIcons и BorderStyle у формы Form2). 11. Сохраните, запустите проект и проверьте его работу. 12. Разместите на форме Form1 компоненту TStringGrid (набор компонент Additional). Установите для нее свойства ColCount – 3, RowCount – 1, FixedCols – 0, FixedRows – 0, DefaultRowHeight – 16, Options \ goRangeSelect – false, Options \ goRowSelect. Возможный вид формы приведен на Рис. 15.
Рис. 15. Вид формы Form1. 13. Сформируйте заголовок таблицы событий. Для этого в обработчике событий OnCreate формы Form1 (это событие генерируется при создании формы) запишите заголовок в таблицу следующими операторами:
20 StringGrid1.cells[0,0]:='Дата'; StringGrid1.cells[1,0]:='Время'; StringGrid1.cells[2,0]:='Событие'; 14. 15. − − −
Сохраните, запустите проект и проверьте его работу. Разместите на форме Form2 компоненты (см. Рис. 16): две компоненты TLabel (надписи Время и Событие), TMemo, TMonthCalendar и TDateTimePicker (закладка Win32 панели компонент).
Рис. 16. Вид формы Form2. 16. Скорректируйте процедуру TForm1.N6Click в модуле Unit1 следующим образом: procedure TForm1.N6Click(Sender: TObject); begin if Form2.ShowModal=mrOK then {если Form2 закрыта кнопкой OK} begin StringGrid1.RowCount:=StringGrid1.RowCount+1; {увеличить число строк в таблице} StringGrid1.cells[0,StringGrid1.RowCount-1]:= DateToStr(Form2.MonthCalendar1.Date); {получить дату из Form2} StringGrid1.cells[1,StringGrid1.RowCount-1]:= TimeToStr(Form2.DateTimePicker1.Time);
21 {получить время из Form2} StringGrid1.cells[2,StringGrid1.RowCount-1]:= Form2.TMemo1.Text; {получить текст события из Form2} StringGrid1.FixedRows:=1; end; end;
17. Сохраните, запустите проект и проверьте его работу. Ежедневник должен заполняться записями. 18. Организуйте удаление записей. Организация удаления записей будет организована в соответствии со схемой, представленной на Рис. 17.
Строка 1 Строка 2 Строка 3 Строка 4 Строка 5 Строка 6 Строка 7 Строка 8
Удаляемая строка АЛГОРИТМ 1. Переместить строки 6-8 на одну вверх. 2. Удалить пустую строку на месте 8-й строки
Рис. 17. Схема удаления строк. 19. Зайдите в процедуру, вызываемую по нажатию пункта События \ Удалить (TForm1.N7Click) и скорректируйте следующим образом: procedure TForm1.N7Click(Sender: TObject); var i: integer; begin for i:=StringGrid1.Row to StringGrid1.RowCount-1 do StringGrid1.Rows[i]:=StringGrid1.Rows[i+1]; if StringGrid1.RowCount>1 then StringGrid1.RowCount:=StringGrid1.RowCount-1; end;
20. Сохраните, запустите проект и проверьте его работу. 21. Следующий этап создания программы – коррекция событий в ежедневнике. Для этого перед вызовом формы Form2 необходимо присвоить начальные значения ее полям из редактируемой строчки. Далее – аналогично добавлению. Зайдите в процедуру, вызываемую по нажатию пункта События \ Корректировать (TForm1.N8Click) и скорректируйте следующим образом:
22 procedure TForm1.N8Click(Sender: TObject); begin if StringGrid1.Row<>0 then {если в таблице более 1 строки} begin Form2.TMemo1.Text:= StringGrid1.cells[2,StringGrid1.Row]; Form2.MonthCalendar1.Date:= StrToDate(StringGrid1.cells[0,StringGrid1.Row]); Form2.DateTimePicker1.Time:= StrToTime(StringGrid1.cells[1,StringGrid1.Row]); if Form2.ShowModal=mrOK then {если Form2 закрыта кнопкой OK} begin StringGrid1.cells[0,StringGrid1.Row]:= DateToStr(Form2.MonthCalendar1.Date); StringGrid1.cells[1,StringGrid1.Row]:= TimeToStr(Form2.DateTimePicker1.Time); StringGrid1.cells[2,StringGrid1.Row]:= Form2.TMemo1.Text; end; end; end;
22. Сохраните, запустите проект и проверьте его работу. 23. Последний этап работы – сохранять и считывать файлы. 24. Сохранять результаты работы будем в типизированный файл следующей структуры: DateS - string [8] дата; TimeS - string [5] 1 – е событие время; EvenS - string [200] событие; DateS - string [8] дата; 2 – е событие и TimeS - string [5] время; т.д. EvenS - string [200] событие; 25. В начало модуля Unit1 в раздел Type после описания класса формы TForm1 добавьте описания типов записи и файла, как это показано на Рис. 18. 26. Зайдите закладку Диалоги (Dialogs) на панели компонент. Добавьте на форму Form1 два диалога: TSaveDialog и TLoadDialog. 27. Откройте процедуру, выполняемую по нажатию пункта Файл \ Сохранить - TForm1.N3Click. Измените ее в соответствии с Рис. 19.
23
Рис. 18. Объявление типов записи и файла.
Рис. 19. Текст процедуры записи в файл. 28. Сохраните, запустите проект и проверьте его работу. Добавьте в ежедневник несколько событий и сохраните результат. Откройте создан-
24 ный Вами файл какой – либо программой просмотра (например F3 в Far). Попробуйте найти фрагменты сохраненного Вами события. 29. Откройте на редактирование процедуру, выполняемую по нажатию пункта Файл \ Загрузить - TForm1.N4Click. Измените ее в соответствии с Рис. 20.
Рис. 20. Процедура чтения событий из файла . 30. Сохраните, запустите проект и проверьте его работу. 31. Измените свойства компонент TSaveDialog и TLoadDialog как показано на . 32. Для компоненты StringGrid1 формы Form1 выберите событие OnDblClick и из выпадающего списка выберите N8Click. Таким образом, по двойному нажатию на элемент списка будет происходить то же самое, что и при нажатии пункта меню Событие \ Корректировать. 33. Сохраните, запустите проект и проверьте его работу.
25
1. 2. 3. 4. 5. 6.
После выполнения задания к выполнению Вам необходимо знать: Порядок создания основных элементов приложения – меню и диалоговых форм. Методы написания обработчиков событий различных типов. Порядок передачи данных между формами. Работу с типизированными файлами. Технологию работы со стандартными диалогами и компонентами Win32 Порядок получения справочной информации по свойствам и методам.
1. 2. 3. 4. 5.
Самостоятельная работа. Создайте новый проект (File \ New … \ Application). Сохраните проект под именем lab2b в Вашу папку. Разработайте программу, в соответствии с Вашим заданием (см. табл. 2). Обязательная особенность заданий – возможность сохранения и загрузки результатов работы. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 2 и представьте его к защите. Таблица 2
№
Варианты заданий к лабораторной работе № 2. Наименование Задание варианта Ежедневник
1.
Библиотека
2.
Видеотека
3.
Учет VIP клиентов магазина
Ежедневник должен позволять вести список событий (добавлять, удалять, корректировать). Вести список книг в библиотеке (номер, наименование, автор, число экземпляров, число выданных экземпляров), при выдаче и приеме книг корректировать соответствующие значения. Вести список видеокассет в видеотеке (номер, наименование, режиссер, жанр, главные актеры, выдана ли на руки и если да, то кому), при выдаче и приеме кассет корректировать соответствующие значения. Вести список VIP клиентов магазина (номер карты, Фамилия, Размер скидки, Общая сумма покупок), при вводе новой покупки выбирать клиентов из списка и добавлять сумму.
26 №
Наименование варианта
4.
Учет разрешений на сдачу экзаменов в деканате
5.
Учет доходов и расходов физического лица
6.
Агентство недвижимости
7.
Химчистка
8.
Картотека граждан
9.
Картотека автомагазина
10.
Картотека угнанных автомобилей
11.
Учет времени пребывания
12.
Учет рабочего времени
Задание Список лиц, которым выданы разрешения (номер разрешения, дата, дата сдачи, ФИО, группа, предмет). В списке при возврате разрешения должна фиксироваться оценка и дата сдачи. Программа должна считать средний балл по списку. Список доходов / расходов (вид – доход / расход, наименование, сумма, дата). Программа должна считать общую сумму доходов и расходов, а также их разницу. Список объектов недвижимости, выставленных на покупку или продажу (Наименование, вид – покупка / продажа, дата, сумма, сделка – состоялась / не состоялась, когда и сумма сделки). Программа должна считать сумму по объектам, выставленным к покупке / продаже, а также вводить сделки – дату и сумму. Список вещей, сданных в работу (номер, наименование, ФИО клиента, дата, дата исполнения, сумма, оценка, данная клиентом). Программа должна выдавать списки по вещам сданным и полученным клиентом, корректировать список при выдаче заказа. Список физических лиц (ФИО, адрес, номер паспорта (если есть), кем и когда выдан). Программа должна выдавать списки по гражданам с паспортом и без, корректировать список при выдаче паспорта. Список автомобилей (номер, марка, цена, продан или нет, кому и когда, сумма сделки). Программа должна выдавать списки проданных и непроданных автомобилей, с указанием сумм. Список автомобилей (номер, марка, дата угона, дата обнаружения, место угона, место обнаружения). Программа должна выдавать списки угнанных и найденных автомобилей с вычислением отношения угнано / найдено. Список работников (ФИО, № пропуска, дата входа на территорию, время входа, дата и время выхода с территории, время пребывания). Программа должна при записи выхода позволять выбор работников из списка и вычислять время пребывания на территории, выдавать список сотрудников, находящихся на территории. Список работников (ФИО, дата и время начала работы, дата и время окончания работы, количество отра-
27 №
Наименование варианта
13.
Путевые листы
14.
Отдел кадров
15.
Регистратура
Задание ботанного времени). При записи окончания работы выбор должен осуществляться из списка. Программа должна вычислять часы, отработанные сотрудником, выдавать список сотрудников, работавших в заданный оператором день. Программа должна вести список выданных путевых листов (номер листа, ФИО водителя, номер машины, дата, маршрут – откуда и куда, протяженность в км, груз). Программа должна выдавать список листов за дату, список листов с протяженностью более заданной, определять общую протяженность пробега всех автомобилей за день. Список работников (ФИО, номер контракта, даты начала и окончания контракта, оклад, стаж, уволен – да / нет). При увольнении выбор должен осуществляться из списка. Программа должна определять работников с истекшей датой контракта, вычислять ежемесячную потребность в заработной плате, выдавать общий список сотрудников. Программа должна вести список направлений к врачу (ФИО больного, дата, время, ФИО врача, посетил – да / нет). Программа должна выдавать списки больных, которые не посетили врачей в определенную даты, определять общее число больных в определенную дату.
28 •••••••••••• •••••• • 3. •••••••••••••••• •••••••••• ••••••••• •••••••••• •••••••••••••••••••. Технические характеристики занятия Занятие предусмотрено объемом 4 часа (в компьютерном классе). Цели занятия Приобрести навыки работы с символьными последовательностями. Задачи занятия • Закрепить знания по структурированию и программированию вычислительных алгоритмов. • Отработать технологию отладки алгоритмов в среде Delphi. • Повторить организацию взаимодействия форм в прикладной программе. Указания по выполнению работы Среда программирования Borland Delphi 5 предоставляет широкие возможности построения сложных алгоритмов и обеспечивает программиста всеми необходимыми средствами отладки программного обеспечения. В данной работе необходимо будет разработать алгоритмы обработки текстовых данных, а также запрограммировать и отладить их. В качестве начального примера рассмотрим подсчет количества определенного символа в тексте. Этапы работы: − разработать алгоритм (в методических указаниях данный этап пропущен в силу его несложности); − разработать интерфейс программы (набор форм); − отладить алгоритм обработки символьной последовательности. Следует коротко отметить, что элемент ввода текста – TMemo строки содержит свойство Lines типа TStrings. Доступ к содержимому компонента TMemo осуществляется через это свойство. Доступ к отдельным строкам текста осуществляется через массив Lines.Strings[], а доступ к содержимому TMemo как к тексту - через свойство Lines.Text. 1. 2. 3.
Задание к выполнению DelЗапустите Delphi 5: Пуск\Программы\Borland phi 5\Delphi 5. Создайте новый проект. Сохраните его в папку, указанную преподавателем под именем Lab3. Создайте две формы по образцу, представленному на Рис. 21.
29 4. 5.
Форма больших размеров будет вызываться при запуске программы, а вторая форма – при нажатии кнопки «Подсчет!!!» после выполнения алгоритма подсчета символов. Перейдите к редактированию процедуры TForm1.Button1Click. При нажатии кнопки необходимо подсчитать сколько раз указанный символ входит во введенный текст и далее передать это число в форму отображения результатов.
Рис. 21. Формы для лабораторной работы № 3. 6.
Подсчет количества символов будем производить по следующему алгоритму: найти первое вхождение искомого символа в строке, увеличить счетчик, сократить строку до этого первого вхождения. Повторять операцию до тех пор, пока не кончится строка. Текст процедуры подсчета: procedure TForm1.Button1Click(Sender: TObject); var st :string; i,j:integer; begin j:=0; st:=self.memo1.Lines.Text; if(length(self.Edit1.Text)=0 ) then {проверяем не пустая ли строка с искомым символом} begin Application.MessageBox('Введите искомый символ','Предупреждение',MB_OK); exit; end; i:=pos(self.Edit1.Text[1],st); {определяем позицию искомого символа} while (i>0) do begin
30 inc(j); {увеличиваем счетчик} st:=copy(st,i+1,length(st)-i); {вырезаем строку} i:=pos(self.Edit1.Text[1],st); end; form2.Label1.Caption:='Количество искомых символов - ' +inttostr(j); form2.showmodal; {Запустить форму отображения результатов} end;
7.
Сохраните, запустите проект и проверьте его работу.
1. 2. 3. 4.
После выполнения задания к выполнению Вам необходимо знать: Порядок создания основных элементов диалоговых окон. Методы доступа к данным формы. Порядок поиска необходимой информации в справочной системе. Порядок передачи данных между формами. 1. 2. 3.
4. 5.
Самостоятельная работа. Создайте новый проект (File \ New … \ Application). Сохраните проект под именем lab3b в Вашу папку. Разработайте программу, в соответствии с Вашим заданием (см. табл. 3). Обратите внимание, что если в задании говорится о словах, то имеются в виду последовательности любых символов, разделенные пробелами (например, текст «арлвр привет л122лмри» содержит три слова). доле символа, то имеется в виду отношение количества вхождений символа в слово к общему числу символов в слове (например, доля символа «а» в словах «мама» и «мармелад» составляет 0,5 и 0,25 соответственно). Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 3 и представьте его к защите. Таблица 3
№ при мер
Варианты заданий к лабораторной работе № 2. Задание Найти количество вхождений определенного символа в текст
31 № 1. 2. 3. 4. 5. 6. 7. 8. 9.
10. 11.
12. 13. 14. 15. 16. 17. 18. 19. 20.
Задание Дан текст, определить в нем количество слов и долю заданного пользователем символа в каждом слове. Дан текст, определить в нем количество слов начинающихся с заданного пользователем символа. Дан текст, найти все слова, в которых заданный пользователем символ встречается не менее чем заданное число раз. Дан текст, найти все слова, в которых заданный пользователем символ встречается наибольшее число раз. Дан текст, найти слова, которые встречаются в тексте более одного раза. Дан текст, найти слова, начинающиеся и заканчивающиеся одним символом Дан текст, найти все слова, оканчивающиеся тем же символом, с которого начиналось слово с номером, заданным пользователем. Дан текст, найти в нем все слова не содержащие букв из последнего слова. Дан текст, заменить в нем все вхождения заданной пользователем подстроки на ее «перевертыш». Например, есть текст «Двоечник опять получил двойку». Пользователь задает подстроку «дво», и в результате получаем «Овдечник опять получил овдйку». Дан текст, найти все слова, которые не содержат одинаковых символов. Например, для текста «Мама мыла раму» это два последних слова. Дан текст, заменить в нем все вхождения заданной пользователем подстроки на другую заданную пользователем подстроку. Например, есть текст «Двоечник опять получил двойку». Пользователь задает подстроки «дво» и «тро», и в результате получаем «Троечник опять получил тройку». Дан текст, для каждого слова определить, сколько раз оно встречается в тексте. Дан текст, напечатать все различные слова. Дан текст, найти все слова, начинающиеся с того же символа, которым заканчивалось слово с номером, заданным пользователем. Дан текст, удвоить вхождение заданной пользователем подстроки. Например, был текст «Привет, как дела?». Пользователь задал подстроку «е» и получаем: «Привеет, как деела?». Дан текст, напечатать символы, которые встречаются в тексте один раз. Дан текст, для каждого слова с нечетной длиной удалить средний символ. Дан текст, удалить из него подстроки, находящиеся между символами «(« и «)». Дан текст, удалить из него заданную пользователем последовательность символов. Дан текст, определить есть ли в нем симметричные слова и если да, то напечатать их (например, слова «Алла» и «wwwRwww» являются симметричными).
32 •••••••••••• •••••• • 4. ••••••••••• •••••••••••••• •••••••••• ••••••••• • ••••• ••••••. Технические характеристики занятия Занятие предусмотрено объемом 4 часа (в компьютерном классе). Цели занятия Приобрести практические навыки организации взаимодействия приложения с однотабличной базой данных. Задачи занятия • Изучить наборы компонентов «Data Access», «ADO» и «Data Controls». • Отработать технологию дополнения, удаления и коррекции записей в таблице. • Закрепить навыки организации взаимодействия форм. Указания по выполнению работы Среда программирования Borland Delphi 5 представляет максимально широкие возможности организации взаимодействия пользователя с базами данных. Данное взаимодействие осуществляется по схеме, приведенной на Рис. 22 . Следует отметить, что база данных может быть использована несколькими приложениями. Приложение
BDE
Компоненты ADO
Драйвер ODBC
Другое приложение
БД
Другое приложение
Рис. 22. Взаимодействие приложения с БД. Для многих баз данных в BDE и в ADO предусмотрены свои собственные драйверы, позволяющие обходиться без ODBC. В данной работе взаимодействие с базой данных будем строить через компоненты ADO
33 (ActiveX Data Objects) – технология Microsoft для доступа не только к базам данных, но и многим другим объектам. Как и в работе № 2 задачей будет разработка простейшего ежедневника. Этапы работы: − создать базу данных при помощи MS-Access; − организовать работу приложения с данной базой данных. Задание к выполнению 1. Запустите MS-Access: Пуск\Программы\Microsoft Access. 2. Выберите Создание базу данных \ Новая база данных. 3. Укажите папку для создания базы данных Lab4 на Вашем диске, имя базы данных db1.mdb. 4. Далее выберите Создание таблицы в режиме конструктора. 5. Создайте таблицу следующего вида: Имя поля Тип данных Формат DateS Дата/время Краткий формат даты FromTime Дата/время Краткий формат времени ToTime Дата/время Краткий формат времени Comment Поле МЕМО Phone Текстовый 30 символов Имя таблицы установите MainData, ключевые поля не задавайте и введите в нее три записи, как показано на Рис. 23.
Рис. 23. Таблица MainData. 6. 7.
8.
Закройте MS-Access. DelЗапустите Delphi 5: Пуск\Программы\Borland phi 5\Delphi 5. Создайте новый проект. Сохраните его в папку Lab4 на Вашем диске под именем Lab4. Для эффективной работы с данными следует создать специальный модуль данных (Data Module) – File / New / Data Module. В данный модуль, на закладку Components добавьте компоненту ADOTable из группы компонент ADO (Рис. 24).
34 9.
В свойстве ConnectionString компоненты ADOTable вызовите диалог формирования строки соединения (Connection String) и нажмите в нем Built…, далее укажите тип данных - Microsoft Jet OLE DB Provider (драйвер для доступа к базам данных MS-Access) - Рис. 25. На закладке Connection в первой строке впишите db1.mdb (имя Вашей базы данных). Протестируйте соединение, установите флажок Blank Password и закройте диалог.
Рис. 24. Создание модуля данных. 10. Также установите для ADOTable1 следующие свойства: Active – True, TableName –MainData.
Рис. 25. Настройка свойств соединения с БД. 11. Для организации отображения данных следует включить в модуль данных (DataModule2) еще одну компоненту – Источник данных (Data Source), он находится на закладке Data Access панели компонент. Установите для него в свойстве DataSet значение ADOTable1.
35 Компонента DataSource служит передаточным звеном между базой данных и элементами их отображения. 12. Перейдите к редактированию модуля Unit1 и в разделе Uses добавьте Unit2 – т.к. созданный модуль данных будет использоваться в форме Form1. 13. Разместите на форме Form1 компоненту DBGrid (закладка Data Controls). Установите ее свойство DataSource в DataModule2.DataSource1. В результате на форме должна быть таблица с открытой в ней БД (Рис. 26).
Рис. 26. Вид формы Form1 с размещенной на ней компонентой TDBGrid. 14. Для компоненты DBGrid1 зайдите в редактор свойства Columns, добавьте в таблиц пять колонок и изменяя у них свойство Title \ Caption сформируйте заголовки. Кроме того, удалите колонку, соответствующую полю Comment (Рис. 27).
Рис. 27.Установка заголовков колонок.
36 15. Добавьте на форму Form1 компоненту TDBMemo. Установите для нее свойства DataSource = DataModule2.DataSource1 и DataField = Comment. 16. В модуле данных нажмите на правую кнопку на элементе Fields, входящем в DataSource1 (Рис. 28). Выберите пункт Add all fields.
Рис. 28. Настройка элемента Fields. 17. Для полей FromTime и ToTime установите в свойстве DisplayFormat значение hh:nn (часы:минуты). 18. Добавьте на форму Form1 главное меню с пунктами Файл (Выход), Поиск (По дате, По Телефону, Сброс фильтра) и Событие (Добавить, Удалить, Редактировать). 19. Добавьте в форму Form1 обработку подтверждения о выходе из программы и установите неизменяемый размер у этой формы. 20. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. Пример результата – см. Рис. 29.
Рис. 29. Пример формы Form1.
37 21. Создайте форму для ввода и редактирования записей по образцу, приведенному на Рис. 30. Создав новую форму, впишите в ее раздел Uses модуль Unit2 (напомним, что это модуль данных). Для строк ввода используйте компоненту TDBEdit (закладка Data Controls) и установите для них свойство DataField требуемое поле БД.
Рис. 30. Форма ввода / коррекции событий. 22. Общая схема работы с данной формой представления на Рис. 31. В соответствии с этой схемой скорректируйте процедуру обработки нажатия пункта меню Событие \ Добавить следующим образом: procedure TForm1.N7Click(Sender: TObject); begin {добавили запись в таблицу} DataModule2.Adotable1.Insert; {устанавливаем значения дат и времени в новой записи} DataModule2.Adotable1.FieldByName('DateS').Value:= Date(); DataModule2.Adotable1.FieldByName('FromTime').Value:= Date(); DataModule2.Adotable1.FieldByName('ToTime').Value:= Date(); if Form3.ShowModal=mrOK then {фиксируем изменения} DataModule2.ADOTable1.Post else {удаляем запись} DataModule2.ADOTable1.Delete; end;
38 Выбран пункт меню «Добавить»
Выбран пункт меню «Редактировать»
Добавить пустую запись в таблицу Открыть форму редактирования текущей записи (Form3) Да
Нет
Открыть форму редактирования текущей записи (Form3) Да
«ОК» ? Зафиксировать изменения в таблице
Удалить добавленную запись из таблицы
Нет «ОК» ?
Зафиксировать изменения в таблице
Завершить
Завершить
Рис. 31. Алгоритм процедур добавления и корректировки записей. 23. Скорректируйте процедуры обработки нажатия пунктов меню Событие \ Удалить и Событие \ Корректировать следующим образом: procedure TForm1.N8Click(Sender: TObject); // Событие / Удалить begin {Удаление записи} DataModule2.ADOTable1.Delete; end; procedure TForm1.N9Click(Sender: TObject); // Событие / корректировать begin if Form3.ShowModal=mrOK then {фиксируем изменения} DataModule2.ADOTable1.Post else DataModule2.ADOTable1.Cancel; end;
39 24. Сохраните, запустите проект и проверьте его работу. Добавьте несколько записей в таблицу MainData. Откройте базу данных db1.mdb в MS-Access и посмотрите на внесенные изменения. 25. Обработайте пункты меню «Поиск» формы Form1 путем установки фильтров на таблицу. Для этого создайте еще две формы по образцам, представленным на Рис. 32.
Рис. 32. Формы для установки фильтров (Form4 и Form5). 26. Впишите в модуле Unit1 в разделе Uses модули Unit4 и Unit5. Сформируйте обработчики событий меню Поиск: procedure TForm1.N5Click(Sender: TObject); begin // Фильтруем по дате if Form4.ShowModal=mrOK then begin with DataModule2.ADOTable1 do begin Filter := 'DateS='+ DateToStr(Form4.MonthCalendar1.Date); Filtered := True; end end; end; procedure TForm1.N6Click(Sender: TObject); // Фильтруем по телефону begin if Form5.ShowModal=mrOK then begin with DataModule2.ADOTable1 do
40 begin Filter := 'Phone = '+Form5.Edit1.Text; Filtered := True; end end; end; procedure TForm1.N10Click(Sender: TObject); // снимаем фильтры begin DataModule2.ADOTable1.Filter := ''; DataModule2.ADOTable1.Filtered := False; end;
27. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю.
1. 2. 3. 4. 5. 6.
После выполнения задания к выполнению Вам необходимо знать: Порядок создания модулей данных. Назначение и свойства основных компонент доступа к данным. Назначение и свойства основных компонент отображения данных. Методы написания добавления и удаления записей таблицы. Технологию установки фильтров на таблицы и их снятия. Порядок получения справочной информации по свойствам и методам.
1. 2. 3. 4. 5.
Самостоятельная работа. Создайте новый проект (File \ New … \ Application). Сохраните проект под именем lab4b в Вашу папку. Разработайте программу, в соответствии с Вашим заданием (см. лаб. работу № 2, табл. 2). Обязательная особенность заданий – возможность поиска записей по основным полям. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 4 и представьте его к защите.
41 •••••••••••• •••••• • 5. •••••• •• •••••••••• •••••••••. Технические характеристики занятия Занятие предусмотрено объемом 4 часа (в компьютерном классе). Цели занятия Приобрести практические навыки организации работы приложения со связанными таблицами базы данных. Задачи занятия • Изучить понятие справочника. • Отработать технологию связывания таблиц базы данных. • Закрепить навыки работы с базами данных. Указания по выполнению работы В данной работе будут рассмотрены базы данных со связанными таблицами. Наиболее распространенным отношением таблиц является отношение «один ко многим». На Рис. 33 показан пример такого отношения – между двумя таблицами – «Контрагенты» и «Документы». При взаимодействии с одним контрагентом формируется несколько документов, но полные реквизиты контрагента хранятся только в одной записи, а таблицы связаны по коду контрагента. Контрагенты код Наименование 001 ОАО «Бета» 002 ООО «Гамма» … …
Адрес пр-т Ленина пр-т Мира …
Документы код Дата 001 11/02/2002 001 15/02/2002 001 20/04/2002 002 11/03/2002 002 18/04/2002 … …
Сумма 3510-00 4400-00 3800-00 5500-00 7700-00 …
ИНН 22… 54… …
Рис. 33. Пример отношения «один ко многим».
НДС 690 400 345 500 700 …
42 В приведенном примере таблица «Контрагенты» может выступать в качестве справочника для заполнения таблицы «Документы» - при вводе нового документа наименование контрагента можно выбрать из списка. В данной работе взаимодействие с базой данных также будем строить через компоненты ADO. Как и в предыдущей работе, задачей будет доработка ежедневника. Этапы работы: − добавить таблицу – справочник в базу данных при помощи MS-Access; − организовать работу приложения со справочником и заполнение ключевых полей основной таблицы из справочника. 1. 2. 3.
4.
Задание к выполнению Скопируйте созданную Вами в предыдущей работе базу данных ежедневника (db1.mdb) в новую папку Lab5 на Вашем диске. Запустите MS-Access: Пуск\Программы\Microsoft Access. Откройте базу данных db1.mdb из папки Lab5. Добавьте в базу данных новую таблицу Person следующей структуры: Code − Счетчик Family − Текстовый Name − Текстовый Post − Текстовый Phone − Текстовый Добавьте в таблицу Person несколько записей (Рис. 34).
Рис. 34. Таблица Person. 5.
6.
Модифицируйте таблицу MainData, добавив в нее поле PersCode (формат – числовой, число десятичных знаков – 0). Внесите в это поле различные целые числа от 1 до 4. Таким образом, Вы получили две таблицы, связанные по коду персоны с которой назначается встреча. Скопируйте файлы из каталога Lab4 в каталог Lab5. Запустите Delphi 5: Пуск\Программы\Borland Delphi 5\Delphi 5. От-
43
7.
кройте проект Lab4 и сохраните его как Lab5. Запустите проект и проверьте его работоспособность. Перейдите к форме DataModule2. Добавьте на нее компоненты ADOTable и DataSource. Для ADOTable2 настройте строку подключения (ConnectionString) к базе данных db1.mdb и укажите в поле TableName таблицу Person Рис. 35.
Рис. 35. Настройка модуля DataModule2. 8.
Свяжите таблицу Person с таблицей MainData. Для этого в свойстве MasterSource установите источник данных DataSource1 и настройте строку соединения таблиц MasterFields как показано на Рис. 36.
Рис. 36. Настройка установки связи между таблицами. 9.
Для источника данных DataSource2 установите набор данных ADOTable2. Сделайте активным соединение в таблице ADOTable2.
44 10. На форму Form1 добавьте строку редактирования поля базы данных (компонента TDBEdit) и установите для нее в качестве источника данных DataModule2.DataSource2 и в качестве отображаемого поля (DataField) – поле Family. Запретите редактирование данной строки (ReadOnly= True). 11. Запустите проект, проверьте его работоспособность – в окне просмотра событий, при передвижении по списку событий должно изменяться содержимое добавленной строки – должна отражаться строка с фамилией из справочника Person. 12. Создайте форму редактирования справочника – Form6 по образцу, представленному на Рис. 37. На ней размещены компоненты TDBGrid и TDBNavigator.
Рис. 37. Форма редактирования справочника. 13. Для того, чтобы таблицу Person можно было корректировать отредактируйте процедуры активизации и закрытия формы, как это показано на Рис. 38. Это необходимо для того, чтобы при редактировании таблицы Person отключаться от главной таблицы для обеспечения возможности редактирования строк. 14. На первой форме в меню «Файл» добавьте пункт «Справочник фамилий» и добавьте в него вызов формы Form6. 15. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. 16. Скорректируйте форму ввода \ коррекции события (Form3), добавив в нее возможность выбора участника события из справочника. 17. Для создания поля с возможностью выбора значения из справочника следует создать так называемое поле LookUp. Добавьте на форму Form3 компонент TDBLookupComboBox.
45
Рис. 38. Текст процедур активации и закрытия формы. 18. Установите для TDBLookupComboBox следующие свойства: DataSource- DataModule2.DataSource1; DataField – PersCode; ListSource DataModule2.DataSource2; ListField – Family; KeyField – Code. 19. В результате Вы должны в форме Form3 менять значения поля, хранящего код контрагента выбирая его фамилию из списка. Фактически, при смене кода в первой таблице отображается другое поле из второй таблицы – справочника. Примерный результат – см. .
Рис. 39. Установка значения поля через поле LookUp.
46 20. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю.
1. 2. 3. 4. 5.
После выполнения задания к выполнению Вам необходимо знать: Назначение и свойства основных компонент доступа к данным. Назначение и свойства основных компонент отображения данных. Методы написания добавления и удаления записей таблицы. Технологию установки фильтров на таблицы и их снятия. Порядок получения справочной информации по свойствам и методам.
1. 2. 3. 4. 5. 6.
Самостоятельная работа. Создайте новый проект (File \ New … \ Application). Сохраните проект под именем lab5b в Вашу папку. Создайте в Вашей базе данных таблицу – справочник. Разработайте программу, в соответствии с Вашим заданием (см. лаб. работу № 2, табл. 2). Обязательная особенность заданий – возможность выбора значений в таблице из справочника. Сохраните, запустите проект и проверьте его работу. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 5 и представьте его к защите.
47 •••••••••••• •••••• • 6. •••••• •••••••••••••••• • ••••••• •••••••••••. Технические характеристики занятия Занятие предусмотрено объемом 9 часов (в компьютерном классе). Цели занятия Приобрести практические навыки программирования в офисных приложениях. Задачи занятия • Изучить понятие макроса. • Изучить основы языка программирования Visual Basic for Application. • Отработать технологию передачи данных между переменными макроса и документа. • Закрепить навыки работы с офисными приложениями. Указания по выполнению работы Данная работа посвящена изучению средств программирования в офисных приложениях. Языком программирования для MS-Office служит язык Visual Basic for Application (VBA). Фактически этот язык – это язык Visual Basic, содержащий средства работы с различными документами, например документами MS-Word, книгами MS-Excel, таблицами MSAccess. Как правило, программы на VBA оформляются в виде набора макрокоманд – макросов. В задачи данной работы входит получить общее представление о создании макросов, будут рассмотрены вопросы создания макросов в MS-Word и MS-Excel. 1. 2. 3.
4.
Задание к выполнению – часть 1 Скопируйте созданную Вами базу данных ежедневника (db1.mdb) в новую папку Lab6 на Вашем диске. Запустите MS-Word: Пуск\Программы\Microsoft Word. Нажмите на панели инструментов на правую кнопку мыши и вызовите панель инструментов Visual Basic (Рис. 40). Нажмите на ней кнопку Элементы управления. Выберите элемент Кнопка и разместите его в документе. Нажмете на вновь созданной кнопке на правой кнопке мыши и вызовите окно свойств. Измените в нем заголовок кнопки с CommandButton1 на Привет. Нажмите на кнопку Выход из режима конструктора. Попробуйте нажать на кнопку Привет, обратите внимание, что при этом происходит. Сохраните документ под именем Doc1 в папку Lab6 на Вашем диске. Вновь перейдите в режим конструктора и нажмите дважды на созданную кнопку. Должен открыться редактор VBA и в нем новая процеду-
48 ра: Private Sub CommandButton1_Click(). Впишите в нее следующий текст: Dim MyVar MyVar = MsgBox ("Привет!", vbOKOnly+ vbInformation, "Сообщение")
Рис. 40. Вызов панели инструменов Visual Basic.
Рис. 41. Изменение свойств кнопки. 5. 6.
Перейдите в окно документа не закрывая редактора , сохраните документ, выйдите из режима конструктора и попробуйте вновь нажать на кнопку Привет. Перейдите в редактор, измените строку текста сообщения следующим образом: "Привет от " + ActiveDocument.Name. Вызовите эту
49
7.
процедуру нажатием на кнопку Привет. Таким образом, мы рассмотрели, как может генерироваться событие в документе по нажатию кнопки. Однако для объекта Документ (Document) существуют еще три основных события – New, Close и Open. Дальнейшая задача – автоматизировать создание адресных писем. При загрузке документа – письма будем запрашивать пользователя, на чье имя он желает отослать письмо, причем имя адресата будем выбирать из базы данных ежедневника (таблица Person). Общий алгоритм работы данного офисного документа представлен на Рис. 42. Открыть док-т нет
Изменить адресата ?
да Получить список фамилий из БД Вывести список фамилий
нет Отмена выбора ?
да
Занести выбранную фамилию в документ Конец Рис. 42. Алгоритм открытия документа. 8.
Удалите из документа кнопку Button1. Наберите в нем текст «Уважаемый ___, Вам назначена встреча с менеджером по кадрам компании Новый Век». На место символов ___ добавьте элемент Надпись (Label) с панели инструментов «Элементы управления». Перейдите в редактор VBA. Добавьте в проект форму (Insert \ User Form). Добавь-
50 те на форму элемент Label, элемент ComboBox и два CommandButton (Рис. 43).
Рис. 43. Форма ввода фамилии адресата. 9.
В редакторе VBA выберите объект ThisDocument. На панели быстрого перехода выберите объект Document и его событие Open и скорректируйте его, как показано на Рис. 44. Также добавьте объявление переменных, как это показано на верхней части рисунка (см. Рис. 44). Переменная strFamily будет служить для передачи фамилии адресата в документ, а переменная blnCancelled будет флагом, указывающим, какой кнопкой закрыт диалог.
Рис. 44. Процедура обработки события открытия документа и объявление глобальных переменных. 10. Сохраните документ. Закройте и вновь откройте его. Должно быть вызвано диалоговое окно UserForm1. 11. Перейдите в редактор форм и, дважды нажав на кнопки OK и Отмена, вызовите процедуры, выполняемые по нажатию на эти кнопки. Впишите в них операторы установки флага и закрытия формы, как это показано на Рис. 45. 12. Повторите п. 10. Список в элементе ComboBox пустой. Необходимо его инициализировать. Инициализация производится при инициализации самой формы UserForm1. Она выполняется в два этапа – во пер-
51 вых устанавливается соединение с базой данных, а во вторых из базы данных получить значения требуемого столбца. 13. Перейдите в редактор текста и воспользовавшись строками быстрого перехода перейдите к редактированию процедуры Initialize формы UserForm1 (Рис. 46).
Рис. 45. Обработчики событий для кнопок CommandButton1 и CommandButton2.
Рис. 46. Вызов процедуры инициализации формы. 14. Скорректируйте процедуру инициализации, как показано ниже:
52 Private Sub UserForm_Initialize() ThisDocument.blnCancelled = True ' устанавливаем начальное положение флага Dim rstAuthors As ADODB.Recordset ' переменная для набора данных Dim Cnxn As ADODB.Connection ' переменная для соединения Set Cnxn = New ADODB.Connection ' создали объект для соединения с БД src = "x:\lab6\db1.mdb" ' установили путь к БД sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & src ' сформировали строку соединения Cnxn.Open sConnStr ' открыли соединение Set rstAuthors = New ADODB.Recordset ' создали объект набора данных strSQLAuthors = "SELECT * from Person" ' создали строку запроса rstAuthors.Open strSQLAuthors, Cnxn, adOpenStatic, adLockReadOnly ' получили данные в набор Do Until rstAuthors.EOF ' пока не конец файла strAuthorID = rstAuthors!Family ' получили поле Family из записи ComboBox1.AddItem strAuthorID ' добавили строку в ComboBox1 rstAuthors.MoveNext ' перешли к следующей записи Loop rstAuthors.Close ' закрыли набор данных Cnxn.Close ' закрыли соединение Set rstAuthors = Nothing Set Cnxn = Nothing ComboBox1.ListIndex = 0 ' установили начальное значение в ComboBox1 End Sub
15. Теперь необходимо скорректировать процедуру открытия документа (Document_Open()) для того, чтобы инициировать диалог с “помощником” при открытии документа. В данной процедуре сначала инициируется новый помощник и обрабатывается диалог с ним:
53 Private Sub Document_Open() With Assistant .Visible = True .Animation = msoAnimationGreeting End With With Assistant.NewBalloon .Heading = "Начало работы" .Text = "Создать новое письмо" .Button = msoButtonSetOkCancel .Mode = msoModeModal .Parent.Visible = False If .Show = msoBalloonButtonOK Then UserForm1.Show If blnCancelled = True Then MsgBox "Действие отменено!", vbExclamation Else ThisDocument.Label1.Caption = strFamily End If End If .Close End With End Sub
16. Сохраните документ, закройте и вновь откройте его. Протестируйте работоспособность Вашего приложения. Продемонстрируйте его преподавателю.
1. 2. 3.
После выполнения задания к выполнению Вам необходимо знать: Технологию создания, запуска и коррекции в офисных приложениях процедур, написанных на языке VBA. Назначение основных объектов и событий. Методы получения значений из полей базы данных в документ MSWord. 1. 2. 3.
Самостоятельная работа. Создайте новый документ MS-Word. Сохраните его под именем lab6a в Вашу папку. Впишите в нем текст по смыслу соответствующий Вашему заданию на лабораторную работу № 5. Организуйте вставку в Ваш документ не менее двух полей из таблиц Вашей базы данных, созданной Вами в предыдущих работах.
54 4. 5. 1. 2.
Протестируйте работоспособность Ваших макросов. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 6-а и представьте его к защите.
Задание к выполнению – часть 2 Запустите MS-Excel: Пуск\Программы\Microsoft Excel. Нажмите на панели инструментов на правую кнопку мыши и вызовите панель инструментов Visual Basic. Нажмите на ней кнопку Элементы управления. Выберите элемент Кнопка и разместите его в на первом листе книги в диапазоне ячеек A1:B2 (Рис. 47).
Рис. 47. Размещение кнопки на листе книги. 3.
4.
Нажмете на вновь созданной кнопке на правой кнопке мыши и переименуйте ее (Рис. 47). Нажмите на кнопку Выход из режима конструктора. Сохраните книгу под именем book1 в папку Lab6b на Вашем диске. Вновь перейдите в режим конструктора и нажмите дважды на созданную кнопку. Должен открыться редактор VBA и в нем новая процедура: Private Sub CommandButton1_Click(). Впишите в нее следующий текст: Private Sub CommandButton1_Click() For i = 3 To 13 ' просмотр ячеек по горизонтали For j = 3 To 13 ' просмотр ячеек по вертикали If i = j Then ' если у ячейки совпадают индексы ' столбца и строки Cells(j, i).Interior.ColorIndex = 6 ' раскрасить ячейку в желтый цвет End If Next j
55 Next i Dim MyVar MyVar = MsgBox("Раскрашено!", vbOKOnly + vbInformation, "Сообщение") End Sub
5. 6.
1. 2.
Сохраните и запустите Ваш макрос. Продемонстрируйте результат преподавателю. Заполните диапазон ячеек A3:J12 случайными числами (используйте функцию СЛЧИС). После выполнения задания к выполнению Вам необходимо знать: Технологию доступа к данным и свойствам ячеек в книге MS-Excel из макросов на языке VBA. Основы организации циклов на VBA. 1.
Самостоятельная работа. Над диапазоном A3:J12 со случайными числами произведите действия в соответствии с Вашим вариантом. Для этого напишите макрос, вызываемый по нажатию некоторой новой кнопки. Таблица 4. Варианты заданий к лабораторной работе № 6.
№ Образец
1. 2. 3. 4. 5. 6. 7.
Задание Раскрасить ячейки, находящиеся на главной диагонали диапазона ячеек C3:M13. В диапазоне ячеек A3:J12 раскрасить ячейки с максимальными по столбцам значениями В диапазоне ячеек A3:J12 найти среднее по столбцам В диапазоне ячеек A3:J12 раскрасить ячейки с минимальными по столбцам значениями В диапазоне ячеек A3:J12 найти суммы максимального и минимального по столбцу значений В диапазоне ячеек A3:J12 найти среднее по строкам В диапазоне ячеек A3:J12 раскрасить ячейки с максимальными по строкам значениями Для диапазона ячеек A3:J12 найти суммы максимального и минимального по строкам значений
56 № 8. 9. 10. 11. 12. 13. 14. 15.
2. 3. 4.
Задание В диапазоне ячеек A3:J12 раскрасить ячейки находящиеся над и под главной диагональю В диапазоне ячеек A3:J12 раскрасить ячейки содержащие значения большие, чем среднее по столбцу В диапазоне ячеек A3:J12 раскрасить ячейки с минимальными по строкам значениями Для диапазона ячеек A3:J12 найти суммы значений ячеек по строкам Для диапазона ячеек A3:J12 найти суммы квадратов значений ячеек по столбцам В диапазоне ячеек A3:J12 раскрасить ячейки содержащие значения меньшие, чем среднее по строке Для диапазона ячеек A3:J12 найти суммы квадратов значений ячеек по строкам В диапазоне ячеек A3:J12 раскрасить ячейки содержащие значения отличающиеся не более чем на 0,2 от среднего по столбцу Сохраните книгу в Вашу папку. Протестируйте работоспособность Ваших макросов. Продемонстрируйте результат преподавателю. Составьте отчет по работе № 6-b и представьте его к защите.
57 ••••••••••• •••••••. Данный набор вопросов используется при подготовке к защите лабораторных работ. 1. Опишите назначение среды разработки Borland Delphi. 2. Для чего предназначен инспектор объектов в Borland Delphi. 3. Для чего предназначены свойства Caption, Color, BorderStyle у видимых компонентов. 4. Опишите схему событийной модели диалогового интерфейса. 5. Каким образом можно внести изменения в обработчик того или иного события. 6. Каким образом получить данные из элементов формы? 7. Опишите назначение и порядок работы с отладчиком. 8. Опишите порядок создания основных элементов диалогового окна. 9. Каким образом передаются данные между различными диалоговыми формами? 10. Что такое типизированный файл? 11. Как вызвать стандартные диалоги сохранения и открытия файлов? 12. Опишите порядок получения справочной информации по свойствам и методам объектов. 13. Перечислите основные компоненты доступа к данным 14. Перечислите основные компоненты отображения данных. 15. Каким образом добавить и удалить запись в таблице? 16. Каким образом установить фильтр на таблицу и снять его. 17. Каким образом возможно запустить процедуру на языке Visual Basic for Application из документа или книги электронной таблицы? 18. Опишите порядок создания макросов на языке Visual Basic for Application в документе или электронной таблице. 19. Какие объекты служат для организации доступа к базам данных из макросов? 20. Через какие объекты возможен доступ к данным и свойствам ячеек в книге MS-Excel из макросов на языке VBA? 21. Опишите основные операторы цикла в языке Visual Basic for Application.
58 •••••••••• ••• •••••••••• • •••••••••• •••••••••••• •••••. 1. Бобровский С. Delphi 5: учебный курс – СПб: изд-во «Питер», 2000. – 640 c.: ил. 2. Microsoft Developer Network Library (MSDN) January 2001 release. 3. Архангельский А.Я. Программирование в Delphi 5 – 2-е изд., переработ. и дополн. – М.: ЗАО Изд-во БИНОМ, 2000 г. – 1072 с., ил. 4. Информатика, Учебник / Под ред. Макаровой Н.В. Москва, Финансы и статистика, 2000. 5. Фаронов В.В. Delphi 6: учебный курс 6. Полянский А. Среда программирования Delphi 5-6: Спр. пос., М: Познавательная книга плюс, 2001 г., 416 с. 7. Федоров А.Г., Елманова Н.З. ADO в Delphi. СПб: БХВ-Петербург, 2002 г., 816 с. 8. Карпов Б. Delphi: Спец. спр., СПб: Питер, 2002 г., 688 c. 9. Фаронов В. Программирование баз данных в Delphi 6. СПб: Питер, 2002 г., 352 с. 10. Тейксейра С., Пачеко К. Borland Delphi 6: Рук-во разработчика. СПб: Вильямс., 2002 г., 1120 с. 11. Кандзюба С.П., Громов В.Н. Delphi 6, Базы данных и приложения: Лекции и упр. К: ДиаСофт, 2001 г., 576 с. 12. Глинский Я.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal 7.0 и Delphi: Уч.пос. СПб: ДиаСофтЮП., 2001 г., 208 с.