program PascalGuru;
uses crt;
type
igra = record
name: string;
razmer: string;
param: string;
avtor: string;
end;
var
all: array [1 .. 50] of igra;
n: integer;
procedure menu; forward;
{ -------------------------------------- }
procedure read_all; { считывает всю БД с файла }
var
f: text;
begin
n := 0;
assign(f, 'db.txt');
reset(f);
while not eof(f) do
begin
inc(n);
readln(f, all[n].name);
readln(f, all[n].razmer);
readln(f, all[n].param);
readln(f, all[n].avtor);
readln(f);
end;
close(f);
end;
{ -------------------------------------- }
procedure save_all; { сохраняет отредактированную БД в файл }
var
i: integer;
f: text;
begin
assign(f, 'db.txt');
rewrite(f);
for i := 1 to n do
begin
writeln(f, all[i].name);
writeln(f, all[i].razmer);
writeln(f, all[i].param);
writeln(f, all[i].avtor);
writeln(f);
end;
close(f);
end;
{ -------------------------------------- }
procedure add;
var
i: integer;
begin
clrscr;
inc(n);
writeln('Dobavlenie novoi zapisi:');
writeln('________________________');
writeln;
write('Naimenovanie igry: ');
readln(all[n].name);
write('Razmer: ');
readln(all[n].razmer);
write('Parametry: ');
readln(all[n].param);
write('Razrabotchik: ');
readln(all[n].avtor);
save_all;
clrscr;
writeln('Novaya zapisi uspeshno dobavlena v BD');
readln;
menu;
end;
{ -------------------------------------- }
procedure write_all; { вывод всей базы на экран }
var
i, j: integer;
s1, s2, s3: string;
begin
clrscr;
writeln('Vse igry v baze:');
writeln('________________');
writeln;
for i := 1 to n do
begin
s1 := '';
s2 := '';
s3 := '';
for j := 1 to 18 - length(all[i].name) do
s1 := s1 + ' ';
for j := 1 to 8 - length(all[i].razmer) do
s2 := s2 + ' ';
for j := 1 to 18 - length(all[i].param) do
s3 := s3 + ' ';
writeln(all[i].name, s1, ' ; ', all[i].razmer, s2, ' ; ', all[i].param, s3,
' ; ', all[i].avtor);
end;
readln;
menu;
end;
{ -------------------------------------- }
procedure search; { поиск }
var
p: string;
i, j: integer;
s1, s2, s3: string;
b: boolean;
begin
clrscr;
writeln('Poisk (po nazvaniyu igry - vy mozhete posmotreti ee parametry)');
writeln('______________________________________________________________');
writeln;
write('Vvedite nazvanie igry:');
readln(p);
writeln;
b := false;
for i := 1 to n do
if all[i].name = p then
begin
s1 := '';
s2 := '';
s3 := '';
for j := 1 to 18 - length(all[i].name) do
s1 := s1 + ' ';
for j := 1 to 8 - length(all[i].razmer) do
s2 := s2 + ' ';
for j := 1 to 18 - length(all[i].param) do
s3 := s3 + ' ';
writeln(all[i].name, s1, ' ; ', all[i].razmer, s2, ' ; ', all[i].param,
s3, ' ; ', all[i].avtor);
b := true;
end;
if not b then
writeln('Igry s takim naimenovaniem v baze ne nashlosi...');
readln;
menu;
end;
{ -------------------------------------- }
procedure sort; { вывод отсортированной базы на экран }
procedure exchange(var a, b: string);
var
c: string;
begin
c := a;
a := b;
b := c;
end;
var
i, bukva, nn: integer;
swop: boolean;
vrs1, vrs2: string;
begin
clrscr;
for bukva := 5 downto 1 do { сортируем с 5 по 1 букву названия }
begin
nn := n;
repeat
swop := false;
for i := 1 to nn - 1 do
begin
vrs1 := all[i].name;
vrs2 := all[i + 1].name;
if ord(vrs1[bukva]) > ord(vrs2[bukva]) then
begin { esli "<" togda po ubivaniiu }
exchange(all[i].name, all[i + 1].name);
exchange(all[i].razmer, all[i + 1].razmer);
exchange(all[i].param, all[i + 1].param);
exchange(all[i].avtor, all[i + 1].avtor);
swop := true;
end;
end;
nn := nn - 1;
until not swop;
end;
{ *** }
write_all;
readln;
menu;
end;
{ -------------------------------------- }
procedure update; { Редактирование }
var
i, j: integer;
s1, s2, s3: string;
b: boolean;
begin
clrscr;
writeln('Redaktirovanie zapisei BD:');
writeln('__________________________');
writeln;
for i := 1 to n do
begin
s1 := '';
s2 := '';
s3 := '';
for j := 1 to 18 - length(all[i].name) do
s1 := s1 + ' ';
for j := 1 to 8 - length(all[i].razmer) do
s2 := s2 + ' ';
for j := 1 to 18 - length(all[i].param) do
s3 := s3 + ' ';
writeln(i, ') ', all[i].name, s1, ' ; ', all[i].razmer, s2, ' ; ',
all[i].param, s3, ' ; ', all[i].avtor);
end;
writeln;
write('Vvedite nomer zapisi, kotoruyu hotite izmeniti: ');
readln(i);
s1 := '';
s2 := '';
s3 := '';
clrscr;
writeln('Izmenyaem:');
for j := 1 to 18 - length(all[i].name) do
s1 := s1 + ' ';
for j := 1 to 8 - length(all[i].razmer) do
s2 := s2 + ' ';
for j := 1 to 18 - length(all[i].param) do
s3 := s3 + ' ';
writeln(i, ') ', all[i].name, s1, ' ; ', all[i].razmer, s2, ' ; ',
all[i].param, s3, ' ; ', all[i].avtor);
writeln;
writeln('Vvedite novye znacheniya:');
write('*Naimenovanie igry: ');
readln(all[i].name);
write('*Razmer: ');
readln(all[i].razmer);
write('*Parametry: ');
readln(all[i].param);
write('*Razrabotchik: ');
readln(all[i].avtor);
save_all;
read_all;
writeln('Otredaktirovannaya informatsiya uspeshno sohranena v fail...');
readln;
menu;
end;
{ -------------------------------------- }
procedure menu; { меню }
var
option: char;
begin
clrscr;
read_all; { сначала считываем с файла всю БД }
writeln('MENU');
writeln('____');
writeln;
writeln('1) Dobavlenie');
writeln('2) Poisk');
writeln('3) Redaktirovanie');
writeln('4) Prosmotr vseh zapisei');
writeln('5) Prosmotr vseh zapisei v sortirovannom vide');
writeln;
writeln('0) Exit (vyhod)');
readln(option);
case option of
'1':
add;
'2':
search;
'3':
update;
'4':
write_all;
'5':
sort;
'0':
exit;
else
menu;
end;
{ save_all; = сохраняет отредактированную БД в файл --- если надо использовать не только при Редактировании }
end;
{ -------------------------------------- }
begin
menu;
end.