This commit is contained in:
2025-09-29 09:59:37 -04:00
parent b02c9546d9
commit 6cabfec4e9
31 changed files with 1023 additions and 74 deletions

65
uml/classdiagram5.dot Normal file
View File

@@ -0,0 +1,65 @@
digraph ReservationSystemClassDiagram {
rankdir=BT;
splines=ortho;
node [shape=record, style=rounded, fontname="Helvetica"];
edge [fontname="Helvetica"];
// --- Interfaces ---
IReservation [label="{«interface»\nIReservation|+ ReservationType()\l+ checkValid()\l+ calculatePrice()\l+ getPricePerNight()\l...}", style=dashed];
// --- Abstract Classes ---
Reservation [label="{«abstract»\nReservation|- type: char\l- reservation_number: String\l- physical_address: Address\l- mailing_address: Address\l- reservation_start_date: ZonedDateTime\l- reservation_end_date: ZonedDateTime\l- reservation_status: ReservationStatusEnum\l- kitchen: KitchenTypeEnum\l- price: Float\l- accountNumber: String\l|+ Write(Reservation)\l+ Change(Reservation, ReservationStatusEnum)\l+ ReservationType()\l...}"];
// --- Concrete Classes ---
TestReservations [label="{TestReservations|+ main(String[])\l- Test_AddAccount(...)\l- Test_AddReservation(...)\l}"];
AccomodationManager [label="{AccomodationManager|- accounts: AccountList\l|+ loadAll()\l+ retrieveAccount(String)\l+ AddAccount(Account)\l+ UpdateAccount(Account)\l+ newAccount(...)\l+ addReservation(Account, Reservation)\l...}"];
DataRepository [label="{DataRepository|- directoryPath: String\l- instance: DataRepository\l+ getInstance()\l+ WalkFileSystemTree(...)\l+ LoadAccount(Path)\l+ Reservation(String)\l...}"];
Account [label="{Account|- account_number: String\l- phone_number: String\l- mailing_address: Address\l- email_address: EmailAddress\l- reservations: AccountReservationList\l|+ add(Reservation)\l+ Write(Account)\l+ findReservation(String)\l...}"];
AccountList [label="{AccountList|+ add(Account)\l+ find(String)\l+ save(Account)\l...}"];
AccountReservationList [label="{AccountReservationList|+ add(IReservation)\l+ find(String)\l...}"];
HotelReservation [label="{HotelReservation|+ ReservationType()\l+ checkValid()\l+ calculatePrice()\l...}"];
CabinReservation [label="{CabinReservation|+ ReservationType()\l+ checkValid()\l+ calculatePrice()\l...}"];
HouseReservation [label="{HouseReservation|+ ReservationType()\l+ checkValid()\l+ calculatePrice()\l...}"];
Address [label="{Address|- street: String\l- city: String\l- state: String\l- zip: String\l}"];
EmailAddress [label="{EmailAddress|- email: String\l}"];
// --- Enums ---
ReservationStatusEnum [label="{«enumeration»\nReservationStatusEnum|Draft\lCompleted\lCanceled\l}", style=filled, fillcolor=lightgrey];
KitchenTypeEnum [label="{«enumeration»\nKitchenTypeEnum|None\lKitchenette\lFullKitchen\l}", style=filled, fillcolor=lightgrey];
// --- Inheritance & Implementation ---
edge [arrowhead=empty, style=solid];
HotelReservation -> Reservation;
CabinReservation -> Reservation;
HouseReservation -> Reservation;
edge [arrowhead=empty, style=dashed];
Reservation -> IReservation;
// --- Aggregation & Composition ---
edge [arrowhead=diamond, style=solid, label="1"];
AccomodationManager -> AccountList [label="1..*", headlabel="manages"];
Account -> AccountReservationList [label="1..*", headlabel="has"];
Account -> Address [label="1", headlabel="mailing"];
Account -> EmailAddress [label="1"];
Reservation -> Address [label="0..2", headlabel="physical/mailing"];
Reservation -> ReservationStatusEnum [label="1"];
Reservation -> KitchenTypeEnum [label="1"];
AccountReservationList -> IReservation [arrowhead=odiamond, label="0..*"];
AccountList -> Account [arrowhead=odiamond, label="0..*"];
// --- Dependencies ---
edge [arrowhead=vee, style=dashed, label="«uses»"];
TestReservations -> AccomodationManager;
TestReservations -> HotelReservation;
TestReservations -> CabinReservation;
TestReservations -> HouseReservation;
AccomodationManager -> DataRepository;
DataRepository -> AccomodationManager;
DataRepository -> Account;
DataRepository -> Reservation;
Account -> DataRepository;
Reservation -> DataRepository;
}