Привязать к меню процедуры из класса - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

Есть модуль, в котором используется процедуры со свойствами. Есть менюшка, которая должна взаимодействовать с этим модулем. Меню такое: 1.создать класс 2.редактировать название авто 3.редактировать цвет авто 4.редактировать скорость авто 5.редактировать массу авто 6.удалить класс 7.редактировать тип авто 8.посмотреть класс Помогите привязать процедуры к действиям из меню. Код:

Решение задачи: «Привязать к меню процедуры из класса»

textual
Листинг программы
uses crt;
const kol=8;{количество пунктов меню}
{массив названий пунктов меню}
vibor:array[1..kol] of string=(
  'создать класс',
  'редактировать название авто',
  'редактировать цвет авто',
  'редактировать скорость авто',
  'редактировать массу авто',
  'удалить класс',
  'редактировать тип авто',
  'посмотреть класс');
  
v='Выбран вариант: ';
 
type
  Vehicle = class
  private
    color:string;
    name:string;
    speed:integer;
    weight:real;
  public
    constructor Create;
    destructor Destroy;
    function getName:string;
    function getColor:string;
    function getSpeed:integer;
    function getWeight:real;
    procedure setName(_name:string);
    procedure setColor(_color:string);
    procedure setSpeed(_speed:integer);
    procedure setWeight(_weight:real);
    function ToString:string;virtual;
  end;
  
  Car = class(Vehicle)
  private 
    car_type: string;
  public 
    constructor Create;
    destructor Destroy;
    function getType: string;
    procedure setType(_car_type: string);
    function ToString: string; override;
  end;
 
