Программа


{ ВоенМех 
  Телефонная книга }
Program TelephoneBook;
Uses Crt;                                   { Подключение модуля Crt }
Const FileName='TELEPHON.DAT';              { Имя внешнего файла }
Type SubscriberType=record                  { Тип "Абонент" }
                      Name:string[10];        { Фамилия абонента }
                      year:word;              { Год подключения }
                      Number:longint          { Номер абонента }
                    end;
Var Subscriber:SubscriberType;      { Переменная "Абонент" }
    F: file of SubscriberType;      { Файл абонентов }
    Exit:Boolean;                   { Флаг выхода }
Procedure Stop;                     { Процедура остановки программы }
  Begin
    WriteLn;                        { Пропуск строки }
    Write('Нажмите [Enter]');       { Вывод приглашения нажать "Enter" }
    ReadLn                          { Остановка программы до нажатия "Enter" }
  End;
Function Question(Str:string):boolean; { Функция получения ответа на вопрос }
  var Answer:Char;                     { Переменная для ответа на вопрос }
  Begin
    Write(Str);                      { Вывод вопроса }
    repeat
      Answer:=ReadKey;                 { Получение ответа }
      Question:=Answer in ['Y','y']    { Определение значения функции }
    until Answer in ['Y','y','N','n']; { Выход из цикла при получении
                                         корректного ответа }
    WriteLn(Answer)                     { Печать полученного ответа }
  End;
Procedure MakeFile;                     { Процедура создания файла }
  var i:byte;                           { Счетчик }
  Begin
    ClrScr;                                      { Очистка экрана }
    Rewrite(F);                                  { Открытие файла под запись }
    while Question('Создать запись ? [Y/N] ') do { Цикл ввода записей }
      begin
        Write('Фамилия       ');  { Вывод приглашения ввести фамилию }
        with Subscriber do
          begin
           ReadLn(Name);                                      { Ввод фамилии }
           while Length(Name)<10 do Name:=Name+' ';
                                  { Цикл добавления пробелов в конец фамилии }
            Write('Год установки ');{ Вывод приглашения ввести год установки }
            ReadLn(Year);           { Ввод года установки }
            Write('Номер         ');{ Вывод приглашения ввести номер }
            ReadLn(Number)          { Ввод номера }
          end;
        Write(F,Subscriber);        { Запись в файл }
        WriteLn                     { Пропуск строки }
      end;
    Close(F);                       { Закрытие файла }
  End;
Function Menu:Char;                 { Функция вывода меню и получения ответа }
  var Answer:Char;                  { Переменная для ответа на меню }
  Begin
    ClrScr;                         { Очистка экрана }
    { Вывод меню: }
    WriteLn('[0] Выход');
    WriteLn('[1] Просмотр файла');
    WriteLn('[2] Номер по фамилии ');
    WriteLn('[3] Количество телефонов ');
    repeat
      Answer:=ReadKey              { Чтение клавиатуры }
    until Answer in ['0'..'3'];
                           { Выход из цикла при получении корректного ответа }
    Menu:=Answer
  End;
Procedure OutFile;         { Процедура вывода файла }
  Begin
    ClrScr;                                        { Очистка экрана }
    WriteLn(' ФАМИЛИЯ    ГОД УСТАНОВКИ    НОМЕР'); { Вывод шапки }
    Reset(F);                                    { Открытие файла для чтения }
    while not EOF(F) do                          { Цикл просмотра файла }
      begin
        Read(F,Subscriber);                      { Чтение записи }
        with Subscriber do WriteLn(Name:10,Year:10,Number:15); { Ввод записи }
      end;
    Close(F);                       { Закрытие файла }
    Stop                            { Остановка программы }
  End;
Procedure SubscriberNumber;               { Процедура поиска номера }
  var Name:string[10];                    { Фамилия }
      Flag:boolean;                       { Флаг "Фамилия найдена" }
  Begin
    ClrScr;                               { Очистка экрана }
    Write('Введите фамилию ');            { Вывод приглашения ввести фамилию }
    ReadLn(Name);                         { Ввод фамилии }
    while Length(Name)<10 do Name:=Name+' ';
                                  { Цикл добавления пробелов в конец фамилии }
    Flag:=false;                  { Сброс флага }
    Reset(F);                     { Открытие файла для чтения }
    while not EOF(F) do           { Цикл просмотра файла }
      begin
        Read(F,Subscriber);       { Чтение записи }
        if Subscriber.Name=Name   { Если найдено искомое имя }
          then begin              { то }
                 WriteLn(' ',Subscriber.Number); { ввод номера }
                 Flag:=true                      { подъем флага }
               end
      end;
    Close(F);                       { Закрытие файла }
    if not Flag then WriteLn(' ФАМИЛИЯ ОТСУТСТВУЕТ !');
                                    { Если флаг опущен, то - вывод сообщения }
    Stop                            { Остановка программы }
  End;
Procedure MeterNumber;                    { Процедура подсчета телефонов }
  var Year:word;                          { Переменная "Год" }
      Meter:word;                         { Счетчик телефонов }
  Begin
    ClrScr;                               { Очистка экрана }
    Write('Введите год ');                { Вывод приглашения ввести год }
    ReadLn(Year);                         { Ввод года }
    Meter:=0;                             { Сброс счетчика телефонов }
    Reset(F);                             { Открытие файла для чтения }
    while not EOF(F) do                   { Цикл просмотра файла }
      begin
        Read(F,Subscriber);      { Чтение записи }
        if Subscriber.Year>=Year { Если телефон установлен с заданного года }
          then Meter:=Meter+1    { то - учет данной записи }
      end;
    Close(F);                    { Закрытие файла }
    WriteLn('Количество телефонов установленных с ',Year,' года: ',Meter);
                                                              { Вывод ответа }
    Stop                            { Остановка программы }
  End;
BEGIN
  ClrScr;                    { Очистка экрана }
  Assign(F,FileName);        { Связывание файловой переменной с именем файла }
  if Question('Создать новый файл '+FileName+'?  [Y/N]  ') then MakeFile;
                             { Если ответ - "Да", то - создание нового файла }
  Exit:=false;               { Сброс флага "Выход" }
  repeat
    case Menu of             { Выбор действия по ответу на меню }
      '0':Exit:=true;            { Установка флага "Выход" }
      '1':OutFile;               { Печать файла }
      '2':SubscriberNumber;      { Поиск номера телефона }
      '3':MeterNumber            { Подсчет количества телефонов }
    end
  until Exit
END.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию