using System.Collections.Generic;
namespace HotelReservationSystem
static void Main(string[] args)
Hotel hotel = new Hotel("Grand Central Hotel", 150.0m);
hotel.AddRoom(new Room(101));
hotel.AddRoom(new Room(102));
hotel.AddRoom(new Room(103));
List<User> users = new List<User>();
Dictionary<int, Reservation> reservations = new Dictionary<int, Reservation>();
Console.WriteLine("Welcome to the Hotel Reservation System");
Console.WriteLine("1. Register User");
Console.WriteLine("2. Make a Reservation");
Console.WriteLine("3. Exit");
Console.Write("Please select an option: ");
string option = Console.ReadLine();
Console.Write("Enter your name: ");
string userName = Console.ReadLine();
Console.Write("Enter your email: ");
string userEmail = Console.ReadLine();
User newUser = new User(userName, userEmail);
Console.WriteLine("User registered successfully!");
Console.Write("Enter your email to validate: ");
string email = Console.ReadLine();
User user = users.Find(u => u.Email == email);
Console.WriteLine("User not found! Please register first.");
Console.Write("Enter room number to reserve: ");
int roomNumber = int.Parse(Console.ReadLine());
Room room = hotel.GetRoom(roomNumber);
if (room == null || room.IsReserved)
Console.WriteLine("Room not available!");
Console.Write("Enter number of nights: ");
int nights = int.Parse(Console.ReadLine());
DateTime checkInDate = DateTime.Now;
DateTime checkOutDate = checkInDate.AddDays(nights);
decimal totalPrice = hotel.PricePerNight * nights;
Reservation reservation = new Reservation(user, room, checkInDate, checkOutDate, totalPrice);
reservations.Add(room.RoomNumber, reservation);
Console.WriteLine("Reservation successful!");
Console.WriteLine($"Reserved by: {user.Name}");
Console.WriteLine($"Room Number: {room.RoomNumber}");
Console.WriteLine($"Price per night: {hotel.PricePerNight} NZD");
Console.WriteLine($"Total Price: {totalPrice} NZD");
Console.WriteLine($"Check-in Date: {checkInDate}");
Console.WriteLine($"Check-out Date: {checkOutDate}");
Console.WriteLine("Invalid option. Please try again.");
public string Name { get; set; }
public decimal PricePerNight { get; set; }
private List<Room> Rooms { get; set; }
public Hotel(string name, decimal pricePerNight)
PricePerNight = pricePerNight;
Rooms = new List<Room>();
public void AddRoom(Room room)
public Room GetRoom(int roomNumber)
return Rooms.Find(r => r.RoomNumber == roomNumber);
Console.WriteLine("Available Rooms:");
foreach (var room in Rooms)
Console.WriteLine($"Room Number: {room.RoomNumber} - {(room.IsReserved ? "Reserved" : "Available")}");
public string Name { get; set; }
public string Email { get; set; }
public User(string name, string email)
public int RoomNumber { get; set; }
public bool IsReserved { get; set; }
public Room(int roomNumber)
public User User { get; set; }
public Room Room { get; set; }
public DateTime CheckInDate { get; set; }
public DateTime CheckOutDate { get; set; }
public decimal TotalPrice { get; set; }
public Reservation(User user, Room room, DateTime checkInDate, DateTime checkOutDate, decimal totalPrice)
CheckInDate = checkInDate;
CheckOutDate = checkOutDate;