【发布时间】:2021-04-14 10:35:21
【问题描述】:
我想在我的酒店管理系统和更多类中添加继承有什么想法吗? 我正在开发控制台应用程序,如果有人可以给我更多添加到这个程序中,我将不胜感激
程序旨在重现一个基本的酒店房间预订方案。创建酒店号实例后,通过调用 checkIn() 方法,程序会检查是否有可用房间,如果有则保留房间。
但是,如果在分配所有房间后,有人从一个房间退房(通过 checkOut() 方法),例如1 号房间,然后尝试入住该房间。当 checkIn() 调用 hasRoomsAvailable() 方法时会出现此问题,在这种情况下,由于 currentRoomNumber 为 5,该方法返回 false 而不是 true。
using System;
namespace HotelManagement
{
//otel sınıfı
public class Hotel
{
private bool[] available;
private int totalNumberOfRooms;
private int currentRoomNumber;
// oda sayısını bilirleyecek
private Hotel(int totalNumberOfRooms)
{
this.totalNumberOfRooms = totalNumberOfRooms;
available = new bool[totalNumberOfRooms];
for (int i = 0; i < totalNumberOfRooms; i++)
available[i] = true;
}
//Returns true if room is available
private bool hasRoomsAvailable()
{
if (currentRoomNumber < totalNumberOfRooms &&
available[currentRoomNumber])
return available[currentRoomNumber];
else
return false;
}
//Time Complexity: O(1)
//en azından bir oda olup olmadığını kontrol eder ve rezerv eder
private int checkIn()
{
if (hasRoomsAvailable())
{
available[currentRoomNumber] = false;
return ++currentRoomNumber;
}
else
return -1;
}
//Check out method
private void checkOut(int roomNumber)
{
if (roomNumber <= totalNumberOfRooms && roomNumber != -1)
{
if (available[roomNumber - 1] == false)
{
available[roomNumber - 1] = true;
Console.WriteLine("Check out oda: {0}", roomNumber);
}
else
Console.WriteLine("geçersiz Check Out : {0}", roomNumber);
}
else
Console.WriteLine("yanlış oda numarası: {0}", roomNumber);
}
//Time Complexity: O(1)
public static void Main(string[] args)
{
//Create an instance of 5 odalı bir otel
Hotel hotel = new Hotel(5);
int roomNum = -1;
if (hotel.hasRoomsAvailable())
{
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda: {0}", roomNum);
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda: {0}", roomNum);
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda: {0}", roomNum);
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda: {0}", roomNum);
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda: {0}", roomNum);
}
hotel.checkOut(1);
roomNum = hotel.checkIn();
Console.WriteLine("tahsis edilen oda budur: {0}", roomNum);
//pause program output on console
Console.ReadLine();
}
}
}
【问题讨论】:
-
为什么要添加继承? FCoI 原则说:“优先组合胜于继承”。
-
好吧,继承假设你甚至有一些可以被继承到子类的行为。目前完全不清楚该行为和适当的子类应该是什么。退后一步,在纸上画出你的类结构:你需要哪些对象?他们应该具备哪些属性?它们提供什么功能?它们如何相互关联?这不是一个编程问题,而是一个设计问题。
-
BTW 酒店管理真的很疯狂。您需要能够超额预订酒店,即预订不存在的房间。这有时需要接待员高超的外交技巧:如果没有足够的访问被取消,他们需要将客人转移到另一家酒店,因为没有空房间。
-
首先,你说你的班级有一个错误 - 那么你的问题主要是关于这个吗?大概您已经通过代码来找出问题所在?您为什么要提出与继承有关的另一个问题?
-
如果您扩展模型,您可能会认为所有房间都具有某些属性和所有房间共享的某些行为,而有些房间类型具有额外的设施和用途,例如相邻房间,如一个例子。
标签: c# class inheritance