рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Действия с типизированными файлами

Действия с типизированными файлами - раздел Программирование, Основы программирования в среде turbo delphi учебное пособие Типизированные Файлы...

Типизированные файлы представляют собой последовательность компонентов одного типа. Они, в отличие от текстовых файлов, предполагают произвольный доступ к элементам файла по их номеру (нумерация от нуля) [6]. Покажем реализацию действий на конкретном примере. Создадим приложение с интерфейсом для выполнения основных действий с несложной по структуре базой данных о студентах некоторой группы. Разместим на форме компоненты TMainMenu (меню), TStringGrid (таблица записей файла) и TImage (картинка на форме). С первыми двумя компонентами мы уже знакомы. Компонент TImage вкладки Additional позволяет отображать иллюстрации, фото, рисунки. Картинку можно задать на этапе разработки формы (как значки для пунктов меню) или загрузить из файла при запуске программы. Файл с картинкой должен быть в bmp-формате или в формате jpg (jpeg). В последнем случае необходимо включить в текст модуля директиву uses jpeg. В нашем примере мы будем отображать фото группы (см. рисунок) вместе с созданием главной формы следующей процедурой.

procedure TForm1.FormCreate(Sender: TObject);

begin

Image1.Picture.LoadFromFile('gruppa.jpeg');

end;

Объект Picture (свойство Image1) представляет собой картинку, которую загружает из файла gruppa.jpeg метод LoadFromFile. При размещении на форме Image1 следует задать значения и другим его свойствам:

· AutoSize = false – признак автоматического изменения размера компонента в соответствии с реальным размером иллюстрации;

· Strech = true – признак автоматического масштабирования картинки в соответствии с реальным размером компонента;

· Proportional = true – признак автоматического масштабирования без искажения картинки;

· Align = alClient – задает границу формы, к которой привязан компонент. Значение alClient означает, что размер изображения будет изменяться автоматически с изменением клиентской части формы (ее внутренней части). Полезно познакомиться и с другими свойствами объекта Image.

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

unit Unit2;

// Модуль с параметрами

interface

type

student = record // Тип записей в файле

fio : string[30];

sb : real;

end;

var

s : ShortString = 'gruppa'; // Имя файла на диске

zapis : student;

// Файловая переменная для работы с типизированным файлом

f : file of student;

implementation

end.

Теперь реализуем обработчики кликов по пунктам меню.

procedure TForm1.N10Click(Sender: TObject);

begin // Пункт "Выход" секции "Файл"

Form1.Close; // Закрытие основной формы приводит к прекращению

end; // работы приложения

 

procedure TForm1.N2Click(Sender: TObject);

var // Пункт "Открыть" секции "Файл"

i, n : integer;

begin

AssignFile(f, s);

if not FileExists(s) then ShowMessage('Файл отсутствует')

else begin // Если файл существует

StringGrid1.Visible := true; // Сделать видимой таблицу записей

StringGrid1.Cells[1,0] := 'Фамилия Имя Отчество';

StringGrid1.Cells[2,0] := 'Средний балл';

reset(f); // Открываем файл для действий с ним

i := 1;

n := FileSize(f); // Определяем количество записей в файле

StringGrid1.RowCount := n + 1; // Задаем количество строк в таблице

while not EOF(f) do // Пока не конец файла

begin

StringGrid1.Cells[0,i] := IntToStr(i); // Нумеруем строку

read(f, zapis); // Читаем из файла запись в переменную zapis

StringGrid1.Cells[1,i] := zapis.fio;

StringGrid1.Cells[2,i] := FloatToStr(zapis.sb);

inc(i);

end;

CloseFile(f);

end;

end;

 

procedure TForm1.N3Click(Sender: TObject);

begin // Пункт "Добавить" секции "Файл"

Form1.Visible := false; // Делаем невидимой главную форму

Form3.Visible := true; // и видимой вспомогательную форму

end;

В результате выполнения команды "Добавить" откроется форма, предназначенная для ввода полей записи, добавляемой в файл. Представим обработчики событий, связанных с щелчками по кнопкам этой формы.

procedure TForm3.Button1Click(Sender: TObject);

var // Записать

n, i : integer;

begin

if (Edit1.Text = '') or (Edit2.Text = '') then

ShowMessage('Нет данных')

else begin

AssignFile(f, s);

zapis.fio := Edit1.Text;

zapis.sb := StrToFloat(Edit2.Text);

if not FileExists(s) then rewrite(f) // Если файла нет, он создается

else begin // Если файл существует

reset(f);

n := FileSize(f);

seek(f, n); // Указатель в файле à за последнюю запись

write(f, zapis); // Добавление записи в файл

CloseFile(f);

reset(f); // Указатель à на первую запись файла

