Логические и символьные константы.

В данном уроке будет рассмотрено применение логических и символных констант. Логическая константа может принимать только 2 значения, либо True, либо False. В качестве значения символьной константы могут использоваться любые символы, которые есть в ...

Ввод логических переменных с клавиатуры.

В отличие от переменных целого, вещественного или символьного типов данных, булевские переменные нельзя вводить с клавиатуры, их можно только выводить на экран. Однако можно использовать небольшую хитрость. Для того чтобы можно было ввести булевскую ...

Ввод символов с клавиатуры.

Ввод символов с клавиатуры почти не отличается от ввода чисел с клавиатуры. Для того чтобы ввести какие-то символы (буквы, знаки и т.д.) с клавиатуры необходимо для переменных использовать символьный тип данных Char.

Циклы и массивы

Вычисление предела последовательности.

Вычисление предела последовательности является типичной задачей на использование итерационного цикла.

Работа со строковыми данными.

Написание большинства программ не обходится без строковых данных. Строковые данные используются при организации диалога для ввода исходных значений переменных, задания условий выполнения ...

В этом уроке мы создадим 2-ую процедуру для нашей базы данных, которая будет выводить на экран информацию о сотруднике в зависимости от введенной фамилии. Причем, программа будет работать таким образом, что для поиска необходимого сотрудника достаточно будет ввести лишь несколько первых букв его фамилии.  Эту процедуру мы также поместим в отдельный модуль.


  1. unit modul2;
  2. interface
  3. uses crt;
  4. Procedure vivod_kart_sotr;
  5. implementation
  6. Procedure vivod_kart_sotr;
  7. type lich_dan=record
  8.          fam:string[15];
  9.          imja:string[15];
  10.        otch:string[15];
  11.        god_rog:integer;
  12.        sem_pol:byte;
  13.        kol_det:byte;
  14. end;
  15. type rab_dan=record
  16.        nom_otd:byte;
  17.        dolgnost:string[15];
  18.        date_nach_rab:string[15];
  19.        stag:byte;
  20.        zar_plata:real;
  21.        secret:byte;
  22.        del:boolean;
  23. end;
  24. type anketa=record
  25.        LD: lich_dan;
  26.        RD: rab_dan;
  27. end;
  28. label 1;
  29. var
  30.      sotrudn:anketa;
  31.      baza:file of anketa;
  32.      fampoisk1:string[15];
  33.      fampoisk2:string[15];
  34.      family:string[15];
  35.      kolsimfam:byte;
  36.      CH:char;
  37. begin{1}
  38.    assign(baza,'D:/base_of_data.dat');
  39.    reset(baza);
  40.    1:Clrscr;
  41.    Writeln ('Введите фамилию. Достаточно ввести лишь нескольлко символов');
  42.    readln(fampoisk1);
  43.    if fampoisk1='' then goto 1;
  44.    kolsimfam:=length (fampoisk1);
  45. while not eof(baza) do
  46. begin{2}
  47.    read(baza,sotrudn);
  48.    fampoisk2:=copy(sotrudn.LD.fam,1,kolsimfam);
  49.    if fampoisk1=fampoisk2 then
  50. begin{3}
  51.    with sotrudn do
  52. begin{4}
  53.    writeln ('ФИО -',LD.fam,' ',LD.imja,' ',LD.otch,' ');
  54.    write ('Год рож.-',LD.god_rog);
  55.    if LD.sem_pol=1 then
  56.       family:='Женат/замужем'
  57.    else
  58.       family:='Холост/незамужем';
  59.    write (' Сем. пол.-',family);
  60.    writeln (' Кол. дет.-',LD.kol_det);
  61.    write ('Номер отдела -',RD.nom_otd);
  62.    write (' Должность -',RD.dolgnost);
  63.    writeln (' Дата начала работы -',RD.date_nach_rab);
  64.    write ('Стаж -',RD.stag,' лет');
  65.    write (' Зар. плата -',RD.zar_plata:6:0);
  66.    writeln (' Уровень доступа -',RD.secret);
  67. end;{4}
  68. end;{3}
  69. end;{2}
  70. writeln ('ESC - ВЫХОД  ENTER - НОВЫЙ ПОИСК');
  71. CH:=readkey;
  72. if ord(CH)=27 then exit
  73. else
  74. begin{5}
  75.    seek(baza,0);
  76.    goto 1;
  77. end;{5}
  78. close(baza);
  79. end;{1}
  80. end.

Строка №1-№27. Эта часть кода подробно рассмотрена в предыдущих уроках.

Строка №28. Зарезервированное слово LABEL открывает раздел, в котором описываются метки. В нашем случае нам понадобится одна метка. Ее название указывается после слова LABEL. В нашей программе мы создали одну метку под названием «1».

Строка №32. Переменную «fampoisk1» будем использовать для хранения вводимой пользователем фамилии сотрудника (либо части фамилии).

