Составить программу управления базой данных с операциями: Добавление, Поиск, Редактирование, Просмотр всех записей в сортированном виде, Выход. Одна игра содержит 4 сведения: наименование игры, сколько она весит, параметры для игры (в 1 строку параметры), название компании разработчиков — Delphi(Делфи)

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.

Leave a Comment