Form1.StringGrid1.Visible := true;

Form1.StringGrid1.Cells[1,0] := 'Фамилия Имя Отчество';

Form1.StringGrid1.Cells[2,0] := 'Средний балл';

i := 1;

n := FileSize(f); // Определяем количество записей в файле

Form1.StringGrid1.RowCount := n + 1;

while not EOF(f) do // Пока не конец файла

begin // вывод записей из файла в таблицу

Form1.StringGrid1.Cells[0,i] := IntToStr(i);

read(f, zapis); // Читаем из файла запись в zapis

Form1.StringGrid1.Cells[1,i] := zapis.fio;

Form1.StringGrid1.Cells[2,i] := FloatToStr(zapis.sb);

inc(i);

end;

Edit1.Text := '';

Edit2.Text := '';

Edit1.SetFocus;

Form3.Visible := false;

Form1.Visible := true;

end;

end;

end;

 

procedure TForm3.Button2Click(Sender: TObject);

begin // Отмена записи в файл

Edit1.Text := '';

Edit2.Text := '';

Edit1.SetFocus;

Form3.Close; // Вариант действий с формой ввода записи

Form1.Visible := true;

end;

Покажем код еще одной процедуры, сортирующей записи в файле по среднему баллу и выводящей результат сортировки в таблицу.

procedure TForm1.N8Click(Sender: TObject);

var // Сортировка по среднему баллу

i, j, n : integer;

flag : 0..1; // Признак обмена

z1, z2 : student;

begin

AssignFile(f, s);

if not FileExists(s) then ShowMessage('Файл отсутствует')

else begin

reset(f);

n := filesize(f); // n - число записей в файле

if n > 1 then // если в файле 0 или 1 запись, то не сортируем

for j := 0 to n-2 do // Сортировка методом просеивания

begin

for i := j downto 0 do

begin

flag := 0;

seek(f, i); // позиционирование маркера на i-ю запись в файле

read(f, z1, z2); // чтение двух записей, идущих друг за другом

if z1.sb < z2.sb then // сравнение средних баллов в них

begin

flag := 1;

seek(f, i);

write(f, z2, z1); // обмен записей в файле

end;

if flag = 0 then break // Если обменов нет,

end // то сортировка завершена

end;

reset(f);

i := 1;

while not EOF(f) do // Пока не конец файла

begin

StringGrid1.Cells[0,i] := IntToStr(i);

read(f, zapis); // Читаем из файла запись в zapis

StringGrid1.Cells[1,i] := zapis.fio;

StringGrid1.Cells[2,i] := FloatToStr(zapis.sb);

inc(i);

end;

CloseFile(f); // закрытие файла

end;

end;

И наконец, реализуем действия, связанные с удалением записи.

procedure TForm1.N4Click(Sender: TObject);

var // Пункт "Удалить" секции "Файл"

p, i, n : integer;

res : word; // Тип результата функции MessageDlg

begin // Вызываем модальное окно диалога

res := MessageDlg('Вы действительно хотите'#13#10'Удалить эту запись?',

mtConfirmation, [mbYes, mbNo], 0);

if res = mrYes then begin // mrYes соответствует кнопке mbYes

p := StringGrid1.Row; // Выделенная (удаляемая) строка в таблице

AssignFile(f, s);

reset(f);

n := FileSize(f); // Количество записей в файле

if p = 1 then // Если удаляется первая запись

if n = 1 then // Если она одна в файле, то

truncate(f) // пишем в ее позицию EOF,

else begin // а иначе переписываем все записи,

while p < n do // сдвигая их на одну влево

begin

seek(f, p);

read(f, zapis);

seek(f, p - 1);

write(f, zapis);

inc(p);

end;

dec(p);

truncate(f); // Усекаем файл на одну запись – пишем EOF

end

else if p = n then begin // Если запись не одна и она последняя,

seek(f, p - 1); // то указатель в файле à на нее

truncate(f); // и пишем туда EOF

end

else begin // Для всех остальных p и n

while p < n do

begin

seek(f, p);

read(f, zapis);

seek(f, p - 1);

write(f, zapis);

inc(p);

end;

dec(p);

truncate(f);

end;

StringGrid1.RowCount := 1; // Оставляем у таблицы только шапку

reset(f); // Указатель в файле на первую запись

i := 1;

while not EOF(f) do begin // Пока не конец файла

StringGrid1.RowCount := StringGrid1.RowCount + 1;

StringGrid1.Cells[0, i] := IntToStr(i);

read(f, zapis); // Читаем из файла запись в zapis

StringGrid1.Cells[1, i] := zapis.fio;

StringGrid1.Cells[2, i] := FloatToStr(zapis.sb);

inc(i);

end;

