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

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

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

Есть модуль, в котором используется процедуры со свойствами. Есть менюшка, которая должна взаимодействовать с этим модулем. Меню такое: 1.создать класс 2.редактировать название авто 3.редактировать цвет авто 4.редактировать скорость авто 5.редактировать массу авто 6.удалить класс 7.редактировать тип авто 8.посмотреть класс Помогите привязать процедуры к действиям из меню. Код:
Листинг программы
  1. uses crt;
  2. const kol=8;{количество пунктов меню}
  3. {массив названий пунктов меню}
  4. vibor:array[1..kol] of string=('создать класс','редактировать название авто','редактировать цвет авто','редактировать скорость авто','редактировать массу авто','удалить класс','редактировать тип авто','посмотреть класс');
  5. v='Выбран вариант: ';
  6. type
  7. Vehicle = class
  8. private
  9. color:string;
  10. name:string;
  11. speed:integer;
  12. weight:real;
  13. public
  14. constructor Create;
  15. destructor Destroy;
  16. function getName:string;
  17. function getColor:string;
  18. function getSpeed:integer;
  19. function getWeight:real;
  20. procedure setName(_name:string);
  21. procedure setColor(_color:string);
  22. procedure setSpeed(_speed:integer);
  23. procedure setWeight(_weight:real);
  24. function ToString:string;virtual;
  25. end;
  26. Car = class(Vehicle)
  27. private
  28. car_type: string;
  29. public
  30. constructor Create;
  31. destructor Destroy;
  32. function getType: string;
  33. procedure setType(_car_type: string);
  34. function ToString: string; override;
  35. end;
  36. {##################-----Vehicle-----##########################}
  37. constructor Vehicle.Create;
  38. begin
  39. writeln('Vehicle.Create');
  40. end;
  41.  
  42. destructor Vehicle.Destroy;
  43. begin
  44. writeln('Vehicle.Destroy');
  45. end;
  46.  
  47. function Vehicle.getName: string;
  48. begin
  49. writeln('Vehicle.getName: ', self.name);
  50. result := self.name;
  51. end;
  52. function Vehicle.getColor: string;
  53. begin
  54. writeln('Vehicle.getColor: ', self.color);
  55. result := self.color;
  56. end;
  57.  
  58. function Vehicle.getSpeed: integer;
  59. begin
  60. writeln('Vehicle.getSpeed: ', self.speed);
  61. result := self.speed;
  62. end;
  63.  
  64. function Vehicle.getWeight: real;
  65. begin
  66. writeln('Vehicle.getWeight: ', self.weight);
  67. result := self.weight;
  68. end;
  69.  
  70. procedure Vehicle.setName(_name: string);
  71. begin
  72. writeln('Vehicle.setName: ', _name);
  73. self.name := _name;
  74. end;
  75. procedure Vehicle.setColor(_color: string);
  76. begin
  77. writeln('Vehicle.setColor: ', _color);
  78. self.color := _color;
  79. end;
  80.  
  81. procedure Vehicle.setSpeed(_speed: integer);
  82. begin
  83. writeln('Vehicle.setSpeed: ', _speed);
  84. self.speed := _speed;
  85. end;
  86.  
  87. procedure Vehicle.setWeight(_weight: real);
  88. begin
  89. writeln('Vehicle.setWeight: ', _weight);
  90. self.weight := _weight;
  91. end;
  92.  
  93. function Vehicle.ToString: string;
  94. begin
  95. result := 'Name - ' + self.name
  96. + ' Color - ' + self.color
  97. + ' Speed - ' + IntToStr(self.speed)
  98. + ' Weight - ' + FloatToStr(self.weight);
  99. end;
  100. {##################-----Vehicle-----##########################}
  101. {##################-----CAR-----##########################}
  102. constructor Car.Create;
  103. begin
  104. writeln('Car.Create');
  105. end;
  106. destructor Car.Destroy;
  107. begin
  108. writeln('Car.Destroy');
  109. end;
  110.  
  111. function Car.getType: string;
  112. begin
  113. writeln('Car.getType: ', self.car_type);
  114. result := self.car_type;
  115. end;
  116.  
  117. procedure Car.setType(_car_type: string);
  118. begin
  119. writeln('Car.setType: ', _car_type);
  120. self.car_type := _car_type;
  121. end;
  122. function Car.ToString: string;
  123. begin
  124. result := 'Name - ' + self.name
  125. + ' Color - ' + self.color
  126. + ' Speed - ' + IntToStr(self.speed)
  127. + ' Weight - ' + FloatToStr(self.weight)
  128. + ' Type - ' + self.car_type;
  129. end;
  130.  
  131. procedure Menu(var k:byte);{создание и вывод на экран меню}
  132. var kod: char;
  133. i:byte;
  134. begin
  135. window(1,1,80,25);
  136. textbackground(0);
  137. clrscr;
  138. k:=1;
  139. gotoxy(4,1);
  140. write('Демонстрационная программа по теме "Классы и подклассы" на примере Транспортного средства -> Автомобиля');
  141. k:=1; {выведен первый пункт меню}
  142. repeat
  143. for i:=1 to kol do
  144. begin
  145. if i=k then {выделенный пункт}
  146. begin
  147. textbackground(3);
  148. textcolor(9);
  149. end
  150. else {остальные}
  151. begin
  152. textbackground(0);
  153. textcolor(15)
  154. end;
  155. gotoxy(1,i+1);{ставим курсор}
  156. write(vibor[i]);{выводим пункты}
  157. end;
  158. repeat
  159. kod:=readkey;
  160. until Kod in [#8, #9, #13,#27];
  161. case Kod of
  162. #8: begin{стрелка вверх}
  163. k:=k-1;
  164. if k=0 then k:=7;{если выше верха, вниз}
  165. end;
  166. #9: begin {стрелка вниз}
  167. k:=k+1;
  168. if k=8 then k:=1;{если ниже низа, вверх}
  169. end;
  170. #27: begin
  171. writeln;
  172. writeln('Вы экстренно завершили выполнение программы');
  173. halt;
  174. end;
  175. end;
  176. until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
  177. end;
  178. {основная программа}
  179. var k:byte;
  180. mcar: Vehicle;
  181. begin
  182. repeat
  183. textbackground(0);
  184. textcolor(15);
  185. Menu(k);{выводим меню}
  186. clrscr;
  187. case k of{выбираем стрелками действие}
  188. 1: begin
  189. writeln(v,vibor[1]);
  190. mcar := Vehicle.Create;
  191. readln
  192. end;
  193. 2: begin
  194. write(v,vibor[2]);
  195. mcar.setName(self.name);
  196. readln
  197. end;
  198. 3: begin
  199. write(v,vibor[3]);
  200. mcar.setColor;
  201. readln
  202. end;
  203. 4: begin
  204. write(v,vibor[4]);
  205. mcar.setSpeed;
  206. readln
  207. end;
  208. 5: begin
  209. write(v,vibor[5]);
  210. mcar.setWeight;
  211. readln
  212. end;
  213. 6: begin
  214. write(v,vibor[6]);
  215. mcar.Destroy;
  216. readln
  217. end;
  218. 7: begin
  219. write(v,vibor[7]);
  220. Car(mcar).setType;
  221. readln
  222. end;
  223. 8: begin
  224. write(v,vibor[8]);
  225. mcar.ToString;
  226. readln
  227. end;
  228. 9: begin
  229. window(1,1,80,25);
  230. textbackground(0);
  231. clrscr;
  232. textcolor(15);
  233. end;
  234. end;
  235. until k=9;
  236. end.

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

textual
Листинг программы
  1. uses crt;
  2. const kol=8;{количество пунктов меню}
  3. {массив названий пунктов меню}
  4. vibor:array[1..kol] of string=(
  5.   'создать класс',
  6.   'редактировать название авто',
  7.   'редактировать цвет авто',
  8.   'редактировать скорость авто',
  9.   'редактировать массу авто',
  10.   'удалить класс',
  11.   'редактировать тип авто',
  12.   'посмотреть класс');
  13.  
  14. v='Выбран вариант: ';
  15.  
  16. type
  17.   Vehicle = class
  18.   private
  19.     color:string;
  20.     name:string;
  21.     speed:integer;
  22.     weight:real;
  23.   public
  24.     constructor Create;
  25.     destructor Destroy;
  26.     function getName:string;
  27.     function getColor:string;
  28.     function getSpeed:integer;
  29.     function getWeight:real;
  30.     procedure setName(_name:string);
  31.     procedure setColor(_color:string);
  32.     procedure setSpeed(_speed:integer);
  33.     procedure setWeight(_weight:real);
  34.     function ToString:string;virtual;
  35.   end;
  36.  
  37.   Car = class(Vehicle)
  38.   private
  39.     car_type: string;
  40.   public
  41.     constructor Create;
  42.     destructor Destroy;
  43.     function getType: string;
  44.     procedure setType(_car_type: string);
  45.     function ToString: string; override;
  46.   end;
  47.  
  48. {##################-----Vehicle-----##########################}
  49. constructor Vehicle.Create;
  50. begin
  51.   writeln('Vehicle.Create');
  52. end;
  53.  
  54.  
  55. destructor Vehicle.Destroy;
  56. begin
  57.   writeln('Vehicle.Destroy');
  58. end;
  59.  
  60.  
  61. function Vehicle.getName: string;
  62. begin
  63.   writeln('Vehicle.getName: ', self.name);
  64.   result := self.name;
  65. end;
  66.  
  67. function Vehicle.getColor: string;
  68. begin
  69.   writeln('Vehicle.getColor: ', self.color);
  70.   result := self.color;
  71. end;
  72.  
  73.  
  74. function Vehicle.getSpeed: integer;
  75. begin
  76.   writeln('Vehicle.getSpeed: ', self.speed);
  77.   result := self.speed;
  78. end;
  79.  
  80.  
  81. function Vehicle.getWeight: real;
  82. begin
  83.   writeln('Vehicle.getWeight: ', self.weight);
  84.   result := self.weight;
  85. end;
  86.  
  87.  
  88. procedure Vehicle.setName(_name: string);
  89. begin
  90.   writeln('Vehicle.setName: ', _name);
  91.   self.name := _name;
  92. end;
  93.  
  94. procedure Vehicle.setColor(_color: string);
  95. begin
  96.   writeln('Vehicle.setColor: ', _color);
  97.   self.color := _color;
  98. end;
  99.  
  100.  
  101. procedure Vehicle.setSpeed(_speed: integer);
  102. begin
  103.   writeln('Vehicle.setSpeed: ', _speed);
  104.   self.speed := _speed;
  105. end;
  106.  
  107.  
  108. procedure Vehicle.setWeight(_weight: real);
  109. begin
  110.   writeln('Vehicle.setWeight: ', _weight);
  111.   self.weight := _weight;
  112. end;
  113.  
  114.  
  115. function Vehicle.ToString: string;
  116. begin
  117.   result := 'Name - ' + self.name
  118.   + '  Color - ' + self.color
  119.   + '  Speed - ' + IntToStr(self.speed)
  120.   + '  Weight - ' + FloatToStr(self.weight);
  121. end;
  122. {##################-----Vehicle-----##########################}
  123. {##################-----CAR-----##########################}
  124. constructor Car.Create;
  125. begin
  126.   writeln('Car.Create');
  127. end;
  128.  
  129. destructor Car.Destroy;
  130. begin
  131.   writeln('Car.Destroy');
  132. end;
  133.  
  134.  
  135. function Car.getType: string;
  136. begin
  137.   writeln('Car.getType: ', self.car_type);
  138.   result := self.car_type;
  139. end;
  140.  
  141.  
  142. procedure Car.setType(_car_type: string);
  143. begin
  144.   writeln('Car.setType: ', _car_type);
  145.   self.car_type := _car_type;
  146. end;
  147.  
  148. function Car.ToString: string;
  149. begin
  150.   result := 'Name - ' + self.name
  151.   + '  Color - ' + self.color
  152.   + '  Speed - ' + IntToStr(self.speed)
  153.   + '  Weight - ' + FloatToStr(self.weight)
  154.   + '  Type - ' + self.car_type;
  155. end;
  156.  
  157.  
  158. procedure Menu(var k:byte);{создание и вывод на экран меню}
  159. var kod: char;
  160.     i:byte;
  161. begin
  162. window(1,1,80,25);
  163. textbackground(0);
  164. clrscr;
  165. k:=1;
  166. gotoxy(4,1);
  167. write('Демонстрационная программа по теме "Классы и подклассы" на примере Транспортного средства -> Автомобиля');
  168. k:=1; {выведен первый пункт меню}
  169. repeat
  170. for i:=1 to kol do
  171.  begin
  172.   if i=k then {выделенный пункт}
  173.    begin
  174.     textbackground(3);
  175.     textcolor(9);
  176.    end
  177.   else  {остальные}
  178.    begin
  179.     textbackground(0);
  180.     textcolor(15)
  181.    end;
  182. gotoxy(1,i+1);{ставим курсор}
  183. write(vibor[i]);{выводим пункты}
  184. end;
  185. repeat
  186. kod:=readkey;
  187. until Kod in [#8, #9, #13,#27];
  188. case Kod of
  189. #8: begin{стрелка вверх}
  190.      k:=k-1;
  191.      if k=0 then k:=8;{если выше верха, вниз}
  192.      end;
  193. #9: begin {стрелка вниз}
  194.      k:=k+1;
  195.      if k=9 then k:=1;{если ниже низа, вверх}
  196.      end;
  197.  #27: begin
  198.       writeln;
  199.       writeln('Вы экстренно завершили выполнение программы');
  200.       halt;
  201.       end;
  202. end;
  203. until kod=#13;{нажат Enter, выходим из меню в выбранную процедуру}
  204. end;
  205. {основная программа}
  206. var k:byte;
  207.   mcar: Car;
  208. begin
  209.  repeat
  210.    textbackground(0);
  211.    textcolor(15);
  212.    Menu(k);{выводим меню}
  213.    
  214.    clrscr;
  215.    writeln(v,vibor[k]);
  216.    case k of{выбираем стрелками действие}
  217.    1: begin
  218.       //writeln(v,vibor[1]);
  219.       mcar := new Car;
  220.       readln
  221.       end;
  222.    2: begin
  223.       //writeln(v,vibor[2]);
  224.       write('Enter new name: ');
  225.       mcar.setName(ReadString());
  226.       readln
  227.       end;
  228.    3: begin
  229.       //writeln(v,vibor[3]);
  230.       write('Enter new color: ');
  231.       mcar.setColor(ReadString());
  232.       readln
  233.       end;
  234.    4: begin
  235.       //writeln(v,vibor[4]);
  236.       write('Enter speed: ');
  237.       mcar.setSpeed(ReadInteger());
  238.       readln
  239.       end;
  240.    5: begin
  241.       //writeln(v,vibor[5]);
  242.       write('Enter weight: ');
  243.       mcar.setWeight(ReadInteger());
  244.       readln
  245.       end;
  246.    6: begin
  247.       //write(v,vibor[6]);
  248.       mcar.Destroy;
  249.       readln
  250.       end;
  251.    7: begin
  252.       //writeln(v,vibor[7]);
  253.       write('Enter type: ');
  254.       Car(mcar).setType(ReadString());
  255.       readln
  256.       end;      
  257.    8: begin
  258.       //writeln(v,vibor[8]);
  259.       writeln(mcar.ToString);
  260.       readln
  261.       end;      
  262.    9: begin
  263.       window(1,1,80,25);
  264.       textbackground(0);
  265.       clrscr;
  266.       textcolor(15);
  267.       end;
  268.    end;
  269.  until k=9;
  270. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы