很难确定我的设计的起点

sja*_*aak 4 java

对于我的CS课程,我必须编制一个酒店登记/结账系统.该计划必须能够检查人员进出.该计划在入住时为客人分配第一个可用房间.如果没有免费房间,它也会这么说.酒店有四个房间.

在作业中,它说需要有4个班级:Assignment5,Hotel,Room和Guest.

  1. Assignment5类用于与用户交互.

  2. 酒店类有四个房间和所有操作房间的方法.

  3. 客房类有1位客人.如果客房是空的,客人可以办理入住手续.如果客人要离开,则需要清空房间.

  4. 访客类:访客具有名字和姓氏.

在菜单中需要有4个选项:1显示可用房间和职业的状态.2检查选项3检查选项4结束程序选项.

好的,所以我知道我应该为自己完成任务.但是,我不知道它是什么,但从作业开始,我有很大的问题切割小块的东西.另外这个任务是学习使用不同的类,我真的不明白在这种情况下我应该采取哪些步骤.

有人可以通过提供一些提示来帮助我开始吗?我一直盯着我的屏幕好几个小时,只是觉得我可以用一些小小的见解让我开始.任何帮助都非常赞赏!

好了,到目前为止帮忙了.

**首先,非常感谢你的帮助,你们真棒!已经连续7个小时了,仍然卡住了.我现在的问题是它不能编译.它说:

Java:28: checkIn(Gast) in Hotel cannot be applied to (java.lang.String)
                hotel.checkIn("Guido");
                                     ^
1 error
Run Code Online (Sandbox Code Playgroud)

也许,有人看看我现在这样做的方式是在正确的道路上吗?我感谢JavaGeek的计划,但我想通过自己来学习它.

到目前为止,我有以下内容:

   import java.util.Scanner;

public class bopgave5 {

    public static void main(String[] args) {

        boolean opnieuw = false;

        do {
            int invoer = menu();

            if (invoer == 2){

                Hotel hotel = new Hotel();
                hotel.checkIn("Guido");

                opnieuw = true;
            }

            else if (invoer == 4)
                opnieuw = false;

            else
            opnieuw = true;
        }
        while (opnieuw == true);

    }

    public static int menu (){
        Scanner sc = new Scanner(System.in);


        System.out.println("MENU:   [1] Statusoverzicht");
        System.out.println("    [2] Check-in");
        System.out.println("    [3] Check-out");
        System.out.println("    [4] Einde");
        System.out.print("Uw invoer: ");
        int invoer = sc.nextInt();  

        return invoer;

    }


}

class Hotel {

    Kamer kamer1, kamer2, kamer3, kamer4;

    Hotel (){
        kamer1 = new Kamer();
        kamer2 = new Kamer();
        kamer3 = new Kamer();
        kamer4 = new Kamer();
    }




    void checkIn(Gast nieuweGast) {


        if (kamer1.gast == null) {      
        kamer1.gast = nieuweGast;
        System.out.println("Gast " + nieuweGast.naam + " krijgt kamer 1");
        return;
        }

        else if (kamer2.gast == null) {     
        kamer2.gast = nieuweGast;
        System.out.println("Gast " + nieuweGast.naam + " krijgt kamer 2");
        return;
        }

        else if (kamer3.gast == null) {     
        kamer3.gast = nieuweGast;
        System.out.println("Gast " + nieuweGast.naam + " krijgt kamer 3");
        return;
        }

        else if (kamer4.gast == null) {     
        kamer4.gast = nieuweGast;
        System.out.println("Gast " + nieuweGast.naam + " krijgt kamer 5");
        return;
        }

        else {
        System.out.println("hotel is vol");
        return;
        }


    }                        

}

class Kamer {

    Gast gast;

    Kamer() {
        gast = null;
    }


}

class Gast {
    String naam;

    Gast(String nieuweNaam) {
        naam = nieuweNaam;
    }
}
Run Code Online (Sandbox Code Playgroud)

Lie*_*yan 5

所以你有4个班级.

在作业中,它说需要有4个班级:Assignment5,Hotel,Room和Guest.

责任分工如下:

