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');
writeln('Enter name');readln(name);
writeln('Enter color');readln(color);
writeln('Enter speed');readln(speed);
writeln('Enter weight');readln(weight);
writeln('Enter type');readln(car_type);
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
inherited;
writeln('Car.Created');
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);
writeln('Демонстрационная программа по теме "Классы и подклассы"');
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.