diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..639900d
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
new file mode 100644
index 0000000..36099c1
--- /dev/null
+++ b/.idea/workspace.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1760186764962
+
+
+ 1760186764962
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/lessons/lesson07/Flight/flightInfo.txt b/src/main/java/lessons/lesson07/Flight/flightInfo.txt
new file mode 100644
index 0000000..6661002
--- /dev/null
+++ b/src/main/java/lessons/lesson07/Flight/flightInfo.txt
@@ -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!
diff --git a/src/main/java/lessons/lesson07/Passenger.java b/src/main/java/lessons/lesson07/Passenger.java
new file mode 100644
index 0000000..762af38
--- /dev/null
+++ b/src/main/java/lessons/lesson07/Passenger.java
@@ -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;
+ }
+}
diff --git a/src/main/java/lessons/lesson07/Person.java b/src/main/java/lessons/lesson07/Person.java
new file mode 100644
index 0000000..137d26d
--- /dev/null
+++ b/src/main/java/lessons/lesson07/Person.java
@@ -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 +
+ '}';
+ }
+}
diff --git a/src/main/java/lessons/lesson07/ReservationSystem.java b/src/main/java/lessons/lesson07/ReservationSystem.java
new file mode 100644
index 0000000..d6659cb
--- /dev/null
+++ b/src/main/java/lessons/lesson07/ReservationSystem.java
@@ -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 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();
+ }
+ }
+}
+
+
+
diff --git a/src/main/java/lessons/lesson07/Reserve.java b/src/main/java/lessons/lesson07/Reserve.java
new file mode 100644
index 0000000..14d4e58
--- /dev/null
+++ b/src/main/java/lessons/lesson07/Reserve.java
@@ -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;
+ }
+}
+
+
diff --git a/src/main/java/lessons/lesson07/ReserveMain.java b/src/main/java/lessons/lesson07/ReserveMain.java
new file mode 100644
index 0000000..50d14b6
--- /dev/null
+++ b/src/main/java/lessons/lesson07/ReserveMain.java
@@ -0,0 +1,71 @@
+package lessons.lesson07;
+
+import java.time.LocalDateTime;
+import java.util.Scanner;
+
+public class ReserveMain {
+ public static void main(String[] args) {
+
+ Scanner scanner = new Scanner(System.in);
+ LocalDateTime flightTime = LocalDateTime.of(2025, 10, 15, 9, 30);
+
+ ReservationSystem system = new ReservationSystem(10, "Tashkent", flightTime);
+ system.loadFromFile(); // Загрузка данных с предыдущих операций
+
+ while (true) {
+ System.out.println("\n=== AIR TICKET SYSTEM ===");
+ System.out.println("1. Book a seat");
+ System.out.println("2. Pay for a seat");
+ System.out.println("3. Cancel a reservation");
+ System.out.println("4. Show all seats");
+ System.out.println("5. Save and exit");
+ System.out.print("Select an option: ");
+
+ int choice;
+ try {
+ choice = Integer.parseInt(scanner.nextLine());
+ } catch (Exception e) {
+ System.out.println("Please enter a valid number!");
+ continue;
+ }
+
+ switch (choice) {
+ case 1 -> {
+ System.out.print("Enter seat number: ");
+ int seatNumber = Integer.parseInt(scanner.nextLine());
+ System.out.print("Enter passenger name: ");
+ String name = scanner.nextLine();
+ System.out.print("Enter passenger ID: ");
+ int id = Integer.parseInt(scanner.nextLine());
+ System.out.print("Enter class (Economy/Business): ");
+ String flightClass = scanner.nextLine();
+
+ Passenger passenger = new Passenger(name, id, seatNumber, flightClass);
+ system.bookSeat(seatNumber, passenger);
+ }
+
+ case 2 -> {
+ System.out.print("Enter seat number to pay for: ");
+ int seatNumber = Integer.parseInt(scanner.nextLine());
+ system.payForSeat(seatNumber);
+ }
+
+ case 3 -> {
+ System.out.print("Enter seat number to cancel: ");
+ int seatNumber = Integer.parseInt(scanner.nextLine());
+ system.cancelSeat(seatNumber);
+ }
+
+ case 4 -> system.showAllSeats();
+
+ case 5 -> {
+ system.saveToFile();
+ System.out.println("Saved! Exiting program.");
+ return;
+ }
+
+ default -> System.out.println("Invalid menu option!");
+ }
+ }
+ }
+}
diff --git a/src/main/java/lessons/lesson07/SeatReservation.java b/src/main/java/lessons/lesson07/SeatReservation.java
new file mode 100644
index 0000000..317ad93
--- /dev/null
+++ b/src/main/java/lessons/lesson07/SeatReservation.java
@@ -0,0 +1,62 @@
+package lessons.lesson07;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+public class SeatReservation extends Reserve {
+
+ public SeatReservation(int seatNumber, String flightClass, boolean isReserved, Passenger passenger) {
+ super(seatNumber, flightClass, isReserved, passenger);
+ }
+
+ @Override
+ public void book() {
+ if (status.equals("FREE")) {
+ isReserved = true;
+ status = "BOOKED";
+ bookingTime = LocalDateTime.now();
+ System.out.println("Seat " + seatNumber + " booked successfully!");
+ } else {
+ System.out.println("Seat " + seatNumber + " is not available! Current status: " + status);
+ }
+ }
+
+ public void pay() {
+ if (status.equals("BOOKED")) {
+ status = "PAID";
+ System.out.println("Seat " + seatNumber + " has been paid.");
+ } else {
+ System.out.println("Cannot pay for seat " + seatNumber + ". Status: " + status);
+ }
+ }
+
+ @Override
+ public void cancel() {
+ if (status.equals("BOOKED") || status.equals("PAID")) {
+ isReserved = false;
+ status = "FREE";
+ bookingTime = null;
+ passenger = null;
+ System.out.println("Seat " + seatNumber + " canceled successfully.");
+ } else {
+ System.out.println("Seat " + seatNumber + " is not booked yet.");
+ }
+ }
+
+ @Override
+ public String getInfo() {
+ String timeStr = bookingTime != null
+ ? bookingTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))
+ : "—";
+ return String.format(
+ "Seat %d | Class: %s | Status: %s | Passenger: %s | Booking time: %s",
+ seatNumber,
+ flightClass,
+ status,
+ passenger != null ? passenger.getFio() : "—",
+ timeStr
+ );
+ }
+}
+
+