Лабораторная работа №10 Тема: Программирование с использованием записей. | |
Автор: drug | Категория: Прочее | Просмотров: | Комментирии: 0 | 21-08-2013 11:21 |
Лабораторная работа №10
Тема: Программирование с использованием записей.
Цель работы: Закрепить знания по вводу и выводу данных, работу с файлами в среде Delphi. Овладение навыками создания приложений, обрабатывающие данные типа запись.
Время выполнения: 2 часа
Теоретическая часть.
Тип данных «Запись»
Массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию. Точно так же, описывая автомобиль, мы укажем не только его марку, но и год выпуска, модификацию, да и цвет кузова может нас заинтересовать. Составляя автоматизированный каталог книгохранилища, мы для каждой книги должны указать ее название, имя автора, область знания, количество страниц, год издания, а также, возможно, признак нахождения на руках или в хранилище.
Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Object Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.
Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.
Например, анкетные данные о студенте колледжа могут быть представлены в виде информационной структуры:
В Object Паскале эта информация может храниться в одной переменной типа record (запись). Задать тип можно следующим образом:
type < имя _ типа >=record
<имя_поля1>: тип;
<имя_поля2>: тип;
………………….
<имя_поля K >: тип
end ;
где record – служебное слово, а <имя_типа> и <имя_поля> - идентификаторы языка Object Паскаль.
Пример фрагмента программы описания записи:
Type anketa=record
fio: string[45];
pol: char;
dat_r: string[8];
adres: string[50];
curs: integer;
grupp: string[3];
end;
После того, как определен тип записи Паскаля, можно определять переменную этого типа. Переменная определяется путем задания ее идентификатора и указания типа.
var
student: anketa;
Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Object Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:
<имя_записи>.<имя_поля>
Например, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя:
student.curs :=3;
Единственная операция, которую можно произвести над однотипными записями Object Паскаля – это присваивание.
Все другие операции производятся над отдельными полями записи.
Рассмотрим для начала простейший пример заполнения записи Object Паскаля и вывода ее на экран.
Пример 1:
Пусть нам необходимо заполнить сведения о студенте (Ф.И.О., дата рождения, адрес, курс и группа), а затем вывести эти сведения на экран. Разместите на Форме компоненты так, как показано на рисунке 1. Для организации ввода и вывода данных создадим процедуру обработки события нажатия кнопки Button1, а именно Procedure TForml.Buttonl Click.
Рис. 1. Вид формы
Текст модуля:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label4: TLabel;
Edit4: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type anketa=record
fio: string[45];
dat_r: string[8];
curs: integer;
grupp: string[3]
end;
var student: anketa;
st:string;
procedure TForm1.Button1Click(Sender: TObject);
begin
student.fio:=edit1.Text;
student.dat_r:= edit2.Text;
student.curs:= StrToInt(edit3.Text);
student.grupp:= edit4.Text;
st:= student.fio+#13+student.dat_r+#13+
IntToStr(student.curs)+#13+student.grupp;
showmessage(st);
end;
end.
Оператор доступа
Оператор доступа with позволяет использовать в тексте программы имена полей без указания имени переменной-записи:
with <имя_записи> do <действие с полем записи>;
Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).
Например, фрагмент из предыдущей программы с использованием оператора присоединения будет выглядеть так:
procedure TForm1.Button1Click(Sender: TObject);
begin
with student do
begin
fio:=edit1.Text;
dat_r:= edit2.Text;
curs:= StrToInt(edit3.Text);
grupp:= edit4.Text;
st:=fio+#13+student.dat_r+#13+
IntToStr(curs)+#13+grupp;
end;
showmessage(st);
end;
Если необходимо иметь сведения о многих студентах, например, нашей специальности. Следовательно, необходимо организовать массив записей:
var student: array [1..100] of anketa;
Для работы с массивами удобно использовать компонент StrinGrid, рассмотрим следующий пример.
Пример 2. Через компонент StringGrid вводится массив записей: сведения о студентах. Выводятся на форму данные на студента, фамилия которого начинается на букву Т.
Вид формы:
Текст программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button3: TButton;
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const n=3;
type anketa=record
fio: string[45];
dat_r: string[8];
curs: integer;
grupp: string[3]
end;
var student: anketa;
a:array[1..3] of anketa;
st:string;
procedure TForm1.FormCreate(Sender: TObject);
var
i:integer;
begin
with StringGrid1 do
begin
Cells[0,0]:='№пп';
Cells[1,0]:='Фамилия';
Cells[2,0]:='Дата рождения';
Cells[3,0]:='Курс';
Cells[4,0]:='Группа';
for i:=1 to n do
Cells[0,i]:=IntToStr(i);
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var
i:integer; st:string;
begin
st:='Результат'+#13;
with StringGrid1 do
for i:=1 to n do
begin
with a[i] do
begin
// формирование полей массива записей
fio:=Cells[1,i];
dat_r:=Cells[2,i];
curs:=StrToInt(Cells[3,i]);
grupp:=Cells[4,i];
if fio[1]='Т' then st:=st+fio+' '+dat_r+' '+IntToStr(curs)+' '+grupp+#13;
end; end;
showmessage(st);
end;
end.
Самостоятельная работа
Разработать приложение в соответствии со своим вариантом: создать структуру типа «запись», ввести через StringGrid и выполнить задание. Параметры для отбора ввести через компонент Edit.
1. Дан массив заявок. Каждая заявка содержит:
- пункт назначения;
- номер рейса;
- фамилию и инициалы пассажира;
- желаемую дату вылета.
Вывести заявки по номеру рейса.
2. Дан массив записей, который содержит сведения о каждом автобусе
- номер автобуса;
- фамилию и инициалы водителя;
- номер маршрута;
- признак того, где находится автобус на маршруте или в парке.
Вывести сведения об автобусах находящихся в парке.
3. Дан массив записей, хранящий записи о владельцах автомототранспорта:
- марка,
- номер,
- дата постановки на учет,
- ФИО владельца.
Вывести записи по дате постановки на учет.
4. Информация в больничной базе данных о стационарных больных имеет следующую структуру:
- ФИО больного;
- возраст;
- дата поступления;
- адрес;
- диагноз.
Вывести данные по диагнозу.
5. Дан массив записей служащих, состоящий из имени, фамилии, отчества служащего, даты рождения, образования, домашнего адреса, профессии.
Вывести служащих по профессии.
6. Дан массив записей, содержащий сведения о поездах:
- номер поезда;
- станция назначения;
- время отправления.
Вывести данные по станции назначения.
7. Дан массив записей, запись о каждой квартире содержит:
- количество комнат;
- этаж;
- площадь;
- адрес.
Вывести данные по количеству комнат.
8. Дан массив записей, хранящий записи о владельцах автомототранспорта:
- марка,
- номер,
- дата постановки на учет,
- ФИО владельца.
Вывести данные по марке.
9. Дан массив записей, хранящий сведения о служащих:
- фамилия и инициалы;
- должность;
- год поступления на работу;
- оклад.
Вывести записи по году поступления на работу.
10. Дан массив, содержащий результаты измерений температуры воздуха, которые проводились ежедневно в течение января месяца:
- день месяца;
- температура утром;
- температура днем;
- температура вечером;
- температура ночью.
Вывести данные на те дни, когда температура утром меньше 25.
11. Дан массив, содержащий сведения о заработной плате сотрудников предприятия:
- № отдела;
- ФИО;
- Сумма к получению.
Вывести сведения на сотрудника по номеру отдела.
12. Дан массив записей, содержащий сведения об экспортируемых товарах:
- наименование товара;
- страна, импортирующая товар;
- объем поставляемой партии в штуках.
- Цена товара
Вывести страны, в которые экспортируется данный товар.
13. Дан массив записей, содержащий сведения о багаже нескольких пассажиров:
- фамилия пассажира;
- количество вещей (целое число);
- общий вес (действительное число).
Вывести пассажиров, имеющих более двух вещей.
- 1. 14. Дан массив записей, содержащий сведения об игрушках магазина: название (куклы, конструкторы, кубики и т.д.); цена в руб.; возрастные границы.
Вывести игрушки по названию магазина.
15. Дан массив записей, содержащий сведения о книгах:
- номер УДК;
- фамилию и инициалы автора;
- название;
- год издания;
- количество экземпляров данной книги в библиотеке.
Вывести сведения о книгах по году издания.
16. Дан массив записей, содержащий сведения об игрушках магазина:
- название (куклы, конструкторы, паззлы, кубики и т.д.);
- цена в руб.;
- возрастные границы.
Вывести записи по возрастным границам.
17. Дан массив записей, содержащий следующие сведения:
- имя файла;
- дата создания;
- количество обращений к файлу.
Вывести данные по дате создания
18. Дан массив записей, представляющий собой записную книжку, содержащий сведения о знакомых:
- фамилия;
- имя;
- дата рождения в формате ДД. ММ.ГГ;
Вывести данные по дате рождения.