Привязать к меню процедуры из класса - PascalABC.NET
Формулировка задачи:
Есть модуль, в котором используется процедуры со свойствами.
Есть менюшка, которая должна взаимодействовать с этим модулем.
Меню такое:
1.создать класс
2.редактировать название авто
3.редактировать цвет авто
4.редактировать скорость авто
5.редактировать массу авто
6.удалить класс
7.редактировать тип авто
8.посмотреть класс
Помогите привязать процедуры к действиям из меню.
Код:
Листинг программы
- 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:=7;{если выше верха, вниз}
- end;
- #9: begin {стрелка вниз}
- k:=k+1;
- if k=8 then k:=1;{если ниже низа, вверх}
- end;
- #27: begin
- writeln;
- writeln('Вы экстренно завершили выполнение программы');
- halt;
- end;
- end;
- until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
- end;
- {основная программа}
- var k:byte;
- mcar: Vehicle;
- begin
- repeat
- textbackground(0);
- textcolor(15);
- Menu(k);{выводим меню}
- clrscr;
- case k of{выбираем стрелками действие}
- 1: begin
- writeln(v,vibor[1]);
- mcar := Vehicle.Create;
- readln
- end;
- 2: begin
- write(v,vibor[2]);
- mcar.setName(self.name);
- readln
- end;
- 3: begin
- write(v,vibor[3]);
- mcar.setColor;
- readln
- end;
- 4: begin
- write(v,vibor[4]);
- mcar.setSpeed;
- readln
- end;
- 5: begin
- write(v,vibor[5]);
- mcar.setWeight;
- readln
- end;
- 6: begin
- write(v,vibor[6]);
- mcar.Destroy;
- readln
- end;
- 7: begin
- write(v,vibor[7]);
- Car(mcar).setType;
- readln
- end;
- 8: begin
- write(v,vibor[8]);
- mcar.ToString;
- readln
- end;
- 9: begin
- window(1,1,80,25);
- textbackground(0);
- clrscr;
- textcolor(15);
- end;
- end;
- until k=9;
- end.
Решение задачи: «Привязать к меню процедуры из класса»
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.
Объяснение кода листинга программы
- Объявлен массив строк
vibor
размером 8 элементов. - Объявлена переменная
v
размером 25 символов. - Объявлены константы
kol
(количество пунктов меню) и8
(верхняя граница цикла меню). - Введен объект
Vehicle
с приватными полямиcolor
,name
,speed
иweight
. Методы класса включаютgetName
,getColor
,getSpeed
,getWeight
,setName
,setColor
,setSpeed
иsetWeight
. - Введен объект
Car
как подклассVehicle
с приватным полемcar_type
. Методы класса включаютgetType
иsetType
. - В процедуре
Menu
используется цикл для перебора пунктов меню. Пункты меню выделяются разными цветами в зависимости от выбранного пункта. - В основной программе используется цикл для перебора пунктов меню. При выборе определенного пункта меню выполняется соответствующая процедура.
- При выборе пункта меню
1
создается объектCar
. - При выборе пункта меню
2
запрашивается новое название для автомобиля. - При выборе пункта меню
3
запрашивается новый цвет для автомобиля. - При выборе пункта меню
4
запрашивается новая скорость для автомобиля. - При выборе пункта меню
5
запрашивается новый вес для автомобиля. - При выборе пункта меню
6
объектCar
уничтожается. - При выборе пункта меню
7
запрашивается новый тип для автомобиля. - При выборе пункта меню
8
выводится строка, представляющая объектCar
. - При выборе пункта меню
9
программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д