Главная страница
Навигация по странице:

  • Цель лабораторной работы

  • 1.1. Программирование с использованием переменных типа запись

  • Нетипизированный файл

  • 1.3. Процедуры работы с файлами

  • 1.4.

  • 1.5. Пример выполнения задания

  • Настройка компонентов

  • Лабораторная. Лабораторный практикум(часть1) Электронный. Практикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей


    Скачать 3.27 Mb.
    НазваниеПрактикум по дисциплине Разработка приложений в визуальных средах для студентов специальностей
    АнкорЛабораторная
    Дата12.03.2023
    Размер3.27 Mb.
    Формат файлаdoc
    Имя файлаЛабораторный практикум(часть1) Электронный.doc
    ТипПрактикум
    #982312
    страница11 из 24
    1   ...   7   8   9   10   11   12   13   14   ...   24

    ЛАБОРАТОРНАЯ РАБОТА 6

    Разработка приложения с использованием записей и файлов




    Цель лабораторной работы: изучить правила работы с компонентами TOpenDialog и TSaveDialog. Написать программу с использованием файлов и данных типа запись.

    1. Краткие сведения



    1.1. Программирование с использованием переменных типа запись
    Запись - это структура данных, объединяющая элементы одного или различных типов, называемыми полями. Записи удобны для создания структурированных баз данных с разнотипными элементами, например:

    Type

    TStudent = record //Объявление типа запись

    Fio : string[20]; //Поле ФИО

    Group : integer; //Поле номера студ. группы

    Осn : array[1..3] of integer; //Поле массива оценок

    end:

    Var

    Student: TStudent; //Объявление переменной типа запись
    Доступ к каждому полю осуществляется указанием имени записи и поля, разделенных точкой, например:
    Student.Fio := 'Иванов А.И.'; //Внесение данных в поля записи

    Student.Group := 107218;
    Доступ к полям можно осуществлять также при помощи оператора With:
    With Student do

    begin

    Fio := 'Иванов А.И.';

    Group := 107218;

    end;
    1.2. Работа с файлами
    Файл - это именованная область данных на внешнем физическом носителе. В ObjectPascal различают три вида файлов в зависимости от способа их организации и доступа к элементам: текстовые, типизированные и нетипизированные.

    Текстовой файл - это файл, состоящий из строк. Примером текстового файла может служить файл исходного текста программы в Delphi (расширение *.pas). Для работы с текстовым файлом должна быть описана соответствующая файловая переменная:

    var F : TextFile;

    Типизированные файлы имеют строго заданную их описанием структуру, когда все элементы имеют фиксированный и одинаковый размер. Это свойство типизированных файлов позволяет получить доступ к любому компоненту файла по его порядковому номеру. Элементами такого файла являются, как правило,записи. В описании файловой переменной указывается ее тип:

    Var F: TStudent;

    Нетипизированный файл – это файл, в котором данные не имеют определенного типа и рассматриваются, как последовательность байт. Файловая переменная объявляется:

    Var F: File;

    Порядок работы с файлами следующий:

    AssignFile(F, 'FileName.txt'); //Связывание файловой переменной F

    //с именем дискового файла "FileName.txt"

    Rewrite(F); //Создание нового файла

    Reset(F); //Открытие уже существующего файла

    Read(F, Stud); //Чтение данных из файла

    Write(F, Stud) //Запись данных в файл

    CloseFile(F); //Закрытие файла
    1.3. Процедуры работы с файлами
    AssignFile(var F; FileName: string) - связывает файловую переменную F и файл с именем FileName.

    Reset(var F[: File; RecSize: word]) - открывает существующий файл. При открытии нетипизированного файла RecSize задает размер элемента файла.

    Rewrite(var F[: File; RecSize: word]) - создает и открывает новый файл.

    Append(var F: TextFile) - открывает текстовый файл для дописывания текста в конец файла.

    Read(F, v1[, v2...vn]) - чтение значений переменных, начиная с текущей позиции для типизированных файлов, и строк для текстовых.

    Write(F, v1[, v2,...vn]) - запись значений переменных начиная с текущей позиции для типизированных файлов и строк для текстовых.

    CloseFile(F) - закрывает ранее открытый файл.

    Rename(var F; NewName: string) - переименовывает неоткрытый файл любого типа.

    Erase(var F) - удаляет неоткрытый файл любого типа.

    Seek(var F; NumRec: Longint) - для нетекстового файла устанавливает указатель на элемент с номером NumRec.

    SetTextBuf(var F: TextFile; var Buf[;Size: word]) - для текстового файла устанавливает новый буфер ввода-вывода объема Size.

    Flush(var F: TextFile) - немедленная запись в файл содержимого буфера ввода-вывода.

    Truncate(var F) - урезает файл, начиная с текущей позиции.

    LoResult: integer - код результата последней операции ввода-вывода.

    FilePos(var F): longint - для нетекстовых файлов возвращает номер текущей позиции. Отсчет ведется от нуля.

    FileSize(var F): longint - для нетекстовых файлов возвращает количество компонентов в файле,

    Eoln(var F: TextFile): boolean - возвращает True, если достигнут конец строки.

    Eof(var F) ): boolean - возвращает True, если достигнут конец файла.

    SeekEoln(var F: TextFile): boolean - возвращает True, если пройден последний значимый символ в строке или файле, отличный от пробела или знака табуляции.

    SeekEoln(var F: TextFile): boolean - то же, что и SeekEoln, но для всего файла.

    BlockRead(var F: File; var Buf; Count: word[; Result: word])

    BlockWrite(var F : File; var Buf; Count: word[; Result: word]) - соответственно процедуры чтения и записи переменной Buf с количеством Count блоков,
    1.4. Компоненты TOpenDialog и TSaveDialog
    Компоненты TOpenDialog и TSaveDialog находятся на странице DIALOGS. Все компоненты этой страницы являются невизуальными, т.е. не видны в момент работы программы. Поэтому их можно разместить в любом удобном месте формы. Оба рассматриваемых компонента имеют идентичные свойства и отличаются только внешним видом. После вызова компонента появляется диалоговое окно, с помощью которого выбирается имя программы и путь к ней. В случае успешного завершения диалога имя выбранного файла и маршрут поиска содержится в свойстве FileName. Для фильтрации файлов, отображаемых в окне просмотра, используется свойство Filter, а для задания расширения файла, в случае, если оно не задано пользователем - свойство DefaultExt. Если необходимо изменить заголовок диалогового окна – используется свойство Title.
    1.5. Пример выполнения задания
    Задание: написать программу, вводящую в файл или читающую из файла ведомость абитуриентов, сдавших вступительные экзамены. Каждая запись должна содержать фамилию, а также оценки по физике, математике и сочинению. Вывести список абитуриентов, отсортированный в порядке уменьшения их среднего балла и записать эту информацию в текстовой файл.
    Настройка компонентов TOpenDialogaTSaveDialag
    Для установки компонент TOpenDialog и TSaveDialog на форму необходимо, на странице Dialogs палитры компонентов щелкнуть мышью соответственно по пиктограммам или и поставить их в любое свободное место формы. Установка фильтра производится следующим образом. Выбрав соответствующий компонент, дважды щелкнуть по правой части свойства Filter инспектора объектов. Появится окно Filter Editor, в левой части которого записывается текст, характеризующий соответствующий фильтр, а в правой части - маску.

    Для OpenDialog1 установим значения маски как показано на рисунке 6.1. Формат *.dat означает что, будут видны все файлы с расширением dat, а формат *.* - что будут видны все файлы (с любым именем и с любым расширением).


    Рисунок 6.1 – Установка фильтра для файлов
    Для того чтобы файл автоматически записывался с расширением .dat в свойстве DefaultExt запишем требуемое расширение - .dat. Аналогичным образам настроим SaveDialog1 для текстового файла (расширение *.txt).
    Работа с программой
    После запуска программы на выполнение появится диалоговое окно программы. Кнопка “Ввести запись” видна не будет. Необходимо создать новый файл записей, нажав на кнопку "Создать" или открыть ранее созданный, нажав - кнопку "Открыть". После этого станет видна кнопка "Ввести запись"



    Рисунок 6.2 – Форма приложения
    и можно будет вводить записи. При нажатии на кнопку "Сортировать" будет проведена сортировка ведомости по убыванию среднего балла и диалоговое окно примет вид, как на рисунке 6.2. Затем при нажатии на кнопку “Сохранить” будет создан текстовой файл, содержащий отсортированную ведомость. Файл записей закрывается одновременно с программой при нажатии на кнопку "Close".

    Текст программы:
    Unit LabRab_6;

    Interface

    Uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs, Buttons, StdCtrls;
    Type

    TForm1 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Button1: TButton;

    Button2: TButton;

    Button3: TButton;

    Button4: TButton;

    Button5: TButton;

    BitBtn1: TBitBtn;

    OpenDialog1: TOpenDialog;

    SaveDialog1: TSaveDialog;

    Memo1: TMemo;

    Procedure FormCreate(Sender: TObject);

    Procedure Button1Click(Sender: TObject);

    Procedure Button2Click(Sender: TObject);

    Procedure Button3Click(Sender: TObject);

    Procedure Button4Click(Sender: TObject);

    Procedure Button5Click(Sender: TObject);

    Procedure BitBtn1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;
    Type

    TStudent = record

    FIO : string[40]; //Поле Ф.И.О.

    otc : array[1..3] of word; //Поле массива оценок

    sball : extended; //Поле среднего балла

    end;
    var

    Fz : file of TStudent; //Файл типа запись

    Ft : TextFile; //Текстовой файл

    Stud : array[1..100] of TStudent; //Массив записей

    Nzap : integer; //Номер записи

    FileNameZ, FileNameT : string; //Имена файлов
    var

    Form1: TForm1;
    Implementation

    {$R *.dfm}
    Procedure TForm1.FormCreate(Sender: TObject);

    begin

    Edit1.Text := '';

    Edit2.Text := '';

    Edit3.Text := '';

    Edit4.Text := '';

    Memo1.Clear;

    Button1.Hide; //Сделать невидимой кнопку "Ввести запись"

    Nzap := 0;

    end;
    Procedure TForm1.Button1Click(Sender: TObject);

    begin

    nzap := nzap + 1;

    with stud[nzap] do

    begin

    FIO := Edit1.Text;

    otc[1] := StrToInt(Edit2.Text);

    otc[2] := StrToInt(Edit3.Text);

    otc[3] := StrToInt(Edit4.Text);

    sball := (otc[1] + otc[2] + otc[3])/3;

    Memo1.Lines.Add(fio + '' + IntToStr(otc[1 ]) +

    ' ' + IntToStr(otc[2]) + '' + IntToStr(otc[3]));

    end;
    Write(fz, Stud[nzap]); //Запись в файл

    Edit1.Text := '';

    Edit2.Text := '';

    Edit3.Text := '';

    Edit4.Text := '';

    end;
    Procedure TForm1.Button2Click(Sender: TObject);

    begin

    OpenDialog1.Title := 'Создать новый файл';

    // Изменение заголовка окна диалога

    if OpenDialog1.Execute then

    // Выполнение стандартного диалога выбора имени файла

    begin

    FileNameZ := OpenDialog1.FileName;

    // Возвращение имени дискового файла

    AssignFile(Fz, FileNameZ);

    // Связывание файловой переменной Fz с именем файла

    Rewrite(Fz); //Создание нового файла

    Button1.Show; //Сделать видимой кнопку "Ввести запись"

    end;

    end;
    Procedure TForm1.Button3Click(Sender: TObject);

    begin

    if OpenDialog1.Execute then

    //Выполнение стандартного диалога выбора имени файла

    begin

    FileNameZ := OpenDialog1.FileName;

    // Возвращение имени дискового файла

    AssignFile(Fz, FileNameZ);

    // Связывание файловой переменной Fz с именем файла

    Reset(Fz); //Открытие существующего файла

    end;
    While not EOF(fz) do

    begin

    nzap := nzap + 1;

    Read(fz, stud[nzap]); //Чтение записи из файла

    with stud[nzap] do

    Memo1.Lines.Add(fio + '' + IntToStr(otc[1]) +

    ' ' + IntToStr(otc[2]) + '' + IntToStr(otc[3]));

    end;

    Button1.Show; //Сделать видимой кнопку "Ввести запись"

    end;
    Procedure Tform1.Button4Click(Sender: TObject);

    // Сортировка записей

    var

    i, j : word;

    st : Tstudent;

    begin

    for i := 1 to nzap-1 do

    for j := i + 1 to nzap do

    if Stud[i].sball < Stud[j].sball then

    begin

    st := Stud[i];

    Stud[i] := Stud[j];

    Stud[j] := st;

    end;
    Memo1.Clear;

    for i := 1 to nzap do

    // Вывод в окно Memo1 отсортированных записей

    with stud[i] do

    Memo1.Lines.Add(IntToStr(i) + '' +

    fio + '' + FloatToStrF(sball, ffFixed, 4, 2));

    end;
    Procedure Tform1.Button5Click(Sender: TObject);

    // Сохраниение результатов сортировки в текстовом файле

    var

    i : word;

    begin

    if SaveDialog1.Execute then

    // Выполнение стандартного диалога выбора имени файла

    begin

    FileNameT := SaveDialog1.FileName;

    // Возвращение имени дискового файла

    AssignFile(Ft, FileNameT);

    // Связывание файловой переменной Ft с именем файла

    Rewrite(Ft); //Открытие нового текстового файла

    end;
    for i:=1 to nzap do

    with stud[i] do

    Writeln(Ft, i:4, '.', fio, sball:8:2);

    // Запись в текстовой файл

    CloseFile(Ft); //Закрытие текстового файла

    end;
    Procedure TForm1.BitBtn1Click(Sender: TObject);

    begin

    CloseFile(fz);

    // Закрытие файла записей при нажатии на кнопку "Close"

    end;

    {

    Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

    begin

    CloseFile(fz);

    // Закрытие файла записей при нажатии на кнопку

    end;

    }

    end.

    1   ...   7   8   9   10   11   12   13   14   ...   24


    написать администратору сайта