Rezerwacja wypożyczalnia pojazdów

0

Cześć wszystkim,

Aplikacja tworzona w c#, łączenie z mysql (host lokalny)

pod zdjęciami przejdę do rzeczy

Podgląd z mysql:

1

Podgląd kodu z c#

2

Tworzę projekt wypożyczalni samochodów, jednak napotkałem problem który rozkłada mnie na łopatki.
Korzystam z 3 tabel;

  1. Samochody z danymi typu marka/model/cena/moc etc.
  2. Klienci login/haslo/imie/nazwisko/numer tel
  3. Wypozyczenia - widoczne wyżej

Korzystam z datatimepicker (DataOd - od kiedy chcę wypożyczyć auto, DataDo- do kiedy chcę wypożyczyć auto). Zarejestrowany w aplikacji użytkownik wybiera termin, kiedy chce wypożyczyć auto- funkcja działa, jednak po wypożyczeniu nie można ponownie dokonać rezerwacji, gdyż nie umiem zrobić osobnej funkcji, która będzie sprawdzała/porównywała terminy nie kolidujące ze sobą.

np. Użytkownik A wypożycza auto od 10 stycznia 2020 do 15 stycznia 2020, a następnie Użytkownik B planuje wypożyczyć ten sam pojazd od 16 stycznia do 22 stycznia 2020r.
Aktualnie dla danego pojazdu mogę rezerwację dokonać tylko raz- bez względu na to, który użytkownik chce je wypożyczyć.

Czy jest ktoś na tyle uprzejmy, aby posłużyć swą wiedzą i przedstawić zarys kodu jakby to mniej więcej miało wyglądać?

0

Właściwa kolejność tworzenia aplikacji to:

  1. Przygotować strukturę bazy, która spełnia wszystkie wymagania i oczekiwania jakie mamy wobec projektu.
  2. Dopiero potem zacząć pisać program ...

Przyślij rozrysowaną strukturę bazy danych to wtedy może uda się odpowiedzieć na Twoje pytanie. Ty pokazałeś tylko jedną tabelkę a o pozostałych musimy się domyślać z dziwnego opisu...

1
katakrowa napisał(a):

Właściwa kolejność tworzenia aplikacji to:

  1. Przygotować strukturę bazy, która spełnia wszystkie wymagania i oczekiwania jakie mamy wobec projektu.
  2. Dopiero potem zacząć pisać program ...

Przyślij rozrysowaną strukturę bazy danych to wtedy może uda się odpowiedzieć na Twoje pytanie. Ty pokazałeś tylko jedną tabelkę a o pozostałych musimy się domyślać z dziwnego opisu...

Gdybym tak postępował pewnie nigdy nie zacząłbym żadnego projektu pisać.
Co do pytania. Funkcja sprawdzenia powinna wyglądać mniej więcej tak:
sprawdzasz istniejące wpisy które:

  1. mają datę rozpoczęcia wcześniejszą od daty rozpoczęcia nowego wpisu i jednoczenie datę zakończenia wiekszą od dat rozpoczęcia nowego wpisu
  2. Które mają date ropoczęcia wieksza od daty rozpoczecia nowego wpisu i jednoczenie datę zakończenia mniejsza od daty zakoczenia nowego wpisu
  3. które mają date rozp wcześniejszą od daty zakonczenia nowego wpisu i jednoczesnie date zak większą od daty zakonczenia nowego wpisu
0

3

Próbowałem zaczerpnąć z bazy:

string myquery = "select IdWypozyczenia from wypozyczenia where ((DataOd between '" + odkiedy + "' and '" + dokiedy + "' ) or (DataDo between '" + odkiedy + "' and '" + dokiedy + "' ))";

