- •Введение
- •Лабораторная работа №1. Создание простого приложения
- •1 ) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию щелчка по командным кнопкам (программирование событий):
- •3) Компиляция и выполнение приложения
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №2. Циклические программы. Многострочное поле memo
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию щелчка по командным кнопкам (программирование событий)
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №3. Работа с одномерными массивами
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 4. Работа с двумерными массивами
- •Контрольные вопросы
- •Лабораторная работа № 5. Процедуры и функции в delphi
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 6. Рекурсивные процедуры и функции
- •Контрольные вопросы
- •Лабораторная работа №7. Разработка приложения с несколькими модулями
- •2) Последовательность действий по программированию событий
- •Лабораторная работа №8. Работа со строками
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •3) Откомпилируйте приложение и проверьте его работу задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №9. Создание текстового редактора
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 10. Методы простой сортировки
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 11. Поиск данных в массиве
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №12. Работа с файлами
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №13. Работа с типизированными файлами (файлы записей)
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 14. Динамические структуры данных . Стек и очередь
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 15. Практическое применение стека и очереди
- •Лабораторная работа №16. Линейные списки
- •Лабораторная работа №17. Работа с бинарными деревьями поиска
- •Задание для самостоятельной работы
- •Лабораторная работа №18. Основы объектно-ориентированного программирования
- •Задание для самостоятельной работы
- •Лабораторная работа №19. Графика в delphi. Компоненты shape и chart
- •Контрольные вопросы
- •Лабораторная работа №20. Графика в delphi. Рисование по пикселам и пером
- •Контрольные вопросы
- •Лабораторная работа № 21. Вычисление суммы ряда
- •Литература
- •Содержание
- •214013 Г. Смоленск, Энергетический проезд, 1
Задания для самостоятельной работы
Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f являющиеся точными квадратами.
Даны символьные файлы f и g. Сначала компоненты файла f, затем компоненты файла g с сохранением порядка.
Дан файл f, компоненты которого являются целыми числами. Ни один компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g: а) не было двух соседних чисел с одним знаком; б) сначала шли положительные, потом отрицательные числа.
Контрольные вопросы
Текстовые файлы в Delphi. Процедуры и функции обработки файлов.
Типизированные файлы в Delphi. Процедуры и функции обработки файлов.
Нетипизированные файлы в Delphi. Процедуры и функции обработки файлов.
Методы обработки ошибок при работе с файлами.
Лабораторная работа №13. Работа с типизированными файлами (файлы записей)
ЦЕЛЬ РАБОТЫ:
Освоить методы работы с типизированными файлами в Delphi (на примере файла записей).
Освоить работу с основными диалоговыми компонентами Delphi – OpenDialog (Открытие файла) и SaveDialog (Сохранение информации в файле).
ПОДГОТОВКА К РАБОТЕ:
Изучить процедуры и функции для работы с типизированными файлами;
Изучить свойства и метода компонентов OpenDialog и SaveDialog (закладка Dialogs палитры компонентов)
Изучить методы обработки записей в компонентах StringGrid.
ЗАДАНИЕ. Создать приложение для работы с файлом записей. Запись состоит из следующих полей: фамилия и инициалы студента; название учебной группы. Приложение должно выполнять следующие функции:
Добавление новой записи;
Изменение существующей записи;
Удаление выбранной записи;
Сохранение созданного списка в файле;
Чтение списка студентов из файла;
Очистка списка студентов.
Созданное приложение должно иметь вид, изображенный на рисунке 13.1.
Последовательность действий:
Создайте новый проект и перенесите на форму компоненты, перечисленные в таблице 13.1.
Таблица 13.1. Компоненты приложения
Компонент |
Назначение |
Label1 |
Метка «ФИО» |
Label2 |
Метка «Группа» |
Edit1 |
Окно ввода ФИО студента |
ComboBox1 |
Раскрывающийся список учебных групп |
StringGrid1 |
Компонент для отображения созданных записей |
Button1 |
Командная кнопка «Добавить» |
Button2 |
Командная кнопка «Изменить» |
Button3 |
Командная кнопка «Удалить» |
Button4 |
Командная кнопка «Записать» |
Button5 |
Командная кнопка «Прочитать» |
Button6 |
Командная кнопка «Очистить» |
OpenDialog1 |
Диалоговое окно для выбора имени открываемого файла |
SaveDialog1 |
Диалоговое окно для выбора имени файла, в котом будет запоминаться набранный список студентов |
Введите блок Type (перед блоком VAR, где объявлены глобальные переменные) и объявите новый тип переменной - запись:
type
unst = record
//Группа
gr: string[20];
// ФИО
FIO: string[40];
end;
var
Form1: TForm1;
implementation
В блоке VAR определите следующие глобальные переменные: k – количество записей, массив a – массив переменных типа unst (информация о студентах), col- номер текущего (выделенного) столбца, row- номер текущей (выделенной) строки:
VAR
k:Integer;
a:Array[0..100] Of unst;
col,row:Integer;
4. Для компонента StringGrid1 в Инспекторе объектов установите следующие свойства:
ColCount=2 {Два столбца}
RowCount=1 {Одна строка}
FixedCols=0 {Отсутствие фиксированных столбцов}
FixedRows=0 {Отсутствие фиксированных строк}
Для компонента ComboBox1 в свойстве Items задайте список групп. Примерный вид свойства Items приведен на рисунке 13.2.
Для компонентов OpenDialog1 и SaveDialog1 в свойстве Filter задайте допустимые расширения файлов. Вид свойства Filter приведен на рисунке 13.3.
Для компонентов OpenDialog1 и SaveDialog1 в свойстве DefaultExt запишите строку – txt. Данная запись означает, что к имени файла будет автоматически присоединяться расширение «txt».
Для события OnCreate формы Form1 запишите программный код:
procedure TForm1.FormCreate(Sender: TObject);
begin
// Количество строк равно 1 – Это заголовок списка
StringGrid1.RowCount:=1;
// В 1-ый столбец заголовка вписывается «Группа»
StringGrid1.Cells[0,0]:='Группа';
//{Во 2-ой столбец заголовка - «ФИО студента»}
StringGrid1.Cells[1,0]:='ФИО';
// Формирование первой, видимой
//строки компонента ComboBox
ComboBox1.Text:=ComboBox1.Items.Strings[0];
k:=0; // Количество записей равно 0
row:=0; // номер текущей строки - 0
col:=0; // номер текущего столбца - 0
end;
Для события OnSelectCell компонента StringGrid1 программный код:
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
col:=ACol; // Запомнить номер текущего столбца
row:=ARow; // Запомнить номер текущей строки
// ФИО студента из выбранной строки записать в поле Edit1
//для возможности редактирования
Edit1.Text:=StringGrid1.Cells[1,ARow];
// Группу из выбранной строки записать в поле Text
// компонента ComboBox1 для возможности выбора другой группы
ComboBox1.Text:=StringGrid1.Cells[0,ARow];
end;
Для события OnClick кнопки Button1 (кнопка «Добавить») записать программный код:
procedure TForm1.Button1Click(Sender: TObject);
begin
// Количество записей в массиве и строк в компоненте StringGrid1 увеличивается на 1
k:=k+1;
Stringgrid1.RowCount:=Stringgrid1.RowCount+1;
// в компонент StringGrid1 записывается новая строка
Stringgrid1.Cells[0,k]:=ComboBox1.Text;
Stringgrid1.Cells[1,k]:=Edit1.Text;
// в массив записывается новая запись
a[k].FIO:=Edit1.Text; a[k].gr:=ComboBox1.Text;
end;
Для события OnClick кнопки Button2 (кнопка «Изменить») записать программный код:
procedure TForm1.Button2Click(Sender: TObject);
begin
If row >0 then
begin
StringGrid1.Cells[0,row]:=ComboBox1.Text;
StringGrid1.Cells[1,row]:=Edit1.Text;
a[row].gr:=ComboBox1.Text;
a[row].FIO:=Edit1.Text;
end;
end;
Для события OnClick кнопки Button3 (кнопка «Удалить») записать программный код:
procedure TForm1.Button3Click(Sender: TObject);
Var i:Integer;
Begin
// Если текущая строка не заголовок, то есть ее номер не равен 0,
// то ее можно удалять
If row>=1 then
Begin
// если текущая строка не последняя, то выполнить сдвиг строк
// на одну строку вверх.
// Если текущая строка последняя сдвиг строк выполнять не надо
If row<=StringGrid1.RowCount-1 then
For i:=row to StringGrid1.RowCount-2 do
begin
StringGrid1.Cells[0,i]:=StringGrid1.Cells[0,i+1];
StringGrid1.Cells[1,i]:=StringGrid1.Cells[1,i+1];
a[i].gr:=StringGrid1.Cells[0,i];
a[i].FIO:=StringGrid1.Cells[1,i];
end;
// Удаление последней строки
StringGrid1.RowCount:=StringGrid1.RowCount-1;
k:=k-1;
end;
end;
Для события OnClick кнопки Button4 (кнопка «Записать») записать программный код:
procedure TForm1.Button4Click(Sender: TObject);
VAR f:File of unst;
i:Integer;
begin
If SaveDialog1.Execute then
begin
AssignFile(f,SaveDialog1.FileName);
Rewrite(f);
For i:=1 to k do Write(f,a[i]);
CloseFile(f);
end;
end;
Для события OnClick кнопки Button5 (кнопка «Прочитать») записать программный код:
procedure TForm1.Button5Click(Sender: TObject);
VAR f:File of unst;
begin
If OpenDialog1.Execute then
begin
AssignFile(f,OpenDialog1.FileName);
Reset(f);
k:=0;
While not Eof(f) do
begin
k:=k+1;
Read(f,a[k]);
StringGrid1.RowCount:=k+1;
StringGrid1.Cells[0,k]:=a[k].gr;
StringGrid1.Cells[1,k]:=a[k].FIO;
end;
end;
end;
Для события OnClick кнопки Button6 (Очистить) записать программный код:
procedure TForm1.Button6Click(Sender: TObject);
begin
k:=0;
Stringgrid1.RowCount:=1;
end;
Откомпилируйте приложение и проверьте его работу.