terminal.setPricing(...);
terminal.scan("A");
terminal.scan("C");
... etc.
BigDecimal result = terminal.calculateTotal();
Список продукции
------------ -----
A | $1.25 each or 3 for $3.00
B | $4.25
C | $1.00 or $5 for a six pack
D | $0.75
Как видно из таблицы цена продукта может меняться взависимости от количества. Вопрос как эту таблицу превратить в ассоцитивный массив где ключ-код продукции а значение-цена?
Если это не возможно подскажите свой вариант. Пойму на пхп, джаве или просто на словах.
Тут обычным ассоциативным массивом не сделать, как минимум значение должно ссылаться на функцию.
Что означает значение должно ссылаться на фукцию?
Как один из вариантов может надо создать обьект Продукт который будет включать в себя (композит) обьект Скидка и тогда остаеться вопрос кто будет считать цену покупки сам обьект Продукт или приложение, тогда как оно получит инфо о скидке?
Вобщем подскажите направление движения?
А решение проблемы зависит от общей задачи. Потому что если данные хранятся в БД, то один подход будет, если товаров несколько и решение хотите хранить в массиве, то другие варианты решения существуют.
Вот пример, где все значения - анонимные функции. PHP 5.3. Должно быть так, код не проверял.
Код:
$products = array(
"A" => function($x) { return ((int)$x/3)*3.00 + ($x%3)*1.25 },
"B" => function($x) { return 4.25; },
....
);
var_dump($products["A"](5));
"A" => function($x) { return ((int)$x/3)*3.00 + ($x%3)*1.25 },
"B" => function($x) { return 4.25; },
....
);
var_dump($products["A"](5));
Естественно, можно всё это обобщить и упростить, обернуть в классы. Всё зависит от общей задачи.
Вопрос как создавать динамично такую функцию.То есть запустили приложение, с консоли установили цены и потом ввели продукцию и количество и получили сумму за заказ. Про ассоциативные массивы это то что пришло в голову первое, наверно не самое лучшее.В базе хранить ни чего не надо.Если есть идея не с пхп а на джаве через коллекции я тоже пойму, или какой либо другой способ.Тоесть каждый раз при запуске вводим цену и скидку за количество.
По сути - задача от этого не меняется. Ввели в консоль значения, все храните в массиве. Динамически я показал как создавать.
Динамично мне надо скидку формировать тоесть каждый раз новую цену и количество.
Код:
Код:
class Product {
String mTitle; // название
double mPricePerOne; // цена за единицу товара
// скидки
int mPackSize; // размер пачки, для которой дают скидку (например, для 3 штук)
double mPricePerPack; // цена за пачку
public Product(String title, String price_per_one) {
mTitle = title;
mPricePerOne = price_per_one;
mPackSize = 0;
mPricePerPack = 0.0;
}
public void setDiscount(int pack_size, double price_per_pack) {
mPackSize = pack_size;
mPricePerPack = price_per_pack;
}
/**
* Расчитать цену для количества товаров count
*/
public double calculate(int count) {
if( mPackSize == 0 ) {
return count*mPricePerOne;
} else {
return( mPricePerPack*count/mPackSize + (count%mPackSize)*mPricePerOne );
}
}
// ... далее здесь различные get/set
}
public static void main(String[] args) {
List<Product> products = new ArrayList<Product>();
while( <ввод товара> ) {
Product p = new Product(<название>,<цена>);
// если надо, вызываешь p.setDiscount(.., ..);
products.add(p);
}
// выбор товара для покупки
// подсчет общей стоимости, формирование "чека"
}
String mTitle; // название
double mPricePerOne; // цена за единицу товара
// скидки
int mPackSize; // размер пачки, для которой дают скидку (например, для 3 штук)
double mPricePerPack; // цена за пачку
public Product(String title, String price_per_one) {
mTitle = title;
mPricePerOne = price_per_one;
mPackSize = 0;
mPricePerPack = 0.0;
}
public void setDiscount(int pack_size, double price_per_pack) {
mPackSize = pack_size;
mPricePerPack = price_per_pack;
}
/**
* Расчитать цену для количества товаров count
*/
public double calculate(int count) {
if( mPackSize == 0 ) {
return count*mPricePerOne;
} else {
return( mPricePerPack*count/mPackSize + (count%mPackSize)*mPricePerOne );
}
}
// ... далее здесь различные get/set
}
public static void main(String[] args) {
List<Product> products = new ArrayList<Product>();
while( <ввод товара> ) {
Product p = new Product(<название>,<цена>);
// если надо, вызываешь p.setDiscount(.., ..);
products.add(p);
}
// выбор товара для покупки
// подсчет общей стоимости, формирование "чека"
}
Спасибо!