@szydlak rozpisałem sobie na kartce wszelkie możliwe opcje i są niemalże identyczne do Twoich wpisów. Nie wiem tylko jak to przenieść na kod- tutaj tylko leży mój problem :(
Myślę, że główny if by sprawdzał poszczególne przypadki, w razie powodzenia następuje funkcja która dokonuje rezerwacji widocznej na screenie pierwszego postu, a w razie niepowodzenia zwraca zajęte terminy w tabeli.

0
  1. Czy w obecnym układzie nie wiesz jak pokazać w jakich datach możliwe jest wypożyczenie samochodu ?
  2. Czy może podając daty od-do nowego "wypożyczenia" nie wiesz jak sprawdzić czy w tym okresie nie ma już zajętego samochodu ?

Rozważam przypadek 2:

Generalnie będziesz miał do sprawdzenia:


Nowe wypozyczenie                       |----------------------------------------------------------------------|
                                       od                                                                      do
                                       
Blokujące wypozyczenia:
opcja 1 :                           |------------|
opcja 2 :                                                                                                |------------|
opcja 3 :                   |-----------------------------------------------------------------------------------------------|
opcja 4 :                                                |---------------------------------------|

Z powyższego wynika, że masz do rozważenia 3 przypadki:

select count(*) as ILOSC from wypozyczenia
where 
  idSamochodu = xxxx
  and
  (
      ( warunki dla przypadku 1 ) => (nowa_data_od >= DataOd) and (nowa_data_od <= DataDo) and (nowa_data_do >= DataOd)  and (nowa_data_do >= DataDo )
      or
      ( warunki dla przypadku 2 ) => sam wymyśl ja ma być - zresztą wszystko jest na obrazku
      or
      ( warunki dla przypadku 3 ) => sam wymyśl ja ma być - zresztą wszystko jest na obrazku
      or
      ( warunki dla przypadku 4 ) => sam wymyśl ja ma być - zresztą wszystko jest na obrazku

  )
  
  
  Na koniec powyższe wyrażenie logiczne warto zoptymalizować.

Jeśli zapytanie zwróci ILOSC > 0 to znaczy, że NIE MOŻESZ ZROBIĆ NOWEGO WYPOŻYCZENIA w podanym okresie nowa_data_od - nowa_data_do.

Napisanie zapytania, które wyświetli wszystkie okresy kiedy można wypożyczyć samochód to już inna bajka.

6
katakrowa napisał(a):

Właściwa kolejność tworzenia aplikacji to:

  1. Przygotować strukturę bazy, która spełnia wszystkie wymagania i oczekiwania jakie mamy wobec projektu.
  2. Dopiero potem zacząć pisać program ...

Owszem, to prawidłowa kolejność w 1980 roku.

Teraz mamy rok 2020, i kolejność jest taka:

  1. Zdefiniuj wymagania funkcjonalne (przepływy biznesowe i wykorzystywane w nich dane).
  2. Napisz aplikację.
  3. Stwierdź, czy w ogóle potrzebujesz bazy danych, i jeśli tak, to ją utwórz.
0
katakrowa napisał(a):
  1. Czy w obecnym układzie nie wiesz jak pokazać w jakich datach możliwe jest wypożyczenie samochodu ?
    Napisanie zapytania, które wyświetli wszystkie okresy kiedy można wypożyczyć samochód to już inna bajka.

Włączyłem dziś projekt, patrzę na niego "świeżym okiem" i jest mniej więcej tak jak piszesz, nie mogę dla danego auta wykonać więcej jak jedną rezerwację, bo nie mam wpisu w kodzie który by odpowiadał za bookowanie w innym terminie jak ten, który jest zajęty.

@katakrowa

Załóżmy że opcja 4 to termin w jakim Klient A wypożycza samochód, przychodzi klient B i chce wypożyczyć w terminie (opcja1) albo (opcja2)
Znalazłem:

https://docs.microsoft.com/en-us/office/client-developer/outlook/pia/how-to-search-and-obtain-appointments-in-a-time-range

Jednak pomimo prób, nie umiem wszczepić tego do swojego kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1