Строка №33. Переменную «fampoisk2» будем использовать для копирования в нее фамилии сотрудника (или части фамилии) из компонента записи «sotrudn.LD.fam».

Строка №34. Переменная «family» будет хранить одно из 2-х значений: либо «Холост/незамужем», либо «Женат/замужем».

Строка №35. Переменная «kolsimfam» будет хранить количество символов, которое мы будем вводить с клавиатуры.

Строка №36. Переменная «CH» нужна для функции READKEY.

Строка №40. Ставим метку «1». Через двоеточие указываем первый оператор, который будет выполняться после метки. В нашем случае это оператор очистки экрана CLRSCR.

Строка №41. Выводим на экран сообщение.

Строка №42. Вводим фамилию (предположим, что мы введем первые 3 буквы фамилии).

Строка №43. В случае, если мы не введем никаких символов, ход программы перейдет к метке «1», т.е. на строку №40. Таким образом, если мы не введем никаких символов и нажмем клавишу Enter, то экран очистится (строка №40) и будет выведено сообщение (строка №41). Если строку №43 убрать из программы, то при пустом вводе на экран будут выведены данные о всех сотрудниках из базы данных. Для этого мы и используем строку №43. При пустом вводе данные о всех сотрудниках будут выведены на экран, однако благодаря переходу к метке «1» экран очистится (строка №40),  будет выведено сообщение (строка №41) и программа будет ожидать ввода символов (строка №42).

Строка №44. Функция LENGTH возвратит в качестве своего значения количество символов из переменной  «fampoisk1». Таким образом, если мы введем с клавиатуры первые 3 буквы фамилии, то результатом Функции LENGTH будет число 3. Это число будет записано в переменную «kolsimfam».

Строка №45-№47. Считываем весь файл в переменную «sotrudn».

Строка №48. В переменной (компоненте записи) «sotrudn.LD.fam» хранится фамилия сотрудника. Нам необходимо скопировать часть фамилии, начиная с первого символа. Количество символов для копирования определяется переменной «kolsimfam». Таким образом, если в этой переменой хранится число 3, то из переменной «sotrudn.LD.fam» будет скопировано первые 3 символа. Эти символы будут сохранены в переменную «fampoisk2».

Строка №49. Сравниваем обе переменные: переменную «fampoisk1», где хранятся символы, вводимые пользователем с клавиатуры, и переменную «fampoisk2», где хранится фамилия (или часть фамилии). Причем количество символов в обеих переменных одинаковое. Если содержимое обеих переменных совпадает, то на экран выводится информация о сотруднике (строка №50-№68).

Строка №70. Выводим на экран сообщение.

Строка №71. Программа ждет нажатия клавиши. После нажатия, код клавиши будет записан в переменную «CH».

Строка №72. Если код нажатой клавиши равен 27 (клавиша ESC), то произойдет выход из программы благодаря процедуре EXIT.

Строка №73. Если будет нажата другая клавиша, то…

Строка №75. Переводим указатель на начало файла, чтобы можно было читать файл снова.

Строка №76. Возвращаем ход программы к строке №40.

Sozdanie bazih dannihkh7Sozdanie bazih dannihkh7.Sozdanie bazih dannihkh7..

После создания процедуры проверим ее работоспособность.
Для этого в основную программу в раздел описания модулей USES добавим название 2-го модуля, а в операторе выбора CASE OF добавим название процедуры.


Program baza_dan2;
uses crt, modul1,modul2;
var vibor:integer;
begin
   clrscr;
   writeln('Выберите действие');
   writeln('Нажмите 1 для добавления записи в базу данных');
   writeln('Нажмите 2 для вывода карточки сотрудника');
   writeln('Нажмите 3 для вывода информации о сотруднике');
   writeln('Нажмите 4 для сортировки базы данных');
   writeln('Нажмите 5 для удаления записи о сотруднике');
   writeln('Нажмите 6 для статистического анализа базы данных');
   readln(vibor);
   case vibor of
     1:add_record;
     2:vivod_kart_sotr;
   end;
end.


После запуска программы нажимаем 2 и вводим фамилию сотрудника. Я ввел первые 3 буквы фамилии "Пут". В результате на экране появились данные сотрудников, чьи фамилии начинаются на эти буквы.

Sozdanie bazih dannihkh7...

После запуска программы я ввел 3 символа "Пут". В результате, программа вывела на экран информацию о сотрудниках, чьи фамилии начинаются с этих символов.


Предыдущая статья : Создание БАЗЫ ДАННЫХ в Pascal (Часть7).
Оглавление : Уроки Паскаль. Примеры.
Следующая статья : Создание БАЗЫ ДАННЫХ в Pascal (Часть9).

Добавить комментарий

   ГлавнаяПаскальУроки Паскаль. Примеры.Создание БАЗЫ ДАННЫХ в Pascal (Часть8).