Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/58: Рейтинг темы: голосов - 58, средняя оценка - 4.91
]:->
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
1

Система Интернет-магазин. Проверить реализацию

13.01.2014, 17:41. Показов 11565. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В общем есть условие задачи из книги Блинов "Промышленное программирование". Звучит так :
"Система Интернет-магазин. Администратор добавляет информацию о Товаре. Клиент делает и оплачивает Заказ на Товары. Администратор регистрирует Продажу и может занести неплательщиков в «черный список»."

Вопрос вот в чем, правильно ли реализована данная задача? Что сделано не логично? Прошу конструктивно все написать, тролли мимо

з.ы. уже более менее в каких-то вопросах Java разбираюсь, но вот, если столкнуться с системой - тяжеловато...

Класс Товар
Кликните здесь для просмотра всего текста
Java
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
//класс Товар
class Product {
    private String name; //Название товара
    private int price;  // Цена товара
    
    //конструктор
    public Product (String name, int price) {   
        this.name = name;
        this.price = price;
    }
    
    public String getName() {
        return name;
    }
    
    public int getPrice() {
        return price;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public void setPrice (int price) {
        this.price = price;
    }
    
    @Override
    public String toString() {
        return "Название = "+name+" Стоимость = "+price;
    }
}


класс Заказ
Кликните здесь для просмотра всего текста
Java
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
//класс Заказ
class Order {
    private ArrayList<Product> orderlist = new ArrayList<Product>();    //продукты в заказе
    private boolean payment = false;    //оплачен ли заказ
    private boolean register = false;   //обработан ли заказ Администратором
    
    //добавить группу товаров к Заказу
    public void addProdToOrder(ArrayList<Product> orderlist) {
        this.orderlist = orderlist;
    }
    
    //добавить товар к Заказу
    public void addProdToOrder(Product product) {
        orderlist.add(product);
    }
    
    //показать Заказ
    public void showOrder() {
        for (Product e: orderlist) {
            System.out.println (e);
        }
    }
    
    //оплачен или нет
    public boolean isPayment() {
        return payment;
    }
    
    //оплачен (да/нет)
    public void setPayment(boolean s) {
        payment = s;
    }
    
    public boolean isRegister() {
        return register;
    }
    
    public void setRegister(boolean s) {
        register = s;
    }
    
}


класс Клиент

Кликните здесь для просмотра всего текста
Java
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
//класс Клиент
class Client {
    
    private Order order;
    
    //заказать
    public void book(Order order) {
        this.order = order;
    }
    
    public Order getOrder() {
        return order;
    }
    
    //показать Заказ
    public void showOrder() {
        System.out.println("Ваш заказ: ");
        order.showOrder();
    }
    
    //оплатить Заказ
    public void pay() {
        if(order.isPayment() == true) {
            System.out.println("Вы уже оплатили заказ");
        } else {
        order.setPayment(true);
        }
    }
    
    //Забрать товар
    public void take() {
        if(order.isPayment() == false) {
            System.out.println("Вы ещё не оплатили товар");
        } else if(order.isRegister() == false) {
            System.out.println("Ваша заявка ещё не обработана");
        } else {
            System.out.println("Спасибо за покупку!");
        }
    }
    
}


класс Администратор

Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//класс Администратор
class Administrator {
    private ArrayList<Product> products = new ArrayList<Product>();
    private ArrayList<Client> blackclients = new ArrayList<Client>();
    
    //регистрация товара и добавление неплательщиков в черный список
    public void registerOrder(Client client) {
        if (client.getOrder().isPayment() == true) {
            client.getOrder().setRegister(true);
        } else { 
            blackclients.add(client);
        }   
    }
    
    //создание новых продуктов
    public void createNewProduct(String name, int price) {
        products.add(new Product(name,price));
    }
}
2
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.01.2014, 17:41
Ответы с готовыми решениями:

Проверить на корректность реализацию потоков
Я примерно понял как создавать потоки, но это похоже на гамнокод =3 #include &lt;windows.h&gt;...

Проверить реализацию преобразования фурье
Написал программу, которая делает прямое преобразование и выводит спектр. А так же обратное...

Проверить на ошибки реализацию односвязного списка
Program Laba_list; Type ukazat= ^S; S= record inf: integer; Next: ukazat; ...

Как проверить реализацию тега <strong>?
Существуют два тега: &lt;b&gt; и &lt;strong&gt;. Внешне они работают одинаково - выделяют текст жирным шрифтом,...

15
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
13.01.2014, 23:24 2
А где маин класс то?

Не по теме:

Я бы все таки цену товара сделал double - как вы будете хранить товары со ценой 14.65$? :)

1
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
13.01.2014, 23:37 3
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Almaz_1993 Посмотреть сообщение
Я бы все таки цену товара сделал double - как вы будете хранить товары со ценой 14.65$?
правильнее BigDecimal
3
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2014, 02:31 4
Цитата Сообщение от mutagen Посмотреть сообщение
правильнее BigDecimal
При всём уважении,как-то я всё-таки сомневаюсь в целесообразности отказа от "обычного" типа double. Да, я знаю про погрешность при хранении чисел double, но погрешность эта станет заметной на таких суммах, какие среднестатистическому магазину даже в пересчёте на монгольские тугрики и не снились. При этом помимо элементарной разницы в объёме памяти, занимаемой числами double и объектами BigDecimal, наверняка и незатейливые операции вроде того же вычисления нескольких процентов скидки над числами double будут происходить заметно быстрее. Надо будет проверить, как время появится. Ну и кроме всего прочего вместо привычного синтаксиса арифметических вычислений получаете довольно мутный набор из методов класса BigDecimal...
1
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
14.01.2014, 10:58 5
В данном случае правильнее всего считать в копейках. Тогда арифметика вообще будет целочисленная. А длины int хватит за глаза.
2
]:->
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
14.01.2014, 11:19  [ТС] 6
main класс пока не столь важен. Я просто хочу разобраться в том, где по условию задачи должны располагаться методы различные и т.д.

Вот, например, "Клиент делает и оплачивает заказ". По-моему, то, что я сделал, не совсем реализует это. В моем представлении кода, заказ где-то делается сам, а потом дается на него ссылка клиенту. Может быть лучше сделать метод, который создает new Order внутри класса Client?

И ещё вопрос, где лучше разместить и в чем хранить список клиентов и соответствующий ему заказ? Т.е., например, создать отдельный класс, который будет хранить клиент-заказ, а в классе Administrator в ArrayList хранить экземпляры этих классов. Логично ли это будет?

P.S. Простите заранее, может эти вопросы конечно элементарные и дурацкие, но мне тяжело с этим пока. Есть ли какие-нибудь сайты или книги с примерами построения таких систем? Заранее, спасибо)
0
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.01.2014, 11:35 7
Цитата Сообщение от easybudda Посмотреть сообщение
я всё-таки сомневаюсь в целесообразности отказа от "обычного" типа double
даблы надо обычно для всякой графики, банкиры любят считать точно, так как потом это деньги
Цитата Сообщение от Skipy Посмотреть сообщение
А длины int хватит за глаза.
уже пару раз я видел такой код, писаный под 1.4 ещё, там тоже считали что хватит, но почему-то мне его сейчас нужно переделывать )
всё хорошо пока твой код у тебя в руках и не уплыл куда нибудь ещё под слегка другие задачи

Добавлено через 3 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
погрешность эта станет заметной на таких суммах
с деньгами так нельзя, так как магазин может поработать с вашей программой 10 лет и потом вдруг обнаружить потерю сотой части копейки на каждой кассовой операции, а потом подсчитать недостачу и выкатить её вам на компенсацию, может случиться так что у вас не хватит денег чтобы оплатить эти тугрики )
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
14.01.2014, 12:12 8
Цитата Сообщение от Skipy Посмотреть сообщение
В данном случае правильнее всего считать в копейках
Мне чисто интересно, а как конечный пользователь узнает, что цена в копейках?
0
237 / 236 / 72
Регистрация: 02.07.2013
Сообщений: 881
14.01.2014, 12:58 9
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
Мне чисто интересно, а как конечный пользователь узнает, что цена в копейках?
ну так копейки должна только программа видеть, а не пользователь
0
169 / 66 / 15
Регистрация: 24.03.2013
Сообщений: 467
Записей в блоге: 1
14.01.2014, 13:08 10
Цитата Сообщение от jzBmr Посмотреть сообщение
ну так копейки должна только программа видеть, а не пользователь
Нееет, это чисто организационный момент, имеется ввиду не тот конечный пользователь, а пользователь-программист. К примеру, пришел новый сотрудник - вот ему откуда знать, что цены в копейках считаются, в джавадоке чтоль надо читать
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
14.01.2014, 13:52 11
Цитата Сообщение от Almaz_1993 Посмотреть сообщение
Нееет, это чисто организационный момент, имеется ввиду не тот конечный пользователь, а пользователь-программист. К примеру, пришел новый сотрудник - вот ему откуда знать, что цены в копейках считаются, в джавадоке чтоль надо читать
Вообще-то к нормальной системе должны быть:

Бизнес-требования
Функциональные требования
Техническое задание
Техническая документация
Пользовательская документация

Первые три документа появляются ДО начала реализации и содержат наше представление о том, как должна разрабатываться система. Техническая документация отражает то, как система реально разработана. Пользовательская - как она работает.
0
]:->
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
14.01.2014, 13:54  [ТС] 12
а можно, пожалуйста, ответ на мой вопрос?)
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
14.01.2014, 13:58 13
Цитата Сообщение от mutagen Посмотреть сообщение
уже пару раз я видел такой код, писаный под 1.4 ещё, там тоже считали что хватит, но почему-то мне его сейчас нужно переделывать )
всё хорошо пока твой код у тебя в руках и не уплыл куда нибудь ещё под слегка другие задачи
Не, ну не в промышленной же системе... Задача ставилась как учебная, в ней хватит. В промышленной считать только в BigDecimal или BigInteger.

Добавлено через 3 минуты
Цитата Сообщение от dan41k Посмотреть сообщение
а можно, пожалуйста, ответ на мой вопрос?)
На какой вопрос? Правильна ли реализация? На него ответить невозможно, ибо реализации просто нет. Вы сделали 4 класса предметной области, бизнес-логика отсутствует.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
14.01.2014, 14:02 14
Цитата Сообщение от mutagen Посмотреть сообщение
с деньгами так нельзя, так как магазин может поработать с вашей программой 10 лет и потом вдруг обнаружить потерю сотой части копейки на каждой кассовой операции, а потом подсчитать недостачу и выкатить её вам на компенсацию, может случиться так что у вас не хватит денег чтобы оплатить эти тугрики )
Как товарищ Сухов говорил, "Это вряд ли!" Куча магазинного софта написана с использованием типа double для хранения денежных величин, и до сих пор никто не кричал, что на том и раззорился. Это больше к мифам относится про кулл-хацкеров, которые эти самые нанокопейки как бы к себе в корман заворачивать умеют, кто бы чем за что ни расплачивался... И кстати, вариант с копейками в принципе выглядит вполне разумно, но там-то в этом смысле вообще беда - точность только до копейки, никаких сотых... Но в прочем спорить не буду. Если есть класс для суперточных рассчётов, наверное, нужно им и пользоваться...

Цитата Сообщение от Almaz_1993 Посмотреть сообщение
К примеру, пришел новый сотрудник - вот ему откуда знать, что цены в копейках считаются
Ну, если новый сотрудник прямиком из "Битвы Экстрасенсов" пришёл, то может и вовсе ничего не читать. Всем остальным прежде, чем в работу "влиться", документацию читать приходится. А там среди прочего и про копейки...

Цитата Сообщение от dan41k Посмотреть сообщение
Я просто хочу разобраться в том, где по условию задачи должны располагаться методы различные и т.д.
Не забывайте про основную концепцию "Всё есть класс"... Если объект класса Покупатель приходит к объекту класса Продавец поменять несколько объектов класса Товар на объекты класса Деньги, по идее объект класса Продавец должен создать объект класса Счёт и отправить его в метод оплатить() объекта класса Покупатель. Всё, как в жизни...
1
2586 / 2259 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.01.2014, 14:14 15
Цитата Сообщение от easybudda Посмотреть сообщение
Сухов говорил, "Это вряд ли!"
в банковском софте учитываются даже мелочи округления 0,005 - делается округлёжка через раз, так чтобы не набегало по математической схеме в плюсы, так можно подмутить себе денег из воздуха на миллионах транзакций
0
]:->
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
14.01.2014, 14:39  [ТС] 16
Цитата Сообщение от easybudda Посмотреть сообщение
Не забывайте про основную концепцию "Всё есть класс"... Если объект класса Покупатель приходит к объекту класса Продавец поменять несколько объектов класса Товар на объекты класса Деньги, по идее объект класса Продавец должен создать объект класса Счёт и отправить его в метод оплатить() объекта класса Покупатель. Всё, как в жизни...
спасибо, за конструктивный ответ) буду думать что-то)
0
14.01.2014, 14:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.01.2014, 14:39
Помогаю со студенческими работами здесь

Проверить на правильность реализацию метода Кардано
Всем привет. Нужно проверить на правильность реализацию метода Кардано. Сам не особо это...

Проверить правильность и реализацию заголовочного файла time.h
Добрый день! Может ли кто-нибудь проверить правильность и реализацию заголовочного файла time.h? В...

Roguelike. Движение персонажа, проверить реализацию кода
Здравствуйте. Решил продолжить свое изучение C# на практике. Хочется написать небольшой рогалик. В...

Интернет магазин!
Всем доброго времени суток у меня такой вопрос как сделать так что бы при нажатии на кнопку купить...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru