Реферат: Телефонный справочник
ТОМСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМУПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
дистанционная форма обучения
Кафедраавтоматизированных систем управления (АСУ)
Программирование
Курсовойпроект
«телефонныйсправочник»
Датавыполнения работы ___________________
Датапроверки ___________________Оценка___________________
И.О.Фамилияпреподавателя ___________________
Подписьпреподавателя ___________________
Содержание:
Содержание
Введение
Постановка задачи
Используемые методы
Описание алгоритма программы
Заключение
Список литературы
Приложение 1. Листинг программы
Введение:
Целью курсовой работыявляется углубление знаний и расширение навыков по разработке алгоритмов и ихреализации на персональном компьютере.
Постановказадачи:
Необходимо написатьпрограмму, которая будет работать с базой телефонных номеров. При этомпрограмма должна уметь добавлять, изменять, удалять, искать записи. Также, дляупрощения работы с программой, необходимо создать интуитивно понятный интерфейс.
1. Используемыеметоды:
В программе используетсяследующий алгоритм работы с данными: все данные хранятся в файле phone.dat и загружаются в программу при вызове той или инойпроцедуры. При удалении или изменении записи создается временный файл с именем temp.dat, в него записываются все данные из файла phone.dat кроме тех которые были удалены или записываются ужеизмененные данные, затем файл phone.dat удаляется, а файл temp.dat переименовывается в phone.dat.
2. Описаниеалгоритма программы.
Создадим запись Phone, в этой записи создадим четыре поляс именами:
· SurnameS –строкового типа длинной 15 символов, данное поле будет содержать фамилию;
· NameS –строкового типа длинной 15 символов, данное поле будет содержать имя;
· PhoneS –строкового типа длинной 15 символов, данное поле будет содержать номер телефон.
· AddressS – строкового типа длинной 50символов, данное поле будет содержать адрес.
Создадим переменные:
· PhoneF –файлового типа, для работы с файлами данных;
· PhoneR –произвольного типа (Phone), для работыс данными.
· а – массив от 1до 600 типа Phone, данный массив будет необходим дляорганизации сортировки записей.
Процедура WritePhone –данная процедура выводит все записи из файла phone.dat наэкран. При помощи оператора Assignустанавливается связь между файлом и переменной файлового типа PhoneF. С помощью команды Reset открываем файл для чтения ипереводим указатель в первую позицию. Далее создаем цикл размером от первойпозиции в файле до последней, в этом цикле выводим на экран значение полей: фамилия,имя, номер телефона при помощи оператора Writeln. Закрываем файл при помощи оператора Close, это необходимо для того, чтобыдругие процедуры могли с ним работать.
procedureWritePhone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Всезаписи:');
writeln;
while notEof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
writeln;
write(PhoneR.SurnameS);
write('',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура AddPhone –данная процедура добавляет запись. С помощью операторов Assign и Reset открываем файл phone.dat иустанавливаем указатель в первую позицию. С помощью операторов Writeln и Readln создаем интерфейс для ввода фамилии, имени, номерателефона с клавиатуры и записываем введенные значения в файл. Закрываем файл.
procedureAddPhone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
while notEof(PhoneF) do Read(PhoneF,PhoneR);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Добавление записи:');
writeln;
Write('Введите Фамилию:');
readln(PhoneR.SurnameS);
write('ВведитеИмя:');
readln(PhoneR.NameS);
write('Введитеномер телефона:');
readln(PhoneR.PhoneS);
write('Введитеадрес:');
readln(PhoneR.AddressS);
write(PhoneF,PhoneR);
Close(PhoneF);
writeln;
writeln('Запись успешно добавлена вбазу!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура DeletePhone – удаляет запись. Для работы даннойпроцедуры нам потребуются дополнительные переменные:
· temp – файлового типа, в даннойпеременной будут хранится измененные данные;
· Nazv – строкового типа длинной 15 символов,в этой переменной будет храниться значение поля фамилии записи которуюнеобходимо удалить.
С помощью операторов Assign и Reset открываем файл phone.dat иустанавливаем указатель в первую позицию. С помощью операторов Assign и Reset создаем временный файл temp.dat иустанавливаем указатель в первую позицию. С помощью операторов Writeln и Readln создаем интерфейс для ввода фамилии (по фамилии мыбудем искать в файле нужную нам запись) с клавиатуры, присваиваем введенноезначение переменной Nazv. Далее в циклепри помощи условного оператора сравниваем поочередно значение поля SurnameS переменной PhoneF со значением переменной Nazv, если значение не совпадают то данная записьзаписывается в файл temp.dat, иначе пропускается. В результатеимеем два файла с удаленной и не удаленной записью, закрываем оба файла.Удаляем файл phone.dat при помощи оператора Erase, а файл temp.dat переименовываем в phone.dat при помощи оператора Rename.
procedureDeletePhone;
var temp:file of Phone;
Nazv:string[15];
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
Assign(temp,'Phone\temp.dat');
Rewrite(temp);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Удаление записи:');
writeln;
Write('Введите Фамилию:');
readln(Nazv);
while notEof(PhoneF) do
begin
Read(PhoneF,PhoneR);
ifPhoneR.SurnameS<>Nazv then Write(temp,PhoneR);
end;
Close(temp);
Close(PhoneF);
Erase(PhoneF);
Rename(temp,'Phone\phone.dat');
writeln;
writeln('Запись успешно удалена избазы!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура EditPhone – редактирует запись. Работа даннойпроцедуры аналогична работе процедуры DeletePhone. За исключением того, что во временный файл добавляетсяновая запись, полученная по средствам ввода с клавиатуры фамилии, имени, номерателефона.
procedureEditPhone;
var Nazv:string[15];
temp: file ofPhone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
Assign(temp,'Phone\temp.dat');
Rewrite(temp);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Редактированиезаписи:');
writeln;
Write('Введите Фамилию, которую хотитеизменить:');
readln(Nazv);
while notEof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
Read(PhoneF,PhoneR);
ifPhoneR.SurnameS<>Nazv then Write(temp,PhoneR);
end;
writeln;
write('Введите новую Фамилию:');
readln(PhoneR.SurnameS);
write('Введитеновое Имя:');
readln(PhoneR.NameS);
write('Введитеновый номер телефона:');
readln(PhoneR.PhoneS);
write('Введитеновый адрес:');
readln(PhoneR.AddressS);
write(temp,PhoneR);
Close(temp);
Close(PhoneF);
Erase(PhoneF);
Rename(temp,'Phone\phone.dat');
writeln;
writeln('Запись успешно изменена!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура FindSurname – поиск по фамилии. Для работыданной процедуры нам потребуются дополнительные переменные:
· k – целого типа, в данной переменнойбудет хранится количество найденных записей;
· Nazv – строкового типа длинной 15символов, в этой переменной будет храниться значение поля фамилии записикоторую необходимо найти.
Переменной k присваиваем значение равное 0. Спомощью операторов Assign и Reset открываем файл phone.dat и устанавливаем указатель в первую позицию. С помощьюоператоров Writeln и Readln создаем интерфейс для ввода фамилии (по фамилии мыбудем искать в файле нужную нам запись) с клавиатуры, присваиваем введенноезначение переменной Nazv. В цикле припомощи условного оператора сравниваем значение поля SurnameS со значением переменной Nazv и при совпадение выводим даннуюзапись на экран, при каждом совпадении значение переменной k будет увеличиваться на единицу.Выводим значение переменной k наэкран. Закрываем файл.
procedure FindSurname;
var Nazv:string[15];
k: integer;
begin
k:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Поискзаписи по Фамилии:');
writeln;
Write('Введите Фамилию:');
readln(Nazv);
while notEof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
ifPhoneR.SurnameS=Nazv then
begin
writeln;
write(PhoneR.SurnameS);
write('',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
k:=k+1;
end;
end;
Close(PhoneF);
writeln;
writeln;
writeln('Поиск завершен, найдено записей: ',k);
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура FindPhone – поиск по номеру телефона. Работаданной процедуры аналогична работе процедуры FindSurname, за одним лишь исключением:сравнение идет по полю PhoneS, а не по полю SurnameS.
procedureFindPhone;
var Nazv:string[15];
k: integer;
begin
k:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Поиск записи по номеру телефона:');
writeln;
Write('Введите номер телефона:');
readln(Nazv);
while notEof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
ifPhoneR.PhoneS=Nazv then
begin
writeln;
write(PhoneR.SurnameS);
write('',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
k:=k+1;
end;
end;
Close(PhoneF);
writeln;
writeln;
writeln('Поиск завершен, найдено записей: ',k);
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
Процедура SortSurname – сортировка по фамилии. Даннаяпроцедура открывает файл phone.dat, далее в цикле переписывает всезаписи в массив а. Затем при помощи цикла и условного оператора сравнивает исортирует записи в алфавитном порядке по полю Фамилия. Далее при помощи циклавыводит на экран уже отсортированные записи из массива.
procedureSortSurname;
var i,j,c:integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка поФамилии:');
writeln;
while notEof(PhoneF) do begin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to cdo
for j:=1 toc-1 do begin
ifa[j].SurnameS>a[j+1].SurnameS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to cdo begin
writeln;
write(a[i].SurnameS);
write('',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любуюклавишу...');
ReadKey;
end;
Процедуры SortAddress иSortPhone – работают аналогично процедуре SortSurname, только за одним исключениемсравниваются и сортируются записи по полям адрес и номер телефонасоответственно.
procedureSortAddress;
var i,j,c:integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка поадресу:');
writeln;
while notEof(PhoneF) do begin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to cdo
for j:=1 toc-1 do begin
ifa[j].AddressS>a[j+1].AddressS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to cdo begin
writeln;
write(a[i].SurnameS);
write('',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любуюклавишу...');
ReadKey;
end;
procedureSortPhone;
var i,j,c:integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка по адресу:');
writeln;
while notEof(PhoneF) do begin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to cdo
for j:=1 toc-1 do begin
ifa[j].PhoneS>a[j+1].PhoneS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to cdo begin
writeln;
write(a[i].SurnameS);
write('',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любуюклавишу...');
ReadKey;
end;
Процедура SortType – подменю сортировки. Даннаяпроцедура при помощи операторов Writelnи Readln создает подменю сортировки, дляудобства работы с программой конечного пользователя. В меню присутствуютследующие пункты:
· 1. Не сортировать– вызывает процедуру WritePhone;
· 2. Сортировать поФамилии – вызывает процедуру SortSurname;
· 3. Сортировать поадресу – вызывает процедуру SortAddress;
· 4. Сортировать пономеру телефона – вызывает процедуру SortPhone;
· 5. Возврат вглавное меню – возвращается к главному меню;
procedureSortType;
var b:integer;
begin
repeat
begin
ClrScr;
writeln('«Телефонный справочник» — меню сортировки');
writeln;
writeln('1. Несортировать');
writeln('2. Сортироватьпо Фамилии');
writeln('3. Сортироватьпо адресу');
writeln('4. Сортироватьпо номеру телефона');
writeln('----------------------------');
writeln('5. Возврат в главное меню');
writeln;
write('Выберите пунктменю: ');
readln(b);
case b of
1:WritePhone;
2:SortSurname;
3:SortAddress;
4:SortPhone;
end;
end;
until b=5;
end;
Процедура PhoneMenu – меню. Данная процедура при помощи операторов Writeln и Readln создает меню, для удобства работы с программойконечного пользователя. В меню присутствуют следующие пункты:
· 1. Показать всезаписи – вызывает процедуру WritePhone;
· 2. Добавить запись– вызывает процедуру AddPhone;
· 3. Удалить запись– вызывает процедуру DeletePhone;
· 4. Редактироватьзапись – вызывает процедуру EditPhone;
· 5. Поиск поФамилии – вызывает процедуру FindSurname;
· 6. Поиск пономеру телефона – вызывает процедуру FindPhone;
· 7. Выход –завершает работу программы;
procedurePhoneMenu;
var b:integer;
begin
repeat
begin
ClrScr;
writeln('«Телефонный справочник» — Главное меню');
writeln;
writeln('1. Показать все записи');
writeln('2. Добавить запись');
writeln('3. Удалить запись');
writeln('4. Редактировать запись');
writeln('5. Поиск по Фамилии');
writeln('6. Поиск по номеру телефона');
writeln('----------------------------');
writeln('7. Выход');
writeln;
write('Выберите пункт меню: ');
readln(b);
case b of
1: SortType;
2: AddPhone;
3:DeletePhone;
4:EditPhone;
5:FindSurname;
6:FindPhone;
end;
end;
until b=7;
end;
В основной программепроисходит очистка экрана при помощи оператора ClrScr и вызывается процедураPhoneMenu.
begin
ClrScr;
PhoneMenu;
end.
Заключение
Данная программапродемонстрировала хорошую работоспособность. Имеет интуитивно понятныйинтерфейс и не должна вызывать затруднений в работе конечного пользователя. Длякорректной работы программы файл phone.dat должен находиться в каталоге Phone, который в свою очередь долженнаходится в каталоге где установлен язык программирования Turbo Pascal.
Списоклитературы.
1. «Основыалгоритмизации и программирование», Е. Н. Сафьянова, учебное пособие, Томск, 2000 г.
Приложение1. Листинг программы.
{Для корректной работы программы файлphone.dat
должен находиться в каталоге Phone, который в
свою очередь должен находится вкаталоге где
установлен язык программирования Turbo Pascal}
program Phonebook;
uses Crt;
type Phone = record
SurnameS: string[15];
NameS: string[15];
PhoneS: string[15];
AddressS: string[50];
end;
var PhoneF: file ofPhone;
PhoneR: Phone;
a: array[1..600] ofPhone;
procedure WritePhone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Все записи:');
writeln;
while not Eof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
writeln;
write(PhoneR.SurnameS);
write(' ',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure AddPhone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
while not Eof(PhoneF) doRead(PhoneF,PhoneR);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Добавление записи:');
writeln;
Write('Введите Фамилию:');
readln(PhoneR.SurnameS);
write('Введите Имя:');
readln(PhoneR.NameS);
write('Введите номертелефона:');
readln(PhoneR.PhoneS);
write('Введите адрес:');
readln(PhoneR.AddressS);
write(PhoneF,PhoneR);
Close(PhoneF);
writeln;
writeln('Запись успешно добавлена вбазу!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure DeletePhone;
var temp: file of Phone;
Nazv: string[15];
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
Assign(temp,'Phone\temp.dat');
Rewrite(temp);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Удаление записи:');
writeln;
Write('Введите Фамилию:');
readln(Nazv);
while not Eof(PhoneF) do
begin
Read(PhoneF,PhoneR);
ifPhoneR.SurnameS<>Nazv then Write(temp,PhoneR);
end;
Close(temp);
Close(PhoneF);
Erase(PhoneF);
Rename(temp,'Phone\phone.dat');
writeln;
writeln('Запись успешно удалена избазы!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure EditPhone;
var Nazv: string[15];
temp: file of Phone;
begin
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
Assign(temp,'Phone\temp.dat');
Rewrite(temp);
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
ClrScr;
writeln('Редактированиезаписи:');
writeln;
Write('Введите Фамилию, которую хотитеизменить:');
readln(Nazv);
while not Eof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
Read(PhoneF,PhoneR);
ifPhoneR.SurnameS<>Nazv then Write(temp,PhoneR);
end;
writeln;
write('Введите новую Фамилию:');
readln(PhoneR.SurnameS);
write('Введите новоеИмя:');
readln(PhoneR.NameS);
write('Введите новый номертелефона:');
readln(PhoneR.PhoneS);
write('Введите новыйадрес:');
readln(PhoneR.AddressS);
write(temp,PhoneR);
Close(temp);
Close(PhoneF);
Erase(PhoneF);
Rename(temp,'Phone\phone.dat');
writeln;
writeln('Запись успешно изменена!!!');
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure FindSurname;
var Nazv: string[15];
k: integer;
begin
k:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Поиск записи поФамилии:');
writeln;
Write('Введите Фамилию:');
readln(Nazv);
while not Eof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
if PhoneR.SurnameS=Nazvthen
begin
writeln;
write(PhoneR.SurnameS);
write(' ',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
k:=k+1;
end;
end;
Close(PhoneF);
writeln;
writeln;
writeln('Поиск завершен, найдено записей: ',k);
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure FindPhone;
var Nazv: string[15];
k: integer;
begin
k:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Поиск записи по номеру телефона:');
writeln;
Write('Введите номер телефона:');
readln(Nazv);
while not Eof(PhoneF) do
begin
PhoneR.SurnameS:='';
PhoneR.NameS:='';
PhoneR.PhoneS:='';
PhoneR.AddressS:='';
read(PhoneF,PhoneR);
if PhoneR.PhoneS=Nazv then
begin
writeln;
write(PhoneR.SurnameS);
write(' ',PhoneR.NameS);
write('',PhoneR.PhoneS);
write('',PhoneR.AddressS);
k:=k+1;
end;
end;
Close(PhoneF);
writeln;
writeln;
writeln('Поиск завершен, найдено записей: ',k);
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure SortSurname;
var i,j,c: integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка по Фамилии:');
writeln;
while not Eof(PhoneF) dobegin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to c do
for j:=1 to c-1 do begin
ifa[j].SurnameS>a[j+1].SurnameS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to c do begin
writeln;
write(a[i].SurnameS);
write(' ',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure SortAddress;
var i,j,c: integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка по адресу:');
writeln;
while not Eof(PhoneF) dobegin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to c do
for j:=1 to c-1 do begin
ifa[j].AddressS>a[j+1].AddressS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to c do begin
writeln;
write(a[i].SurnameS);
write(' ',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure SortPhone;
var i,j,c: integer;
tr: Phone;
begin
c:=0;
Assign(PhoneF,'Phone\phone.dat');
Reset(PhoneF);
ClrScr;
writeln('Сортировка по адресу:');
writeln;
while not Eof(PhoneF) dobegin
inc(c,1);
read(PhoneF,a[c]);
end;
for i:=1 to c do
for j:=1 to c-1 do begin
ifa[j].PhoneS>a[j+1].PhoneS then begin
tr:=a[j+1];
a[j+1]:=a[j];
a[j]:=tr;
end;
end;
for i:=1 to c do begin
writeln;
write(a[i].SurnameS);
write(' ',a[i].NameS);
write('',a[i].PhoneS);
write('',a[i].AddressS);
end;
Close(PhoneF);
writeln;
writeln;
write('Нажмите любую клавишу...');
ReadKey;
end;
procedure SortType;
var b: integer;
begin
repeat
begin
ClrScr;
writeln('«Телефонный справочник» — меню сортировки');
writeln;
writeln('1. Не сортировать');
writeln('2. Сортировать по Фамилии');
writeln('3. Сортировать по адресу');
writeln('4. Сортировать по номеру телефона');
writeln('----------------------------');
writeln('5. Возврат в главное меню');
writeln;
write('Выберите пункт меню: ');
readln(b);
case b of
1: WritePhone;
2: SortSurname;
3: SortAddress;
4: SortPhone;
end;
end;
until b=5;
end;
procedure PhoneMenu;
var b: integer;
begin
repeat
begin
ClrScr;
writeln('«Телефонный справочник» — Главное меню');
writeln;
writeln('1. Показать все записи');
writeln('2. Добавить запись');
writeln('3. Удалить запись');
writeln('4. Редактировать запись');
writeln('5. Поиск по Фамилии');
writeln('6. Поиск по номеру телефона');
writeln('----------------------------');
writeln('7. Выход');
writeln;
write('Выберите пункт меню: ');
readln(b);
case b of
1: SortType;
2: AddPhone;
3: DeletePhone;
4: EditPhone;
5: FindSurname;
6: FindPhone;
end;
end;
until b=7;
end;
begin
ClrScr;
PhoneMenu;
end.