java - 预订座位并检查是否有空位

标签 java bluej

这是一个学校项目。我已经完成了大部分内容,但我有些事情被困住了。

这是我到目前为止所做的事情:

import java.io.*;
import java.util.*;
class train1
{
  public static void main() throws IOException
  {
    InputStreamReader isr=new InputStreamReader(System.in);
    BufferedReader x=new BufferedReader(isr);
    int tp=0, c=0, no=0, r, o;
    boolean flag = true;
    boolean ar[][]=new boolean[10][4];
    System.out.print("***********WELCOME TO TICKET RESERVATION SYSTEM***********");
    System.out.println();
    System.out.println();
    System.out.println("                TICKET RESERVATION");
    while(no<10 && flag==true)
        {
    System.out.println("                   Main Menu");
    System.out.println("1. Book Ticket");
    System.out.println("2. Exit");
    System.out.print("Enter Choice   :");
    int choice = Integer.parseInt(x.readLine());
    switch (choice)
    {
        case 1:

          System.out.println();
                System.out.println();
                System.out.print("*********TRAIN TICKET RESERVATION COUNTER***********");
                System.out.println();
                System.out.println("Enter the number for the station as given in the menu below");
                System.out.println("1 for Station A");
                System.out.println("2 for Station B");
                System.out.println("3 for Station C");
                System.out.println("4 for Station D");
                System.out.println("5 for Station E");


                System.out.print("START STATION: ");
                int s=Integer.parseInt(x.readLine());
                System.out.print("DESTINATION STATION: ");
                int d=Integer.parseInt(x.readLine());
                s=--s;
                d=--d;
               **//Here how do I check if seats are available or not?**
                int f=0;
        String starttime="", reaching="";
           if(s==0 && d==1)
            {

                f = 50;
                starttime = "08:00";
                reaching = "10:00";
            }
                 if(s==0 && d==2)
            {
                int a =0;
                int b =2;
                f = 100;
                starttime = "08:00";
                reaching = "12:00";
            }
            if(s==0 && d==3)
            {

                f = 150;
                starttime = "08:00";
                reaching = "14:00";
            }
             if(s==0 && d==4)
            {
                int a =0;
                int b =4;
                f = 200;
                starttime = "08:00";
                reaching = "16:00";
            }
             if(s==1 && d==2)
            {

                f = 50;
                starttime = "10:00";
                reaching = "12:00";
            }
             if(s==1 && d==3)
            {

                f = 100;
                starttime = "10:00";
                reaching = "14:00";
            }
             if(s==1 && d==4)
            {

                f = 150;
                starttime = "10:00";
                reaching = "16:00";
            }
             if(s==2 && d==3)
            {

                f = 50;
                starttime = "12:00";
                reaching = "14:00";
            }
             if(s==2 && d==4)
            {

                f = 100;
                starttime = "12:00";
                reaching = "16:00";
            }
             if(s==3 && d==4)
            {

                f = 50;
                starttime = "14:00";
                reaching = "16:00";
            }
           if (s==4 || d==0)
           {
             System.out.println ("Wrong Choice. Your ticket was not booked");

            }

                for (int i=0; i<no; i++)
                {
                    for (int j=s; j<=d; j++)
                    {
                        ar[i][j]=true;
                    }
                }

                /*
                Now what I have been unable to do is. Suppose a person
                is going from station A to B. Then row 1 column 1 is
                true, and if the next passenger wants to book from B-D
                then how do I get the seat booked in the row 1 if there
                is space available. And is seat is not available then
                it should go to row 2. How do I do that? What I am
                doing is "no++" so it goes to row next every time
                */


                    System.out.print("ENTER THE NAME: ");
                    String people=x.readLine();
                    System.out.print("ENTER THE AGE: ");
                    int age=Integer.parseInt(x.readLine());
                    System.out.print("GENDER OF THE PERSON: ");
                    String gender=x.readLine();
                    System.out.print("DATE OF JOURNRY: ");
                    String date2=x.readLine();

                System.out.println();
                System.out.println();
                System.out.println("      *****RESERVATION TICKET*****");

                    System.out.println("Name :"+people+"     "+"Age :"+age+"      "+"Gender :"+gender+"       ");




            System.out.println();
                System.out.println("START STATION: "+s);
                System.out.println("Boarding time: " + starttime);
                System.out.println("DESTINATION STATION: "+d);
                System.out.println("Expected time of Arrival:" + reaching);
                System.out.println();
           System.out.println("TOTAL AMOUNT: "+ f);
                System.out.println();
                System.out.println(" ***WISH YOU A HAPPY AND SAFE JOURNEY***");
                System.out.println("COURTESY: ROMIT RAILWAY STATION");


                break;


                case 2:
                flag=false;
                System.out.println ("You have exited");
                break;
                default: System.out.println("Choice Does not Exit");


    }
    no=no++;
}
}

让我告诉你它是如何运作的。主菜单必须包含 2 个选项,一是预订,二是退出。我已经这么做了。现在我们需要输入我在选择预订时所做的登机和目的地。

现在程序必须检查是否有可用座位。这就是我被困住的地方。我创建了一个 2D 数组,其中包含 10 行和 4 列。每当订票时,我都会将其存储为 true,并且最初所有地方都是 false。现在,每当预订新机票时,数组状态都会发生变化。我也这么做过。

我一直无法做到的是:假设一个人要从A站到B站。那么第1行第1列为真,如果下一位乘客想从B-D预订那么我如何预订座位如果有可用空间,则为第 1 行。如果没有座位,那么应该去第 2 排。我该怎么做?

此外,如果所有座位都已满,那么它必须告诉我没有座位。我怎么做?我不太了解 Java,因为我使用 BlueJ。所以如果有人能给BlueJ一些建议就更好了。

我是 10 年级的学生,所以请不要打扰 SQL 系统。

最佳答案

您的第一个问题,关于 A-B 和 B-D 无法用您的数据结构来回答,因为您按车站(起点、中间和目的地)存储车票。为了解决这个问题,您可以切换到不使用站点而是使用轨迹(即 AB、BC、CD 等)的数据结构。然后,您需要翻译用户输入(“从 A 到 B”将变为“轨迹 1 (AB)”,“从 B 到 D”变为“轨迹 2 (BC) 和 3 (CD)”,现在没有重叠)。

要解决您的其他问题,您必须重新考虑如何处理“否”变量。首先,让第 126 行的循环每次从 0 开始运行是没有意义的(据我所知),您只预订一张票,并且在当前的代码中,您预订的座位号存储在 no 中。因此,您只需要设置数组的索引(当然,对于每个站点/轨迹)。

您必须在用户输入后检查您的数据结构,以确定是否存在一个座位索引(数组的第一个维度),而不是在每个循环中简单地递增 no用户请求的所有站点(或轨迹)上仍然有空间。如果是,请预订,如果不是:没有座位。

(编辑:提示:您不应该使用另一个巨大的 if 语句来执行此操作,而是使用 for 循环、一些简单的 if 语句以及可能的一个或更多 boolean 变量来跟踪结果。您还可以查看 break 甚至 continue,它们是在 for 循环中使用的有用语句.)

(或者,您可以检查每个轨迹是否有可用座位:用户预订机票的机会更大,但他/她可能必须更换座位......)。

作为旁注,为了加分:代码的大部分是 if 语句,将起点站和终点站(sd)转换为 f (票价)、开始时间和停止时间。如果有 10 个电台,代码的长度会怎样?它会爆炸,因为您需要 81 个 if 语句!有一种更简单的方法可以做到这一点。提示:将每种情况的 d - s 与费用进行比较。你看到一个模式了吗?现在将 d 与开始时间进行比较。你看到一个模式了吗?与 s 相同。看看是否可以简化代码,以便(“将来”)可以扩展到 10 个站点,而无需编写大量代码。

关于java - 预订座位并检查是否有空位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853632/

相关文章:

java - 使用jdk 8处理异常

java - 如何在android中设置fm radio 的频率?

java - 如何在HistoricalMoment类中调用increment方法()?

java - BlueJ 中的数组列表搜索

java - 当我使用 BlueJ 将 Java 项目转换为 .jar 时,该项目无法像直接从 BlueJ 那样工作

java - 连接被拒绝 : RabbitMQ

java - 禁用 SearchView 文本输入?

java - Eclipse 跳转到 Ctrl-S 上的函数名称

java - 如何在 Java 中生成这些正弦和余弦函数? (泰勒级数)

java - Eclipse 可以动态计算表达式吗?