One minor comment: you said
We started out way back when with a similar system (but for multiple properties). As penders pointed out, you'll run into a problem with trying to block out specific rooms (e.g., room 111 is reserved part of the 30-day period, room 112 is reserved another part of the 30 days, and room 113 is reserved another part of the 30 days, but they don't overlap. During the 30 days *a* room is available, so you'll just have to do some manual re-arranging.)
What we did is along the lines of creating a table for rooms and creating an entry for each day for each room type. For example, for June 19, 2008, there would be 13 rows: 6 for Standard, 3 for Deluxe, and 4 for State. When a reservation is made, the Availability field is set to False and the ReservationID field is set to the reservation number for one of whichever room type for each night of the reservation.
This makes checking for availability quick. When you enter the rooms into the system, it's a simple matter to allocate the appropriate price to each type/date combination.
Another option is to only add room rows to the table when a reservation is made (actually, it should be allocated when the reservation is confirmed- otherwise you'll have rooms blocked up that don't get reserved, potentially losing you other reservations). When checking availability, just check that the count of reservations for each dat of the reservation is less than the actual number of rooms (i.e., if you already have 3 reservations for Deluxe rooms on June 20, 2008, you can't take any more reservations for a Duluxe room spanning that date).
[edited by: LifeinAsia at 4:45 pm (utc) on June 19, 2008]