Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple java ticketing system in netbeans

We are required to complete a simple ticketing system for a local cinema in netbeans and I'm stumped on two problems.

Problem 1 is as part of the output, is once you have selected ticket type + quantity, there needs to be an output "you are purchasing X number of tickets at Y quantity"

Problem 2 is the seniors ticket needs to be at a cost of $32.50 and I cannot seem to find a workaround for allowing a calculation to be made using a decimal figure. I debugged and it seemed to change the number to an integer, which then would not calculate correctly. Help!

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);   

 }
}
like image 279
Captain_Stag Avatar asked Jun 09 '26 11:06

Captain_Stag


2 Answers

Hi would suggest to make the following changes.

First rename price2 to totalPrice and change it to a double:

double totalPrice;

I would create an enum class for TicketType, where you can also assign the price1 value:

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

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

  private double price;

  public double getPrice() {
    return price;
  }
}

You can now change you main method to this:

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);
  }

You can use the System.out.printf() to format messages you print to the console

like image 94
Stephan Hogenboom Avatar answered Jun 11 '26 22:06

Stephan Hogenboom


On the price1 value, you are losing some precision by storing it as an int.

In Java, the int is rounded (to floor) to values without the decimal point precision. For this purpose, you'll want to use float or double to retain your cent value.

Also, you may find the java.text.NumberFormat class useful for the Currency handling.

like image 20
tjames6123 Avatar answered Jun 11 '26 23:06

tjames6123



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!