CloseFile(f); end; end;

При удалении записи мы воспользовались еще одной формой окна диалога, вызываемого функцией MessageDlg(). Первый ее параметр задает текст сообщения, второй – тип окна (mtWarning – внимание; mtError – ошибка; mtInformation – информация; mtConfirmation – запрос; mtCustom – без значка), третий – множество командных кнопок окна диалога (mbYes, mbNo, mbOk, mbCancel, mbHelp, mbAbort, mbRetry, mbIgnore, mbAll) и четвертый – задает раздел справочной системы программы (при отсутствии – 0). Функция возвращает код кнопки, щелкнув по которой, пользователь закрыл окно диалога (значением функции становятся соответствующие кнопкам константы: mrYes … mrAll).

Варианты задания

1. Создать файл данных о сотрудниках отдела: ФИО, должность, стаж. Отсортировать содержимое файла по убыванию стажа работы.

2. Сравнить два файла, содержащие по 10 целых чисел.

3. Занести 6 случайно выбранных значений перечисляемого типа в файл.

4. На основе файла с символами создать файл с их порядковыми номерами по таблице кодировки.

5. На основе файлов исходных данных создать файл значений функции XOR и вывести данные из файлов в виде таблицы истинности.

6. В файле из символов переписать символы в обратном порядке.

7. Отсортировать строки файла по нарастанию их длины.

8. Создать файл из 7 чисел и записать на первую позицию их сумму.

9. Записать в файл средние значения всех пяти векторов исходного файла.

10. В файл из нескольких строчных латинских букв вставить после каждой из них аналогичную прописную букву.

11. Переписать файл из 3 пятиэлементных векторов в файл целых чисел.

12. На основе файла записей о деталях создать файл с их массами.

13. В файле из 10 целых чисел поменять местами четные и нечетные эле менты файла.

14. В файле из 10 вещественных чисел сделать первые пять чисел последними и наоборот.

15. В файле из трех пятиэлементных векторов расположить векторы в порядке возрастания их суммы.

16. Создать файл из трех матриц 2х2 и найти сумму элементов каждой.

17. Не используя массива, записать в файл 10 чисел и поменять местами первый и наибольший элементы файла.

18. Содержимое файла из матриц 3х3 переписать в файл из векторов.

19. Из исходного файла с полями: ФИО, возраст, - создать файл возрастов.

20. Из двух файлов с именами и адресами создать результирующий файл.

– Конец работы –

Эта тема принадлежит разделу:

Основы программирования в среде turbo delphi учебное пособие

Рязанский государственный радиотехнический университет.. в в карасев основы.. редактор м е цветкова..

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Действия с типизированными файлами

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

В.В. КАРАСЕВ
  ОСНОВЫ ПРОГРАММИРОВАНИЯ в среде TURBO DELPHI Учебное пособие    

Модель решения задачи в Turbo Delphi
В основе разработки приложения в среде Turbo Delphi (далее для краткости – TD) лежит объектно-ориентированная методология [2, 3, 4]. Кратко напомним ее главные постулаты. Предметную область решаемо

Файлы проекта
Проект TD состоит из форм, модулей, установок параметров проекта, ресурсов и т.д. Вся эта информация представлена в файлах, многие из которых создаются средой автоматически при построении приложени

Типы данных в Delphi
Язык Delphi базируется на известных по языку Turbo Pascal простых типах данных: целых, вещественных, символьных и логических. Однако в нем появились новые имена типов, а некоторые типы получили дру

Основная форма и ее свойства
Как выглядит форма, так и предстанет перед нами окно нашей программы после ее запуска на выполнение. Все создаваемые формы происходят от класса TForm (наследуют его методы и свойства) и полу

Палитра базовых компонентов
Палитра компонентов состоит из нескольких вкладок. Кратко охарактеризуем их. На вкладке Standardнаходятся компоненты, которые являются аналогами компонентов Windows. Вкладка Additional

Стандартные диалоги при работе с файлами
Чтобы открыть файл для реализации действий с его содержимым, используют компонент TOpenDialog вкладки Dialogs, а для сохранени

Исключения и их обработка
Мы уже обращали внимание на ошибки, возникающие в процессе выполнения программы, на так называемые исключения (с. 13). Это динамические ошибки, причиной которых чаще всего являются недопустимые исх

Рекурсивные вычисления
Рекурсивные подпрограммы основаны на их обращении к самим себе [6]. Описание действий в таких подпрограммах обязательно содержит терминальную ситуацию, в которой результат получается непосредственн

Обработка текстовых файлов
Текстовые файлы представляют собой поименованную последовательность символов на внешнем носителе, разбитую на строки [6]. В п. 7.2 был приведен пример действий над такими файлами с использованием м

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги