1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
ООП на Turbo Pascal, Переход от процедурного программирования к модульному.
Всем привет. Возникла такая проблема...Дана задача написать телефонный справочник на Турбо Паскале принципом Объектного Ориентированного Программирования.(модульное программирование). у меня есть листинг программы...но проблема в том что программа написанна вроде не принципом Объектного Ориентированного Программирования а процедурным... я незнаю как перевести этот код в Объектно Ориентированное программирование(модульное программирование) т.е. к проге наверно должны быть привязаны модули.
Программа умеет добавлять, изменять, удалять, искать записи. Также, для упрощения работы с программой, создан интуитивно понятный интерфейс.В программе используется следующий алгоритм работы с данными: все данные хранятся в файле phone.dat и загружаются в программу при вызове той или иной процедуры. При удалении или изменении записи создается временный файл с именем temp.dat, в него записываются все данные из файла phone.dat кроме тех которые были удалены или записываются уже измененные данные, затем файл phone.dat удаляется, а файл temp.dat переименовывается в phone.dat.
{Для корректной работы программы файл 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 of Phone; PhoneR : Phone; a : array[1..600] of Phone; 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) 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; 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); if PhoneR.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); if PhoneR.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=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 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) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[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) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[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) do begin inc(c,1); read(PhoneF,a[c]); end; for i:=1 to c do for j:=1 to c-1 do begin if a[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.
Сообщение отредактировано: dron4ik - 9.05.2009 13:48
написать телефонный справочник на Турбо Паскале принципом Объектного Ориентированного Программирования.(модульное программирование)
Так модульное, или ООП? Это не одно и то же. "Модульное" - это разбиение программ на отдельные единицы компиляции - модули, но это не значит, что модули будут реализованы в виде объектов. Они можут быть реализованы и в виде отдельных процедур и функций.
Как я понял---> Мне нужно чтобы к основной программе были подключены модули...Каждый модуль как я понял считается подпрограмой.. Тоесть в основной проге как бы свой код, а в модулях свои..
Добавлено через 10 мин. Т.е. выделение групп подпрограмм использующих одни и те же глобальные данные в отдельно компилируемые модули.
Чем тебе помочь? Сказать, ООП ли это? Да, вот это - настоящее Объектно-Ориентированное Программирование. Построенное на использовании библиотеки TurboVision...