A simplified simulation of Expedia.com, implemented in Python to demonstrate object-oriented programming (OOP), API design, and transaction handling.
The project allows customers to:
- Create itineraries that include flights and hotels (extensible to cars, cruises, etc.)
- Reserve and pay using simulated payment APIs
- View and manage multiple itineraries
This project was built as part of a coursework assignment to practice OOP principles and system design.
- 
Login system (dummy users for testing) 
- 
Itinerary Management - Add multiple flights
- Add multiple hotels
- Reserve or cancel itineraries
 
- 
Payment Handling - Simulated gateways: PayPal and Stripe
- Handles failed payments and partial reservation rollbacks
 
- 
Extensible OOP Design - Easy to extend with new APIs (cars, cruises, activities, etc.)
- Clean separation of concerns (frontend vs backend)
 
- 
Custom Exception Handling for reservation and payment errors 
- 
Language: Python 3.x 
- 
Paradigm: Object-Oriented Programming (OOP) 
- 
APIs (simulated): - Flights (AirCanada, Turkish Airlines, etc.)
- Hotels (Hilton, Marriott)
- Payments (PayPal, Stripe)
 
- 
CLI Frontend (menu-driven interface) 
scr/
│
├── backend/
│   ├── api/
│   │   ├── common/
│   │   │   ├── customer_info.py         # Customer info model
│   │   │   └── reservation.py           # Base reservation & itinerary classes
│   │   │
│   │   ├── flights/                     # Flight API integrations
│   │   │   ├── aircanada_external.py
│   │   │   ├── aircanada_mgr.py
│   │   │   ├── flight_common.py
│   │   │   ├── flights_mgr.py
│   │   │   ├── turkish_external.py
│   │   │   └── turkish_mgr.py
│   │   │
│   │   ├── hotels/                      # Hotel API integrations
│   │   │   ├── hilton_external.py
│   │   │   ├── hilton_mgr.py
│   │   │   ├── hotel_common.py
│   │   │   ├── hotels_mgr.py
│   │   │   ├── marriott_external.py
│   │   │   └── marriott_mgr.py
│   │   │
│   │   └── payment/                     # Payment API integrations
│   │       ├── payment_common.py
│   │       ├── paypal_external.py
│   │       ├── paypal_payment.py
│   │       ├── stripe_external.py
│   │       └── stripe_payment.py
│   │
│   ├── common/
│   │   └── exceptions.py                # Custom exception classes
│   │
│   ├── customer_backend_mgr.py          # Orchestrates API calls for customers
│   ├── user.py                          # Customer entity
│   └── users_mgr.py                     # Handles multiple users
│
├── frontend/
│   ├── customer_frontend_mgr.py         # Customer CLI interface
│   ├── frontend_mgr.py                  # Entry for frontend logic
│   ├── siteaccess_mgr.py                # Login & signup handling
│   └── utils.py                         # Menu helper functions
│
├── driver.py                            # Main entry point
└── README.md
- 
Clone the repository: git clone https://github.com/your-username/expedia-project.git cd expedia-project/scr
- 
Run the project: python driver.py 
- 
Follow the CLI menu to: - Login
- Create itineraries (add flights/hotels)
- Reserve with payment
- List itineraries
 
Login
1. Login
2. Signup [NA]
Choice: 1
Enter username: john
Enter password: ****
Welcome John:
1. View profile [NA]
2. Make itinerary
3. List my itineraries
4. Logout
Choice: 2
Create your itinerary:
1. Add Flight
2. Add Hotel
3. Reserve itinerary
4. Cancel itinerary
- Add flights or hotels with the menu options.
- Select "Reserve itinerary" to confirm and pay.
- If payment fails, all reservations are rolled back.
- List past itineraries at any time.
- Add car rentals and cruise reservations
- Replace in-memory storage with database integration
- Add real API integrations (AirCanada, Hilton, Stripe, etc.)
- Replace CLI with a web or mobile frontend
- Add unit tests and CI/CD pipeline
Project specification by Mostafa S. Ibrahim Implementation in Python with focus on OOP design, API abstraction.