Скачиваний:
125
Добавлен:
08.05.2014
Размер:
8.87 Кб
Скачать
Program Books_for_you;
uses crt;
{/* ‚ аЁ ­в 2
‘®бв ўЁвм Їа®Ја ¬¬г, Є®в®а п ᮤҐа¦Ёв ⥪гйго Ё­д®а¬ жЁо ® Є­ЁЈ е ў ЎЁЎ«Ё®вҐЄҐ.
‘ўҐ¤Ґ­Ёп ® Є­ЁЈ е ᮤҐа¦ в:
- Ќ®¬Ґа “„Љ
- ” ¬Ё«Ёо Ё Ё­ЁжЁ «л Ђўв®а 
- Ќ §ў ­ЁҐ
- Ј®¤ Ё§¤ ­Ёп
- Є®««ЁзҐбвў® нЄ§Ґ¬Ї«па®ў ¤ ­­®© Є­ЁЈЁ ў ЎЁЎ«Ё®вҐЄҐ

Џа®Ја ¬¬  ¤®«¦­  ®ЎҐбЇҐзЁў вм:
- Ќ з «м­®Ґ д®а¬Ёа®ў ­ЁҐ ¤ ­­ле ® ўбҐе Є­ЁЈ е ў ЎЁЎ«Ё®вҐЄҐ ў ўЁ¤Ґ
¤ў®Ёз­®Ј® ¤ҐаҐў 
- „®Ў ў«Ґ­ЁҐ ¤ ­­ле ® Є­ЁЈ е, ў­®ўм Ї®бвгЇ ойЁе ў ЎЁЎ«Ёв®вҐЄг.
- “¤ «Ґ­ЁҐ ¤ ­­ле ® ўбЇЁблў Ґ¬ле Є­ЁЈ е
- Џ® § Їа®бг ўл¤ овбп ᢥ¤Ґ­ҐЁп ® ­ «ЁзЁЁ Є­ЁЈ ў ЎЁЎ«Ё®вҐЄҐ, ЄЇ®а冷祭­лҐ Ї®
Ј®¤ ¬ Ё§¤ ­Ёп
*/}



{/* Џа®Ја ¬¬  пў«пҐвбп ­ Ј«п¤­л¬ ЇаҐ¤бвў«Ґ­ЁҐ¬, в®Ј® ­  зв® бЇ®б®ЎҐ­ 祫®ўҐЄ
* Ґб«Ё ҐЈ® ўҐ¦«Ёў® Ї®Їа®бЁвм :)
* ‘®§¤ ­  ¤«п ¤Ґ¬®­бва жЁЁ ЁбЇ®«м§®ў ­Ёп ¤Ё­ ¬ЁзҐбЄЁе бвагЄвга
* (Є®­ЄаҐв­®, ЎЁ­ а­®Ј® ¤ҐаҐў ).
*/}



{/* ЋЇаҐ¤Ґ«Ґ­ЁҐ ўбпзҐбЄЁ© ЇҐаҐ¬Ґ­­ле Ё вЁЇ®ў ­г¦­ле ¤«п а Ў®вл.
*/}

type p_book = ^one_book;
one_book = record
ydk_number : word;
autor_name : string;
book_name : string;
year : word;
numbers : byte;

right : p_book;
left : p_book;
end;

var root : p_book;
exit_code : boolean;
book_name : string;
year : word;




{/* Џа®жҐ¤га  add_book ўбв ў«пҐв ў ¤ҐаҐў® ­®ўл© 㧥«, ў Є зҐб⢥ Ї а ¬Ґва®ў
* ЇҐаҐ¤ Ґвбп Є®аҐ­м ¤ҐаҐў  Ё Ё­д  ¤«п "§ Ї®¬Ё­ ­Ёп". ‚ Є зҐб⢥ Є«оз 
* ЁбЇ®«м§гҐвбп Ј®¤ Ё§¤ вҐ«мбвў  Є­ЁЈЁ Ё ҐҐ ­ §ў ­ЁҐ.
*/}

procedure add_book(var root : p_book; ydk_number : word; autor_name : string; book_name : string; year : word; numbers : byte);
var node : p_book;
a : ^pointer;
begin

a := @root;
node := a^;

while (node <> NIL) do
begin
if (node^.year = year) and (node^.book_name = book_name) then
begin
inc(node^.numbers, numbers); exit;
end
else if (node^.year = year) and (node^.book_name > book_name) then a := @(node^.left)
else if (node^.year = year) and (node^.book_name < book_name) then a := @(node^.right)
else if (node^.year < year) then a := @(node^.right)
else if (node^.year > year) then a := @(node^.left);
node := a^;
end;

getmem(a^, sizeof(one_book));
node := a^;
node^.book_name := book_name; node^.ydk_number := ydk_number;
node^.autor_name := autor_name; node^.book_name := book_name;
node^.year := year; node^.numbers := numbers;
node^.left := NIL; node^.right := NIL;


{ writeln('The book is added');}
end;


{/* Џа®жҐ¤га  delete_book, г¤ «пҐв 㧥« Ё§ ¤ҐаҐў , ў Є зҐб⢥ Ї а ¬Ґва®ў
* ЇҐаҐ¤ Ґвбп Є®аҐ­м ¤ҐаҐў  Ё Ё­д  ЁбЇ®«м§гҐ¬ п ¤«п Є«оз .
*/}

procedure delete_book(var root : p_book; book_name : string; year : word);
var node, nodeb, nodec : p_book;
a, b, c : ^pointer;
label next;
begin
a := @root;
node := a^;

while 1=1 do
begin
if (node = NIL) then
begin
write('Њг¦ЁЄ (Ё«Ё „ҐўгиЄ  :), ­Ґ «гзиҐ «Ё ⥡Ґ Ї®©вЁ ЇЁўЄ ');
write('ўлЇЁвм, ¬®¦Ґв ўбЇ®¬­Ёим Ё­дг ® Є­ЁЈЁ, Є®в®а п');
writeln('⥡Ґ ­Ґ Ї®­а ўЁ« бм?');
goto next;
end
else if (node^.year = year) and (node^.book_name = book_name) then
break
else if (node^.year = year) and (node^.book_name > book_name) then a := @(node^.left)
else if (node^.year = year) and (node^.book_name < book_name) then a := @(node^.right)
else if (node^.year < year) then a := @(node^.right)
else if (node^.year > year) then a := @(node^.left);
node := a^;
end;


if (node^.right = NIL) then
begin
a^ := node^.left;
end
else
begin
b := @(node^.right);
nodeb := b^;
if (nodeb^.left = NIL) then
begin
nodeb^.left := node^.left;
a^ := nodeb;
end
else
begin
c := @(nodeb^.left);
nodec := c^;
while (nodec^.left <> NIL) do
begin
b^ := c^;
nodeb := b^;
c := @(nodeb^.left);
nodec := nodeb^.left;
end;
nodeb^.left := nodec^.right;
nodec^.left := node^.left;
nodec^.left := node^.right;
a^ := c^;
end
end;

freemem(node, sizeof(one_book));
next:
readkey;
end;



{/* Џа®жҐ¤га  destroy_all, г¤ «пҐв ¤ҐаҐў®, ў Є зҐб⢥ Ї а ¬Ґва®ў
* ЇҐаҐ¤ Ґвбп Є®аҐ­м ¤ҐаҐў .
*/}

procedure destroy_all(var root : p_book);
begin
if (root <> NIL) then
begin
destroy_all(root^.left);
destroy_all(root^.right);
freemem(root, sizeof(one_book));
end;
end;


{/* Џа®жҐ¤га  show_all, Їа®е®¤Ёв ўбҐ г§«л ¤ҐаҐў  Ё Ї®Є §лў Ґв Ё­дг.
* €бЇ®«м§гҐвбп ¬Ґв®¤ гЇ®а冷祭­®Ј® ४габЁў­®Ј® Їа®е®¦¤Ґ­Ёп.
*/}

procedure show_all(root : p_book);
begin
if (root <> NIL) then
begin
show_all(root^.left);
writeln(root^.ydk_number:10, ' |', root^.autor_name:19, ' |', root^.book_name:19, ' |',
root^.year:7, ' |', root^.numbers:9);
show_all(root^.right);
end;
end;


