📄 restaurantbillcalculator.java
字号:
// Exercise 26.16: RestaurantBillCalculator.java
// Calculates a table's bill.
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import javax.swing.*;
public class RestaurantBillCalculator extends JFrame
{
// JLabel for Restaurant
private JLabel restaurantJLabel;
// JPanel for Waiter Information
private JPanel waiterJPanel;
// JLabel and JComboBox for Table Number
private JLabel tableNumberJLabel;
private JComboBox tableNumberJComboBox;
// JLabel and JTextField for Waiter Name
private JLabel waiterNameJLabel;
private JTextField waiterNameJTextField;
// JPanel for Menu Items
private JPanel menuItemsJPanel;
// JLabel and JComboBox for Beverage
private JLabel beverageJLabel;
private JComboBox beverageJComboBox;
// JLabel and JComboBox for appetizer
private JLabel appetizerJLabel;
private JComboBox appetizerJComboBox;
// JLabel and JComboBox for Main Course
private JLabel mainCourseJLabel;
private JComboBox mainCourseJComboBox;
// JLabel and JComboBox for Dessert
private JLabel dessertJLabel;
private JComboBox dessertJComboBox;
// JLabel and JTextField for Subtotal
private JLabel subtotalJLabel;
private JTextField subtotalJTextField;
// JLabel and JTextField for Tax
private JLabel taxJLabel;
private JTextField taxJTextField;
// JLabel and JTextField for Total
private JLabel totalJLabel;
private JTextField totalJTextField;
// JButton for Save Table
private JButton saveTableJButton;
// JButton for Calculate Bill
private JButton calculateBillJButton;
// JButton for Pay Bill
private JButton payBillJButton;
// constant for tax rate
private final static double TAX_RATE = 0.05;
// declare instance variables for database processing
private Connection myConnection;
private Statement myStatement;
private ResultSet myResultSet;
// other instance variables
private ArrayList billItems = new ArrayList();
private double subtotal;
// constructor
public RestaurantBillCalculator(
String databaseDriver, String databaseURL )
{
// make database connection
try
{
// load Cloudscape driver
Class.forName( databaseDriver );
// connect to database
myConnection = DriverManager.getConnection( databaseURL );
// create statement
myStatement = myConnection.createStatement();
}
catch ( SQLException exception )
{
exception.printStackTrace();
}
catch ( ClassNotFoundException exception )
{
exception.printStackTrace();
}
// set up GUI
createUserInterface();
} // end constructor
// create and position GUI components; register event handlers
private void createUserInterface()
{
// get content pane for attaching GUI components
Container contentPane = getContentPane();
// enable explicit positioning of GUI components
contentPane.setLayout( null );
// set up restaurantJLabel
restaurantJLabel = new JLabel();
restaurantJLabel.setBounds( 80, 8, 128, 24 );
restaurantJLabel.setText( "Restaurant" );
restaurantJLabel.setFont(
new Font( "SansSerif", Font.BOLD, 16 ) );
contentPane.add( restaurantJLabel );
// set up waiterJPanel
createWaiterJPanel();
contentPane.add( waiterJPanel );
// set up menuItemsJPanel
createMenuItemsJPanel();
contentPane.add( menuItemsJPanel );
// set up subtotalJLabel
subtotalJLabel = new JLabel();
subtotalJLabel.setBounds( 15, 340, 56, 16 );
subtotalJLabel.setText( "Subtotal:" );
contentPane.add( subtotalJLabel );
// set up subtotalJTextField
subtotalJTextField = new JTextField();
subtotalJTextField.setBounds( 70, 340, 80, 20 );
subtotalJTextField.setEditable( false );
subtotalJTextField.setBorder(
BorderFactory.createLoweredBevelBorder() );
subtotalJTextField.setHorizontalAlignment( JTextField.RIGHT );
contentPane.add( subtotalJTextField );
// set up taxJLabel
taxJLabel = new JLabel();
taxJLabel.setBounds( 15, 372, 56, 16 );
taxJLabel.setText( "Tax:" );
contentPane.add( taxJLabel );
// set up taxJTextField
taxJTextField = new JTextField();
taxJTextField.setBounds( 70, 372, 80, 20 );
taxJTextField.setEditable( false );
taxJTextField.setBorder(
BorderFactory.createLoweredBevelBorder() );
taxJTextField.setHorizontalAlignment( JTextField.RIGHT );
contentPane.add( taxJTextField );
// set up totalJLabel
totalJLabel = new JLabel();
totalJLabel.setBounds( 15, 404, 56, 16 );
totalJLabel.setText( "Total:" );
contentPane.add( totalJLabel );
// set up totalJTextField
totalJTextField = new JTextField();
totalJTextField.setBounds( 70, 404, 80, 20 );
totalJTextField.setEditable( false );
totalJTextField.setBorder(
BorderFactory.createLoweredBevelBorder() );
totalJTextField.setHorizontalAlignment( JTextField.RIGHT );
contentPane.add( totalJTextField );
// set up saveTableJButton
saveTableJButton = new JButton();
saveTableJButton.setBounds( 167, 328, 90, 24 );
saveTableJButton.setText( "Save Table" );
saveTableJButton.setBorder(
BorderFactory.createRaisedBevelBorder() );
saveTableJButton.setEnabled( false );
contentPane.add( saveTableJButton );
saveTableJButton.addActionListener(
new ActionListener() // anonymous inner class
{
// event handler called when saveTableJButton is clicked
public void actionPerformed( ActionEvent event )
{
saveTableJButtonActionPerformed( event );
}
} // end annoymous inner class
); // end addActionListener
// set up calculateBillJButton
calculateBillJButton = new JButton();
calculateBillJButton.setBounds( 167, 360, 90, 24 );
calculateBillJButton.setText( "Calculate Bill" );
calculateBillJButton.setBorder(
BorderFactory.createRaisedBevelBorder() );
calculateBillJButton.setEnabled( false );
contentPane.add( calculateBillJButton );
calculateBillJButton.addActionListener(
new ActionListener() // anonymous inner class
{
// event handler called when calculateBillJButton
// is clicked
public void actionPerformed( ActionEvent event )
{
calculateBillJButtonActionPerformed( event );
}
} // end anonymous inner class
); // end addActionListener
// set up payBillJButton
payBillJButton = new JButton();
payBillJButton.setBounds( 167, 392, 90, 24 );
payBillJButton.setText( "Pay Bill" );
payBillJButton.setBorder(
BorderFactory.createRaisedBevelBorder() );
payBillJButton.setEnabled( false );
contentPane.add( payBillJButton );
payBillJButton.addActionListener(
new ActionListener() // anonymous inner class
{
// event handler called when payBillJButton is clicked
public void actionPerformed( ActionEvent event )
{
payBillJButtonActionPerformed( event );
}
} // end anonymous inner class
); // end addActionListener
// set properties of application's window
setTitle( "Restaurant Bill Calculator" ); // set window title
setSize( 280, 500 ); // set window size
setVisible( true ); // display window
// ensure database connection is closed
// when user quits application
addWindowListener(
new WindowAdapter() // anonymous inner class
{
// event handler called when close button is clicked
public void windowClosing( WindowEvent event )
{
frameWindowClosing( event );
}
} // end anonymous inner class
); // end addWindowListener
} // end method createUserInterface
// set up waiterJPanel
private void createWaiterJPanel()
{
waiterJPanel = new JPanel();
waiterJPanel.setBounds( 20, 48, 232, 88 );
waiterJPanel.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(),
"Waiter Information" ) );
waiterJPanel.setLayout( null );
// set up tableNumberJLabel
tableNumberJLabel = new JLabel();
tableNumberJLabel.setBounds( 35, 24, 90, 16 );
tableNumberJLabel.setText( "Table number:" );
waiterJPanel.add( tableNumberJLabel );
// set up tableNumberJTextField
tableNumberJComboBox = new JComboBox();
tableNumberJComboBox.setBounds( 154, 24, 60, 25 );
waiterJPanel.add( tableNumberJComboBox );
tableNumberJComboBox.addItemListener(
new ItemListener() // anonymous inner class
{
// event handler called when item in tableNumberJComboBox
// is selected
public void itemStateChanged( ItemEvent event )
{
tableNumberJComboBoxItemStateChanged( event );
}
} // end anonymous inner class
); // end addItemListener
// add numbers to tableNumberJComboBox
tableNumberJComboBox.addItem( "" );
loadTableNumbers();
// set up waiterNameJLabel
waiterNameJLabel = new JLabel();
waiterNameJLabel.setBounds( 35, 56, 90, 16 );
waiterNameJLabel.setText( "Waiter name:" );
waiterJPanel.add( waiterNameJLabel );
// set up waiterNameJTextField
waiterNameJTextField = new JTextField();
waiterNameJTextField.setBounds( 128, 56, 88, 21 );
waiterNameJTextField.setEditable( false );
waiterNameJTextField.setBorder(
BorderFactory.createLoweredBevelBorder() );
waiterJPanel.add( waiterNameJTextField );
} // end method createWaiterJPanel
// set up menuItemsJPanel
private void createMenuItemsJPanel()
{
menuItemsJPanel = new JPanel();
menuItemsJPanel.setBounds( 20, 152, 232, 152 );
menuItemsJPanel.setEnabled( false );
menuItemsJPanel.setBorder( BorderFactory.createTitledBorder(
BorderFactory.createEtchedBorder(), "Menu Items" ) );
menuItemsJPanel.setLayout( null );
// set up beverageJLabel
beverageJLabel = new JLabel();
beverageJLabel.setBounds( 8, 24, 80, 24 );
beverageJLabel.setText( "Beverage:" );
menuItemsJPanel.add( beverageJLabel );
// set up beverageJComboBox
beverageJComboBox = new JComboBox();
beverageJComboBox.setBounds( 88, 24, 128, 25 );
beverageJComboBox.setEnabled( false );
menuItemsJPanel.add( beverageJComboBox );
beverageJComboBox.addItemListener(
new ItemListener() // anonymous inner class
{
// event handler called when item in beverageJComboBox
// is selected
public void itemStateChanged( ItemEvent event )
{
beverageJComboBoxItemStateChanged( event );
}
} // end anonymous inner class
); // end addItemListener
// add items to beverageJComboBox
beverageJComboBox.addItem( "" );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -