请给我写一个Java面向对象点餐系统 要求用到面向对象的相关知识点内容,用到ArrayList或者HashMap
时间: 2024-01-21 14:18:02 浏览: 79
好的,以下是一个简单的Java面向对象点餐系统的代码示例:
Menu.java 文件:
```
import java.util.ArrayList;
public class Menu {
private ArrayList<MenuItem> items;
public Menu() {
items = new ArrayList<>();
}
public void addItem(MenuItem item) {
items.add(item);
}
public ArrayList<MenuItem> getItems() {
return items;
}
}
```
MenuItem.java 文件:
```
public class MenuItem {
private String name;
private double price;
public MenuItem(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
}
```
Order.java 文件:
```
import java.util.HashMap;
public class Order {
private HashMap<MenuItem, Integer> items;
public Order() {
items = new HashMap<>();
}
public void addItem(MenuItem item, int quantity) {
items.put(item, quantity);
}
public HashMap<MenuItem, Integer> getItems() {
return items;
}
public double getTotal() {
double total = 0;
for (MenuItem item : items.keySet()) {
total += item.getPrice() * items.get(item);
}
return total;
}
}
```
Restaurant.java 文件:
```
import java.util.Scanner;
public class Restaurant {
private Menu menu;
private Order currentOrder;
public Restaurant() {
menu = new Menu();
currentOrder = new Order();
}
public void start() {
initializeMenu();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("Please select an option:");
System.out.println("1. View Menu");
System.out.println("2. Add Item to Order");
System.out.println("3. View Current Order");
System.out.println("4. Submit Order");
System.out.println("5. Exit");
int option = scanner.nextInt();
switch (option) {
case 1:
displayMenu();
break;
case 2:
addItemToOrder();
break;
case 3:
displayOrder();
break;
case 4:
submitOrder();
break;
case 5:
return;
}
}
}
private void initializeMenu() {
menu.addItem(new MenuItem("Hamburger", 5.99));
menu.addItem(new MenuItem("Cheeseburger", 6.99));
menu.addItem(new MenuItem("French Fries", 2.99));
menu.addItem(new MenuItem("Onion Rings", 3.99));
menu.addItem(new MenuItem("Soda", 1.99));
}
private void displayMenu() {
System.out.println("Menu:");
for (MenuItem item : menu.getItems()) {
System.out.println(item.getName() + " - $" + item.getPrice());
}
}
private void addItemToOrder() {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the name of the item:");
String itemName = scanner.nextLine();
System.out.println("Enter the quantity:");
int quantity = scanner.nextInt();
for (MenuItem item : menu.getItems()) {
if (item.getName().equalsIgnoreCase(itemName)) {
currentOrder.addItem(item, quantity);
System.out.println(quantity + " " + itemName + "(s) added to order.");
return;
}
}
System.out.println("Item not found.");
}
private void displayOrder() {
System.out.println("Current Order:");
for (MenuItem item : currentOrder.getItems().keySet()) {
int quantity = currentOrder.getItems().get(item);
System.out.println(quantity + " " + item.getName() + "(s) - $" + item.getPrice() * quantity);
}
System.out.println("Total: $" + currentOrder.getTotal());
}
private void submitOrder() {
System.out.println("Order submitted.");
currentOrder = new Order();
}
}
```
这个点餐系统使用了以下面向对象的知识点:
- 类和对象:Menu、MenuItem、Order、Restaurant
- 封装:将数据(items、name、price、quantity)封装在类中,并提供公共方法来访问它们。
- 继承(没有在这个示例中使用):如果需要,可以创建子类来继承父类的属性和方法。
- 多态(没有在这个示例中使用):如果需要,可以使用多态来允许不同类型的对象对相同的方法进行不同的操作。
- ArrayList:用于存储 MenuItem 对象的集合。
- HashMap:用于存储 Order 中 MenuItem 和数量之间的映射关系。
这个点餐系统可以通过以下方式使用:
```
Restaurant restaurant = new Restaurant();
restaurant.start();
```
这将启动点餐系统并开始循环提示用户进行操作。用户可以选择查看菜单、向订单添加项目、查看当前订单、提交订单或退出系统。
阅读全文