{/* Џа®жҐ¤га  init_base, бзЁвлў Ґв Ё­дг Ё§ д ©« .
* €бЇ®«м§гҐвбп ®Ўлз­л© ⥪бв®ўл© д ©«, в Є зв® Ґб«Ё Ґбвм ¦Ґ« ­ЁҐ
* Ё Ї®§¬®¦­®бвм в® Ї®¦ «г©бв  бў®аЈ ­м⥠зв® ­Ёвм ¤агЈ®Ґ.
* Note: г дг­ЄжЁЁ Ґбвм Ў®«ми®© ­Ґ¤®бв в®Є ®­  г¤ «пҐв Ў §г Ї®б«Ґ Їа®з⥭Ёп.
* в Є зв® ў б«гз Ґ ­ҐЄ®аҐЄв­®Ј® § ўҐа襭Ёп Їа®Ја ¬¬л Ў §  Ўг¤Ґв "Ї@е@а@з@­@".
* „  Їа®бвпв ¬Ґ­п ўбҐ «о¤Ё Їа®зЁв ўиЁҐ нв® б«®ў®. ;-)
*/}

procedure init_base(var root : p_book);
var var_file : text;
var ydk_number : word;
autor_name : string;
book_name : string;
year : word;
numbers : byte;
begin
assign (var_file, 'c:\LANGUA~1\TP7\1\data.dat');
{$I-}
reset(var_file);
if (ioresult <> 0) then rewrite(var_file)
else
while (not eof(var_file)) do
begin
readln(var_file, ydk_number); readln(var_file, autor_name);
readln(var_file, book_name); readln(var_file, year);
readln(var_file, numbers);
add_book(root, ydk_number, autor_name, book_name, year, numbers);
end;
{$I+}
rewrite(var_file);
close (var_file);


end;

{/* Џа®жҐ¤га  rewrite_base, § ЇЁблў Ґв Ё­дг ў д ©«.
* €бЇ®«м§гҐвбп ®Ўлз­л© ⥪бв®ўл© д ©«, в Є зв® Ґб«Ё Ґбвм ¦Ґ« ­ЁҐ
* Ё ў®§¬®¦­®бвм, в® Ї®¦ «г©бв  бў®аЈ ­м⥠зв® ­Ёвм ¤агЈ®Ґ.
*/}

procedure rewrite_base(var root : p_book);
var var_file : text;
begin
if (root <> NIL) then
begin
assign(var_file, 'c:\LANGUA~1\TP7\1\data.dat');
append(var_file);
writeln(var_file, root^.ydk_number); writeln(var_file, root^.autor_name);
writeln(var_file, root^.book_name); writeln(var_file, root^.year);
writeln(var_file, root^.numbers);
close (var_file);
rewrite_base(root^.left);
rewrite_base(root^.right);
end;
end;


{/* Џа®жҐ¤га  new_book, ᮧ¤ ­  ¤«п ¤®Ў ў«Ґ­Ёп ­®ў®© Є­ЁЈЁ б Є« ўл
*/}

procedure new_book(var root : p_book);
var ydk_number : word;
autor_name : string;
book_name : string;
year : word;
numbers : byte;
begin
writeln; writeln;
writeln('Press any keys ASAP!');
readln(ydk_number); readln(autor_name); readln(book_name); readln(year);
readln(numbers);
add_book(root, ydk_number, autor_name, book_name, year, numbers);
end;


{/* Main function
* „г¬ о вгв Є®¬¬Ґ­вб ­Ґ ­г¦Ґ­.
*/}

begin
clrscr;
init_base(root);
exit_code := FALSE;

repeat
clrscr;
writeln('Main menu:');
writeln('1. Add new book in base');
writeln('2. Delete book from the base');
writeln('3. Show all books');
writeln('4. Exit');
writeln;

case readkey of
'1': new_book(root);
'2': begin
writeln('Please type Book Name and Year of book you want to delete');
readln(book_name, year);
delete_book(root, book_name, year);
end;
'3': begin
writeln('YDK Number | Autor Name | Book Name | Year | Quantity');
writeln('-----------+--------------------+--------------------+--------+----------');
show_all(root);
readkey;
end;
'4': exit_code := TRUE;
end;
until exit_code;

rewrite_base(root);
destroy_all(root);
end.