Assignment5类用于 与用户交互.

酒店类有四个房间和所有操作房间的方法.(特别强调:"房间"是复数)

客房类有1位客人.如果客房是空的,客人可以办理入住手续.如果客人要离开,则需要清空房间.(或换句话说,操作单个房间)

访客类:访客具有名字和姓氏.

首先,您可能想要确定每个对象所具有的"状态".IOW,您需要确定每个对象具有的属性/实例字段.让我们从一个例子开始: Guest类:guest有一个名字和一个姓氏..对所有其他类做同样的事情.

接下来,您需要确定所需的方法.让我们从另一个例子开始:Room class有1位客人.如果客房是空的,客人可以办理入住手续.如果客人离开房间需要清空..最重要的是,每个类都需要一些构造函数.

接下来,对于每个方法,如果需要返回值,则需要查找方法所需的参数及其返回值.例如,对于入住方法,您需要房间和客人; 在您办理登机手续之前,您需要检查房间是否空了.

更新:

我现在的问题是:如何让它工作,有4个房间,签入1人后,检查第二个人将把它放在另一个房间?

你的老师有一个很好的建议,把它分成几块.

基本上,你有问题:" 检查第二个人应该把他放在另一个房间 ".

那么,我们如何打破这个呢?首先,我们需要找到一个空房间,所以我们需要一个方法(比如说findEmptyRoom()),在我们找到一个可用的房间后,我们需要检查客人进入那个房间,所以我们需要另一种方法(比方说checkIn()).所以,我们找到一个空房间,然后我们检查了客人进入那个房间,然后我们就完成了.

下一步,我们打破findEmptyRoom().酒店拥有4间客房(假设我们存储room1,room2,room3,和room4成员变量,或者,你可以使用数组,如果你已经在课堂上学习一下吧).要找到四个房间中哪一个是空的,我们需要问一个房间是否空 ; 所以我们需要另一种方法(比方说isEmpty()).要找一个空房间,问房间1,如果room1是空的返回room1,否则问房间2,如果room2是空的返回room2,否则问房间3,如果room3是空的,返回room3,否则问房间4,如果room4是空的,返回room4.否则,所有房间都被占用.[注意:如果所有房间都被占用,你需要弄清楚要做什么].一个数组将使这个过程更容易,你只需要遍历数组,并询问它是否为空并返回房间,如果它是空的,否则继续检查下一个房间.

接下来,我们打破checkIn().那么,checkIn()完成签入过程需要知道什么?它需要知道两个信息:roomguest.因为checkIn()是房间类的实例方法room,所以我们只需要一个参数,即guest.所以void checkIn(Guest guest)应该设置房间的guest成员变量.

接下来,我们打破isEmpty().我们怎么知道房间是空的?如果一个房间里面有一个客人,那么它就被占用了,否则就是空的.因此,isEmpty()检查guest成员变量是否引用有效guest虚拟机,如果它是有效guest虚拟机则返回true,否则返回false.在Java中,null通常用于标记某些内容不是有效对象,因此您可以检查guest成员变量是否null(显然,当guest虚拟机签出时,您需要将guest成员变量设置为null).

为其他进程做同样的事情.将问题分解成小块,直到你确信你可以使用一块.

UPDATE2:

您收到的错误消息:

Java:28: checkIn(Gast) in Hotel cannot be applied to (java.lang.String)
                hotel.checkIn("Guido");
Run Code Online (Sandbox Code Playgroud)

是因为你将String("Guido")传递给一个带有Gast参数(void checkIn(Gast nieuweGast) {...})的函数.你应该传递一个Gast对象:

// declare a variable called g, with type Gast
Gast g;

// create a new Gast object, passing "Guido" as parameter 
// to Gast's constructor, and assign the new object to g
g = new Gast("Guido");

// call hotel.checkIn(Gast) function with g as the argument, 
// i.e. the Gast object we just created in the previous line
hotel.checkIn(g);
Run Code Online (Sandbox Code Playgroud)

或更简单地说:

hotel.checkIn(new Gast("Guido"));
Run Code Online (Sandbox Code Playgroud)