Описание программы: База данных, в неё заносится следующая информация:
- автор книги
- название книги
- цена книги
Возможные действия с базой данных:
- создание списка
- добавление в список
- нахождение по цене
- удаление элемента по номеру
Вывод БД происходит в таблице по 4 элемента на странице (экране)
Пару слов про переменные:
- book – является основным массивом (в него всё записывается)
- opis – массив, в который записываются книги с одинаковой ценой
- d:mas – массив, содержащий номера элементов из главного массива (book)
program laba3;
uses crt;
type
mas=array [1..20] of integer;
zap=record
FIO:string[15];
name:string[15];
cena:real;
end;
spisok=array [1..16] of zap;
ptrspisok=^spisok;
procname=procedure (n:integer; opis:ptrspisok);
var
book,opis:ptrspisok;
j,n,k:integer;
d:mas;
{$F+}
procedure sozd(var n:integer; var book:ptrspisok);
var
i:integer;
begin
clrscr;
if book<>nil then begin
writeln('spisok uge sozdan');
writeln('dla prodolgenia nagmi Enter');
readln;
exit;
end;
writeln('vvedite kolichestvo knig: ');
readln(n);
clrscr;
new(book);
for i:=1 to n do
with book^[i] do begin
writeln ('nomer : ',i);
writeln('vvedite FIO: ');
readln(FIO);
writeln('vvedite name: ');
readln(name);
writeln ('vvedite cenu: ');
readln(cena);
clrscr;
end;
end;
procedure add( var book:ptrspisok; var n:integer );
var
k,i:integer;
begin
clrscr;
if book=nil then begin
writeln('spisok ne sozdan');
writeln('dla prodolgenia nagmi Enter');
readln;
exit;
end;
writeln('vvedite kolichesrvo vvodimih knig: ');
readln(k);
clrscr;
for i:=n+1 to n+k do
with book^[i] do begin
writeln ('nomer : ',i);
writeln('vvedite FIO: ');
readln(FIO);
writeln('vvedite name: ');
readln(name);
writeln ('vvedite cenu: ');
readln(cena);
clrscr;
end;
n:=n+k;
end;
procedure vivod(n:integer; book:ptrspisok);
var
i,a,b:integer;
begin
clrscr;
if n<3 then b:=n
else b:=3;
a:=1;
while a<=n do begin
clrscr;
writeln(b,' ','iz ',n,' ');
writeln(& #39;ЪДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДД
ДДДДДДВДДДДДДДї');
writeln('і і FIO і name і cena і');
writeln(& #39;ГДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДД
ДДДДДДЕДДДДДДДґ');
for i:=a to b do
with book^[i] do
writeln('і ', i ,' і ',FIO:15, ' і ',name:15,' і ',cena:6:2,'і');
writeln(& #39;АДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДД
ДДДДДДБДДДДДДДЩ');
writeln;
a:=b+1;
if (n-B)<3 then
b:=n
else
b:=b+3;
readln;
end;
end;
procedure poisk(book:ptrspisok; n:integer; var opis:ptrspisok; var j:integer; var d:mas);
var
c:real; i:integer;
begin
clrscr;
writeln('vvedite cenu: ');
readln©;
j:=0;
new(opis);
for i:=1 to n do
if c=book^[i].cena then begin
j:=j+1;
d[j]:=i;
opis^[j]:=book^[i];
end;
end;
procedure delet(var j:integer; vivod:procname; opis:ptrspisok; var d:mas; var k,n:integer; var book:ptrspisok);
var
b,i,c:integer; l:char; m:ptrspisok;
begin
k:=0;
repeat
repeat
repeat
clrscr;
vivod(j,opis);
writeln('budete udaliat element (y/n) : ');
readln(l);
if (l<>'y') and (l<>'n') then begin
writeln ('otvet nepravelnei');
writeln('poprobuite ehe raz');
readln;
end;
until (l='y') or (l='n');
if l='n' then exit;
repeat
clrscr;
vivod(j,opis);
writeln('vvedite nomer udaliaemoi knigi: ');
readln(B);
if (b>j) or (b<1) then begin
writeln('takogo nomera v spiske net');
writeln('poprobuite v sleduushii raz');
readln;
end;
until (b<=j) and (b>=1);
repeat
clrscr;
writeln(& #39;ЪДДДДДВДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДД
ДДДДДДВДДДДДДДї');
writeln('і і FIO і name і cena і');
writeln(& #39;ГДДДДДЕДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДД
ДДДДДДЕДДДДДДДґ');
with opis^[b] do
writeln('і ', b ,' і ',FIO:15, ' і ',name:15,' і ',cena:6:2,'і');
writeln(& #39;АДДДДДБДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДД
ДДДДДДБДДДДДДДЩ');
writeln;
writeln('vi tochno hotite udalit etot element (y/n)');
readln(l);
until (l='y') or (l='n');
until l='y';
for i:=1 to j do begin
if i=b then begin
n:=n-1;
j:=j-1;
for c:=d[i] to n do
book^[c]:=book^[c+1];
for i:=b to j do begin
opis^[i]:=opis^[i+1];
d[i]:=d[i+1]-1;
end;
end;
end;
clrscr;
writeln ('element udalen');
readln;
until l='n'
end;
procedure menu;
var
i:integer; l,y,ch:char;
procedure men (var i:integer);
begin
writeln('spisok knig');
writeln('1-sozdati spisok');
writeln('2-dobavit knigu');
writeln('3-prosmotret spisok');
writeln('4-poisk po cene i udalenie');
writeln('0-vihod');
writeln;
write(': ');
readln(i);
end;
begin
repeat
clrscr;
men(i);
case i of
1:sozd(n,book);
2:add(book,n);
3:vivod(n,book);
4: begin
poisk(book,n,opis,j,d);
delet(j,vivod,opis,d,k,n,book);
end;
0:halt;
else begin
writeln ('net takoi komandi');
writeln ('viberete druguu');
end;
end;
readln;
until i=0;
end;
{F-}
begin
clrscr;
menu;
dispose(book);
dispose(opis);
end.
Проблема:
Необходимо программу переделать с использованием связного списка
(но не через object)
С теми же операциями над базой данной:
- создание списка
- добавление в список
- нахождение по цене
- удаление элемента по номеру
Буду признателен за помощь, очень надо!
Спасибо!