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

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

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

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

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

з.ы. уже более менее в каких-то вопросах 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.01.2014, 17:41
Ответы с готовыми решениями:

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

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

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

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

Не по теме:

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

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

Решение

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

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

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

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

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

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

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

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

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

Цитата Сообщение от dan41k Посмотреть сообщение
Я просто хочу разобраться в том, где по условию задачи должны располагаться методы различные и т.д.
Не забывайте про основную концепцию "Всё есть класс"... Если объект класса Покупатель приходит к объекту класса Продавец поменять несколько объектов класса Товар на объекты класса Деньги, по идее объект класса Продавец должен создать объект класса Счёт и отправить его в метод оплатить() объекта класса Покупатель. Всё, как в жизни...
1
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
14.01.2014, 14:14
Цитата Сообщение от easybudda Посмотреть сообщение
Сухов говорил, "Это вряд ли!"
в банковском софте учитываются даже мелочи округления 0,005 - делается округлёжка через раз, так чтобы не набегало по математической схеме в плюсы, так можно подмутить себе денег из воздуха на миллионах транзакций
0
]:->
 Аватар для dan41k
102 / 96 / 19
Регистрация: 12.11.2013
Сообщений: 398
14.01.2014, 14:39  [ТС]
Цитата Сообщение от easybudda Посмотреть сообщение
Не забывайте про основную концепцию "Всё есть класс"... Если объект класса Покупатель приходит к объекту класса Продавец поменять несколько объектов класса Товар на объекты класса Деньги, по идее объект класса Продавец должен создать объект класса Счёт и отправить его в метод оплатить() объекта класса Покупатель. Всё, как в жизни...
спасибо, за конструктивный ответ) буду думать что-то)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2014, 14:39
Помогаю со студенческими работами здесь

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

Проверить на правильность реализацию метода Кардано
Всем привет. Нужно проверить на правильность реализацию метода Кардано. Сам не особо это перевариваю, можете глянуть-сказать? Const...

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

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

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru