Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ.doc
Скачиваний:
6
Добавлен:
12.11.2019
Размер:
1.51 Mб
Скачать

Задания для самостоятельной работы

  1. Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f являющиеся точными квадратами.

  2. Даны символьные файлы f и g. Сначала компоненты файла f, затем компоненты файла g с сохранением порядка.

  3. Дан файл f, компоненты которого являются целыми числами. Ни один компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g: а) не было двух соседних чисел с одним знаком; б) сначала шли положительные, потом отрицательные числа.

Контрольные вопросы

  1. Текстовые файлы в Delphi. Процедуры и функции обработки файлов.

  2. Типизированные файлы в Delphi. Процедуры и функции обработки файлов.

  3. Нетипизированные файлы в Delphi. Процедуры и функции обработки файлов.

  4. Методы обработки ошибок при работе с файлами.

Лабораторная работа №13. Работа с типизированными файлами (файлы записей)

ЦЕЛЬ РАБОТЫ:

  1. Освоить методы работы с типизированными файлами в Delphi (на примере файла записей).

  2. Освоить работу с основными диалоговыми компонентами Delphi – OpenDialog (Открытие файла) и SaveDialog (Сохранение информации в файле).

ПОДГОТОВКА К РАБОТЕ:

  1. Изучить процедуры и функции для работы с типизированными файлами;

  2. Изучить свойства и метода компонентов OpenDialog и SaveDialog (закладка Dialogs палитры компонентов)

  3. Изучить методы обработки записей в компонентах StringGrid.

ЗАДАНИЕ. Создать приложение для работы с файлом записей. Запись состоит из следующих полей: фамилия и инициалы студента; название учебной группы. Приложение должно выполнять следующие функции:

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

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

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

  • Сохранение созданного списка в файле;

  • Чтение списка студентов из файла;

  • Очистка списка студентов.

Созданное приложение должно иметь вид, изображенный на рисунке 13.1.

Последовательность действий:

  1. Создайте новый проект и перенесите на форму компоненты, перечисленные в таблице 13.1.

Таблица 13.1. Компоненты приложения

Компонент

Назначение

Label1

Метка «ФИО»

Label2

Метка «Группа»

Edit1

Окно ввода ФИО студента

ComboBox1

Раскрывающийся список учебных групп

StringGrid1

Компонент для отображения созданных записей

Button1

Командная кнопка «Добавить»

Button2

Командная кнопка «Изменить»

Button3

Командная кнопка «Удалить»

Button4

Командная кнопка «Записать»

Button5

Командная кнопка «Прочитать»

Button6

Командная кнопка «Очистить»

OpenDialog1

Диалоговое окно для выбора имени открываемого файла

SaveDialog1

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

  1. Введите блок Type (перед блоком VAR, где объявлены глобальные переменные) и объявите новый тип переменной - запись:

type

unst = record

//Группа

gr: string[20];

// ФИО

FIO: string[40];

end;

var

Form1: TForm1;

implementation

  1. В блоке 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 {Отсутствие фиксированных строк}

  1. Для компонента ComboBox1 в свойстве Items задайте список групп. Примерный вид свойства Items приведен на рисунке 13.2.

  2. Для компонентов OpenDialog1 и SaveDialog1 в свойстве Filter задайте допустимые расширения файлов. Вид свойства Filter приведен на рисунке 13.3.

  3. Для компонентов OpenDialog1 и SaveDialog1 в свойстве DefaultExt запишите строку – txt. Данная запись означает, что к имени файла будет автоматически присоединяться расширение «txt».

  4. Для события 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;

  1. Для события 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;

  1. Для события 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;

  1. Для события 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;

  1. Для события 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;

  1. Для события 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;

  1. Для события 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;

  1. Для события OnClick кнопки Button6 (Очистить) записать программный код:

procedure TForm1.Button6Click(Sender: TObject);

begin

k:=0;

Stringgrid1.RowCount:=1;

end;

  1. Откомпилируйте приложение и проверьте его работу.