Focus mode

Araç Kiralama Projesi

Kiralama İşlemleri

Bu bölümde araç rezervasyon sistemine müsait araçları bulma ve rezervasyon yapma işlemlerini gerçekleştirilmektedir. Önceki bölümde müsait araçları bulduğumuza göre, bu araçlar üzerinden rezervasyon yapma işlemini sağlayabiliriz.

İlk adım olarak, rezervasyon yapmak için gerekli olan ekranı tasarlanır. Bu ekranda, araç marka, model, başlangıç tarihi ve bitiş tarihi gibi bilgileri kullanıcıdan alınır. Başlangıç ve bitiş tarihini dışarıdan parametre olarak alınmaktadır, çünkü bu tarih aralığına göre arama yapacağız.

Sonrasında, seçilen araçların rezervasyon durumunu kontrol etmek için SQL WHERE koşulları oluşturulmaktadır. Bu koşullar, belirli tarih aralıklarında rezervasyon yapılmış araçları filtreleyen sorguları içerir. Elde edilen rezervasyonları listeleyerek, bu araçların ID'lerini içeren bir liste oluşturulur.

Daha sonra, bu rezervasyon listesinden etkilenen araçları müsait araçlar listesinden çıkararak, sadece müsait araçları içeren bir sonuç listesi elde ediyoruz. Bu işlem, rezervasyon yapılabilecek müsait araçları belirlememize yardımcı oluyor.

SearchedCarList

Aşağıdaki kod bloğunda bir araç rezervasyon sisteminde belirli bir tarih aralığı için müsait araçları bulma işlemini gerçekleştirir. İlk olarak, veritabanından belirli kriterlere uygun araçları çeken bir sorgu yapılır ve bu araçlar searchedCarList listesine eklenir.

Daha sonra, rezervasyon tarih aralığıyla çakışan mevcut rezervasyonları sorgulamak için SQL WHERE koşullarını oluşturan bir dizi ifade eklenir. Bu ifadeler, başlangıç tarihi (strt_date) ve bitiş tarihi (fnsh_date) ile rezervasyon tarih aralıklarını kontrol eder. Oluşturulan bu SQL sorgusu, bookQuery değişkenine atanır ve bu sorgu ile veritabanından ilgili rezervasyonları çeken bir liste elde edilir.

Sonrasında, bu rezervasyon listesinden her bir rezervasyonun bağlı olduğu aracın ID'lerini içeren bir liste (busyCarId) oluşturulur. Bu liste, rezervasyonlar nedeniyle müsait olmayan araçları belirlemek amacıyla kullanılır.

Son adımda ise, başlangıçta elde edilen tüm araçları temsil eden searchedCarList, müsait olmayan araçları (busyCarId içindeki ID'lere sahip olanları) çıkartarak, sadece müsait araçları içeren bir sonuç listesi elde edilir ve bu liste döndürülür.

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 + "')");

    String bookOrWhereStr = String.join(" OR ", bookOrWhere);
    String bookQuery = "SELECT * FROM public.book WHERE " + bookOrWhereStr;

    ArrayList<Book> bookList = this.bookDao.selectByQuery(bookQuery);
    ArrayList<Integer> busyCarId = new ArrayList<>();
    for (Book book : bookList) {
      busyCarId.add(book.getCar_id());
    }
    searchedCarList.removeIf(car -> busyCarId.contains(car.getId()));
    return searchedCarList;

Bu süreçten sonra, rezervasyon ekranında seçilen aracın bilgilerini gösterilir. Kullanıcıdan rezervasyon detaylarını (müşteri adı, TC numarası, telefon numarası, vb.) girmesini istenilir. Ardından, "Save" butonuna tıklandığında rezervasyonu kaydedilir.

Rezervasyon kaydedildikten sonra, sistem tarafından oluşturulan rezervasyon ID'si ve diğer bilgilerle bir bildirim gösterilir. Bu aşamadan sonra, kullanıcının isteğine bağlı olarak rezervasyon detaylarını düzenleyebilmesi için uygun kontroller eklenebilir.

Örneğin, bu derste manuel olarak test etmek amacıyla bazı örnek verileri ekleyerek rezervasyon işlemlerini gerçekleştirilebilir. Ancak gerçek bir sistemde, kullanıcıların girdiği bilgilerin doğruluğunu kontrol etmek ve daha fazla güvenlik önlemleri almak önemlidir.

 // test için
    this.fld_book_name.setText("Mustafa Çetindağ");
    this.fld_book_idno.setText("1234123411");
    this.fld_book_mail.setText("[email protected]");
    this.fld_book_mpno.setText("05501234567");
    this.fld_book_prc.setText("2350");
    this.txta_book_note.setText("Not bırakıldı");

Son olarak, rezervasyon işleminin başarıyla tamamlanması durumunda, pencerenin kapatılması ve rezervasyonlar tablosunun güncellenmesi gibi ek işlemleri gerçekleştirmek için gerekli olan kodları eklenebilir.

bookingView.addWindowListener(new WindowAdapter() {
        @Override
        public void windowClosed(WindowEvent e) {
          loadBookingTable(null);
          loadBookingFilter();
          loadBookTable(null);
        }
      });

Comments

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