Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.06.2009, 12:46
NightSoldier NightSoldier вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 14
Репутация: 10
По умолчанию Модуль объектов и динамические объекты

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.
Admin: Пользуемся тегами!

Самостоятельное задание.
Добавить метод Find в определение объекта типа List.
Метод находит в списке клиента с заданным именем и если его нет, то добавляет его в начало списка. Можно использовать эту же программу.

Последний раз редактировалось Admin, 04.06.2009 в 12:53.
Ответить с цитированием
  #2  
Старый 04.06.2009, 13:03
NightSoldier NightSoldier вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 14
Репутация: 10
По умолчанию

Хоть 1 задание подскажите, плииис.
Ответить с цитированием
  #3  
Старый 04.06.2009, 13:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

У вас уже готовый код, что вам еще подсказывать?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 04.06.2009, 13:19
NightSoldier NightSoldier вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 14
Репутация: 10
По умолчанию

я не могу понять как с этим работать!
-(
Я создал юнит chet_2, вставил в него код, описанный в 1 пункте.
Создал новую программу и подключил к ней этот юнит.
В программе создал процедуру menu из пункта 2.
А вот в теле её незнаю, что писать!
Как распоряжаться в дальнейшем с этой процедурой?
Плиз, если не трудно напишите пример тела этой процедуры и скажите, как работать с ней, например при нажатии кнопки Button1.
Ответить с цитированием
  #5  
Старый 04.06.2009, 15:41
NightSoldier NightSoldier вне форума
Прохожий
 
Регистрация: 04.06.2009
Сообщения: 14
Репутация: 10
По умолчанию

Пожалуйста помогите!

Мне срочно нужно сделать это задание!

Скиньте исходник, что получилось плииз.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter