Witam. Na początku roku zacząłem uczyć się Javy z ksiażki "Java. Przewodnik dla początkujących. Wydanie VI" H. Schildta. Programy i ćwiczenia w tej książce są dość krótkie, a muszę do końca przyszłego tygodnia zrobić jakiś większy projekt w Javie na zaliczenie przedmiotu na studiach (daruje sobie tłumaczenie, dlaczego dopiero teraz zacząłem xd).
Muszą zrobić program, który ma być czymś w rodzaju "Menadżera Hotelarstwa", tj. użytkownik powinien mieć możliwość:
- dodawania hoteli
- rejestrowania w nich gości (przed rejestracją wybiera się hotel, następnie wpisuje się dane gościa, nr pokoju, date początku i końca pobytu, cenę za pokój itd)
- dodawania pracowników do hotelu (powinno działać podobnie jak z gościem, ale trochę inne dane, tj. pensja, okres zatrudnienia itd).
- program powinien zawierać odpowiednią obsługę błędów (czyli nie mogą być dwa hotele o tej samej nazwie, nie można dodać gościa do nie istniejącego hotelu, data początku pobytu w hotelu nie może być za datą końca pobytu itd.)
- wyświetlanie listy hoteli, pracowników i gości z danego hotelu
- możliwość usunięcia całego hotelu i zaktualizowanie listy hoteli
- program ma być obsługiwany w konsoli i ma mieć stworzone odpowiednie menu, w którym jest możliwość wyboru konkretnych opcji, a także powrót do poprzedniej części menu
Kiedyś napisałem w zasadzie identyczny program, tyle że napisany w C techniką programowania proceduralnego, więc mam ogólną koncepcje, jak się za to zabrać. Tylko mam jeden problem, a mianowicie jak zrobić "bazę danych", które będzie przechowywać wszystkie informacje. Mogę ją zrobić w dowolny sposób, nie muszę jej tworzyć w jakimś stricte języku baz danych. Mam dwa pomysły:
-
Zapisywać dane w plikach z rozszerzeniem .txt (ewentualnie w plikach binarnych, tak jak to zrobiłem w C). Np. mógłbym (nie jestem pewny, czy tak się da) zapisywać zawartość jakiegoś tam obiektu klasy, który jest hotelem i potem to odczytywać z pliku. Zaletą tego rozwiązania będzie to, że po zamknięciu programu baza danych nie przepadnie i po ponownym uruchomieniu programu będzie można ją odczytać, jednak nie jest to wymagane.
-
Zapisywać dane w jakimś kontenerze. Nie wiem, jakiejś dynamicznej tablicy, która będzie przechowywać dane i w razie potrzeby powiększać się w trakcie działania programu w celu zwiększenia ilości danych (oczywiście wymagany jest też odczyt tych danych), jednak po wyłączeniu programu, wszystkie dane przepadną.
I teraz pytanie, które rozwiązanie będzie lepsze i prostsze dla takiego laika jak ja. W sumie ogarniam tylko pierwszą połowę materiału z książki Schildta, czyli typy danych i operatory, instrukcje sterujące, klasy, metody, obiekty, a także dziedziczenie, interfejsy, pakiety i wyjątki. Obsługi plików nie ogarniam, ale jest to raczej prosta "baza danych", to z pomocą internetu powinienem być w stanie to zrobić. Może mi ktoś doradzić, które z dwóch powyższych rozwiązań dotyczącego zapisywania danych będzie lepszym wyborem?
I jeszcze jedno: załóżmy, że wybrałbym opcję nr 2. Czy w Javie jest jakiś mechanizm pozwalający na stworzenie dynamicznej tablicy obiektów jakiejś tam klasy, która będzie się dynamicznie powiększać w trakcie działania programu? Pamiętam, że w C++ można zrobić tablicę "vector" i następnie za pomocą instrukcji "push_back" dynamicznie powiększało się rozmiar tablicy np. w jakiejś pętli, w zależności od tego, jak dużej tablicy potrzebowaliśmy. Czy da się coś takiego zrobić w Javie?
Wiem, że trochę się rozpisałem, ale liczę na Waszą pomoc. Dzięki.