Меню сайта
Форма входа
Категории раздела
Учебник по Паскалю [13] Практика [23]
примеры программ
Главная » Статьи » Pascal » Практика

Использование динамической памяти

Исходный код программы:


program NZLAB_8A;

uses crt;

type

rec=record

family,name,surname:string[26];

ADR:string[26];

mark:string[26];

year:string[5];

color:string[26];

enige:string[26];

number:string[10];

end;


base=array[1..1]of rec;

link=^base;

proc_out=procedure(var all_base:link;var i:integer);

proc_in=procedure(var all_base:link;var i:integer);

var

all_base:link;

i:integer;

k:boolean;

{$R-}

{$F+}

procedure card_out(var vsa_baza:link;var i:integer);

begin


with all_base^[i] do begin

writeln('╔═══════════╤═══════════════════════════╗');

writeln('Фамилия:',family:27,'');

writeln('Имя:',name:27,'');

writeln('Отчество:',surname:27,'');

writeln('Адрес:',adr:27,'');

writeln('Марка:',mark:27,'');

writeln('Год:',year:27,'');

writeln('Цвет:',color:27,'');

writeln('Движок:',enige:27,'');

writeln('Номер:',number:27,'');

writeln('╚═══════════╧═══════════════════════════╝');

end;

end;

procedure card_in(var all_base:link;var i:integer);

begin

if all_base=nil then

begin

writeln('MEMORY END');

readln;

halt;

end;

writeln('Вы заполняете карточку №',i);

with all_base^[i] do begin

write('Фамилия: ');

readln(family);

write('Имя: ');

readln(name);

write('Отчество: ');

readln(surname);

write('Адрес: ');

readln(adr);

write('Марка: ');

readln(mark);

write('Год выпуска: ');

readln(year);

write('Цвет: ');

readln(color);

write('Двигатель: ');

readln(enige);

write('Гос.номер: ');

readln(number);

end;

end;

{$F-}

procedure inrec(vvod_kartoshki:proc_in;card_out:proc_out;var i:integer;var k:boolean);

var

x:char;

n,y:integer;

begin

y:=0;

clrscr;

writeln('Введите количество вводимых записей');

readln(n);

n:=n+i;

y:=i+1;

while y<=n do

begin

clrscr;

card_in(all_base,y);

clrscr;

writeln('Проверьте введенные данные и подтвердите ',

'занесение в базу:');

card_out(all_base,y);

y:=y+1;

writeln;

writeln('Сохранить данные или повторить ввод?');

writeln('AnyKey-Сохранить,2-Повторить ввод: ');

x:=readkey;

if x='2' then

y:=y-1;

end;

k:=false;

i:=y-1;

end;

procedure outrec(card_out:proc_out;var i:integer; var k:boolean);

var

x,y:integer;

begin

clrscr;

if i=0 then

begin

writeln('В базе нет элементов');

readln;

k:=false;

exit;

end;

y:=0;

repeat

clrscr;

y:=y+1;

writeln('Выводится элемент',y);

card_out(all_base,y);

readln;

until y>=i;

clrscr;

writeln('Элементы закончились');

readln;

k:=false;

end;

procedure search(card_out:proc_out;var i:integer; var k:boolean);

var

stroka:string;

x,y:integer;

z:char;

flag:boolean;

begin

clrscr;

if i=0 then

begin

writeln('В базе нет элементов');

readln;

k:=false;

exit;

end;

writeln('Введите строку для поиска (одно слово или одно поле)');

readln(stroka);

clrscr;

for x:=1 to i do

begin

flag:=true;

with all_base^[x] do

begin

y:=pos(stroka,family);

if y=0 then

y:=pos(stroka,name);

if y=0 then

y:=pos(stroka,surname);

if y=0 then

y:=pos(stroka,adr);

if y=0 then

y:=pos(stroka,mark);

if y=0 then

y:=pos(stroka,year);

if y=0 then

y:=pos(stroka,color);

if y=0 then

y:=pos(stroka,enige);

if y=0 then

y:=pos(stroka,number);

if y<>0 then

begin

writeln('Найдена карточка',x);

card_out(all_base,x);

flag:=false;

writeln;

writeln('Нажмите AnyKey-Для продолжения

поиска, 2-Для выхода ');

z:=readkey;

clrscr;

if z='2' then exit;

end;

end;

end;

if flag then

writeln('Ничего не найдено')

else

writeln('Поиск успешно завершен');

readln;

k:=false;

end;

procedure delete(card_out:proc_out;var i:integer; var k:boolean);

var

x,z:integer;

y:char;

begin

clrscr;

if i=0 then

begin

writeln('В базе нет элементов');

readln;

k:=false;

exit;

end;

write('Введите номер элемента: ');

readln(x);

if (x>i) or (x<=0) then

begin

clrscr;

writeln('Удаление невозможно , элемента не существует');

readln;

k:=false;

exit;

end;

card_out(all_base,x);

writeln;

writeln('Вы хотите удалить эту запись? (1-Да\AnyKey-Нет)');

y:=readkey;

if y='1' then

begin

for z:=x to i-1 do

all_base^[z]:=all_base^[z+1];

i:=i-1;

end;

k:=false;

end;

procedure main_menu(var i:integer; var k:boolean);

var

g:char;

begin

clrscr;

window(14,6,66,24);

writeln('Вы находитесь в главном меню БД ДПС v1.0 Записей: ',i);

writeln;

writeln('Выберете действие:');

writeln('┌───┬────────────────────────┐');

writeln('│ 1 │Ввод новых элементов │ ');

writeln('│ 2 │Вывод элементов на экран│');

writeln('│ 3 │Поиск в базе по ключу │');

writeln('│ 4 │Удаление элемента │');

writeln('│ 5 │Завершение работы │');

writeln('└───┴────────────────────────┘');

g:=readkey;

case g of

'1':inrec(card_in,card_out,i,k);

'2':outrec(card_out,i,k);

'3':search(card_out,i,k);

'4':delete(card_out,i,k);

'5':k:=true

else writeln('Неправильная команда');

end;

end;

begin

textcolor(15);

textbackground(1);

new(all_base);

k:=true;

i:=0;

main_menu(i,k);

while k=false do

main_menu(i,k);

dispose(all_base);

end.


Категория: Практика | Добавил: nazgull (07.03.2012)
Просмотров: 641 | Теги: работа с памятью паскаль, динамическая память пример, memory, pascal dynamic, база данных на паскале, БД на паскале, примеры баз данных паскаль | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Ссылки