Простая Java-система продажи билетов в NetBeans - PullRequest
3 голосов
/ 13 мая 2019

Мы обязаны завершить простую систему продажи билетов для местного кинотеатра в NetBeans, и я нахожусь в тупике на две проблемы.

Проблема 1 является частью выходных данных: если вы выбрали тип билета + количество, должен появиться вывод «Вы покупаете X количество билетов при количестве Y»

Проблема 2 заключается в том, что билет для пожилых людей должен стоить 32,50 долл. США, и я не могу найти обходной путь, позволяющий сделать расчет с использованием десятичной цифры. Я отладил, и он, казалось, изменил число на целое число, которое тогда не будет правильно вычисляться. Помогите!

package ticketingsystem;

import java.io.*;
public class ticketingsystem
{
     public static void main(String []args) throws Exception
     {
         BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
         String order,again;
         int quantity,price1=0,price2=0, price3=0,loop1=0,quantity1,quantity2=0;

         System.out.println("  ");  

         System.out.println("Welcome to the cinemas!");

         System.out.println(" ");
         System.out.println("MAIN MENU");
         System.out.println(" ");
         System.out.println("The cinema has the following options");
         System.out.println(" ");
         System.out.println("1 = Child (4-5 yrs)");
         System.out.println("2 = Adult (18+ yrs)");
         System.out.println("3 = Senior (60+ yrs)");

         do{
            System.out.println(" ");
            System.out.print("Enter your option: ");
            order=br.readLine();
            if (order.equalsIgnoreCase("1")) {
                price1=18;
            } else if (order.equalsIgnoreCase("2")) {
                price1=36;
            }   
            else if (order.equalsIgnoreCase("3")) {
                price1= (int) 32.5;
            }   

            System.out.print("Enter the number of tickets: ");
            quantity1= Integer.parseInt(br.readLine());
            quantity2=quantity1+quantity2;

            price2=price1*quantity2;   
            System.out.println("You are purchasing " int (order=br) " tickets at" (quantity1);

            System.out.print("Do you wish to continue?  (Y/N) : ");
            again=br.readLine();
            if (again.equalsIgnoreCase("y"))
                loop1=loop1+1;
            else loop1=loop1-100;
      } while (loop1==1);    

     System.out.println(" ");
     System.out.println("Total Price           : "+price2);   

 }
}

Ответы [ 3 ]

5 голосов
/ 13 мая 2019

Привет предложил бы внести следующие изменения.

Сначала переименуйте price2 в totalPrice и измените его на double:

double totalPrice;

Я бы создал класс перечисления для TicketType, где вы также можете назначить значение price1:

enum TicketType {
  child(18), adult(36), senior(32.5);

  TicketType(double price) {
    this.price = price;
  }

  private double price;

  public double getPrice() {
    return price;
  }
}

Теперь вы можете изменить свой основной метод следующим образом:

public static void main(String[] args) throws IOException {

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String order, again;
    int quantity = 0;
    double totalPrice;
    TicketType ticketType; // add the enum to the method

    System.out.println("  ");

    System.out.println("Welcome to the cinemas!");

    System.out.println(" ");
    System.out.println("MAIN MENU");
    System.out.println(" ");
    System.out.println("The cinema has the following options");
    System.out.println(" ");
    System.out.println("1 = Child (4-5 yrs)");
    System.out.println("2 = Adult (18+ yrs)");
    System.out.println("3 = Senior (60+ yrs)");

    do {
      System.out.println(" ");
      System.out.print("Enter your option: ");
      order = br.readLine();

      //use a switch case instead of the if else pattern
      switch (order.toLowerCase()) {
        case "1":
          ticketType = TicketType.child;
          break;

        case "3":
          ticketType = TicketType.senior;
          break;

        default:
          ticketType = TicketType.adult;
          break;
      }

      System.out.print("Enter the number of tickets: ");
      quantity = Integer.parseInt(br.readLine());

      totalPrice += ticketType.getPrice() * quantity;
      // %s will be replaced with the string value of ticketType, %.2f means it will be replaced with a decimal, round to decimals 
      System.out.printf("You are purchasing %s tickets at %.2f \n", ticketType, ticketType.getPrice());

      System.out.print("Do you wish to continue?  (Y/N) : ");
      again = br.readLine(); 
    }
    while (again.equalsIgnoreCase("y"));

    System.out.println(" ");
    System.out.printf("Total Price           : $%.2f \n", totalPrice);
  }

Вы можете использовать System.out.printf() для форматирования сообщений, которые вы печатаете на консоль

2 голосов
/ 13 мая 2019

В значении price1 вы теряете некоторую точность, сохраняя его как целое число.

В Java int округляется (до пола) до значений без точности десятичной точки. Для этого вам нужно использовать float или double, чтобы сохранить значение вашего цента.

Также вы можете найти класс java.text.NumberFormat, полезный для обработки валюты.

0 голосов
/ 13 мая 2019

Попробуйте это

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class testingsystem {
  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String order, again;
    int quantity;
    double price1 = 0, price2 = 0, price3 = 0;
    int loop1 = 0;
    int quantity1, quantity2 = 0;

    System.out.println("  ");

    System.out.println("Welcome to the cinemas!");

    System.out.println(" ");
    System.out.println("MAIN MENU");
    System.out.println(" ");
    System.out.println("The cinema has the following options");
    System.out.println(" ");
    System.out.println("1 = Child (4-5 yrs)");
    System.out.println("2 = Adult (18+ yrs)");
    System.out.println("3 = Senior (60+ yrs)");

    do {
      System.out.println(" ");
      System.out.print("Enter your option: ");
      order = br.readLine();
      if (order.equalsIgnoreCase("1")) {
        price1 = 18.0;
      } else if (order.equalsIgnoreCase("2")) {
        price1 = 36.0;
      } else if (order.equalsIgnoreCase("3")) {
        price1 = 32.5;
      }

      System.out.print("Enter the number of tickets: ");
      quantity1 = Integer.parseInt(br.readLine());
      quantity2 = quantity1 + quantity2;

      price2 = price1 * quantity2;
      System.out.println(
          "You are purchasing " + order + " number of tickets at " + quantity2 + " quantity");

      System.out.print("Do you wish to continue?  (Y/N) : ");
      again = br.readLine();
      if (again.equalsIgnoreCase("y"))
        loop1 = loop1 + 1;
      else
        loop1 = loop1 - 100;
    } while (loop1 == 1);

    System.out.println(" ");

    System.out.printf("Total Price           : $%.2f", price2);

  }
}
...