Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/47: Рейтинг темы: голосов - 47, средняя оценка - 4.89
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304

Добавление и товара в корзину и удаление

12.04.2017, 14:56. Показов 8803. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть такое задание:

Опишите класс Корзина, в которые можно передавать любой товар. Опишите у корзины нужные свойства и методы. Например метод получения суммы заказа, удаление товара из корзины и т.д.

Я вообще тут запутался, правильно ли я сделал добавление товара?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
header('Content-Type: text/html; charset=utf-8');
error_reporting(-1);
 
 
interface getProduct{
    public function getName();
    public function getPrice();
}
 
interface Basket{
    public function getProduct();
    public function delProduct();
}
 
abstract class Product implements getProduct{
    private $name;
    private $price;
    
    public function __construct($name, $price){
        $this->name = $name;
        $this->price = $price;
    }
    
    public function getName(){
        return $this->name;
    }
    public function getPrice(){
        return $this->price;
    }
}
 
class Tablet extends Product{}
 
class Cart extends Tablet implements Basket{
    public function getProduct(){
        return $this->getName();
    }
    public function delProduct(){
        return $this->getName();
    }
    
}
 
$tablet = new Tablet('Asus', 3000);
$basket = new Cart($tablet->getName(), $tablet->getPrice());
 
echo $basket->getProduct();
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.04.2017, 14:56
Ответы с готовыми решениями:

Добавление товара в корзину
Всем доброго времени суток. У меня такой вопрос почему по нажатию кнопки не добавляется товар в таблицу при нажатии на кнопку? Дело вот в...

Исправить добавление товара в корзину
Помогите исправить код. На какую ссылку не нажми, по порядку в корзину добавляет все товары и потом постоянно последний товар... &lt;?php...

Добавление товара в корзину.
Добавление товара в корзину. День добрый. Вопрос жизни и смерти. У меня есть каталог с занесенными элементами. Есть страница на в...

7
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
12.04.2017, 15:18
Не правильно. У тебя в задании написано, что надо описать класс корзины, а ты его зачем-то интерфейсом сделал. Это должен быть отдельный класс. Совсем отдельный.
0
 Аватар для Vas-e-na
420 / 417 / 79
Регистрация: 21.06.2010
Сообщений: 1,362
12.04.2017, 17:11
Не правильно, присоединяясь к andr-xw, добавлю что класс корзины еще и не должен наследоваться от класс товара.
0
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304
20.04.2017, 19:55  [ТС]
Я полностью изменил код.

Теперь осталась одна проблема, если добавлять одинаковые товары, то по логике свойство numberProduct должно увеличиваться на 1.

Оно увеличивается только 1 раз , но почему-то не сохраняется?

Помогите пожалуйста, я уже 3 часа мучаюсь.

23 строка

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
 
abstract class Product{
    public $title;
    public $price;
    public $numberProduct;
    
    public function __construct($title, $price, $numberProduct = 1){
        $this->title = $title;
        $this->price = $price;
        $this->numberProduct = $numberProduct;
    }
}
 
class Cart{
    public $countProduct = [];
    
    public function addProduct($product){
        $getProduct = '';
        
        if(array_key_exists($product->title, $this->countProduct)){
        
            $res =  $product->numberProduct = $product->numberProduct+ 1;
            echo 'Товар добавлен в корзину<br>';
            return $res;
            
        }
        else{
            $this->countProduct[$product->title] = $product;
            echo 'Товар добавлен в корзину<br>';
        }
        
    }
    
    public function deleteProduct($product){
        echo $product->title . ' удалён';
        unset($this->countProduct[$product->title]);
    }
}
 
class Planshet extends Product{}
 
$planshet = new Planshet('Asus', 2000);
$planshet2 = new Planshet('Lenovo', 3000);
$planshet3 = new Planshet('Lenovo', 3000);
$planshet4 = new Planshet('Lenovo', 3000);
$planshet5 = new Planshet('Lenovo', 3000);
 
 
$korzina = new Cart();
 
$korzina->addProduct($planshet); //добавляю товар в корзину
$korzina->addProduct($planshet2); //добавляю товар в корзину
$korzina->addProduct($planshet3); //добавляю товар в корзину
$korzina->addProduct($planshet4); //добавляю товар в корзину
$korzina->addProduct($planshet5); //добавляю товар в корзину
 
 
echo '<pre>';
var_dump($korzina->countProduct);
echo '</pre>';
 
$korzina->deleteProduct($planshet); //удаляю из корзины
 
echo '<pre>';
var_dump($korzina->countProduct);
Добавлено через 6 часов 33 минуты
Вот такая проблема, количество товаров нормально считает, а вот цену не правильно, если добавить 4 одинаковых товара, стоимостью 2000, то должно получится 8000, а получается 16 000, почему?

И почему не узнаётся цена добавленного товара?

Я же говорю ей, возьми общую цену у товаров, которые лежат в корзине и добавь к ним цену нового товара, а получается, что складывается общая цена и общая цена.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
 
abstract class Product{
    public $title;
    public $price;
    public $numberProduct;
    
    public function __construct($title, $price, $numberProduct = 1){
        $this->title = $title;
        $this->price = $price;
        $this->numberProduct = $numberProduct;
    }
}
 
class Cart{
    public $countProduct = [];
    
    public function addProduct($product){                                       
        
        if(array_key_exists($product->title, $this->countProduct)){
            $this->countProduct[$product->title]->numberProduct++;
            
            //$this->countProduct[$product->title]->price += 2000;
            
            $this->countProduct[$product->title]->price += $product->price;
    
        var_dump($product->price);
        
        echo 'Товар добавлен в корзину<br>';
        echo 'Количество ' . $product->numberProduct . '<br>';
        echo '<br>';
        
        }
        else{
            $this->countProduct[$product->title] = $product;
        }
    }
    
    public function showAllProduct(){ //показать список продуктов и количество
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ' количество ' . $value->numberProduct . '<br>';
        }
        echo '<pre>';
        var_dump($this->countProduct);
    }
}
 
class Planshet extends Product{}
 
$asus = new Planshet('Asus', 2000);
 
$korzina = new Cart();
 
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus); //добавляю товар в корзину
 
$korzina->showAllProduct();
 
echo $asus->price;
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
20.04.2017, 20:39
Потому что ты информацию, относящуюся к корзине, хранишь в объекте продукта.

Добавлено через 5 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    public function addProduct($product) {
        if (array_key_exists($product->title, $this->countProduct)) {
            $this->countProduct[$product->title]++;
            $this->totalPrice[$product->title] += $product->price;
    
            var_dump($product->price);
        
            echo 'Товар добавлен в корзину<br>';
            echo 'Количество ' . $this->countProduct[$product->title] . '<br>';
            echo 'На сумму ' . $this->totalPrice[$product->title] . '<br>';
            echo '<br>';
        
        } else {
            $this->countProduct[$product->title] = 1;
            $this->totalPrice[$product->title] = $product->price;
        }
    }
1
3 / 3 / 1
Регистрация: 24.03.2013
Сообщений: 304
20.04.2017, 22:17  [ТС]
Я сделал.

Создал такие методы:

1) Добавление продукта.
2) Добавление одинакового продукта
3) Удаление одного продукта
4) Удаление всех продуктов
5) Получение названия и количество продуктов
6) Получение общей цены всех продуктов

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<?php
 
abstract class Product{
    public $title;
    public $price;
  
   
    public function __construct($title, $price){
        $this->title = $title;
        $this->price = $price;
    }
}
 
class Cart{
    public $countProduct = [];
   
    public function addProduct($product){                                      
       $product->numberProduct = 1; //если это убрать то тоже буде работать, только не будет учитывать первый
       
        if(array_key_exists($product->title, $this->countProduct)){
            $this->countProduct[$product->title]->numberProduct++;
        
            echo 'Товар добавлен в корзину<br>';
        }
        else{
            $this->countProduct[$product->title] = $product;
        }
    }
    
    public function deleteAllProduct($product){ //убрать все одинаковые продукты из корщины
        echo $product->title . ' удалён';
        unset($this->countProduct[$product->title]);
    }
    
    public function deleteOneProduct($product){ //убрать 1 одинаковый продукт
        if(array_key_exists($product->title, $this->countProduct)){
        
            if($this->countProduct[$product->title]->numberProduct > 0){
            
                 $this->countProduct[$product->title]->numberProduct--;
                 echo 'Товар ' . $this->countProduct[$product->title]->title. ' удалён из корзины<br>';
            } 
        }
    }
 
    public function showAllProduct(){ //показать список продуктов и количество
        $resCountProduct = 0;
        
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ', количество: ' . $value->numberProduct . '<br>';
            
            $resCountProduct = $resCountProduct + $value->numberProduct; 
            
            
        }
        
        echo 'Общее количество товаров: ' . $resCountProduct;
        
        
        /*
        echo '<pre>';
        var_dump($this->countProduct);
        */
    }
    
    public function sum(){ //подсчитать общую сумму продукта
        
        $res = 0;
        //var_dump($this->countProduct);
        
        foreach($this->countProduct as $key => $value){
            $res = $res + ($value->price * $value->numberProduct);
        }
        
        return $res;
        
    }
}
 
class Planshet extends Product{}
 
$asus = new Planshet('Asus', 2000);
$asus2 = new Planshet('Asus', 2000);
$asus3 = new Planshet('Asus', 2000);
$asus4 = new Planshet('Asus', 2000);
 
$lenovo = new Planshet('Lenovo', 3000);
$lenovo3 = new Planshet('Lenovo', 3000);
 
$korzina = new Cart();
 
$korzina->addProduct($asus); //добавляю товар в корзину
$korzina->addProduct($asus2); //добавляю товар в корзину
$korzina->addProduct($asus3); //добавляю товар в корзину
$korzina->addProduct($asus4); //добавляю товар в корзину
 
