当前位置: 首页 > 知识库问答 >
问题:

C#如何在我的酒店管理系统中添加继承

魏刚豪
2023-03-14

我想在我的酒店管理系统和更多的课程中增加继承性,有什么想法吗?我正在开发控制台应用程序,如果有人能给我更多的添加到这个程序中,我将不胜感激

该计划旨在复制一个基本的酒店客房预订计划。创建hotel number的实例后,通过调用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();
        }
    }
}

共有2个答案

西门庆
2023-03-14

如果您真的对代码不起作用的原因感兴趣,那么在签出时,您不会将变量currentRoomNumber设置为刚刚签出的房间号。在签出方法中添加此行可修复以下问题:

                available[roomNumber - 1] = true;
                currentRoomNumber = roomNumber - 1;
                Console.WriteLine("Check out oda: {0}", roomNumber);
滕璞瑜
2023-03-14

作为一种通用方法,我建议编程时完全按照人类(没有PC)的方式进行。他们会用一张纸写下当前房间号吗?可能不会。他们会有一张有所有房间的桌子吗?对当有人签入时,他们会在表格中添加一个十字,当有人签出时会将其删除吗?对他们怎样才能找到一个免费的房间?

修复您的问题不需要继承。您正在尝试按房间编号的顺序分配房间。您可以使用currentRoomNumber(当前房间号)跟踪这一点。事情不是这样的。一个人根据床位数、平方米大小、价格、楼层等来分配房间。。。

相反,您应该遍历可用[]的数组bool并找到一个false。由于这看起来像学习或家庭作业,我将为您留下实现。提示:为循环使用,跟踪索引并将中断退出循环。

对于面向对象的设计,可以执行以下操作:

  • 写下管理酒店意味着什么的句子
  • 识别名词,它们将成为类
  • 识别动词,它们将成为方法
  • 检查同义词,例如“房间”=“公寓”或“结帐”=“离开”,然后只选择一个单词
  • 将动词赋给名词
  • 想想哪个动词需要哪些信息。如果名词本身不知道这些信息,这将成为参数

main()方法看起来很像一个测试。阅读“单元测试”并将测试代码与酒店管理应用程序分离。

 类似资料:
  • 我有两个服务网址像WFS和仓储管理系统下面: http://neii.bom.gov.au/services/solarclim/wms/data/monClim_dirNorExp1Hou.nc?service=WMS http://services.land.vic.gov.au/catalogue/publicproxy/guest/dv_geoserver/datavic/wfs?SERV

  • 问题内容: 我有这张表来查询不同季节(高,低)季节的房间价格 如何获得不同天数和不同季节的5天总价.. 看这张表 这是我的命令(mysql)我想从 2013年4月7日* 到 2013年 11月7日获得10晚的总价格 * 添加 我写了这个命令,但是还是没用 错误:#1305-功能saudihot_saudihotels.strtodate不存在 问题答案: 这是查询: 注意,表达式要简单得多,现在星

  • 问题内容: 是否可以向Java系统属性添加新值。如果有的话,如何在Java系统属性中引入具有相应值的新键。 问题答案: 无论是或使用国旗当您启动JVM

  • 我需要为一家酒店创建一个ERD,问题如下: “一套酒店的所有者希望为他或她的酒店建立一个酒店管理系统。这些酒店位于南非的主要城市和旅游景点。在每个酒店中,员工被雇佣来履行各种职责。在每个酒店中,客人预订他们选择的房间,他们根据预订的房间类型计费。给定上面的业务场景,请绘制一个实体关系图,指示所有实体和关系(基数)。” 这就是我所创造的: 我的问题 > 如果Employee_ID在Hotel中是fo

  • 问题内容: 我试图弄清楚如何向将管理一些构建的Jenkins添加管理构建,以及如何将参数从管理构建传递到子构建。 问题答案: 您正在寻找参数化触发器插件。 安装插件后,请参考下面的第二张快照。转到项目页面。搜索。之后,点击 快照上方是父作业A,其中我正在定义一个字符串参数,该参数将在其子作业B中使用。 快照还是父作业A的快照,我在其中指定了下游(子)作业B并启用了该操作, 这将确保父作业A中定义的

  • Fabric Fabric 是一个用来简化系统管理任务的第三方库。当 Chef 和 Puppet 更倾向于管理服务器和系统库的时候,Fabric 则更关注于应用级别的任务管理,比如应用部署。 安装 Fabric: $ pip install fabric 下面的代码为我们创建了两个可以使用的任务:memory_usage 和 deploy,前面的任务会输出每一个服务器设备的内存使用率;后面的任