/**
* Создает экземпляр Машины
* @this {Car}
* @param {string} manufacturer Производитель
* @param {string} model Модель
* @param {number} year Год производство
*/
function Car(manufacturer, model, year) {
this.manufacturer = manufacturer;
this.model = model;
this.year = year || new Date().getFullYear();
this.getInfo = function() {
return this.manufacturer +' '+ this.model +' '+ this.year;
};
this.getDetailedInfo = function() {
return 'Производитель: ' + this.manufacturer +'. Модель: '+ this.model +'. Год: '+ this.year;
};
this.getCountry = function() {
switch (this.manufacturer.toLowerCase()) {
case 'bmw':
case 'audi':
return 'Germany';
case 'toyota':
return 'Japan';
case 'lada':
case 'kamaz':
case 'uaz':
return 'Russia';
}
};
}
// @TODO: если конструктор вызывается без указания текущего года, то подставлять текущий
// @TODO: реализовать методы вывода информации о машине:
// console.log(bmw); // BMW X5 2010
// console.log(bmw.getInfo()); // BMW X5 2010
// console.log(bmw.getDetailedInfo()); // Производитель: BMW. Модель: X5. Год: 2010
var bmw = new Car("BMW", "X5", 2010),
audi = new Car("Audi", "Q5", 2012),
toyota = new Car("Toyota", "Camry"),
lada = new Car("LADA", "Granta", 2012),
kamaz = new Car("KAMAZ", "-", 2010),
uaz = new Car("UAZ", "Patriot");
/**
* Создает экземпляр Автосалона
* @this {CarDealer}
* @param {string} name Название автосалона
*/
function CarDealer(name) {
this.name = name;
this.cars = [];
this.price = [];
this.add = function() {
for (var i=0; i < arguments.length; i++) {
this.cars.push(arguments[i]);
};
return this;
};
this.setPrice = function(car, price) {
this.price.push({car: car, price: price});
return this;
};
this.list = function() {
var result = [];
for (var i=0; i < this.cars.length; i++) {
result.push(this.cars[i].getInfo());
};
return result.join(', ');
};
this.listByCountry = function(country) {
var result = [];
for (var i=0; i < this.cars.length; i++) {
if (this.cars[i].getCountry() == country) result.push(this.cars[i].getInfo());
};
return result.join(', ');
};
this.listByCurrency = function(currency) {
if (currency != 'R') return; // Метод работает только с рублями (по условию ниже)
var result = [];
for (var i=0; i < this.price.length; i++) {
if (this.price[i].price.slice(0, 1) == currency) {
for (var j=0; j < this.cars.length; j++) {
if (this.cars[j].getInfo() == this.price[i].car) result.push(this.cars[j].getInfo());
};
}
};
return result.join(', ');
};
}
var yandex = new CarDealer('Яндекс.Авто');
// @TODO: реализовать метод добавления машин в автосалон.
// Предусмотреть возможность добавления одной машины, нескольких машин.
yandex
.add(toyota)
.add(bmw, audi)
.add(lada, kamaz, uaz);
// @TODO: реализовать метод установки цены на машину
/**
* Установить цену на машину
* @param {string} car идентификатор машины
* @param {string} price стоимость
*/
// идентификатор машины составляется следующим образом "производитель модель год"
// стоимость машины может быть задана в двух валютах: йена и евро.
yandex
.setPrice('BMW X5 2010', '€2000')
.setPrice('Audi Q5 2012', '€3000')
.setPrice('Toyota Camry 2012', '¥3000')
.setPrice('LADA Granta 2012', 'R25000')
.setPrice('KAMAZ - 2010', 'R37040')
.setPrice('UAZ Patriot 2012', 'R300');
// @TODO: реализовать вывод списка автомобилей в продаже,
// с фильтрацией по стране производителю, используя метод getCountry:
// function getCountry() {
// switch (this.manufacturer.toLowerCase()) {
// case 'bmw':
// case 'audi':
// return 'Germany';
//
// case 'toyota':
// return 'Japan';
// }
// }
yandex.list(); //BMW X5 2010, Audi Q5 2012, Toyota Camry 2012
yandex.listByCountry('Germany'); //BMW X5 2010, Audi Q5 2012
// @TODO: бонус! выводить список машин с ценой в рублях.
yandex.listByCurrency('R'); //LADA Granta, KAMAZ, UAZ Patriot