-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCinema.java
142 lines (116 loc) · 5.81 KB
/
Cinema.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package cinema;
import java.util.Objects;
import java.util.Scanner;
public class Cinema {
public static void main(String[] args) {
final char SEAT_STATUS_AVAILABLE = 'S';
final char SEAT_STATUS_PURCHASED = 'B';
final int TICKET_PRICE_BASE = 10;
final int TICKET_PRICE_LOW = 8;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the number of rows:");
int numberOfRows = scanner.nextInt();
System.out.println("Enter the number of seats in each row:");
int numberOfSeatsPerRow = scanner.nextInt();
char[][] seatStatus = initialiseSeats(numberOfRows, numberOfSeatsPerRow, SEAT_STATUS_AVAILABLE);
int[][] seatPrices = setSeatPrices(numberOfRows, numberOfSeatsPerRow, TICKET_PRICE_BASE, TICKET_PRICE_LOW);
int option;
do {
printOptions();
option = scanner.nextInt();
switch (option) {
case 1 -> printSeats(seatStatus);
case 2 -> purchaseTickets(seatStatus, seatPrices, SEAT_STATUS_PURCHASED);
case 3 -> printStatistics(seatStatus, seatPrices, SEAT_STATUS_PURCHASED);
}
} while (option != 0);
}
public static char[][] initialiseSeats(int numberOfRows, int numberOfSeatsPerRow, char seatStatusAvailable) {
char[][] seats = new char[numberOfRows][numberOfSeatsPerRow];
for (int rowNumber = 1; rowNumber <= numberOfRows; rowNumber++) {
for (int seatNumber = 1; seatNumber <= numberOfSeatsPerRow; seatNumber++) {
seats[rowNumber - 1][seatNumber - 1] = seatStatusAvailable;
}
}
return seats;
}
public static int[][] setSeatPrices(int numberOfRows, int numberOfSeatsPerRow, int ticketPriceBase, int ticketPriceLow) {
int totalSeats = numberOfRows * numberOfSeatsPerRow;
int numberOfFrontRows = (numberOfRows / 2);
int[][] seatPrices = new int[numberOfRows][numberOfSeatsPerRow];
for (int rowNumber = 1; rowNumber <= numberOfRows; rowNumber++) {
for (int seatNumber = 1; seatNumber <= numberOfSeatsPerRow; seatNumber++) {
seatPrices[rowNumber - 1][seatNumber - 1] = totalSeats <= 60 || rowNumber <= numberOfFrontRows ? ticketPriceBase : ticketPriceLow;
}
}
return seatPrices;
}
public static void printOptions() {
System.out.println();
System.out.println("1. Show the seats");
System.out.println("2. Buy a ticket");
System.out.println("3. Statistics");
System.out.println("0. Exit");
}
public static void printSeats(char[][] seatStatus) {
System.out.println();
System.out.println("Cinema:");
System.out.print(" ");
for (int seatNumber = 1; seatNumber <= seatStatus[0].length; seatNumber++) {
System.out.print(" " + seatNumber);
}
System.out.println();
for (int rowNumber = 1; rowNumber <= seatStatus.length; rowNumber++) {
System.out.print(rowNumber);
for (int seatNumber = 1; seatNumber <= seatStatus[rowNumber - 1].length; seatNumber++) {
System.out.print(" " + seatStatus[rowNumber - 1][seatNumber - 1]);
}
System.out.println();
}
}
public static void purchaseTickets(char[][] seatStatus, int[][] seatPrices, char seatStatusPurchased) {
Scanner scanner = new Scanner(System.in);
do {
System.out.println("Enter a row number:");
int chosenRowNumber = scanner.nextInt();
System.out.println("Enter a seat number in that row:");
int chosenSeatNumber = scanner.nextInt();
if (isSeatInvalid(chosenRowNumber, chosenSeatNumber, seatStatus)) {
System.out.println("Wrong input!");
} else if (isSeatPurchased(chosenRowNumber, chosenSeatNumber, seatStatus, seatStatusPurchased)) {
System.out.println("That ticket has already been purchased!");
} else {
seatStatus[chosenRowNumber - 1][chosenSeatNumber - 1] = seatStatusPurchased;
System.out.println("Ticket price: $" + seatPrices[chosenRowNumber - 1][chosenSeatNumber - 1]);
break;
}
} while (true);
}
public static void printStatistics(char[][] seatStatus, int[][] seatPrices, char seatStatusPurchased) {
int ticketsPurchased = 0;
int totalTickets = 0;
int currentIncome = 0;
int totalIncome = 0;
for (int rowNumber = 1; rowNumber <= seatStatus.length; rowNumber++) {
for (int seatNumber = 1; seatNumber <= seatStatus[rowNumber - 1].length; seatNumber++) {
totalTickets++;
totalIncome += seatPrices[rowNumber - 1][seatNumber - 1];
if (isSeatPurchased(rowNumber, seatNumber, seatStatus, seatStatusPurchased)) {
ticketsPurchased++;
currentIncome += seatPrices[rowNumber - 1][seatNumber - 1];
}
}
}
System.out.println();
System.out.println("Number of purchased tickets: " + ticketsPurchased);
System.out.println("Percentage: " + String.format("%.2f", (double) ticketsPurchased / totalTickets * 100) + "%");
System.out.println("Current income: $" + currentIncome);
System.out.println("Total income: $" + totalIncome);
}
public static boolean isSeatPurchased(int rowNumber, int seatNumber,char[][] seatStatus, char seatStatusPurchased) {
return Objects.equals(seatStatus[rowNumber - 1][seatNumber - 1], seatStatusPurchased);
}
public static boolean isSeatInvalid(int rowNumber, int seatNumber,char[][] seatStatus) {
return !(rowNumber >= 1 && seatNumber >= 1 && rowNumber <= seatStatus.length && seatNumber <= seatStatus[0].length);
}
}