$korzina->addProduct($lenovo); //добавляю товар в корзину
$korzina->addProduct($lenovo3); //добавляю товар в корзину
 
 
//$korzina->deleteOneProduct($asus); 
 
 
echo '<br>';
 
$korzina->showAllProduct();
 
 echo '<br>';
 echo '<br>';
echo 'На сумму: ' . $korzina->sum();
Добавлено через 4 минуты
andr-xw, Что такое totalPrice? У меня такого свойства нету
0
123 / 77 / 33
Регистрация: 05.03.2013
Сообщений: 449
21.04.2017, 00:36
Цитата Сообщение от Dimon3x Посмотреть сообщение
andr-xw, Что такое totalPrice? У меня такого свойства нету
Ну так создай. То же, что и countProduct, только содержит не количество продуктов, а их общую стоимость.
0
0 / 0 / 0
Регистрация: 17.05.2023
Сообщений: 1
17.05.2023, 20:29
мой вариант
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
<?php
abstract class Tovar{
    private string $name;
    private int $price;
    public function __construct(string $name,int $price){
        $this->name = $name;
        $this->price = $price;
    }
   public function setName(string $name ) {
        $this->name = $name;
    }
    public function getName() :string {
        return $this->name;
    }
  public function SetPrice(int $price)  {
        $this->price=$price;
    }
    public function getPrice() :int {
        return $this->price;
    }
}
class Cart{
    private array $countProduct = [];
    public function addTovar(Tovar $product){                                      
       $product->numberProduct = 1;
      $this->countProduct[$product->getName()] = $product;
          echo 'Товар добавлен в корзину'."\n";
    }
    
    public function deleteAllTovar($product){ 
        unset($this->countProduct[$product->getName()]);
       echo 'очищено';
    }
    
    public function deleteOneTovar($product){
        if(array_key_exists($product->getName(), $this->countProduct)){
            if($this->countProduct[$product->getName()]->numberProduct > 0){
                 $this->countProduct[$product->getName()]->numberProduct--;
                 echo 'Товар ' . $this->countProduct[$product->getName()]->getName(). ' удалён из корзины'."\n";
            } 
        }
    }
 
    public function allTovar(){ 
        $resCountProduct = 0;
        foreach($this->countProduct as $key => $value){
            echo 'Товар ' . $key . ', количество: ' . $value->numberProduct . "\n";
            $resCountProduct = $resCountProduct + $value->numberProduct;
        }
        echo 'Общее количество товаров: ' . $resCountProduct ."\n";
        
    }
    public function sum(){ 
        $res = 0;
        foreach($this->countProduct as $key => $value){
            $res = $res + ($value->getPrice() * $value->numberProduct);
        }
        return $res;
    }
}
class Products extends Tovar{
  public function __construct(string $name ,int $price){
        parent:: __construct($name , $price);       
    }
}
class Odejda extends Tovar{
  private string $size;
  public function __construct(string $name ,int $price,string $size){
        parent:: __construct($name , $price); 
     $this->size = $size;
    }
  public function setSize(int $size) {
        $this->size= $size;
    }
    public function getSize() :int {
        return $this->size;
    }
}
class User {
   private string $firstName;
   private string $lastName;
    private int $telephone;
  private $cart;
 
public function __construct(string $firstName , string $lastName , int $telephone ) {
      $this->firstName = $firstName;
      $this->lastName = $lastName;
      $this->telephone = $telephone;
      $this->cart = new Cart;
    }
}
 
 
$hleb = new Products('Хлеб', 35);
$adidas = new Odejda('adidas', 1000,'S');
$korzina = new Cart();
 
$korzina->addTovar($hleb); 
$korzina->addTovar($adidas);
//$korzina->deleteOneTovar($hleb);
//$korzina->deleteAllTovar();
$korzina->allTovar();
echo 'сумма покупки:' . $korzina->sum();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2023, 20:29
Помогаю со студенческими работами здесь

Добавление товара в корзину
Ув. форумчане, помогите разобраться или подскажите где копать. Есть товар который продается по весу(кг) соответственно при добавлении...

Добавление товара в корзину
Здравствуйте. Есть два темплэйта: первый страница для заказа товара(товар подгружается с PostGRE), около товара есть кнопка добавить в...

Добавление товара в корзину
Привет Всем :) Как реализовать вот такую задачу(Не через CMS): Имеется список с товарами. Рядом кнопка &quot;Добавить&quot;. При...

Добавление товара в корзину
Здравствуйте! Имеется 2 файла index.jsp и cart.jsp. На index.jsp хранятся товары, в cart.jsp должна быть в дальнейшем сделана корзина....

Ajax добавление товара в корзину?
Приветствую! ПОдскажите пожалуйста, как реализовать добавление товара в корзину без обновления страницы. Пока что у меня нет просмотра...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru