2016-04-26 50 views
-1

我目前正在做Java中的第一個編碼項目。這是一個訂購系統,應該使客戶得到以下的東西。首先,客戶應該能夠瀏覽應用程序,在哥本哈根選擇他/她最喜歡的餐廳,並從他們的個人菜單列表中選擇餐點。其次,每個訂單都應該根據訂單數量和交貨地點進行定製。最後,系統應該指派最近的可用騎車者從餐館拿起訂單,並在規定的時間將膳食送到指定的目的地。Java中膳食訂購系統的收集錯誤

在@Theresa的幫助下,我再次測試了程序,但我無法獲得最後一英里的運行。系統應該指派最近的可用騎車者從餐廳接取訂單的部分不起作用。我仍然覺得有點絕望,因爲我沒有嘗試盡我所能

任何其他意見,提示或幫助將不勝感激。提前致謝。

這是更新後的代碼:[https://www.dropbox.com/s/awvohw7vholsdrd/Cleaner_DeliveryBike.zip?dl=0][1]

private static void setDelivery() throws Exception { 

     double totalTime = 0; 

     String delivery = "Now that you have chosen what you want to order, we would like to introduce to you our MadCyklers." 
       + "All day we have 5 biker that are touring arround the city to deliver your order right to you. We only need" 
       + "to know one thing from you: where in Copenhagen are you right now?"; 

     try { 
      printString(navigationFrameTop); 
      printString(delivery); 
      printString(navigationFrameBottom); 
      printString(categoryFrame); 
      System.out.println("       *COPENHAGEN*     "); 
      System.out.println(""); 
      System.out.println(" LONG> 12.52 12.54 12.56 12.58 12.60 12.62"); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.70 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.69 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.68 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.67 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println("   .  .  .  .  .  . "); 
      System.out.println(" 55.66 + . . . + . . . + . . . + . . . + . . . + "); 
      System.out.println(" ^ .  .  .  .  .  . "); 
      System.out.println(" LAT"); 
      printString(categoryFrame); 
      printString(inputFrame); 
      customer.setLongitude(0); 
      printString(inputFrame); 
      customer.setLatitude(0); 
      printString(inputFrame); 
      double min = 9999999; 
      double distance; 
      // checking if Indications are correct. 
      for(Biker biker : BIKERS) { 
       biker.setLatitude(0); 
       biker.setLongitude(0); 
       distance = biker.distanceTo(customer) + (restaurants.get(restaurantPick)).distanceTo(customer); 
       if(distance < min) { 
        min = min + distance; 
        activeBiker = biker.iD; 
       } 
      } 

      totalTime = (min/KILOMETRES_PER_HOUR) * 3600000 
        + restaurants.get(restaurantPick).getPreparationTime() * 60000; 
      deliveryTime = (long) (currentTime + totalTime); 
      String deliveryConfirmation = " Your order will be delivered to your location at: " + deliveryTime 
        + " from our MadCykler " + BIKERS.get(activeBiker).getTipFactor() + "."; 

      printString(deliveryConfirmation); 
      payment(); 
     } catch (Exception e) { 
      printString(errorFrame); 
      System.out.println("Error! Reloading Main Menu..."); 
      printString(errorFrame); 
      main(null); 
     } 
    } 

    private static void payment() throws Exception { 

     BigDecimal tip = BigDecimal.ZERO; 
     BigDecimal tipPrice = BigDecimal.ZERO; 
     int payingOption = 0; 
     String payment = "There is only one more thing left to do for you. Just initialize the payment and we will send" 
       + "you the order confirmation. Then you just have to wait for" + BIKERS.get(activeBiker).getTipFactor() 
       + "to arrive with your order."; 
     String totalCost = "The total costs are " + getTotal() + "DKK. What % tip would you like to give to the Cykler? "; 

     try { 
      printString(navigationFrameTop); 
      printString(payment); 
      printString(navigationFrameBottom); 
      printString(categoryFrame); 
      printString(totalCost); 
      printString(categoryFrame); 
      printString(inputFrame); 

      tip = BIKERS.get(activeBiker).getTipFactor(); 

      printString(inputFrame); 

      tipPrice = tip.divide(tip, 100).multiply(getTotal()); 
      deliveryCost = deliveryCost.add(getTotal()).add(tipPrice); 
      String totalDelivery = "The overall delivery cost are " + deliveryCost + "DKK. Press [1] if you would like to pay," 
        + "[2] to pick a new restaurant, or [3] to return to the Main Menu."; 
      String totalDeliveryError = "Error! Press [1] if you would like to pay,[2] to pick a new restaurant, or [3] to " 
        + "return to the Main Menu."; 

      printString(categoryFrame); 
      printString(totalDelivery); 
      printString(categoryFrame); 
      do { 
       Scanner input = new Scanner(System.in); 
       printString(inputFrame); 
       payingOption = input.nextInt(); 
       printString(inputFrame); 
       switch (payingOption) { 
       case 1: 
        wrapOrder(); 
        break; 
       case 2: 
        choiceMeal = null; 
        quantityMeal = null; 
        pickingRestaurant(); 
        break; 
       case 3: 
        choiceMeal = null; 
        quantityMeal = null; 
        main(null); 
        break; 
       default: 
        printString(errorFrame); 
        printString(totalDeliveryError); 
        printString(errorFrame); 
        break; 
       } 
      } while (payingOption != 1 && payingOption != 2 && payingOption != 3); 
     } catch (Exception e) { 
      printString(errorFrame); 
      System.out.println("Error! Reloading Main Menu..."); 
      printString(errorFrame); 
      main(null); 
     } 
    } 

    private static void wrapOrder() { 

     String s = ""; 
     UUID customerId; 
     BigDecimal currentBalance = BigDecimal.ZERO; 
     String customerDetails = customer.toString(); 
     long arrival = deliveryTime; 
     BigDecimal bill = deliveryCost; 

     currentBalance = creditAccounts.get(customerAccountLoggedIn).getBalance(); 
     if (currentBalance.compareTo(deliveryCost) > 0) { 
      printString(categoryFrame); 
      System.out.println(" Your payment was successful."); 
      printString(categoryFrame); 
      creditAccounts.get(customerAccountLoggedIn).withdraw(deliveryCost); 
      for (int i = confirmations.size(); i < confirmations.size() + 1; i++) { 
       customerId = confirmations.get(i).getOrderId(); 
       Confirmation confirmation = new Confirmation(customerId, customerDetails, arrival, bill); 
       confirmations.add(confirmation); 
       printString(navigationFrameTop); 
       confirmation.toString(); 
       printString(navigationFrameBottom); 
      } 
     } 
     else { 
      printString(errorFrame); 
      creditAccounts.get(customerAccountLoggedIn).withdraw(deliveryCost); 
      printString(errorFrame); 
      reCharging(); 
     } 
     // ending the program and clearing all content during the order 
    } 

回答

0

爲什麼你做你的系統所擁有的一切硬編碼? 更好的選擇是從配置文件或數據庫加載菜單/餐具。如果餐廳離開或加入會發生什麼?如果他們改變菜單呢?您將不得不每次重做該程序...

全部完成數據驅動,您可以輕鬆更改。

看看在你的系統中的實體,它在那裏可能會改變 - 你有什麼樣的,如果不是騎自行車的人與車的人,可以在同一時間需要超過一個交付等

我的建議是找出如何爲了讓數據驅動,你可以分割MVC的功能,然後問題就會出現在你身上。

這裏是一個小建議

try { 
    System.out.println("====================================================="); 
    System.out.println("This is the menu of " + restaurants.get(restaurantPick).getName()); 
    System.out.println("====================================================="); 
    printMenu(InitialiseSystem.MENUS.get(restaurantPick)); 
    orderingMeals(); 
} catch (Exception e) { 
    System.out.println("Sorry, there is error. You will return to the Main Menu"); 
    main(null); 
} 

因此,這是你可以把它整潔 我會把完成的代碼,當我能完成它

private void initMenus() { 
     Map<String, Meal> tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Norwegian Lobster", new Meal("Norwegian Lobster", new BigDecimal(145.00))); 
     tempMenu.put("Pork Neck Jutland", new Meal("Pork Neck Jutland", new BigDecimal(195.00))); 
     tempMenu.put("Tenderloin", new Meal("Tenderloin", new BigDecimal(249.50))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Kaiseki Sushi", new Meal("Kaiseki Sushi", new BigDecimal(300.00))); 
     tempMenu.put("Tempura Tokyo", new Meal("Tempura Tokyo", new BigDecimal(140.00))); 
     tempMenu.put("Tonkotsu Ramen", new Meal("Tonkotsu Ramen", new BigDecimal(140.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Los Burritos", new Meal("Los Burritos", new BigDecimal(105.00))); 
     tempMenu.put("Beef Carnitas", new Meal("Beef Carnitas", new BigDecimal(145.00))); 
     tempMenu.put("Chicken Enchiladas", new Meal("Chicken Enchiladas", new BigDecimal(119.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Hamburger", new Meal("Hamburger", new BigDecimal(129.00))); 
     tempMenu.put("Cheeseburger", new Meal("Cheeseburger", new BigDecimal(129.00))); 
     tempMenu.put("Portobello Burger", new Meal("Portobello Burger", new BigDecimal(149.00))); 
     MENUS.add(tempMenu); 
     tempMenu = new HashMap<String, Meal>(); 
     tempMenu.put("Fried Rice", new Meal("Fried Rice", new BigDecimal(68.00))); 
     tempMenu.put("Noodle Salad", new Meal("Noodle Salad", new BigDecimal(62.00))); 
     tempMenu.put("Meatball Soup", new Meal("Meatball Soup", new BigDecimal(96.00))); 
     MENUS.add(tempMenu); 

    } 
+0

它希望做什麼你在說,但我們還沒有用過數據庫。因此,我想我只知道如何硬編碼......:/系統本身會更有效,應該可以調整,但我們學到的東西不會讓我做任何改變。你會有任何其他建議如何處理我的硬代碼? @TheresaForster – maximal16

+0

然後,我建議你在一個地方的硬代碼,並建立其餘的周圍休息,我猜你是做這個大學項目然後 –

+0

是的。說實話,在編碼方面,我很小心。我擁有IT業務背景,並選擇了一門編程未成年人來真正學習高級語言。過去三週我已經投入了90個小時來完成這個項目。非常感謝!我現在將執行此操作,並嘗試看看我是否可以構建它。我希望它會停止製造問題。 – maximal16