Показать сообщение отдельно
Старый 06.03.2018, 09:52   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну вот, как-то так:
Код:
Program BD;
uses CRT;

Const
 Max=15;

Type
 baza = record
         nomer_bibl: integer;
         nazvanie: string[30];
         adress: string[50];
         telefon_bibl: LongInt;
        end;
 mas=array[1..max] of baza;

Var
 p_Baza:mas;
 N,k:byte;
 f:file of baza;

Procedure Form_Base(var Nf:Byte);
var
 i:byte;
begin
 Assign(f,'Base');
 Rewrite(f);
 i:=0;
 repeat
  Inc(i);
  if i<=Max then
   begin
    with p_Baza[i] do
     begin
      Writeln;
      WriteLn('Заполняем ', i:2, ' запись');
      Write('Введите номер библиотеки ("0" для выхода): ');
      ReadLn(nomer_bibl);
      if nomer_bibl>0 then
       begin
        Write('Введите название библиотеки: ');
        ReadLn(nazvanie);
        Write('Введите адрес библиотеки: ');
        ReadLn(adress);
        Write('Введите телефон библиотеки: ');
        ReadLn(telefon_bibl);
       end;
     end;
    Write(f,p_Baza[i]);
   end;
 until (p_Baza[i].nomer_bibl=0) or (i=Max);
 if i=Max then Nf:=Max else Nf:=i-1;
 Close(f);
end;

Procedure Add_libr(var Na:byte);
var
 i:byte;
begin
 Assign(f,'Base');
 Reset(f);
 for i:=1 to Na do read(f,p_Baza[i]);
 Close(f);
 if Na<Max then
  begin
   with p_Baza[Na+1] do
    begin
     WriteLn('Заполняем ', (Na+1):2, ' запись');
     Write('Введите номер библиотеки: ');
     ReadLn(nomer_bibl);
     Write('Введите название библиотеки: ');
     ReadLn(nazvanie);
     Write('Введите адрес библиотеки: ');
     ReadLn(adress);
     Write('Введите телефон библиотеки: ');
     ReadLn(telefon_bibl);
     Inc(Na);
    end;
  end
  else
  begin
   writeln('Список библиотек переполнен!');
   Readln;
  end;
 Rewrite(f);
 for i:=1 to Na do Write(f,p_Baza[i]);
 Close(f);
end;

Procedure OutDisplay(Nd:byte);
var
 i:byte;
begin
 Assign(f,'Base');
 Reset(f);
 for i:=1 to Nd do read(f,p_Baza[i]);
 Close(f);
 for i:=1 to Nd do
  with p_Baza[i] do
   begin
    WriteLn('Номер библиотеки: ', nomer_bibl);
    WriteLn('Название библиотеки: ', nazvanie);
    WriteLn('Адрес библиотеки: ', adress);
    WriteLn('Номер телефона библиотеки: ', telefon_bibl);
    WriteLn;
   end;
 Readln;
end;

Procedure Sort;
 begin
 end;

Begin
 Repeat
  Clrscr;
  repeat
   WriteLn('Меню:');
   WriteLn('0. Составление списка библиотек');
   WriteLn('1. Добавление записи');
   WriteLn('2. Вывод записей на экран');
   WriteLn('3. Сортировка');
   WriteLn('4. Выход');
   Write('Введите номер пункта меню: ');
   ReadLn(k);
   if k>4 then writeln('Вы ввели неправильный пункт меню. Повторите ввод');
  until k<5;
  Case k of
   0: Form_Base(N);
   1: Add_libr(N);
   2: OutDisplay(N);
   3: Sort;
  end;
 Until k=4;
End.
Несколько замечаний.
1. Если у Вас Pascal ABC, то тип LongInt замените на Integer.
2. Поймите! Компьютер НЕ ПОНИМАЕТ и НЕ ПРИНИМАЕТ программ, сляпанных по принципу "как бэ так" и "что-то типо": каждый символ в коде должен быть продуман и выверен. И если, например, тип "запись" имеет синтаксис
Код:
Record Tralala;
 field1: ...
 field2: ...
 ...
End;
то отбрасывать "End" НЕЛЬЗЯ! Ну и куча ещё подобных неряшливостей. Одна из самых ярких: если Вы употребляете оператор "with", то в теле этого оператора указывать имя записи НЕ СЛЕДУЕТ, только имена полей. Имя записи подключается автоматически.
3. К сожалению, Вы не указали, какая именно сортировка требуется, поэтому соответствующая процедура оставлена пустой.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070