Телефонный справочник - Pascal (10956)
Формулировка задачи:
Решение задачи: «Телефонный справочник»
uses crt;
const max=50;
b=['A'..'Z','a'..'z'];{допустимые буквы}
cf=['0'..'9'];{цифры}
type
TPhoneRecord=record
name:string;
surname:string;
phone:string;{сделаем строкой, вдруг в номере, с учетом например кода
цифр больше 10, или первая из 10 цифр болше 2}
end;
mas=array[1..max] of TPhoneRecord;
procedure ProvNam(st:string;var f:byte);{проверка букв}
var i:byte;
begin
f:=0;
for i:=1 to length(st)do
if not(st[i] in b) then{если не буква}
begin
writeln('Error!');
f:=1;
break;
end;
end;
procedure ProvNom(st:string;var f:byte);{проверка цифр}
var i:byte;
begin
f:=0;
for i:=1 to length(st)do
if not(st[i] in cf) then{если не цифра}
begin
writeln('Error!');
f:=1;
break;
end;
end;
procedure Add(var t:mas;var n:byte);
var i,f:byte;
begin
clrscr;
writeln('Добавить запись.');
n:=n+1;
repeat
write('Name: ');readln(t[n].name);
ProvNam(t[n].name,f);{проверка}
until f=0;{пока не введем правильно}
repeat
write('Surname: ');readln(t[n].surname);
ProvNam(t[n].surname,f);
until f=0;
repeat
write('Phone: ');readln(t[n].phone);
ProvNom(t[n].phone,f);
until f=0;
write('Press Enter...');
readln;
end;
procedure Del(var t:mas;var n:byte;k:byte);
var i:byte;
begin
clrscr;
repeat
write('Удалить запись № ');
readln(k);
if k>n then writeln('В массиве нет ',k,' записей. Повторите ввод.');
if k<1 then writeln('Некорректное число. Повторите ввод.');
until k in [1..max];
for i:=k to n-1 do
t[i]:=t[i+1];
n:=n-1;
write('Press Enter...');
readln;
end;
procedure Change(var t:mas;n:byte;k:byte);
var f:byte;
begin
clrscr;
repeat
write('Заменить запись № ');
readln(k);
if k>n then writeln('В массиве нет ',k,' записей. Повторите ввод.');
if k<1 then writeln('Некорректное число. Повторите ввод.');
until k in [1..max];
writeln('Введите новые данные:');
repeat
write('Name: ');readln(t[k].name);
ProvNam(t[k].name,f);
until f=0;
repeat
write('Surname: ');readln(t[k].surname);
ProvNam(t[k].surname,f);
until f=0;
repeat
write('Phone: ');readln(t[k].phone);
ProvNom(t[k].phone,f);
until f=0;
write('Press Enter...');
readln;
end;
procedure Print(var t:mas;n:byte);
var i:byte;
begin
clrscr;
writeln('Список абонентов:':30);
writeln;
writeln('-----------------------------------------');
writeln('| Фамилия | Имя | Телефон |');
writeln('-----------------------------------------');
for i:=1 to n do
begin
gotoXY(1,whereY); write('| ',t[i].name);
gotoXY(17,whereY); write('| ',t[i].surname);
gotoXY(29,whereY); write('| ',t[i].phone);
gotoXY(41,whereY); write('| ');
writeln;
end;
writeln('-----------------------------------------');
write('Press Enter...');
readln
end;
var a:mas;
n,i,k,f:byte;
w:char;
begin
clrscr;
n:=10;
writeln('Введите данные:');
for i:=1 to n do
begin
writeln('Запись ',i);
repeat
write(' Name: ');readln(a[i].name);
ProvNam(a[i].name,f);
until f=0;
repeat
write(' Surname: ');readln(a[i].surname);
ProvNam(a[i].surname,f);
until f=0;
repeat
write(' Phone: ');readln(a[i].phone);
ProvNom(a[i].phone,f);
until f=0;
end;
write('Press Enter...');
readln;
clrscr;
repeat
clrscr;
writeln('Выберите действие:');
writeln;
writeln('1-Добавить запись');
writeln('2-Удалить запись');
writeln('3-Изменить запись');
writeln('4-Вывести записи на экран');
writeln('другие-Выход');
writeln;
w:=readkey;
case w of
'1':Add(a,n);
'2':Del(a,n,k);
'3':Change(a,n,k);
'4':Print(a,n);
else exit;
end;
until not(w in ['1'..'4']);
end.
Объяснение кода листинга программы
Этот код написан на языке Pascal и представляет собой программу для работы с телефонным справочником. Он содержит несколько процедур, которые выполняют различные действия: добавление записи, удаление записи, изменение записи и вывод записей на экран. Для начала, объявляются переменные max, b, cf и тип TPhoneRecord. Переменная max определяет максимальное количество записей в справочнике (50 в данном случае). Переменная b содержит допустимые буквы (от A до Z, а также от a до z). Переменная cf содержит допустимые цифры (от 0 до 9). Тип TPhoneRecord определяет структуру записи в справочнике: имя, фамилия и телефон. Далее, создается массив mas типа TPhoneRecord, который будет содержать все записи справочника. Затем, определяются процедуры ProvNam и ProvNom, которые проверяют правильность ввода имени и фамилии соответственно. Если введенная буква или цифра не соответствует допустимым, то выводится сообщение об ошибке и переменная f устанавливается в значение 1, что означает, что ввод некорректен. Процедура Add добавляет новую запись в справочник. Она запрашивает у пользователя ввод имени, фамилии и телефона, затем проверяет их на корректность. Если все введено правильно, то добавляется новая запись в массив mas. Процедура Del удаляет запись из справочника. Пользователю предлагается ввести номер записи, которую он хочет удалить. Если введенный номер некорректен или не существует, то выводится соответствующее сообщение. Процедура Change изменяет запись в справочнике. Пользователю предлагается ввести номер записи, которую он хочет изменить, а затем ввод новых данных для имени, фамилии и телефона. Если введенные данные некорректны или не существуют, то выводится сообщение об ошибке. Процедура Print выводит все записи справочника на экран. Она запрашивает у пользователя ввести номер записи, которую он хочет вывести, а затем выводит информацию о выбранной записи. В конце программы пользователь может выбрать одно из четырех действий: добавить, удалить, изменить или вывести все записи на экран. В зависимости от выбранного действия, программа выполняет соответствующую операцию. Таким образом, данный код позволяет управлять содержимым телефонного справочника, добавлять, удалять и изменять записи в нем.