{##################-----Vehicle-----##########################}
constructor Vehicle.Create;
begin
  writeln('Vehicle.Create');
end;
 
 
destructor Vehicle.Destroy;
begin
  writeln('Vehicle.Destroy');
end;
 
 
function Vehicle.getName: string;
begin
  writeln('Vehicle.getName: ', self.name);
  result := self.name;
end;
 
function Vehicle.getColor: string;
begin
  writeln('Vehicle.getColor: ', self.color);
  result := self.color;
end;
 
 
function Vehicle.getSpeed: integer;
begin
  writeln('Vehicle.getSpeed: ', self.speed);
  result := self.speed;
end;
 
 
function Vehicle.getWeight: real;
begin
  writeln('Vehicle.getWeight: ', self.weight);
  result := self.weight;
end;
 
 
procedure Vehicle.setName(_name: string);
begin
  writeln('Vehicle.setName: ', _name);
  self.name := _name;
end;
 
procedure Vehicle.setColor(_color: string);
begin
  writeln('Vehicle.setColor: ', _color);
  self.color := _color;
end;
 
 
procedure Vehicle.setSpeed(_speed: integer);
begin
  writeln('Vehicle.setSpeed: ', _speed);
  self.speed := _speed;
end;
 
 
procedure Vehicle.setWeight(_weight: real);
begin
  writeln('Vehicle.setWeight: ', _weight);
  self.weight := _weight;
end;
 
 
function Vehicle.ToString: string;
begin
  result := 'Name - ' + self.name
  + '  Color - ' + self.color
  + '  Speed - ' + IntToStr(self.speed)
  + '  Weight - ' + FloatToStr(self.weight);
end;
{##################-----Vehicle-----##########################}
{##################-----CAR-----##########################}
constructor Car.Create;
begin
  writeln('Car.Create');
end;
 
destructor Car.Destroy;
begin
  writeln('Car.Destroy');
end;
 
 
function Car.getType: string;
begin
  writeln('Car.getType: ', self.car_type);
  result := self.car_type;
end;
 
 
procedure Car.setType(_car_type: string);
begin
  writeln('Car.setType: ', _car_type);
  self.car_type := _car_type;
end;
 
function Car.ToString: string;
begin
  result := 'Name - ' + self.name
  + '  Color - ' + self.color
  + '  Speed - ' + IntToStr(self.speed)
  + '  Weight - ' + FloatToStr(self.weight)
  + '  Type - ' + self.car_type;
end;
 
 
procedure Menu(var k:byte);{создание и вывод на экран меню}
var kod: char;
    i:byte;
begin
window(1,1,80,25);
textbackground(0);
clrscr;
k:=1;
gotoxy(4,1);
write('Демонстрационная программа по теме "Классы и подклассы" на примере Транспортного средства -> Автомобиля');
k:=1; {выведен первый пункт меню}
repeat
for i:=1 to kol do
 begin
  if i=k then {выделенный пункт}
   begin
    textbackground(3);
    textcolor(9);
   end
  else  {остальные}
   begin
    textbackground(0);
    textcolor(15)
   end;
gotoxy(1,i+1);{ставим курсор}
write(vibor[i]);{выводим пункты}
end;
repeat
kod:=readkey;
until Kod in [#8, #9, #13,#27];
case Kod of
#8: begin{стрелка вверх}
     k:=k-1;
     if k=0 then k:=8;{если выше верха, вниз}
     end;
#9: begin {стрелка вниз}
     k:=k+1;
     if k=9 then k:=1;{если ниже низа, вверх}
     end;
 #27: begin
      writeln;
      writeln('Вы экстренно завершили выполнение программы');
      halt;
      end;
end;
until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
end;
{основная программа}
var k:byte;
  mcar: Car;
begin
 repeat
   textbackground(0);
   textcolor(15);
   Menu(k);{выводим меню}
   
   clrscr;
   writeln(v,vibor[k]);
   case k of{выбираем стрелками действие}
   1: begin
      //writeln(v,vibor[1]);
      mcar := new Car;
      readln
      end;
   2: begin
      //writeln(v,vibor[2]);
      write('Enter new name: ');
      mcar.setName(ReadString());
      readln
      end;
   3: begin
      //writeln(v,vibor[3]);
      write('Enter new color: ');
      mcar.setColor(ReadString());
      readln
      end;
   4: begin
      //writeln(v,vibor[4]);
      write('Enter speed: ');
      mcar.setSpeed(ReadInteger());
      readln
      end;
   5: begin
      //writeln(v,vibor[5]);
      write('Enter weight: ');
      mcar.setWeight(ReadInteger());
      readln
      end; 
   6: begin
      //write(v,vibor[6]);
      mcar.Destroy;
      readln
      end; 
   7: begin
      //writeln(v,vibor[7]);
      write('Enter type: ');
      Car(mcar).setType(ReadString());
      readln
      end;       
   8: begin
      //writeln(v,vibor[8]);
      writeln(mcar.ToString);
      readln
      end;       
   9: begin
      window(1,1,80,25);
      textbackground(0);
      clrscr;
      textcolor(15);
      end;
   end;
 until k=9;
end.

Объяснение кода листинга программы

  1. Объявлен массив строк vibor размером 8 элементов.
  2. Объявлена переменная v размером 25 символов.
  3. Объявлены константы kol (количество пунктов меню) и 8 (верхняя граница цикла меню).
  4. Введен объект Vehicle с приватными полями color, name, speed и weight. Методы класса включают getName, getColor, getSpeed, getWeight, setName, setColor, setSpeed и setWeight.
  5. Введен объект Car как подкласс Vehicle с приватным полем car_type. Методы класса включают getType и setType.
  6. В процедуре Menu используется цикл для перебора пунктов меню. Пункты меню выделяются разными цветами в зависимости от выбранного пункта.
  7. В основной программе используется цикл для перебора пунктов меню. При выборе определенного пункта меню выполняется соответствующая процедура.
  8. При выборе пункта меню 1 создается объект Car.
  9. При выборе пункта меню 2 запрашивается новое название для автомобиля.
  10. При выборе пункта меню 3 запрашивается новый цвет для автомобиля.
  11. При выборе пункта меню 4 запрашивается новая скорость для автомобиля.
  12. При выборе пункта меню 5 запрашивается новый вес для автомобиля.
  13. При выборе пункта меню 6 объект Car уничтожается.
  14. При выборе пункта меню 7 запрашивается новый тип для автомобиля.
  15. При выборе пункта меню 8 выводится строка, представляющая объект Car.
  16. При выборе пункта меню 9 программа завершается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы