Task 24 — Финальный проект
Расширенная система заказов с менеджерами и клиентскими сущностями.
Редактировать источникЗадание
Расширенная система заказов с менеджерами и клиентскими сущностями. Документация собрана по исходному коду этой практики.
Решение
Полный код решения по этой практике:
Исходные файлы решения
task24/Address.javatask24/AlcohoTable.javatask24/Customer.javatask24/Dish.javatask24/Drink.javatask24/DrinkTypeEnum.javatask24/InternetOrder.javatask24/InternetOrdersManager.javatask24/MenuItem.javatask24/Order.javatask24/OrdersManager.javatask24/TableOrder.javatask24/TableOrdersManager.javatask24/Test.java
task24/Address.java
package task24;
public final class Address extends Customer{
private String cityName;
private int zipCode;
private String streetName;
private int buildingNumber;
private int buildingLetter;
private int apartmentNumber;
public Address EMPTY_ADDRESSS;
public String getCityName() {
return cityName;
}
public int getZipCode() {
return zipCode;
}
public String getStreetName() {
return streetName;
}
public int getBuildingNumber() {
return buildingNumber;
}
public int getBuildingLetter() {
return buildingLetter;
}
public int getApartmentNumber() {
return apartmentNumber;
}
}
task24/AlcohoTable.java
package task24;
interface AlcohoTable {
public boolean isAlcoholicDrink();
public double getAlcoholVol();
}
task24/Customer.java
package task24;
public class Customer implements Order {
private String firstName;
private String secondName;
private int age;
private Address address;
private Customer MATURE_UNKNOWN_CUSTOMER;
private Customer NOT_MATURE_UNKNOWN_CUSTOMER;
public String getFirstName() {
return firstName;
}
public String getSecondName() {
return secondName;
}
public int getAge() {
return age;
}
public Address getAddress() {
return address;
}
@Override
public boolean add(MenuItem item) {
return false;
}
@Override
public String[] itemsNames() {
return new String[0];
}
@Override
public int itemsQuantity() {
return 0;
}
@Override
public int itemsQuantity(String itemName) {
return 0;
}
@Override
public int itemsQuantity(MenuItem itemName) {
return 0;
}
@Override
public Order[] getOrders() {
return new Order[0];
}
@Override
public int ordersCostSummary() {
return 0;
}
@Override
public int ordersQuantity() {
return 0;
}
@Override
public MenuItem[] getItems() {
return new MenuItem[0];
}
@Override
public boolean remove(MenuItem item) {
return false;
}
@Override
public int removeAll(String itemName) {
return 0;
}
@Override
public int removeAll(MenuItem item) {
return 0;
}
@Override
public boolean remove(String itemName) {
return false;
}
@Override
public int costTotal() {
return 0;
}
@Override
public Customer getCustomer() {
return null;
}
@Override
public Customer setCustomer(Customer customer) {
return null;
}
}
task24/Dish.java
package task24;
import Task23.Item;
import java.util.Comparator;
import java.util.Scanner;
public final class Dish extends MenuItem {
private int coast;
private String name;
private String description;
Dish(String name,String description){
super();
if (name.isEmpty()){
throw new IllegalArgumentException("Название блюда должно быть не пустым");
}
else if (description.isEmpty()){
throw new IllegalArgumentException("Описание должно быть не пустым");
}else {
this.coast = 0;
this.name = name;
this.description = description;
}
}
Dish(int coast,String name,String description){
super();
if (name.isEmpty()){
throw new IllegalArgumentException("Название блюда должно быть не пустым");
}
else if (description.isEmpty()){
throw new IllegalArgumentException("Описание должно быть не пустым");
}
else if ( coast < 0){
throw new IllegalArgumentException("Стоимость должны быть больше 0");
}else {
this.coast = coast;
this.name = name;
this.description = description;
}
}
public Dish(double cost, Scanner name, Scanner opis) {
super();
}
@Override
public int getCost() {
return coast;
}
@Override
public String getName() {
return name;
}
@Override
public String getDescription() {
return description;
}
}
task24/Drink.java
package task24;
import Task23.Item;
final class Drink extends MenuItem implements AlcohoTable {
private double alcoholVol;
private DrinkTypeEnum type;
private int coast;
private String name;
private String description;
public DrinkTypeEnum getType() {
return type;
}
Drink(String name,String description){
if (name.isEmpty()){
throw new IllegalArgumentException("Название блюда должно быть не пустым");
}
else if (description.isEmpty()){
throw new IllegalArgumentException("Описание должно быть не пустым");
}else {
this.coast = 0;
this.name = name;
this.description = description;
}
}
Drink(int coast,String name,String description){
if (name.isEmpty()){
throw new IllegalArgumentException("Название блюда должно быть не пустым");
}
else if (description.isEmpty()){
throw new IllegalArgumentException("Описание должно быть не пустым");
}
else if ( coast < 0){
throw new IllegalArgumentException("Стоимость должны быть больше 0");
}else {
this.coast = coast;
this.name = name;
this.description = description;
}
}
Drink(int coast,String name,String description, int alcoholVol,DrinkTypeEnum type){
if (name.isEmpty()){
throw new IllegalArgumentException("Название блюда должно быть не пустым");
}
else if (description.isEmpty()){
throw new IllegalArgumentException("Описание должно быть не пустым");
}
else if ( coast < 0){
throw new IllegalArgumentException("Стоимость должны быть больше 0");
}else {
this.coast = coast;
this.name = name;
this.description = description;
this.alcoholVol = alcoholVol;
this.type = type;
}
}
@Override
public boolean isAlcoholicDrink() {
return false;
}
@Override
public double getAlcoholVol() {
return 0;
}
@Override
public int getCost() {
return coast;
}
@Override
public String getName() {
return name;
}
@Override
public String getDescription() {
return description;
}
}
task24/DrinkTypeEnum.java
package task24;
import java.util.Objects;
public class DrinkTypeEnum {
public static String Proverc(String n){
String t = "";
if (Objects.equals(n, "AL")){
t = "Предъявите паспор";
}
return t;
}
}
task24/InternetOrder.java
package task24;
import java.util.HashMap;
import java.util.List;
public class InternetOrder implements Order{
private int size;
private ListNode head;
private ListNode tail;
class ListNode{
private ListNode next;
private ListNode prev;
private MenuItem value;
ListNode(MenuItem value){
this.next = null;
this.prev = null;
this.value = value;
}
}
InternetOrder(int size){
this.tail = null;
this.head = null;
this.size = size;
}
@Override
public boolean add(MenuItem item) {
ListNode node = new ListNode(item);
if(head == null){
head = node;
tail = node;
return true;
}else{
node.next = head;
head.prev = node;
head = node;
return true;
}
}
@Override
public String[] itemsNames() {
String str[] = new String[size];
ListNode temp = head;
int i = 0;
while (temp != null & i < size){
str[i] = temp.value.getName();
i++;
temp = temp.next;
}
return str;
}
@Override
public int itemsQuantity() {
ListNode temp = head;
int count = 0;
while (temp != null){
count++;
temp = temp.next;
}
return count;
}
@Override
public int itemsQuantity(String itemName) {
ListNode temp = head;
int count = 0;
while (temp != null){
if(temp.value.getName().equals(itemName)) {
count++;
}
temp = temp.next;
}
return count;
}
@Override
public int itemsQuantity(MenuItem itemName) {
ListNode temp = head;
int count = 0;
while (temp != null){
if(temp.value.equals(itemName)) {
count++;
}
temp = temp.next;
}
return count;
}
@Override
public Order[] getOrders() {
return orderManager.values().toArray(new Order[0]);
}
@Override
public int ordersCostSummary() {
int sum = 0;
ListNode temp = head;
while (temp != null){
sum += temp.value.getCost();
temp = temp.next;
}
return sum;
}
@Override
public int ordersQuantity() {
return orderManager.size();
}
@Override
public MenuItem[] getItems() {
return orderManager.values().toArray(new MenuItem[0]);
}
@Override
public boolean remove(MenuItem item) {
if (head == null){
return false;
}
if (head == tail && head.value.equals(item)){
head = null;
tail = null;
return true;
}
ListNode temp = head;
while (temp != null & temp.value.equals(item)){
temp = temp.next;
}
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
temp.prev = null;
temp.next = null;
return true;
}
@Override
public int removeAll(String itemName) {
if (head == null){
return 0;
}
if (head == tail & head.value.getName().equals(itemName)){
head = null;
tail = null;
return 1;
}
int count = 0;
ListNode temp = head;
while (temp != null){
if(temp.value.getName().equals(itemName)){
count++;
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
temp.prev = null;
temp.next = null;
}
temp = temp.next;
}
return count;
}
@Override
public int removeAll(MenuItem item) {
if (head == null){
return 0;
}
if (head == tail & head.value.equals(item)){
head = null;
tail = null;
return 1;
}
int count = 0;
ListNode temp = head;
while (temp != null){
if(temp.value.equals(item)){
count++;
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
temp.prev = null;
temp.next = null;
}
temp = temp.next;
}
return count;
}
@Override
public boolean remove(String itemName) {
if (head == null){
return false;
}
if (head == tail && head.value.getName().equals(itemName)){
head = null;
tail = null;
return true;
}
ListNode temp = head;
while (temp != null & temp.value.getName().equals(itemName)){
temp = temp.next;
}
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
temp.prev = null;
temp.next = null;
return true;
}
@Override
public int costTotal() {
orderManager.values().stream().filter(value -> orderManager.containsValue(value)).toList();
return 0;
}
@Override
public Customer getCustomer() {
return null;
}
@Override
public Customer setCustomer(Customer customer) {
return null;
}
}
task24/InternetOrdersManager.java
package task24;
class QueueNode{
private QueueNode next;
private QueueNode prev;
private Order value;
}
public class InternetOrdersManager implements OrdersManager{
private QueueNode head;
private QueueNode tail;
private int size;
public boolean add(Order order){
return true;
}
public Order remove(){
return null;
}
public Order order(){
return null;
}
@Override
public int itemsQuantity(String itemName) {
return 0;
}
@Override
public int itemsQuantity(MenuItem item) {
return 0;
}
@Override
public Order[] getOrders() {
return new Order[0];
}
@Override
public int ordersCostSummary() {
return 0;
}
@Override
public int ordersQuantity() {
return 0;
}
}
task24/MenuItem.java
package task24;
import java.util.*;
import java.util.stream.Collectors;
public class MenuItem implements Order{
private int cost;
private String name;
private String description;
public int getCost(){
return cost;
}
public String getName(){
return name;
}
public String getDescription(){
return description;
}
@Override
public boolean add(MenuItem item) {
orderManager.put(item.getName(),item);
return true;
}
@Override
public String[] itemsNames() {
return orderManager.keySet().stream().filter(key -> orderManager.get(key) != null).toArray(String[]::new);
}
@Override
public int itemsQuantity() {
return orderManager.keySet().size();
}
@Override
public int itemsQuantity(String itemName) {
return (int) orderManager.keySet().stream().filter(key -> key.equals(itemName)).count();
}
@Override
public int itemsQuantity(MenuItem itemName) {
int count = 0;
for (Map.Entry<String, Order> entry : orderManager.entrySet()) {
Order order = entry.getValue();
if (order.equals(itemName)) {
count++;
}
}
return count;
}
@Override
public Order[] getOrders() {
return orderManager.values().toArray(new Order[0]);
}
@Override
public int ordersCostSummary() {
return 0;
}
@Override
public int ordersQuantity() {
return orderManager.size();
}
@Override
public MenuItem[] getItems() {
return orderManager.values().toArray(new MenuItem[0]);
}
@Override
public boolean remove(MenuItem item) {
return orderManager.remove(item.getName(),item);
}
@Override
public int removeAll(String itemName) {
int initialSize = orderManager.size(); // Запоминаем начальный размер HashMap
orderManager.entrySet().removeIf(entry -> entry.getKey().equals(itemName));
int countDel = initialSize - orderManager.size(); // Вычисляем количество удаленных элементов
return countDel;
}
@Override
public int removeAll(MenuItem item) {
int count = 0;
for(int i = 0 ; i < orderManager.size();i++){
if(orderManager.remove(item.name,item)) {
count++;
}
}
return count;
}
@Override
public boolean remove(String itemName) {
return orderManager.remove(itemName) != null;
}
@Override
public int costTotal() {
return 0;
}
@Override
public Customer getCustomer() {
return null;
}
@Override
public Customer setCustomer(Customer customer) {
return null;
}
@Override
public String toString() {
return "cost = " + cost + ", name = " + name + ", description = " + description;
}
public String prints(){
return orderManager.toString();
}
}
task24/Order.java
package task24;
public interface Order extends OrdersManager{
public boolean add(MenuItem item);
public String[] itemsNames();
public int itemsQuantity();
public int itemsQuantity(String itemName);
public int itemsQuantity(MenuItem itemName);
public MenuItem[] getItems();
public boolean remove(MenuItem item);
public int removeAll(String itemName);
public int removeAll(MenuItem item);
public boolean remove(String itemName);
public int costTotal();
public Customer getCustomer();
public Customer setCustomer(Customer customer);
}
task24/OrdersManager.java
package task24;
import java.util.HashMap;
interface OrdersManager{
HashMap<String,Order> orderManager = new HashMap<>();
public int itemsQuantity(String itemName);
public int itemsQuantity(MenuItem item);
public Order[] getOrders();
public int ordersCostSummary();
public int ordersQuantity();
}
task24/TableOrder.java
package task24;
import java.util.Map;
public class TableOrder implements Order{
private int size;
private MenuItem[] items;
@Override
public boolean add(MenuItem item) {
orderManager.put(item.getName(),item);
return true;
}
@Override
public String[] itemsNames() {
return orderManager.keySet().stream().filter(key -> orderManager.get(key) != null).toArray(String[]::new);
}
@Override
public int itemsQuantity() {
return orderManager.keySet().size();
}
@Override
public int itemsQuantity(String itemName) {
return (int) orderManager.keySet().stream().filter(key -> key.equals(itemName)).count();
}
@Override
public int itemsQuantity(MenuItem itemName) {
int count = 0;
for (Map.Entry<String, Order> entry : orderManager.entrySet()) {
Order order = entry.getValue();
if (order.equals(itemName)) {
count++;
}
}
return count;
}
@Override
public Order[] getOrders() {
return orderManager.values().toArray(new Order[0]);
}
@Override
public int ordersCostSummary() {
return 0;
}
@Override
public int ordersQuantity() {
return orderManager.size();
}
@Override
public MenuItem[] getItems() {
return orderManager.values().toArray(new MenuItem[0]);
}
@Override
public boolean remove(MenuItem item) {
return orderManager.remove(item.getName(),item);
}
@Override
public int removeAll(String itemName) {
int initialSize = orderManager.size(); // Запоминаем начальный размер HashMap
orderManager.entrySet().removeIf(entry -> entry.getKey().equals(itemName));
int countDel = initialSize - orderManager.size(); // Вычисляем количество удаленных элементов
return countDel;
}
@Override
public int removeAll(MenuItem item) {
int count = 0;
for(int i = 0 ; i < orderManager.size();i++){
if(orderManager.remove(item.getName(),item)) {
count++;
}
}
return count;
}
@Override
public boolean remove(String itemName) {
return orderManager.remove(itemName) != null;
}
@Override
public int costTotal() {
return 0;
}
@Override
public Customer getCustomer() {
return null;
}
@Override
public Customer setCustomer(Customer customer) {
return null;
}
}
task24/TableOrdersManager.java
package task24;
public class TableOrdersManager implements OrdersManager{
private Order[] orders;
public void add(Order order, int tableNumber){}
public void addItem(MenuItem item, int tableNumber){}
public int freeTableNumber(Order order, int tableNumber){ return 0;}
public int[] freeTableNumbers(Order order, int tableNumber){ return null;}
public Order getOrder(int tableNumber){ return null;}
public void remove(int tableNumber){}
public int remove(Order order){ return 0;}
public int removeAll(Order order){return 0;}
@Override
public int itemsQuantity(String itemName) {
return 0;
}
@Override
public int itemsQuantity(MenuItem item) {
return 0;
}
@Override
public Order[] getOrders() {
return new Order[0];
}
@Override
public int ordersCostSummary() {
return 0;
}
@Override
public int ordersQuantity() {
return 0;
}
}
task24/Test.java
package task24;
import java.util.Arrays;
import java.util.Scanner;
import static task24.DrinkTypeEnum.Proverc;
public class Test {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
Scanner r = new Scanner(System.in);
Scanner w = new Scanner(System.in);
MenuItem menuItem = new MenuItem();
double cost;
boolean bool = true;
String name, opis;
Scanner nomder = new Scanner(System.in);
System.out.println("Ввелитед 1 если вы делаете заказ в ресторане:\n" +
"Введите 2 если делаете заказ на сайте:\n" +
"Введите 3 если хотите популярные блюда ресторана:");
switch (nomder.nextInt()) {
case 1:
while (bool) {
System.out.println("Что хотите добавить в заказ \n1 если еду: \n2 если напиток:");
switch (nomder.nextInt()) {
case 1:
System.out.println("Введите название товара: ");
name = r.nextLine();
System.out.println("Введите цену товара: ");
cost = s.nextDouble();
System.out.println("Введите описание товара: ");
opis = w.nextLine();
Dish d = new Dish((int) cost, name, opis);
menuItem.add(d);
System.out.println("Ввелите 1 если вы хотите заказать еще или 0 если вы закончили с заказом");
if (nomder.nextInt() == 1){
bool = true;
break;
}else {
bool=false;
break;
}
case 2:
System.out.println("Введите название напитка: ");
name = r.nextLine();
System.out.println("Введите цену напитка: ");
cost = s.nextDouble();
System.out.println("Введите описание напитка если он алкагольный введите AL: ");
opis = w.nextLine();
Drink dr = new Drink((int) cost, name, opis);
menuItem.add(dr);
System.out.println(Proverc(opis));
System.out.println("Ввелите 1 если вы хотите заказать еще или 0 если вы закончили с заказом");
if (nomder.nextInt() == 1){
bool = true;
break;
}else {
bool=false;
break;
}
}
}
break;
case 2:
while (bool) {
System.out.println("Что хотите добавить в заказ \n1 если еду: \n2 если напиток:");
switch (nomder.nextInt()) {
case 1:
System.out.println("Введите название товара: ");
name = r.nextLine();
System.out.println("Введите цену товара: ");
cost = s.nextDouble();
System.out.println("Введите описание товара: ");
opis = w.nextLine();
Dish d = new Dish((int) cost, name, opis);
menuItem.add(d);
System.out.println("Ввелите 1 если вы хотите заказать еще или 0 если вы закончили с заказом");
if (nomder.nextInt() == 1){
bool = true;
break;
}else {
bool=false;
break;
}
case 2:
System.out.println("Введите название напитка: ");
name = r.nextLine();
System.out.println("Введите цену напитка: ");
cost = s.nextDouble();
System.out.println("Введите описание напитка если он алкагольный введите AL: ");
opis = w.nextLine();
Drink dr = new Drink((int) cost, name, opis);
menuItem.add(dr);
System.out.println(Proverc(opis));
System.out.println("Ввелите 1 если вы хотите заказать еще или 0 если вы закончили с заказом");
if (nomder.nextInt() == 1){
bool = true;
break;
}else {
bool=false;
break;
}
}
}
break;
case 3:
Dish dishOne = new Dish(10,"Название№1","Описание№1");
Dish dishTwo = new Dish(500,"Название№2","Описание№2");
Dish dishFree = new Dish(1000,"Название№3","Описание№3");
Drink drink = new Drink(120,"dsd","dsds");
menuItem.add(dishOne);
menuItem.add(dishTwo);
menuItem.add(dishFree);
menuItem.add(drink);
}
System.out.println(Arrays.stream(menuItem.itemsNames()).toList());
}
}
Описание
В этом модуле используется 14 Java-файлов. Ключевые сущности: Address, AlcohoTable, Customer, Dish, Drink, DrinkTypeEnum.
tip
Для проверки практики сначала запускайте тестовый/демо-класс из папки задачи, затем расширяйте модель новыми кейсами.
Вывод
Task 24 — Финальный проект документирует реальное решение из исходного кода.