Radio7 (Программирование на Object Pascal в среде Delphi)
Описание файла
Документ из архива "Программирование на Object Pascal в среде Delphi", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "рефераты, доклады и презентации", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "Radio7"
Текст из документа "Radio7"
Лабораторная работа №7
Программирование алгоритмов с использованием файлов
Цель лабораторной работы: освоить применение компонентов OpenDialog и SaveDialog и создать приложение, в котором используются файлы.
7.1. Пример создания приложения
Задание: создать Windows-приложение для записи в файл и чтения из файла ведомости об успеваемости учащихся в количестве 10 человек. Каждая запись файла должна содержать фамилию, инициалы, а также оценки по физике, математике и сочинению. Вывести список учащихся, отсортированный в алфавитном порядке и записать эту информацию в текстовой файл.
Один из возможных вариантов панели интерфейса создаваемого приложения показан на рис.7.1.
7.1.1. Размещение компонентов на Форме
При работе с файлами чтение и запись информации удобно организовывать с помощью компонентов OpenDialog и SaveDialog.
Компоненты OpenDialog и SaveDialog находятся на странице Dialogs. Все компоненты этой страницы являются невизуальными, т.е. не видны в момент выполнения приложения. Поэтому их можно разместить в любом удобном месте Формы. Оба рассматриваемых компонента имеют идентичные свойства и отличаются только внешним видом.
BitBtn
Рис. 7.1
Для установки компонентов OpenDialog и SaveDialog на Форму необходимо на странице Dialogs Палитры Компонентов щелкнуть “мышью” соответственно по пиктограмме или и разместить ее в любом свободном месте Формы. При выполнении приложения в момент вызова компонента появляется диалоговое окно, с помощью которого пользователь выбирает имя файла и маршрут к нему. В случае успешного завершения диалога имя выбранного файла и маршрут поиска содержится в свойстве FileName.
Пользователь имеет возможность настроить параметры окна диалога по своему усмотрению. В частности, изменить заголовок окна можно с помощью свойства Title. В свойстве DefaultExt можно указать расширение файла, если оно не задано пользователем. Свойство Filter используется для поиска (фильтрации) файлов, отображаемых в окне. Установка фильтра производится следующим образом. Выделив соответствующий компонент, необходимо дважды щелкнуть по правой (белой) части свойства Filter Инспектора Объектов. В появившемся окне редактора фильтра-Filter Editor необходимо в колонке Filter Name набрать текст, характеризующий соответствующий фильтр, а в колонке Filter–маску. Для компонента OpenDialog1 установим значения масок как показано на рис. 7.2.
Рис.7.2
Маска *.dat означает что, будут видны файлы данных с любым именем и с расширением dat, а маска *.* - что будут видны все файлы (с любым именем и с любым расширением).
Для того, чтобы файл автоматически записывался с расширением dat в свойстве DefaultExt запишем требуемое расширение - dat.
Аналогичным образом настроим компонент SaveDialog1 для текстового файла (расширение txt).
7.1.2 Создание процедур обработки событий
Для удобства работы с несколькими различными процедурами обработки событий в свойстве Name каждого компонента BitBtn замените программные имена кнопок: BitBtn1 – на BitBtnNew, BitBtn2 – на BitBtnOpen, BitBtn3 – на BitBtnSort, BitBtn4 – на BitBtnSave. Двойным нажатием клавиши “мыши” на кнопках BitBtn создайте соответствующие процедуры обработки событий. Пользуясь текстом модуля UnFile, внимательно наберите операторы этих процедур.
7.1.3 Текст модуля UnFile
Unit UnFile;
Interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, Grids, Spin;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
BitBtnNew: TBitBtn;
BitBtnOpen: TBitBtn;
BitBtnSort: TBitBtn;
BitBtnSave: TBitBtn;
SaveDialog1: TSaveDialog;
SpinEdit1: TSpinEdit;
Label1: TLabel;
OpenDialog1: TOpenDialog;
procedure TForm1.FormCreate(Sender: TObject);
procedure BitBtnSortClick(Sender: TObject);
procedure BitBtnNewClick(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure BitBtnOpenClick(Sender: TObject);
procedure BitBtnSaveClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Implementation
{$R *.DFM}
type
zap=record // объявление записи
fio :string[20];
mat,fiz,soch:integer;
end;
var
MZap:array[1..25] of zap; // объявление массива записей
FileZap:file of zap; // объявление файла записей
FileText:TextFile; // объявление текстового файла
FileNameZap,FileNameText:string; // имена файла записей и текстового файла
n:integer; // текущее кол-во элементов массива записей
{ Обработчик события создания Формы }
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin // занесение информации в ячейки StringGrid1
Cells[0,0]:=’№пп’;
Cells[1,0]:=’Фамилия,инициалы’;
Cells[2,0]:=’Математика’;
Cells[3,0]:=’Физика’;
Cells[4,0]:=’Сочинение’;
end;
BitBtnSort.Hide; // спрятать кнопку ”Sort”
BitBtnSave.Hide; // спрятать кнопку “Save”
end;
{ Обработчик нажатия кнопки Sort }
procedure TForm1.BitBtnSortClick(Sender: TObject);
var
i,j :integer;
vper:zap;
begin
for i:=1 to n do
with StringGrid1,MZap[i] do
begin
fio:=Cells[1,i];
mat:=StrToInt(Cells[2,i]);
fiz:=StrToInt(Cells[3,i]);
soch:=StrToInt(Cells[4,i]);
end;
{ сортировка методом "пузырька"}
for i:=2 to n do
for j:=n downto i do
if MZap[j-1].fio>MZap[j].fio then
begin
vper:=MZap[j-1];
MZap[j-1]:=MZap[j];
MZap[j]:=vper;
end;
for i:=1 to n do // заполнение ячеек StringGrid1 полями массива записей
with StringGrid1,MZap[i] do
begin
Cells[0,i]:=IntToStr(i);
Cells[1,i]:=fio;
Cells[2,i]:=IntToStr(mat);
Cells[3,i]:=IntToStr(fiz);
Cells[4,i]:=IntToStr(soch);
end;
end;
{ Создание нового файла записей}
procedure TForm1.BitBtnNewClick(Sender: TObject);
var
i:integer;
begin // вывод на экран окна с предупреждающим сообщением
if MessageDlg('Содержимое существующего файла будет уничтожено. Вы уверены?',
mtConfirmation, mbYesNoCancel, 0)=mrYes then
begin
for i:=1 to n do
with StringGrid1,MZap[i] do
begin // формирование полей массива записей
fio:=Cells[1,i];
mat:=StrToInt(Cells[2,i]);
fiz:=StrToInt(Cells[3,i]);
soch:=StrToInt(Cells[4,i]);
end;
with OpenDialog1 do
begin
Title:='Создание файла'; // заголовок окна диалога
if Execute then // выполнение стандартного диалога выбора имени файла
begin
FileNameZap:=FileName; // присваивание имени файла
AssignFile(FileZap,FileNameZap); // назначить файлу FileZap имя FileNameZap
ReWrite(FileZap); // открыть файл на запись
for i:=1 to n do
write(FileZap,MZap[i]); // запись в файл массива записей
CloseFile(FileZap); // закрытие файла записей
end;
end;
end;
end;
{Обработчик кнопки изменения размера}
procedure TForm1.SpinEdit1Change(Sender: TObject);
var
i,m:integer;
begin
m:=StrToInt(SpinEdit1.Text); // присвоить новое значение размера
with StringGrid1 do
begin
RowCount:=m+1; // пересчитать количество строк
if m>n then // если строки добавлены то
for i:=n+1 to m do // инициализировать новые ячейки
begin
Cells[0,i]:=IntToStr(i);
Cells[1,i]:='';
Cells[2,i]:='';
Cells[3,i]:='';
Cells[4,i]:='';
end;
end;
n:=m; // запомнить новое значение размера
end;
{ обработчик нажатия кнопки Open }
procedure TForm1.BitBtnOpenClick(Sender: TObject);
var
i:integer;
begin
with OpenDialog1 do
begin
Title:='Открытие файла'; // заголовок окна диалога
if Execute then // выполнение стандартного диалога выбора имени файла
begin
FileNameZap:=FileName; // присваивание имени файла
AssignFile(FileZap,FileNameZap); // назначить файлу FileZap имя FileNameZap
ReSet(FileZap); // открыть файл на чтение
n:=0; // инициализация счетчика кол-ва прочитанных из файла элементов
while not EoF(FileZap) do
begin
n:=n+1; // увеличение счетчика
read(FileZap,MZap[n]); // чтение из файла n-го элемента массива записей
end;
SpinEdit1.Text:=IntToStr(n); // занести кол-во прочитанных записей в SpinEdit
StringGrid1.RowCount:=n+1; // присвоить кол-во строк
for i:=1 to n do
with StringGrid1,MZap[i] do
begin // заполнение ячеек StringGrid1 полями массива записей
Cells[0,i]:=IntToStr(i);
Cells[1,i]:=fio;
Cells[2,i]:=IntToStr(mat);
Cells[3,i]:=IntToStr(fiz);
Cells[4,i]:=IntToStr(soch);
end;
CloseFile(FileZap); // закрытие файла записей
end;
end;
BitBtnSort.Show; // показать кнопку “Sort”
BitBtnSave.Show; // показать кнопку “Save”
end;
{ Сохранение данных в текстовом файле}
procedure TForm1.BitBtnSaveClick(Sender: TObject);
var
i:integer;
begin
with SaveDialog1 do
if Execute then // выполнение стандартного диалога выбора имени файла
begin
FileNameText:=FileName; // присваивание имени файла
AssignFile(FileText,FileNameText); // назначить файлу FileText имя FileNameText
ReWrite(FileText); // открыть текстовый файл на запись
for i:=1 to n do
with MZap[i] do // запись в текстовый файл
writeln(FileText,i:3,fio:20,mat:5,fiz:5,soch:5);
CloseFile(FileText); // закрытие текстового файла по окончании записи
end;
BitBtnSort.Hide; // спрятать кнопку ”Sort”
end;
end.
7.1.4 Работа с приложением
Запустите созданное приложение. Занесите в соответствующие поля панели интерфейса информацию об успеваемости учащихся. Кнопкой “New” сохраните данные в файле. Завершите выполнение приложения.
Вновь запустите приложение и кнопкой “Open” откройте только что созданный файл. Убедитесь, что информация не содержит ошибок. При необходимости обнаруженные ошибки можно исправить, а также дополнить ведомость новой информацией. Для сортировки ведомости в алфавитном порядке воспользуйтесь кнопкой “Sort” и сохраните отсортированную информацию кнопкой “New”.
Еще раз завершите и вновь запустите приложение.
Кнопкой “Open откройте файл и убедитесь, что в нем теперь содержится ведомость, отсортированная в алфавитном порядке. Кнопкой “Save” сохраните информацию в текстовом файле. Для просмотра содержимого текстового файла воспользуйтесь, например, приложением “Microsoft Word”.
Используя все управляющие компоненты панели интерфейса, убедитесь в правильном функционировании приложения во всех предусмотренных режимах работы.
7.2 Индивидуальные задания
Во всех заданиях предусмотреть сохранение вводимых данных в файле и возможность чтения из ранее созданного файла. Результаты выводить в панель интерфейса и в текстовый файл.