Файл: Методические указания к лабораторным работам по Delphi Lazarus.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 08.11.2023

Просмотров: 145

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторная работа № 2 – программа "Картотека предприятия"



Образец: task2.exe + файл persons.txt
Программа должна реализовывать следующие функции:

  1. Загрузка информации о сотрудниках предприятия из файла при запуске программы.

  2. Отображение иерархической структуры предприятия в виде древовидного списка.

  3. Отображение полной информации о сотруднике при выборе конкретного элемента (должности) в древовидном списке.

  4. Редактирование любой информации о сотруднике.

  5. Отображение текущей информации о сотруднике в статусной строке.

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


Требования к лабораторной работе № 2:





  1. При старте программы информация о сотрудниках должна загружаться из некоторого файла (в примере он называется “persons.txt”), а при выходе – сохраняться в нем. Если файл отсутствует, то при старте программа должна создавать его и заполнять данными по умолчанию.

  2. Главное окно программы должно содержать две закладки: «Предприятие» и «Человек». При запуске программа всегда должна открываться на закладке «Предприятие», при этом иерархический список подразделений должен быть полностью раскрыт и в нем должен быть выбран (подсвечен) пункт «Директор».

  3. У каждого элемента древовидного списка должна быть своя собственная иконка размером 16х16 пикселов.

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

  5. При изменении любой информации на закладке «Человек» изменения должны сразу же отображаться в статусной строке.

  6. Неправильный ввод данных в поле «Год рождения» должен корректно обрабатываться.

  7. Поле «Телефон» должно иметь маску ввода (для этого вместо компонента Edit надо использовать компонент MaskEdit).

  8. Поля «Образование» и «Специальность» должны представлять собой 2 различных варианта выпадающего списка: с возможностью редактирования и без.

  9. Для поля «Лояльность» свойства должны быть установлены таким образом, чтобы при нажатии клавиш Up/Down значение менялось на единицу, а при нажатии клавиш PgUp/PgDown – на 10.

  10. Переход между различными элементами управления по клавише Tab на закладке «Человек» должен осуществляться последовательно, а не хаотично.




Методические указания к лабораторной работе № 2:





  1. Работа с компонентом PageControl. Компонент PageControl представляет собой контейнер, внутри которого содержатся сами закладки (экземпляры класса TabSheet).

  • Для добавления новой закладки к компоненту PageControl щелкните по нему правой кнопкой мыши и выберите команду New Page. При этом внутри PageControl создается компонент TabSheet, который содержит собственный набор свойств (в частности свойство Caption для изменения названия закладки). Повторите операцию столько раз, сколько закладок вам необходимо.

  • Для изменения текущей активной закладки в процессе выполения программы присвойте нужное значение свойству PageControl.ActivePage.

  1. Работа с компонентом TreeView.

  • Для добавления/редактирования элементов в TreeView используйте встроенный редактор (вызывается двойным щелчком мыши по TreeView).

  • Для подключения картинок к элементам TreeView выполните следующие шаги:

  1. добавьте к форме компонент ImageList (список изображений) с закладки Win32;

  2. загрузите в компонент ImageList нужное количество картинок размером 16х16 пикселов при помощи встроенного редактора (вызывается двойным щелчком мыши по ImageList).

  3. установите свойство TreeView.Images = имя вашего ImageList;

  4. вызовите встроенный редактор элементов TreeView и для каждого элемента дерева назначьте свойствам ImageIndex и SelectedIndex значения индексов картинок из ImageList (счет начинается с 0, значение –1 означает, что у данного элемента картинка отсутсвует). Обычно, значения ImageIndex и SelectedIndex для одного элемента выбирают одинаковыми, если только вы не хотите, чтобы картинка у выбранного элемента отличалась от картинки невыбранного.

  • Чтобы получить уникальный индекс текущего выбраннного элемента дерева, используйте свойство TreeView.Selected.AbsoluteIndex. TreeView.Selected представляет собой текущий выбранный узел дерева, а AbsoluteIndex – порядковый номер этого узла в дереве.

  • Чтобы выбранный элемент в TreeView оставался подсвеченным даже когда компонент теряет фокус ввода, установите свойство HideSelection = False.

  • Чтобы полностью раскрыть все пункты дерева (например, при старте программы), используйте процедуру TreeView.FullExpand.

  1. Работа с компонентом StatusBar.

  • Для добавления/редактирования секций (панелек) у StatusBar используйте встроенный редактор (для этого найдите в Инспекторе объектов свойство Panels и нажмите […]). Каждая секция имеет свой набор свойств, наиболее полезными среди которых являются Text и Width.

  • Для изменения нужной секции в процессе выполнения программы полезно запомнить, что свойство Panels представляет собой массив панелек, так что к любой панельке можно обратиться по ее порядковому номеру (счет начинается с 0). Например, чтобы изменить надпись у 4 панельки, пишем: StatusBar.Panels[3].Text := ‘Файл изменен’.


  1. Создание массива записей для хранения разнородной информации о сотрудниках. Объявление записи («структуры» в терминологии языка С) в языке Pascal имеет следующий вид:

type

typename = record

field1: type1;

field2: type2;

...

end;
где typename – имя нового типа (записи),

field1, field2 – название компонентов (полей) этой записи,

type1, type2 – типы указанных полей.
Например, следующая простая запись из трех полей описывает человека:

type

TPerson = record

FIO: string[30]; // ФИО человека

BirthYear: integer; // Год рождения

Sex: boolean; // Пол (True – мужской, False – женский)

end;

Замечание: поля записи не могут принадлежать типам данных с неопределенным размером объекта (например, они не могут быть типа string, который допускает хранение строк произвольной длины). Поэтому, в данном случае мы используем форму записи строки с явным указанием ее максимального размера.
После объявления типа записи можно создавать объекты указанного типа, например, переменные или массивы объектов:

var

SelectedPerson: TPerson;

Persons: array [1..5] of TPerson;
Значения массива можно при объявлении инициализировать списком значений:

var

Person: array [1..2] of TPerson = (

(FIO: ‘Иванов С. С.’; BirthYear: 1970; Sex: True),

(FIO: ‘Петрова М. И.’; BirthYear: 1975; Sex: False));


  1. Работа с файлами. Для работы с файлами в Delphi существует 3 способа:

  1. классические процедуры языка Pascal (Assign, Read, Write);

  2. функции Windows (FileOpen, FileRead, FileWrite);

  3. объектно-ориентированный подход на основе класса TFileStream.

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

Для того, чтобы записать в файл 2 переменные типа запись, необходимо выполнить следующую последовательность действий:

var

F: file of TPerson; // Создать файловую переменную типа запись

Man1, Man2: TPerson;
AssignFile (F, ‘fname’); // Связать файловую переменную с именем файла

Rewrite (F); // Открыть файл для записи

Write (F, Man1, Man2); // Записать в файл 2 записи

CloseFile (F); // Закрыть файл
Для того, чтобы прочитать записи из файла в переменные, поступаем аналогично
, только вместо процедуры Rewrite(F) используем Reset(F), а вместо Write(F,...) используем Read(F,...). Естественно, что при чтении/записи в файл вместо простых элементов можно использовать элементы массива.

  1. Прочие полезные советы:

  • Чтобы выполнить начальные инициализирующие действия при старте программы, когда еще ни одно окно не отображается на экране, воспользуйтесь событием OnCreate у главной формы. Аналогично, воспользуйтесь событиями OnClose или OnDestroy, чтобы выполнить определенные действия при завершениии программы.

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

  • Для создания радиогруппы для поля «Семейное положение» удобнее воспользоваться компонентом RadioGroup, а не создавать четыре отдельных компонента RadioButton.

  • Об изменении значения некоторых полей (Edit, Memo, ComboBox, TrackBar) можно узнать, перехватив для них событие OnChange. Для других полей (CheckBox, RadioGroup, TreeView) то же самое можно узнать, перехватив событие OnClick.

  • Чтобы вывод сведений о человеке в компоненте Memo получился «ровным», используйте для вывода текста моноширинный шрифт, например Courier New.

  • Чтобы в программе удобнее было выводить вперемежку строки, числа и данные других типов, можно воспользоваться функцией Format() – аналогом функции printf() в языке C. Например: TotalsLabel.Caption := Format (‘Количество = %d, Сумма = %d’, [Count, Sum]);

  • Чтобы изменить порядок перехода между различными элементами управления по клавише Tab, выберите команду меню Edit | Tab Order и переупорядочите элементы управления в нужном порядке.



Лабораторная работа № 3 – программа "Магазин CD-дисков"



Образец: task3.exe + содержимое папки DB.
Программа должна реализовывать следующие функции:

  1. Хранение информации о клиентах, товарах и заказах в базе данных.

  2. Отображение информации о клиентах, товарах и заказах в табличном виде.

  3. Редактирование любой информации о клиентах и товарах.

  4. Добавление информации о новом заказе с проверкой допустимости введенных значений.

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

  6. Удаление заказа (с подтверждением).

  7. Фильтрация записей заказов по критериям: все записи, текущий клиент, текущий товар.

  8. Неточный поиск записей в таблице заказов по имени клиента или названию товара.

  9. Расчет и отображение в таблице заказов «Суммы заказа» на основании текущих значений полей «Цена» и «Количество».

  10. Отображение итоговых значений по столбцам «Количество» и «Сумма заказа» по таблице заказов для текущего отобранного набора записей.



Требования к лабораторной работе № 3:





  1. База данных должна состоять из 3-х связанных между собой таблиц: «Товары», «Клиенты» и «Заказы».

  2. Обязательными полями для таблицы «Товары» являются «Наименование товара» и «Цена за штуку», для таблицы «Клиенты» – «Имя клиента» и «Адрес».

  3. Обязательными полями для таблицы «Заказы» являются «Дата заказа», «Наименование товара», «Имя клиента», «Количество». Поле «Cумма» является вычисляемым («Количество» * «Цена за штуку») и в базе данных не хранится.

  4. Редактирование таблицы «Заказы» должно осуществляться только при помощи кнопок «Добавить», «Изменить», «Удалить», но не напрямую (через компонент DBGrid). Напротив, редактирование таблиц «Товары» и «Клиенты» через компоненты DBGrid должно быть разрешено.

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

  6. По умолчанию записи в таблице «Заказы» должны быть упорядочены по полю «Дата заказа».

  7. В диалоговом окне «Добавить/Изменить запись»:

  1. кнопка «Сохранить» должна быть недоступна (отключена), пока не будут заполнены все поля;

  2. при изменении полей «Название товара» или «Количество» должен сразу же происходить пересчет полей «Цена за единицу» и «Стоимость товара»;

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

  4. ввод значений в поле «Количество» должен быть ограничен в разумных пределах.