java - 多重预订系统

标签 java data-structures

我目前正在开发一个预订系统,作为我学位的任务。我需要为每个放映时间“保存/存储”座位计划(单选按钮),以便例如如果我预订了 13:00 的 2 张门票,我还可以预订 15:00 同一地点的 2 张门票。最好的方法是什么?

PS:我没有使用数据库,我也不想使用;由于任务要求。

这是我的代码,如果可以的话请运行它。

// CM1203 Fundamentals of Computing with Java; Second Assignement.
// Walter Carvalho - C1001984; 2012.
// Cardiff University

// Load Libraries
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;

public class cinemaSystem extends JFrame implements ActionListener {
    // Global Variables
    boolean lselected, rselected, mselected;
    double chargeDue;
    int a, b, c;
    static Ticket oapticket, childticket, adultticket;
    JFrame frame = new JFrame(); // Creates JFrame
    JLabel title, lchild, ladult, loap, ltotalprice, time;
    JTextField child, adult, oap, totalprice;
    JButton submit;
    JRadioButton time1, time2, time3, time4, time5; // Radio Butons
    JToggleButton l[][], m[][], r[][]; // Names grid of JButtons
    JPanel panel1, panel2, panel3, panel4, panel5, panel6;
    ArrayList<String> seatsAvailable = new ArrayList<String>();
    ArrayList<String> coupon = new ArrayList<String>();

    // Constructor
    public cinemaSystem(){

            title = new JLabel("Cinema Booking System");
            title.setFont(new Font("Helvetica", Font.BOLD, 30));
            title.setLocation(12,5);
            title.setSize(600, 60);

            frame.setLayout(null); // Setting Grid Layout
            // panel1.setLayout(new GridLayout(seat,row));
            l = new JToggleButton[4][4]; // Allocating Size of Grid
            panel1 = new JPanel(new GridLayout(4,4));
            panel1.setBounds(20, 95, 220, 140);
            for(int y = 0; y <4 ; y++){
                    for(int x = 0; x < 4; x++){
                        l[x][y] = new JToggleButton("L" + y + x); // Creates New JButton
                        l[x][y].addActionListener(this);
                        seatsAvailable.add("L" + y + x);
                        panel1.add(l[x][y]); //adds button to grid
                    }
            }

            m = new JToggleButton[4][2]; // Allocating Size of Grid
            panel2 = new JPanel(new GridLayout(2,4));
            panel2.setBounds(240, 165, 220, 70);
            for(int y = 0; y <2 ; y++){
                    for(int x = 0; x < 4; x++){
                        m[x][y] = new JToggleButton("M" + y + x); // Creates New JButton
                        m[x][y].addActionListener(this);
                        seatsAvailable.add("M" + y + x);
                        panel2.add(m[x][y]); //adds button to grid
                    }
            }

            r = new JToggleButton[4][4]; // Allocating Size of Grid
            panel3 = new JPanel(new GridLayout(4,4));
            panel3.setBounds(460, 95, 220, 140);
            for(int y = 0; y <4 ; y++){
                    for(int x = 0; x < 4; x++){
                        r[x][y] = new JToggleButton("R" + y + x); // Creates New JButton
                        r[x][y].addActionListener(this);
                        seatsAvailable.add("R" + y + x);
                        panel3.add(r[x][y]); //adds button to grid
                    }
            }

            panel4 = new JPanel(new FlowLayout());
            panel4.setBounds(0, 250, 300, 70);

            lchild = new JLabel("Child");
            child = new JTextField("0", 2);
            child.addActionListener(this);

            ladult = new JLabel("Adult");
            adult = new JTextField("0", 2);
            adult.addActionListener(this);

            loap = new JLabel("OAP");
            oap = new JTextField("0", 2);
            oap.addActionListener(this);

            submit = new JButton("Submit");
            submit.addActionListener(this);

            oapticket = new Ticket(4.70);
            childticket = new Ticket(3.50);
            adultticket = new Ticket(6.10);     

            child.addKeyListener(new MyKeyAdapter());
            oap.addKeyListener(new MyKeyAdapter());
            adult.addKeyListener(new MyKeyAdapter());

            panel4.add(lchild);
            panel4.add(child);
            panel4.add(ladult);
            panel4.add(adult);
            panel4.add(loap);
            panel4.add(oap);
            panel4.add(submit);

            panel5 = new JPanel(new FlowLayout());
            panel5.setBounds(240, 250, 300, 70);

            ltotalprice = new JLabel("Charge Due (£): ");
            totalprice = new JTextField("£0.00", 5);
            totalprice.setEnabled(false);
            panel5.add(ltotalprice);
            panel5.add(totalprice);

            panel6 = new JPanel(new FlowLayout());
            panel6.setBounds(0, 55, 560, 30);

            time = new JLabel("Please select a film time: ");
            time1 = new JRadioButton("13:00", true);
            time2 = new JRadioButton("15:00", false);
            time3 = new JRadioButton("17:00", false);
            time4 = new JRadioButton("19:00", false);
            time5 = new JRadioButton("21:00", false);

            ButtonGroup group = new ButtonGroup();
            group.add(time1);
            group.add(time2);
            group.add(time3);
            group.add(time4);
            group.add(time5);
            panel6.add(time);
            panel6.add(time1);
            panel6.add(time2);
            panel6.add(time3);
            panel6.add(time4);
            panel6.add(time5);
            time1.addActionListener(this);
            time2.addActionListener(this);
            time3.addActionListener(this);
            time4.addActionListener(this);
            time5.addActionListener(this);
            frame.add(title);
            frame.add(panel1);
            frame.add(panel2);
            frame.add(panel3);
            frame.add(panel4);
            frame.add(panel5);
            frame.add(panel6);
            frame.setPreferredSize(new Dimension(700, 350));
            frame.setTitle("Cinema Booking");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack(); //sets appropriate size for frame
            frame.setVisible(true); //makes frame visible


    }

    // Calculates Charge Due for current transaction.
    public double calcChargeDue(){
        DecimalFormat df = new DecimalFormat("#.##");
        double chargeDue = 0.0;
        chargeDue = (a*childticket.price) + (b*oapticket.price) + (c*adultticket.price);
        totalprice.setText("£"+df.format(chargeDue));
        return chargeDue;
    }

    // Method to check if the number of people matches the number of seats selected.
    public void check(){
        int check = coupon.size();
        int noTickets = a + b + c;
        if (check != noTickets){
            submit.setEnabled(false);
        }
        else {
            submit.setEnabled(true);
        }

    }

    // Ticket Object
    public class Ticket {

        double price;

        // Constructor
        public Ticket(double cost) {
            price = cost;
        }

        public double getTicketPrice() {
            return price;
        }

    }

    public void actionPerformed(ActionEvent e)
    {

        a = Integer.parseInt(child.getText());
        b = Integer.parseInt(oap.getText());
        c = Integer.parseInt(adult.getText());

        for(int y = 0; y < 4; y++){
            for(int x = 0; x < 4; x++){

                lselected = l[x][y].isSelected();
                rselected = r[x][y].isSelected();

                if (e.getSource() == l[x][y]) {
                    if(lselected == true){
                        coupon.add(e.getActionCommand());
                        calcChargeDue();
                        check();
                    }
                    else {
                        coupon.remove(e.getActionCommand());
                        check();
                    }
                }

                if (e.getSource() == r[x][y]) {
                    if(rselected == true){
                        coupon.add(e.getActionCommand());
                        calcChargeDue();
                        check();
                    }
                    else {
                        coupon.remove(e.getActionCommand());
                        check();
                    }
                }

                if (e.getSource() == oap){
                    calcChargeDue();
                    check();
                }

                if (e.getSource() == adult){
                    calcChargeDue();
                    check();
                }

                if (e.getSource() == child){
                    calcChargeDue();
                    check();
                }

            }
        }

        for(int y = 0; y < 2; y++){
            for(int x = 0; x < 4; x++){

                mselected = m[x][y].isSelected();

                if (e.getSource() == m[x][y]) {
                    if(mselected == true){
                        coupon.add(e.getActionCommand());
                        calcChargeDue();
                        check();
                    }
                    else {
                        coupon.remove(e.getActionCommand());
                        check();
                    }
                }
            }
        }

        if(time1 == e.getSource()){

        }

        if(time2 == e.getSource()){

        }

        if(time3 == e.getSource()){

        }

        if(time4 == e.getSource()){

        }

        if(time5 == e.getSource()){

        }

        if(submit == e.getSource()) {

            for(int y = 0; y < 4; y++){
                for(int x = 0; x < 4; x++){

                    lselected = l[x][y].isSelected();
                    rselected = r[x][y].isSelected();

                    if (lselected == true) {
                            l[x][y].setEnabled(false);
                    }

                    if (rselected == true) {
                            r[x][y].setEnabled(false);
                    }

                }
            }

            for(int y = 0; y < 2; y++){
                for(int x = 0; x < 4; x++){

                    mselected = m[x][y].isSelected();

                    if (mselected == true) {
                            m[x][y].setEnabled(false);
                    }
                }
            }

            Collections.sort(coupon);
            System.out.println("Here's your ticket:");
            System.out.println(coupon);
            System.out.println("Child: " + child.getText());
            System.out.println("Adult: " + adult.getText());
            System.out.println("OAP: " + oap.getText());
            System.out.println("Total Price: " + totalprice.getText());
            System.out.println("Thank you. Enjoy your film.");
            System.out.println(" ");
            coupon.clear();
            child.setText("0");
            adult.setText("0");
            oap.setText("0");
        }

    }

    // Main Class
    public static void main(String[] args) {
            new cinemaSystem(); //makes new ButtonGrid with 2 parameters
    }
}

相关:Java: Disable all JToggleButtons after Submission — setEnabled(false);

最佳答案

如果您已经让它在一个预订时间工作,您所需要做的就是将用于存储有关该预订时间的信息的所有数据结构加倍,以支持多个独立的预订时间。

例如,ArrayList<String> seatsAvailable = new ArrayList<String>();将变成:

Dictionary<Time, ArrayList<String> > seatsAvailable = 
    new Dictionary<Time,  ArrayList<String> >();

Time firstBooking = new Time(13,0,0);
Time secondBooking = new Time(15,0,0);

seatsAvailable.put( firstBooking , new ArrayList<String>() );
seatsAvailable.put( secondBooking , new ArrayList<String>() );

现在您可以跟踪两个完全独立的可用座位数组列表。

关于java - 多重预订系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094558/

相关文章:

algorithm - 如何擅长数据结构和分析?

java - 正则表达式匹配 7 位数字后跟 ","

java - Java中的深度递归导致堆栈溢出?

java - 使用 MVC 和 DAO 模式在 JSP 页面中的 HTML 中显示 JDBC 结果集

java - SPARQL 查询从特定 RDF 图中不返回任何内容

java - Servlet 在一些点击或时间后停止在 Tomcat 服务器上工作

java - 类型参数 T 不在类型变量 T 的范围内(Java 泛型)

c - LinkedList : Why there is need to declare a new struct node current? 如果我使用参数 head 进行跟踪,代码工作得很好吗?

c - 为什么我从 void** 初始化的结构中获取垃圾值

c++ - 合并两个堆的算法