📄 dukebakery.java
字号:
// The architecture of this program is inspired by the// AddressBook.java example in "Java-How to Program-3rd Edition"// by Deitel & Deitel, Prentice Hall 1999import java.sql.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;import java.util.*;import java.text.*;public class DukeBakery extends JFrame { private DataPanel screenvar; private JTextArea msgout; private Connection dbconn; public DukeBakery() { super( "DUKE'S BAKERY" ); // Set up GUI environment Container p = getContentPane(); screenvar = new DataPanel(); msgout = new JTextArea( 8, 40 ); p.setLayout( new FlowLayout() ); p.add( new JScrollPane( screenvar ) ); p.add( new JScrollPane(msgout) ); // Set up database connection try { String url = "jdbc:odbc:BakeryBook"; Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );//设定驱动程序库 dbconn = DriverManager.getConnection( url );//连接数据库 msgout.append( "Connection successful\n" ); } catch (ClassNotFoundException cnfex) { // process ClassNotFoundExceptions here cnfex.printStackTrace(); msgout.append( "Connection unsuccessful\n" + cnfex.toString() ); } catch ( SQLException sqlex ) { // process SQLExceptions here sqlex.printStackTrace(); msgout.append( "Connection unsuccessful\n" + sqlex.toString() ); } catch ( Exception excp ) { // process remaining Exceptions here excp.printStackTrace(); msgout.append( excp.toString() ); } // Complete GUI ButtonPanel controls = new ButtonPanel( dbconn, screenvar, msgout); p.add( controls ); RadioButtons rb = new RadioButtons( dbconn , screenvar, msgout ); p.add ( rb ); setSize( 500, 475 ); show(); } public static void main( String args[] ) { DukeBakery bake = new DukeBakery(); bake.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } ); }}class DukeOrder extends JFrame implements ActionListener { private Connection dbconn; private DataPanel screenvar; private JTextArea msgout; private boolean firsttime = true; public DukeOrder( Connection dbc, DataPanel scv, JTextArea msg ) { super( "DUKE'S BAKERY -- ORDER ENTRY" ); dbconn = dbc; screenvar = scv; msgout = msg; } public void actionPerformed( ActionEvent e) { if (firsttime) { Container cnt = getContentPane(); cnt.setLayout( new FlowLayout() ); OrderBox ob = new OrderBox(); cnt.add( ob ); JButton enterOrder = new JButton("Order"); enterOrder.addActionListener( new PlaceOrder( dbconn, screenvar, msgout, ob ) ); cnt.add( enterOrder ); setSize( 400, 200 ); firsttime = false; } show(); } }class PlaceOrder implements ActionListener { private DataPanel screenvar; private JTextArea msgout; private Connection dbconn; private OrderBox obox; public PlaceOrder( Connection dbc, DataPanel scv, JTextArea msg, OrderBox ob ) { dbconn = dbc; screenvar = scv; msgout = msg; obox = ob; } public void actionPerformed( ActionEvent e ) { boolean inputerror = false; int iwheat=0; int icake=0; int inaan=0; int ibagel=0; try { Statement statement = dbconn.createStatement(); try { iwheat = Integer.parseInt(obox.inwheat.getText() ); } catch( NumberFormatException nfe ) { inputerror = true; obox.inwheat.setText("Error--enter integer value"); } try { icake = Integer.parseInt(obox.incake.getText() ); } catch( NumberFormatException nfe ) { inputerror = true; obox.incake.setText("Error--enter integer value"); } try { inaan = Integer.parseInt(obox.innaan.getText() ); } catch( NumberFormatException nfe ) { inputerror = true; obox.innaan.setText("Error--enter integer value"); } try { ibagel = Integer.parseInt(obox.inbagel.getText() ); } catch( NumberFormatException nfe ) { inputerror = true; obox.inbagel.setText("Error -- enter integer value"); } java.util.Date date = new java.util.Date(); SimpleDateFormat fmt = new SimpleDateFormat ("yyyy.MM.dd-HH:mm z"); String dtstr = fmt.format(date); if( !screenvar.id.getText().equals("") ) { if ( !inputerror && (iwheat != 0 || icake != 0 || inaan != 0 || ibagel != 0) ) { String query = "INSERT INTO orders " + "(LinkAddrTbl,OrderDate,wheat,cake,naan,bagel)" + "VALUES ("+ screenvar.id.getText() + "," + "'" + dtstr + "'," + String.valueOf(iwheat) + "," + String.valueOf(icake) + "," + String.valueOf(inaan) + "," + String.valueOf(ibagel) + ")"; msgout.append( "\nSending query: " + dbconn.nativeSQL( query ) + "\n" ); int result = statement.executeUpdate( query ); if ( result == 1 ) msgout.append( "\nOrder Placed\n" ); else { msgout.append( "\nInsertion failed\n" ); screenvar.first.setText( "" ); screenvar.last.setText( "" ); } } else msgout.append( "\nEnter at least one numeric value " + ", then press Order\n" ); } else msgout.append( "\n *** Find data before issuing order ***\n"); statement.close(); } catch ( SQLException sqlex ) { msgout.append( sqlex.toString() ); } // clear out order input boxes after database write if (!inputerror) { obox.inwheat.setText(""); obox.incake.setText(""); obox.innaan.setText(""); obox.inbagel.setText(""); } }}class OrderHist extends JFrame implements ActionListener { private Connection dbconn; private DataPanel screenvar; private JTextArea msgout; private boolean firsttime = true; private Container c; private JScrollPane jspane; private QueryTableModel qtbl; private JTable jtbl; public OrderHist( Connection dbc, DataPanel scv, JTextArea msg ) { super( "DUKE'S BAKERY -- ORDER HISTORY" ); dbconn = dbc; screenvar = scv; msgout = msg; } public void actionPerformed( ActionEvent e) { if ( !screenvar.id.getText().equals("") ) { // Set up GUI environment if ( firsttime ) { c = getContentPane(); c.setLayout( new FlowLayout() ); qtbl = new QueryTableModel( dbconn, screenvar, msgout ); qtbl.query(); jtbl = new JTable( qtbl ); TableColumn tcol = jtbl.getColumnModel().getColumn(0); tcol.setPreferredWidth(125); jspane = new JScrollPane( jtbl ); c.add( jspane ); setSize( 500, 500 ); firsttime = false; } else { qtbl.query(); qtbl.fire(); TableColumn tcol = jtbl.getColumnModel().getColumn(0); tcol.setPreferredWidth(125); } show(); } else msgout.append( "\n ***Find data before generating Order History***\n"); }}class QueryTableModel extends AbstractTableModel { Connection dbconn; DataPanel screenvar; JTextArea msgout; Vector totalrows; String[] colheads = {"Date & Time", "Wheat Loaf", "Carrot Cake", "Naan Bread", "Bagel"}; public QueryTableModel(Connection dbc, DataPanel scv, JTextArea msg ){ dbconn = dbc; screenvar = scv; msgout = msg; totalrows = new Vector(); } public String getColumnName(int i) { return colheads[i]; } public int getColumnCount() { return 5; } public int getRowCount() { return totalrows.size(); } public Object getValueAt(int row, int col) { return ((String[])totalrows.elementAt(row))[col]; } public boolean isCellEditable(int row, int col) { return false; } public void fire() { fireTableChanged(null); } public void query() { try { Statement statement = dbconn.createStatement(); String query = "SELECT * FROM Orders " + "WHERE LinkAddrTbl =" + screenvar.id.getText() + " ORDER BY OrderDate"; msgout.append( "\nSending query: " + dbconn.nativeSQL( query ) + "\n" ); ResultSet rs = statement.executeQuery( query ); totalrows = new Vector(); while ( rs.next() ) { String[] record = new String[5]; for( int i = 0; i < 5; i++ ) { record[i] = rs.getString( i + 3 ); } totalrows.addElement( record ); } msgout.append( "\nQuery successful\n" ); statement.close(); } catch ( SQLException sqlex ) { msgout.append( sqlex.toString() ); } }}class TotalHist extends JFrame implements ActionListener { private Connection dbconn; private DataPanel screenvar; private JScrollPane orderpane; private JTextArea msgout; private JTextField outwheat, outcake, outnaan, outbagel; private boolean firsttime = true; public TotalHist( Connection dbc, DataPanel scv, JTextArea msg ) { super( "DUKE'S BAKERY -- TOTAL ORDERS" ); dbconn = dbc; screenvar = scv; msgout = msg; } public void actionPerformed( ActionEvent e) { // Set up GUI environment if ( firsttime ) { Container c = getContentPane(); c.setLayout(new GridLayout(4,2) ); JLabel pwheat = new JLabel( "Total number of Wheat Loaves ordered:" ); c.add( pwheat ); outwheat = new JTextField( 10 ); c.add( outwheat ); pwheat.setLabelFor( outwheat ); JLabel pcake = new JLabel( "Total number of Carrot Cakes ordered:"); c.add( pcake); outcake = new JTextField( 10 ); c.add( outcake ); pcake.setLabelFor( outcake ); JLabel pnaan = new JLabel( "Total number of Naan Bread ordered:" ); c.add( pnaan ); outnaan = new JTextField( 10 ); c.add( outnaan ); pnaan.setLabelFor( outnaan ); JLabel pbagel = new JLabel( "Total number of Bagels ordered:" ); c.add( pbagel ); outbagel = new JTextField( 10 ); c.add( outbagel ); pbagel.setLabelFor( outbagel ); setSize( 550, 130 ); firsttime = false; } show(); try { Statement statement = dbconn.createStatement(); String query = "SELECT * FROM Orders"; msgout.append( "\nSending query: " + dbconn.nativeSQL( query ) + "\n" ); ResultSet rs = statement.executeQuery( query ); display( rs ); msgout.append( "\nQuery successful\n" ); statement.close(); } catch ( SQLException sqlex ) { sqlex.printStackTrace(); } } // Display results of query public void display( ResultSet rs ) { int accwheat=0; int acccake=0; int accnaan=0; int accbagel=0; try { while ( rs.next() ) { // compute totals date,wheat,carrot,naan,bagel from database accwheat += rs.getInt(4); acccake += rs.getInt(5); accnaan += rs.getInt(6); accbagel += rs.getInt(7); } } catch ( SQLException sqlex ) { msgout.append( sqlex.toString() ); } outwheat.setText(String.valueOf(accwheat)); outcake.setText(String.valueOf(acccake)); outnaan.setText(String.valueOf(accnaan)); outbagel.setText(String.valueOf(accbagel)); }}class OrderBox extends JPanel { JTextField inwheat, incake, innaan, inbagel; public OrderBox() {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -