Привязать к меню процедуры из класса - 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.
Объяснение кода листинга программы
- Объявлен массив строк
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
программа завершается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д