Focus mode

Araç Kiralama Projesi

Kiralanabilir Araçların Bulunması

Bu bölüme kadar projede araçlar eklendi, modelleri ve markaları tanımlandı. Şimdi sıra rezervasyon, yani kiralama işlemine gelmektedir. Veri tabanında "book" adında bir tablomuz bulunmaktadır. Bu tablo, araçların rezervasyonlarını tutmak için kullanılacak. Bu bölümde bu rezervasyon işlemi incelenecektir.

Öncelikle, veritabanındaki "book" tablosunu tanıtılmalıdır. Book entity sınıfı aşağıdaki gibi olabilir.

public class Book {
  private int id;
  private int car_id;
  private Car car;
  private String name;
  private String idno;
  private String mpno;
  private String mail;
  private LocalDate strt_date;
  private LocalDate fnsh_date;
  private String bCase;
  private String note;
  private int prc;
 //Get ve Set Metotları
}

Book Manager class’ında örnek bir metot aşağıda verilmiştir. Bu kod, belirli bir araç kimliği (carId) ile kitap tablosunda arama yapmak için kullanılır. Veritabanından kitapları çekmek için bir SQL sorgusu oluşturur. Eğer carId 0'dan farklı bir değer ise, sorguya "book_car_id = " + carId koşulunu ekler. Sonrasında oluşturulan sorguyu kullanarak kitapları çeker ve ArrayList<Book> olarak döndürür.

public ArrayList<Book> searchForTable(int carId) {
    String select = "SELECT * FROM public.book";
    ArrayList<String> whereList = new ArrayList<>();

    if (carId != 0) {
      whereList.add("book_car_id = " + carId);
    }

    String whereStr = String.join(" AND ", whereList);
    String query = select;
    if (whereStr.length() > 0) {
      query += " WHERE " + whereStr;
    }
    return this.bookDao.selectByQuery(query);
  }

Aşağıda yer alan kod bloğu Booking View class’ından bir örnek event listener içerir. Bir kaydetme butonuna (btn_book_save) tıklandığında çalışan bir olay dinleyicisi (event listener) belirli metin alanlarını kontrol ederek boş olup olmadığını kontrol eder. Eğer bu alanlardan biri boşsa, bir mesaj gösterir. Boş değilse, yeni bir "Book" nesnesi oluşturur ve bu nesneyi doldurarak kitap bilgilerini kullanıcı tarafından girilen değerlere göre ayarlar. Sonrasında bu kitabı veritabanına kaydetmeye çalışır ve işlem başarılıysa bir "done" mesajı gösterir ve pencereyi kapatır; aksi takdirde bir "error" mesajı gösterir.

btn_book_save.addActionListener(e -> {
  JTextField[] checkFieldList = {
      this.fld_book_name,
      this.fld_book_mail,
      this.fld_book_prc,
      this.fld_book_mpno,
      this.fld_book_idno,
      this.fld_book_strt_date,
      this.fld_book_fnsh_date
  };

  if (Helper.isFieldListEmpty(checkFieldList)) {
    Helper.showMsg("fill");
  } else {
    Book book = new Book();
    book.setbCase("done");
    book.setCar_id(this.car.getId());
    book.setName(this.fld_book_name.getText());
    book.setStrt_date(LocalDate.parse(strt_date, DateTimeFormatter.ofPattern("dd/MM/yyyy")));
    book.setFnsh_date(LocalDate.parse(fnsh_date, DateTimeFormatter.ofPattern("dd/MM/yyyy")));
    book.setIdno(this.fld_book_idno.getText());
    book.setMpno(this.fld_book_mpno.getText());
    book.setMail(this.fld_book_mail.getText());
    book.setNote(this.txta_book_note.getText());
    book.setPrc(Integer.parseInt(this.fld_book_prc.getText()));

    if (this.bookManager.save(book)) {
      Helper.showMsg("done");
      dispose();
    } else {
      Helper.showMsg("error");
    }

  }
});

Kullanıcının belirlediği tarih aralığına uygun rezervasyonları sorgulamak için SQL BETWEEN ifadesini kullanarak bir temel sorgu yapısı oluşturulur. Bu sorgu, başlangıç ve bitiş tarihleri arasındaki rezervasyonları filtrelemeyi amaçlar.

ArrayList<Car> searchedCarList = this.carDao.selectByQuery(query);

    bookOrWhere.add("('" + strt_date + "' BETWEEN book_strt_date AND book_fnsh_date)");
    bookOrWhere.add("('" + fnsh_date + "' BETWEEN book_strt_date AND book_fnsh_date)");
    bookOrWhere.add("(book_strt_date BETWEEN '" + strt_date + "' AND '" + fnsh_date + "')");
    bookOrWhere.add("(book_fnsh_date BETWEEN '" + strt_date + "' AND '" + fnsh_date + "')");

Comments

You need to enroll in the course to be able to comment!