Массив записей в динамической памяти базы данных "Аптека", страница 2

write(f1,'╚═══════╩══════════════╩═════════╩══════════════════════╩════════╩═══════════╝');

close(f1);

end;

end;

end.

Job.pas

unit job;

interface

uses crt,global;

procedure poisk(a:ptr;n:byte);

procedure del(var a:ptr; var n:byte);

implementation

procedure poisk;

var cl:string[14];

t,i,k:byte;

f:boolean;

begin

writeln('Введите название лекарства');

readln(cl);

f:=false;

k:=0;

for i:=1 to n do

with a^[i] do if lek=cl then begin k:=k+1; t:=i; f:=true;

writeln;

write('╔═══════╦══════════════╦═════════╦══════════════════════╦════════╦═══════════╗');

writeln;

write('║ Номер ║ Наименование ║  Шифр   ║ Страна-производитель ║ Кол-во ║ Стоимость ║');

writeln;

write('║аптеки ║  лекарства   ║лекарства║                      ║        ║           ║');

writeln;

writeln('╠═══════╬══════════════╬═════════╬══════════════════════╬════════╬═══════════╣');

with a^[i] do begin

write('║');write(num:4); write('║':4); write(lek:9); write('║':6);

write(shifr:6);write('║':4); write(land:21); write('║':2); write(kol:6); write('║':3);

write(price:8); write('║':4);

writeln;

end;

break;

end;

if f then begin

for i:=t+1 to n do begin

with a^[i] do if lek=cl then begin

k:=k+1;

if k mod 9=0 then begin

write('╚═══════╩══════════════╩═════════╩══════════════════════╩════════╩═══════════╝');

writeln('Нажмите любую клавишу для продолжения':40);

readln;

clrscr;

writeln;

write('╔═══════╦══════════════╦═════════╦══════════════════════╦════════╦═══════════╗');

writeln;

write('║ Номер ║ Наименование ║  Шифр   ║ Страна-производитель ║ Кол-во ║ Стоимость ║');

writeln;

write('║аптеки ║  лекарства   ║лекарства║                      ║        ║           ║');

writeln;

end;

writeln('╠═══════╬══════════════╬═════════╬══════════════════════╬════════╬═══════════╣');

with a^[i] do begin

write('║');write(num:4); write('║':4); write(lek:9); write('║':6);

write(shifr:6);write('║':4); write(land:21); write('║':2); write(kol:6); write('║':3);

write(price:8); write('║':4);

writeln;

end;

end;

end;

write('╚═══════╩══════════════╩═════════╩══════════════════════╩════════╩═══════════╝');

end;

if not f then writeln('запись не найдена');

end;

procedure del;

var

i,t:byte;

lek1:string[14];

f:boolean;

k:char;

begin

writeln('Введите название лекарства:');

readln(lek1);

f:=false;

for i:=1 to n do

if a^[i].lek=lek1 then begin t:=i; f:=true; break; end;

if f then begin

writeln('Удалить запись? y/n');

readln(k);

if k='y' then begin

for i:=t to n-1 do

a^[i]:=a^[i+1];

n:=n-1;   end;

end else writeln('запись не найдена');

end;

end.

Результаты:


Что нужно знать:

·  запись – Структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями записи.

·  операции с записями – К записи в целом применим оператор присваивания (если записи одного типа), все остальное (выражения отношения, арифметические и тд.) применимо только к полям записи.

·  поле записи, селектор – Поле записи – компонента записи определенного типа и имеющая имя. Делятся на фиксированные и вариантной. Вариантная часть задается с помощью оператора  case ... ofи может состоять из нескольких вариантов. Caseзадает особое поле записи – поле признака, которое определяет, какой из вариантов в каждый момент выполнения программы должна быть одна из расположенных в операторе caseконстант – константы выбора (селектора).

·  статическое и динамическое распределения памяти – Статическая память – память выделяемая при запуске программы (код программы, коды подключаемых модулей, сегмент данных (глобальные переменные и типизированные константы), стек); Динамическая память (heap) – память, выделяемая по требованию программы. Heap занимает всю свободную ОП.

·  переменная-указатель (ссылка) – Переменная, занимающая в памяти 4 байта и хранящая в себе адрес первого байта, переменной на значение которой указывает сылка.

·  операции с указателями - ?

·  разветвление программы по нескольким направлениям - ?