1.Создайте модуль определения объектов под именем chet_2. Скомпилируйте его и сохраните в каталоге на локальном диске под тем же именем.
Содержимое модуля должно выглядеть примерно так.
Код:
unit chet_2;{заголовок модуля}
interface
type
strn=string[30];
mel=0..99;
DenSum=Object{определение типа объекта денежная сумма}
{определение полей объектов}
Rubl:integer;
kop:mel;
{определение заголовков методов объекта DenSum}
procedure InitDS( R:integer;Kp:mel);
procedure AddSumm(R:integer;Kp:mel);
procedure SubSumm(R:integer;Kp:mel);
procedure PrintSum;
end;
{конец определения типа объекта DenSum}
Client=Object(DenSum){определения типа объекта Client}
{определение полей объекта Client}
Name:strn;
code:integer;
{определение заголовков методов объекта Client}
constructor InitCL(R:integer;Kp:mel;x:strn);
procedure AddSumm(R:integer;Kp:mel);
procedure SubSumm(R:integer;Kp:mel);
procedure PrintSchet;
end;{конец определения типа объекта Client}
implementation
{определение методов объектов DenSum и Client}
procedure DenSum.InitDS( R:integer;Kp:mel);
begin
Rubl:=R;
kop:=Kp;
end;
procedure DenSum.AddSumm(R:integer;Kp:mel);
begin
if kop>=kp then
begin
Rubl:=Rubl+R+1;
kop:=kop+kp-100;
end
else
begin
Rubl:=Rubl+R;
kop:= kop+kp;
end;
end;
procedure DenSum.SubSumm(R:integer;Kp:mel);
begin
if kop<kp then
begin
rubl:=rubl-R-1;
kop:=100+kop-kp;
end
else
begin
rubl:=rubl-R;
kop:= kop- kp;
end;
end;
procedure DenSum.PrintSum;
begin
writeln(' =',Rubl,'p',kop);
end;
constructor Client.InitCL(R:integer;Kp:mel;x:strn);
begin
name:=x;
DenSum.InitDS(R,Kp);
end;
procedure Client.AddSumm(R:integer;Kp:mel);
begin
DenSum.AddSumm(R,Kp);
end;
procedure Client.SubSumm(R:integer;Kp:mel);
begin
DenSum.SubSumm(R,Kp);
end;
procedure Client.PrintSchet;
begin
write(name);
DenSum.PrintSum;
end;
end.
При создании своего модуля воспользуйтесь текстами своих предыдущих программ чтобы не писать все заново.
2.Создайте программу для тестирования своего модуля.
Подключите модуль chet_2 к своей программе. В программе оформите процедуру, которая будет содержать основные операции со счетом клиента. Входным параметром процедуры будет экземпляр объекта типа Client, т.е. заголовок модуля должен выглядеть примерно так
procedure menu(anyclient:Client);
begin
{тело процедуры}
end;
В программе определите несколько экземпляров объекта типа Client.
3.Создание динамических объектов типа Client.
Создайте программу которая создает список объектов типа Client. Программа использует модуль chet_2.
Код:
Program schet_2;
uses chet_2;
type
ClientPtr=^Client;
NodePtr = ^Node;
Node = record
Item : ClientPtr;{указатель на тип произодный от типа Client}
Next : NodePtr;{указатель на следующий в списке элемент}
end;
List = Object{определяется тип объекта List (список)}
CurNode : NodePtr;
{заголовки методов типа объекта List}
Constructor Init;
Destructor LastStep;
Procedure AddNew(Item : ClientPtr);
Procedure ShowAll;
end;
Constructor List.Init;
{создание объекта типа List}
Begin
CurNode:=nil; {CurNode – указатель на начало списка}
End;
Destructor List.LastStep;
{деструктор объекта типа List}
Var Temp : NodePtr;
Begin
While CurNode <> nil Do Begin
Temp:=CurNode;
{Dispose(Temp^.Item,LastStep);} {Вызывается деструктор данного типа}
CurNode:=Temp^.Next;
Dispose(Temp); {Удалить переменную из динамической памяти}
End;
End;
Procedure List.AddNew(Item : ClientPtr);
{добавление нового объекта в начало списка}
Var Temp : NodePtr;
Begin
New(Temp);
Temp^.Item:=Item;
Temp^.Next:=CurNode; {элемент добавляется в начало списка}
CurNode:=Temp;
End;
Procedure List.ShowAll;
{показать весь список}
Var Temp : NodePtr;
Begin
Temp:=CurNode;
While Temp <> nil Do {цикл по цепочке указателей }
Begin Temp^.Item^.PrintSchet;
Temp:=Temp^.Next;
End;
End;
var
Xlist:List;
Mychet:Client;
S1:integer;k1:mel;
y:strn;
begin {main}
Xlist.Init; {создание экземпляра объекта типа List}
Xlist.AddNew( New(ClientPtr,InitCL(100,20,'Ivan')));
Xlist.AddNew( New(ClientPtr,InitCL(150,30,'Peter')));
Xlist.AddNew( New(ClientPtr,InitCL(200,50,'jon')));
Xlist.AddNew( New(ClientPtr,InitCL(250,70,'vasy')));
Xlist.ShowAll; {показать весь список}
Xlist.LastStep;{удаление экземпляра объекта из списка}
end.
Самостоятельное задание.
Добавить метод Find в определение объекта типа List.
Метод находит в списке клиента с заданным именем и если его нет, то добавляет его в начало списка. Можно использовать эту же программу.