Guten Abend zusammen,
ich bin gerade beim Entwickeln meines allerersten Java Projekts. Dieses wird ein Restaurantbestellungssystem werden, welches eine reine Konsolenanwendung ist.
Die Planung sowie Umsetzung hat mich vor gewisse Herausforderungen gestellt, die ich wie ich finde gut meistern konnte.
Ich habe das Projekt in 3 Models und 1 Controller aufgeteilt:
Models
- Customer
- Menu
- Order
Controller
- RestaurantPaymentApp
Dies schien für mich die beste Aufteilung nach den mir bekannten OOP-Regeln zu sein.
Ich bin mir bei der Entwicklung der Models und des Controllers unsicher, ob dies die richtige Umsetzung ist oder ob ich da doch das ein und andere vermische. Daher möchte ich hier gerne meinen Code teilen und euch fragen, wie ihr es sieht. Ich würde mich sehr auf euer Codefeedback freuen.
Hier ist der Code:
[CODE lang="java" title="Model: Customer"]package model;
public class Customer {
private String firstName;
private String lastName;
private String deliveryAddress;
public Customer() {
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFullName() {
return this.firstName + " " + this.lastName;
}
public void setDeliveryAddress(String deliveryAddress) {
this.deliveryAddress = deliveryAddress;
}
public String getDeliveryAddress() {
return this.deliveryAddress;
}
}[/CODE]
[CODE lang="java" title="Model: Menu"]package model;
public class Menu {
private String[] menu;
private double[] menuPrices;
public Menu(){
this.setMenu();
this.setMenuPrices();
}
private void setMenu() {
String[] menu = {
"Bunter Salatteller",
"Schnitzel mit Pommes und Salat",
"Angebratener Lachs mit knusprigen Reis und Souce",
"Maultaschen mit Röstzwiebeln und Semmelbrösel",
"Rumpsteak mit Kräuterbutter, Pommes und Salat",
"Veganes Gemüse-Curry mit Kartoffeleinlage und Gemüsevariation",
"Schwäbischer Zwiebelrostbraten mit hausgemachten Spätzle und Salat",
"Schweinelende an Whiskey-Rahmsoße mit hausgemachten Spätzle und Salat"
};
this.menu = menu;
}
public String[] getMenu() {
return this.menu;
}
private void setMenuPrices() {
double[] prices = {
8.00,
11.90,
14.90,
7.90,
19.90,
13.90,
19.90,
16.90
};
this.menuPrices = prices;
}
public double[] getMenuPrices() {
return this.menuPrices;
}
}[/CODE]
[CODE lang="java" title="Model: Order"]package model;
import java.text.DecimalFormat;
import java.util.Arrays;
public class Order {
private String fullName;
private String deliveryAddress;
private int[] selection;
private double price;
private String delivery;
private String deliverTime;
public Order(){
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public void setDeliveryAddress(String deliveryAddress) {
this.deliveryAddress = deliveryAddress;
}
public void setSelection(int[] selection) {
this.selection = selection;
setPrice();
}
private void setPrice() {
Menu menu = new Menu();
double[] actualPrices = menu.getMenuPrices();
String delivery = getDelivery();
double price = 0;
if (delivery == "Lieferung"){
price = 10;
}
for(int i = 0; i < this.selection.length; i++){
price += actualPrices[this.selection];
}
this.price = price;
}
public void setDelivery(String delivery){
if (delivery.equals("a")) {
delivery = "Abholung";
}else{
delivery = "Lieferung";
}
this.delivery = delivery;
}
public void setDeliverTime(String deliverTime) {
this.deliverTime = deliverTime;
}
public String getFullName() {
return this.fullName;
}
public String getDeliveryAddress() {
return this.deliveryAddress;
}
public String[] getSelection() {
Menu menu = new Menu();
String[] actualMenu = menu.getMenu();
String[] dishes = new String[this.selection.length];
for(int i = 0; i < this.selection.length; i++){
dishes = actualMenu[this.selection];
}
return dishes;
}
public double getPrice() {
return this.price;
}
public String getDelivery() {
return this.delivery;
}
public String getDeliverTime() {
return this.deliverTime;
}
@Override
public String toString(){
DecimalFormat df = new DecimalFormat("##,##0.00 €");
String orderConfirmation;
orderConfirmation = "Das ganze Team bedankt sich bei Ihnen, " + getFullName() + ", für ihre Bestellung. Hier finden Sie ihre Bestellübersicht:\n\n Ihre Gerichte: \n";
for(int i = 0; i < getSelection().length; i++){
orderConfirmation += "- " + getSelection() + "\n";
}
orderConfirmation += "\nStatus: " + getDelivery() + "\nGesamtpreis: " + df.format(getPrice());
if(getDeliveryAddress() != ""){
orderConfirmation += "\nLieferadresse: " + getDeliveryAddress();
}
orderConfirmation += "\nLieferzeit: " + getDeliverTime() + " Uhr";
return orderConfirmation;
}
}[/CODE]
[CODE lang="java" title="Controller: RestaurantPaymentApp"]package controller;
import model.Customer;
import model.Menu;
import model.Order;
import java.text.DecimalFormat;
import java.util.Scanner;
public class RestaurantPaymentApp {
/*
* Projektbeschreibung:
* Diese Anwendung ist ein Bestellsystem über das Kunden über eine Speisekarte ihre Bestellungen tätigen können.
*
* */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Customer customer = new Customer();
Order order = new Order();
welcome();
int action = getAction(sc);
executeAction(action, sc, customer, order);
}
public static void welcome(){
System.out.println("Herzlich Willkommen bei unserem Restaurant 🙂");
System.out.println("Was möchten Sie tun?");
showActions();
}
public static void showActions(){
System.out.println("1. Bestellung tätigen");
System.out.println("2. Beenden");
}
public static int getAction(Scanner sc){
return sc.nextInt();
}
/**
* Zeigt das Menü an
*/
public static void showMenu(){
Menu menu = new Menu();
DecimalFormat df = new DecimalFormat("#0.00 €");
System.out.println("Unser Menü");
for(int i = 0; i < menu.getMenu().length; i++){
System.out.println((i+1) + ") " + menu.getMenu() + ", Preis: " + df.format(menu.getMenuPrices()));
}
}
/**
* Führt die Hauptfunktionen aus
* @param action
* @param sc
* @param customer
* @param order
*/
public static void executeAction(int action, Scanner sc, Customer customer, Order order){
switch (action){
case 1:
System.out.println("Wie ist ihr Vorname?");
customer.setFirstName(capitalize(sc.next()));
System.out.println("Wie ist ihr Nachname?");
customer.setLastName(capitalize(sc.next()));
order.setFullName(customer.getFullName());
trennlinie(50);
showMenu();
trennlinie(50);
System.out.println("Wie viele Gerichte möchten Sie bestellen?");
int amount = sc.nextInt();
int[] selection = new int[amount];
for (int i = 0; i < selection.length; i++){
System.out.println("Welche Gerichte möchten Sie bestellen? (" + (i + 1) + "/" + amount + ") - Bitte geben Sie nur Zahlen ein!");
selection = sc.nextInt() - 1;
}
order.setSelection(selection);
trennlinie(50);
System.out.println("Möchten Sie ihre Bestellung abholen (bitte a eingeben) oder geliefert (bitte g eingeben) bekommen?");
System.out.println("Hinweis: Die Lieferkosten betragen 10€");
String input = sc.next();
order.setDelivery(input);
if(input.equals("a")){
System.out.println("Um wie viel Uhr möchten Sie ihre Bestellung abholen? (Bitte geben Sie nur die Uhrzeit an)");
order.setDeliverTime(sc.next());
}else{
System.out.println();
System.out.println("Um wie viel Uhr möchten Sie ihre Bestellung geliefert bekommen? (Bitte geben Sie nur die Uhrzeit an)");
order.setDeliverTime(sc.next());
System.out.println("An welche Adresse dürfen wir ihre Bestellung liefern?");
sc.nextLine();
customer.setDeliveryAddress(sc.nextLine());
order.setDeliveryAddress(capitalize(customer.getDeliveryAddress()));
}
trennlinie(50);
System.out.println(order);
break;
case 2:
System.out.println("Vielen Dank für Ihren Besuch. Wir wünschen Ihnen einen schönen Tag");
break;
default:
String[] setup = new String[1];
main(setup);
}
}
/**
* Generiert eine Trennline mit der übergebenen Zahl
* @param amount
*
*/
public static void trennlinie(int amount){
String trennlinie = "";
for (int a = 0; a < amount; a++){
trennlinie += "-";
}
System.out.println(trennlinie);
}
/**
* Erster Buchstabe wird zu einem Großbuchstaben umgewandelt
* @param str
* @return
*/
public static String capitalize(String str) {
if(str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}
[/CODE]
Schöne Grüße
ich bin gerade beim Entwickeln meines allerersten Java Projekts. Dieses wird ein Restaurantbestellungssystem werden, welches eine reine Konsolenanwendung ist.
Die Planung sowie Umsetzung hat mich vor gewisse Herausforderungen gestellt, die ich wie ich finde gut meistern konnte.
Ich habe das Projekt in 3 Models und 1 Controller aufgeteilt:
Models
- Customer
- Menu
- Order
Controller
- RestaurantPaymentApp
Dies schien für mich die beste Aufteilung nach den mir bekannten OOP-Regeln zu sein.
Ich bin mir bei der Entwicklung der Models und des Controllers unsicher, ob dies die richtige Umsetzung ist oder ob ich da doch das ein und andere vermische. Daher möchte ich hier gerne meinen Code teilen und euch fragen, wie ihr es sieht. Ich würde mich sehr auf euer Codefeedback freuen.
Hier ist der Code:
[CODE lang="java" title="Model: Customer"]package model;
public class Customer {
private String firstName;
private String lastName;
private String deliveryAddress;
public Customer() {
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFullName() {
return this.firstName + " " + this.lastName;
}
public void setDeliveryAddress(String deliveryAddress) {
this.deliveryAddress = deliveryAddress;
}
public String getDeliveryAddress() {
return this.deliveryAddress;
}
}[/CODE]
[CODE lang="java" title="Model: Menu"]package model;
public class Menu {
private String[] menu;
private double[] menuPrices;
public Menu(){
this.setMenu();
this.setMenuPrices();
}
private void setMenu() {
String[] menu = {
"Bunter Salatteller",
"Schnitzel mit Pommes und Salat",
"Angebratener Lachs mit knusprigen Reis und Souce",
"Maultaschen mit Röstzwiebeln und Semmelbrösel",
"Rumpsteak mit Kräuterbutter, Pommes und Salat",
"Veganes Gemüse-Curry mit Kartoffeleinlage und Gemüsevariation",
"Schwäbischer Zwiebelrostbraten mit hausgemachten Spätzle und Salat",
"Schweinelende an Whiskey-Rahmsoße mit hausgemachten Spätzle und Salat"
};
this.menu = menu;
}
public String[] getMenu() {
return this.menu;
}
private void setMenuPrices() {
double[] prices = {
8.00,
11.90,
14.90,
7.90,
19.90,
13.90,
19.90,
16.90
};
this.menuPrices = prices;
}
public double[] getMenuPrices() {
return this.menuPrices;
}
}[/CODE]
[CODE lang="java" title="Model: Order"]package model;
import java.text.DecimalFormat;
import java.util.Arrays;
public class Order {
private String fullName;
private String deliveryAddress;
private int[] selection;
private double price;
private String delivery;
private String deliverTime;
public Order(){
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public void setDeliveryAddress(String deliveryAddress) {
this.deliveryAddress = deliveryAddress;
}
public void setSelection(int[] selection) {
this.selection = selection;
setPrice();
}
private void setPrice() {
Menu menu = new Menu();
double[] actualPrices = menu.getMenuPrices();
String delivery = getDelivery();
double price = 0;
if (delivery == "Lieferung"){
price = 10;
}
for(int i = 0; i < this.selection.length; i++){
price += actualPrices[this.selection];
}
this.price = price;
}
public void setDelivery(String delivery){
if (delivery.equals("a")) {
delivery = "Abholung";
}else{
delivery = "Lieferung";
}
this.delivery = delivery;
}
public void setDeliverTime(String deliverTime) {
this.deliverTime = deliverTime;
}
public String getFullName() {
return this.fullName;
}
public String getDeliveryAddress() {
return this.deliveryAddress;
}
public String[] getSelection() {
Menu menu = new Menu();
String[] actualMenu = menu.getMenu();
String[] dishes = new String[this.selection.length];
for(int i = 0; i < this.selection.length; i++){
dishes = actualMenu[this.selection];
}
return dishes;
}
public double getPrice() {
return this.price;
}
public String getDelivery() {
return this.delivery;
}
public String getDeliverTime() {
return this.deliverTime;
}
@Override
public String toString(){
DecimalFormat df = new DecimalFormat("##,##0.00 €");
String orderConfirmation;
orderConfirmation = "Das ganze Team bedankt sich bei Ihnen, " + getFullName() + ", für ihre Bestellung. Hier finden Sie ihre Bestellübersicht:\n\n Ihre Gerichte: \n";
for(int i = 0; i < getSelection().length; i++){
orderConfirmation += "- " + getSelection() + "\n";
}
orderConfirmation += "\nStatus: " + getDelivery() + "\nGesamtpreis: " + df.format(getPrice());
if(getDeliveryAddress() != ""){
orderConfirmation += "\nLieferadresse: " + getDeliveryAddress();
}
orderConfirmation += "\nLieferzeit: " + getDeliverTime() + " Uhr";
return orderConfirmation;
}
}[/CODE]
[CODE lang="java" title="Controller: RestaurantPaymentApp"]package controller;
import model.Customer;
import model.Menu;
import model.Order;
import java.text.DecimalFormat;
import java.util.Scanner;
public class RestaurantPaymentApp {
/*
* Projektbeschreibung:
* Diese Anwendung ist ein Bestellsystem über das Kunden über eine Speisekarte ihre Bestellungen tätigen können.
*
* */
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Customer customer = new Customer();
Order order = new Order();
welcome();
int action = getAction(sc);
executeAction(action, sc, customer, order);
}
public static void welcome(){
System.out.println("Herzlich Willkommen bei unserem Restaurant 🙂");
System.out.println("Was möchten Sie tun?");
showActions();
}
public static void showActions(){
System.out.println("1. Bestellung tätigen");
System.out.println("2. Beenden");
}
public static int getAction(Scanner sc){
return sc.nextInt();
}
/**
* Zeigt das Menü an
*/
public static void showMenu(){
Menu menu = new Menu();
DecimalFormat df = new DecimalFormat("#0.00 €");
System.out.println("Unser Menü");
for(int i = 0; i < menu.getMenu().length; i++){
System.out.println((i+1) + ") " + menu.getMenu() + ", Preis: " + df.format(menu.getMenuPrices()));
}
}
/**
* Führt die Hauptfunktionen aus
* @param action
* @param sc
* @param customer
* @param order
*/
public static void executeAction(int action, Scanner sc, Customer customer, Order order){
switch (action){
case 1:
System.out.println("Wie ist ihr Vorname?");
customer.setFirstName(capitalize(sc.next()));
System.out.println("Wie ist ihr Nachname?");
customer.setLastName(capitalize(sc.next()));
order.setFullName(customer.getFullName());
trennlinie(50);
showMenu();
trennlinie(50);
System.out.println("Wie viele Gerichte möchten Sie bestellen?");
int amount = sc.nextInt();
int[] selection = new int[amount];
for (int i = 0; i < selection.length; i++){
System.out.println("Welche Gerichte möchten Sie bestellen? (" + (i + 1) + "/" + amount + ") - Bitte geben Sie nur Zahlen ein!");
selection = sc.nextInt() - 1;
}
order.setSelection(selection);
trennlinie(50);
System.out.println("Möchten Sie ihre Bestellung abholen (bitte a eingeben) oder geliefert (bitte g eingeben) bekommen?");
System.out.println("Hinweis: Die Lieferkosten betragen 10€");
String input = sc.next();
order.setDelivery(input);
if(input.equals("a")){
System.out.println("Um wie viel Uhr möchten Sie ihre Bestellung abholen? (Bitte geben Sie nur die Uhrzeit an)");
order.setDeliverTime(sc.next());
}else{
System.out.println();
System.out.println("Um wie viel Uhr möchten Sie ihre Bestellung geliefert bekommen? (Bitte geben Sie nur die Uhrzeit an)");
order.setDeliverTime(sc.next());
System.out.println("An welche Adresse dürfen wir ihre Bestellung liefern?");
sc.nextLine();
customer.setDeliveryAddress(sc.nextLine());
order.setDeliveryAddress(capitalize(customer.getDeliveryAddress()));
}
trennlinie(50);
System.out.println(order);
break;
case 2:
System.out.println("Vielen Dank für Ihren Besuch. Wir wünschen Ihnen einen schönen Tag");
break;
default:
String[] setup = new String[1];
main(setup);
}
}
/**
* Generiert eine Trennline mit der übergebenen Zahl
* @param amount
*
*/
public static void trennlinie(int amount){
String trennlinie = "";
for (int a = 0; a < amount; a++){
trennlinie += "-";
}
System.out.println(trennlinie);
}
/**
* Erster Buchstabe wird zu einem Großbuchstaben umgewandelt
* @param str
* @return
*/
public static String capitalize(String str) {
if(str == null || str.isEmpty()) {
return str;
}
return str.substring(0, 1).toUpperCase() + str.substring(1);
}
}
[/CODE]
Schöne Grüße