Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 69 additions & 0 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

50 changes: 50 additions & 0 deletions src/main/java/lessons/lesson07/Flight/flightInfo.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
1
Economy
PAID
2025-10-15T12:00:52.546690
Feruz
2
Economy
PAID
2025-10-15T12:01:07.354018400
dfe
3
Economy
BOOKED
2025-10-15T12:01:44.079517200
Helen
4
Economy
FREE
null
No passenger!
5
Economy
FREE
null
No passenger!
6
Economy
FREE
null
No passenger!
7
Economy
FREE
null
No passenger!
8
Economy
FREE
null
No passenger!
9
Economy
FREE
null
No passenger!
10
Economy
FREE
null
No passenger!
20 changes: 20 additions & 0 deletions src/main/java/lessons/lesson07/Passenger.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package lessons.lesson07;

public class Passenger extends Person {
private int seatNumber;
private String flightClass;

public Passenger(String fio, int id, int seatNumber, String flightClass) {
super(fio, id);
this.seatNumber = seatNumber;
this.flightClass = flightClass;
}

public int getSeatNumber() {
return seatNumber;
}

public String getFlightClass() {
return flightClass;
}
}
35 changes: 35 additions & 0 deletions src/main/java/lessons/lesson07/Person.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package lessons.lesson07;

public abstract class Person {
private String fio;
private int id;

public Person(String fio, int id) {
this.fio = fio;
this.id = id;
}

public String getFio() {
return fio;
}

public void setFio(String fio) {
this.fio = fio;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

@Override
public String toString() {
return "Person{" +
"fio='" + fio + '\'' +
", id=" + id +
'}';
}
}
152 changes: 152 additions & 0 deletions src/main/java/lessons/lesson07/ReservationSystem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
package lessons.lesson07;

import java.io.*;
import java.time.LocalDateTime;
import java.util.ArrayList;

public class ReservationSystem {
private int totalSeats;
private String destination;
private LocalDateTime flightDateTime;
protected ArrayList<SeatReservation> seatReservations = new ArrayList<>();

public ReservationSystem(int totalSeats, String destination, LocalDateTime flightDateTime) {
this.totalSeats = totalSeats;
this.destination = destination;
this.flightDateTime = flightDateTime;

// создает пустые места
for (int i = 1; i <= totalSeats; i++) {
seatReservations.add(new SeatReservation(i, "Economy", false, null));
}
}

public SeatReservation findSeat(int seatNumber) {
for (SeatReservation s : seatReservations) {
if (seatNumber == s.getSeatNumber()) {
return s;
}
}
return null;
}

public void bookSeat(int seatNumber, Passenger passenger) {
SeatReservation seat = findSeat(seatNumber);
if (seat != null) {
if (seat.status.equals("FREE")) {
seat.passenger = passenger;
seat.book();
} else {
System.out.println("Not available! Current status: " + seat.status);
}
} else {
System.out.println("There is no such seat number!");
}
}

public void cancelSeat(int seatNumber) {
SeatReservation seat = findSeat(seatNumber);
if (seat != null) {
if (!seat.status.equals("FREE")) {
seat.cancel();
} else {
System.out.println("This seat is not booked yet!");
}
} else {
System.out.println("There is no such seat!");
}
}

public void payForSeat(int seatNumber) {
SeatReservation seat = findSeat(seatNumber);
if (seat == null) {
System.out.println("There is no such seat!");
return;
}

if (seat.status.equals("BOOKED")) {
seat.status = "PAID";
System.out.println("Payment successful. Seat " + seatNumber + " is now paid!");
} else if (seat.status.equals("PAID")) {
System.out.println("This seat is already paid!");
} else {
System.out.println("Cannot pay for this seat! It’s not booked yet.");
}
}

public void showAllSeats() {
System.out.println("=== All Seats in the Airplane ===");
for (SeatReservation seat : seatReservations) {
if (seat.isExpired()) {
seat.cancel();
System.out.println("Seat " + seat.getSeatNumber() + " — booking expired and freed automatically!");
}

String status = seat.status;
String fio = (seat.passenger != null) ? seat.passenger.getFio() : "No passenger";
System.out.printf("Seat %2d | Class: %-8s | Status: %-10s | %s%n",
seat.getSeatNumber(), seat.getFlightClass(), status, fio);
}
System.out.println("================================");
}

public void saveToFile() {
File directory = new File("Flight");
File file = new File(directory, "flightInfo.txt");
try {
directory.mkdir();
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}

try (FileWriter writer = new FileWriter(file, false)) {
for (SeatReservation s : seatReservations) {
writer.write(s.getSeatNumber() + "\n");
writer.write(s.getFlightClass() + "\n");
writer.write(s.status + "\n");
writer.write((s.bookingTime != null ? s.bookingTime.toString() : "null") + "\n");
writer.write((s.getPassenger() != null ? s.getPassenger().getFio() : "No passenger!") + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
}

public void loadFromFile() {
File directory = new File("src/main/java/lessons/lesson06/Flight");
File file = new File(directory, "flightInfo.txt");
if (!file.exists()) return;

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
seatReservations.clear();

while ((line = br.readLine()) != null) {
int seatNumber = Integer.parseInt(line);
String flightClass = br.readLine();
String status = br.readLine();
String bookingTimeStr = br.readLine();
String passengerFio = br.readLine();

Passenger passenger = null;
if (!passengerFio.equals("No passenger!")) {
passenger = new Passenger(passengerFio, 0, seatNumber, flightClass);
}

SeatReservation seat = new SeatReservation(seatNumber, flightClass, false, passenger);
seat.status = status;
if (!"null".equals(bookingTimeStr)) {
seat.bookingTime = LocalDateTime.parse(bookingTimeStr);
}

seatReservations.add(seat);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}



53 changes: 53 additions & 0 deletions src/main/java/lessons/lesson07/Reserve.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package lessons.lesson07;

import java.time.LocalDateTime;

public abstract class Reserve {
protected int seatNumber;
protected String flightClass;
protected boolean isReserved;
protected Passenger passenger;
protected String status = "FREE";
protected LocalDateTime bookingTime;

public Reserve(int seatNumber, String flightClass, boolean isReserved, Passenger passenger) {
this.seatNumber = seatNumber;
this.flightClass = flightClass;
this.isReserved = isReserved;
this.passenger = passenger;
this.status = isReserved ? "BOOKED" : "FREE";
}

public abstract void book();
public abstract void cancel();
public abstract String getInfo();

public boolean isExpired() {
if (status.equals("BOOKED") && bookingTime != null) {
return bookingTime.plusMinutes(24).isBefore(LocalDateTime.now());
}
return false;
}

public LocalDateTime getBookingTime() {
return bookingTime;
}

public void setBookingTime(LocalDateTime bookingTime) {
this.bookingTime = bookingTime;
}

public int getSeatNumber() {
return seatNumber;
}

public String getFlightClass() {
return flightClass;
}

public Passenger getPassenger() {
return passenger;
}
}


Loading