Реферат: Телефонный справочник

ТОМСКИЙГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМУПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

дистанционная форма обучения

Кафедраавтоматизированных систем управления (АСУ)

Программирование

Курсовойпроект

«телефонныйсправочник»

Датавыполнения работы ___________________

Датапроверки ___________________

Оценка___________________

И.О.Фамилияпреподавателя ___________________

Подписьпреподавателя ___________________


Содержание:

 

Содержание

Введение

Постановка задачи

Используемые методы

Описание алгоритма программы

Заключение

Список литературы

Приложение 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.

еще рефераты
Еще работы по информатике, программированию