火车售票系统

  • 1. 登陆
    • 1.1登录界面显示
    • 1.2 登陆功能实现
    • 1.3登陆功能数据库实现
  • 2. 站点查询
    • 2.1站点查询界面显示
    • 2.2 站点查询功能实现
    • 2.3 站点查询功能数据库实现
  • 3. 售票类型增加
    • 3.1 售票类型界面显示
    • 3.2 售票类型功能界面实现
    • 3.3 售票类型功能数据库实现
  • 4. 售票管理
    • 4.1售票管理界面显示
    • 4.2 售票管理功能实现
    • 4.3 售票管理功能数据库实现
  • 5. 数据库部分
    • 5.1数据库部分展示
    • 6 项目结构
    • 结束

1. 登陆

1.1登录界面显示

1.2 登陆功能实现

/** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/
package view;import dao.connectDao;
import dao.StringUil;
import dao.UserDao;
import model.User;import javax.swing.*;
import java.sql.Connection;/**** @author Administrator*/
public class loginFrame extends javax.swing.JFrame {private connectDao conn=new connectDao();private UserDao userDao=new UserDao();/*** Creates new form NewJFrame*/public loginFrame() {initComponents();this.setLocationRelativeTo(null);}/*** This method is called from within the constructor to initialize the form.* WARNING: Do NOT modify this code. The content of this method is always* regenerated by the Form Editor.*/@SuppressWarnings("unchecked")// <editor-fold defaultstate="collapsed" desc="Generated Code">private void initComponents() {jLabel1 = new javax.swing.JLabel();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();User_name_txt = new javax.swing.JTextField();User_password_txt = new javax.swing.JTextField();Button_log = new javax.swing.JButton();Button_register = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);setTitle("管理员登录");setResizable(false);jLabel1.setFont(new java.awt.Font("宋体", 1, 24)); // NOI18NjLabel1.setText("火车售票系统");jLabel1.setToolTipText("");jLabel2.setText("用户名:");jLabel3.setText("密 码:");User_name_txt.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {User_name_txtActionPerformed(evt);}});Button_log.setText("登录");Button_log.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {Button_logActionPerformed(evt);}});Button_register.setText("注册");Button_register.setToolTipText("");Button_register.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {Button_zhongzhiActionPerformed(evt);}});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGap(80, 80, 80).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(Button_log, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(Button_register, javax.swing.GroupLayout.PREFERRED_SIZE, 91, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(83, 83, 83)).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup(layout.createSequentialGroup().addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(User_password_txt, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(User_name_txt))).addGap(69, 69, 69)))).addGroup(layout.createSequentialGroup().addGap(117, 117, 117).addComponent(jLabel1).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(52, 52, 52).addComponent(jLabel1).addGap(32, 32, 32).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2).addComponent(User_name_txt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(43, 43, 43).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel3).addComponent(User_password_txt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(Button_log, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(Button_register, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(40, 40, 40)));pack();}// </editor-fold>private void Button_logActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String userName=this.User_name_txt.getText();String password=this.User_password_txt.getText();if(StringUil.isEmpty(userName)) {JOptionPane.showMessageDialog(null,"用户名不能为空");return;}if(StringUil.isEmpty(password)){JOptionPane.showMessageDialog(null,"密码不不能为空");return;}User user=new User(userName,password);Connection con=null;try {User currentUser=userDao.login(conn.getCon(),user);if(currentUser!=null){dispose();new MainFrame().setVisible(true);}else{JOptionPane.showMessageDialog(null,"用户名或密码错误!");}} catch (Exception e) {e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}private void Button_zhongzhiActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:this.dispose();new registerFrame().setVisible(true);}private void User_name_txtActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:}public static void main(String args[]) {java.awt.EventQueue.invokeLater(new Runnable() {public void run() {new loginFrame().setVisible(true);}});}private javax.swing.JButton Button_log;private javax.swing.JButton Button_register;private javax.swing.JTextField User_name_txt;private javax.swing.JTextField User_password_txt;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;// End of variables declaration
}

1.3登陆功能数据库实现

package dao;import model.User;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class UserDao {public User login(Connection con,User user) throws Exception{User resultUser=null;String sql="select * from t_user where username=? and password=?";PreparedStatement pstme = con.prepareStatement(sql);pstme.setString(1,user.getName());pstme.setString(2,user.getPassword());ResultSet rs=pstme.executeQuery();if(rs.next()){resultUser=new User();resultUser.setId(rs.getInt("id"));resultUser.setName(rs.getString("username"));resultUser.setName(rs.getString("password"));}return resultUser;}public int register(Connection con,User user) throws  Exception{String sql="insert into t_user values(null,?,?,?,?)";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1, user.getName());pstmt.setString(2,user.getPassword());pstmt.setString(3,user.getQQ());pstmt.setString(4,user.getIphone());return pstmt.executeUpdate();}
}

2. 站点查询

2.1站点查询界面显示

2.2 站点查询功能实现

/** To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates* and open the template in the editor.*/
package view;import dao.connectDao;
import dao.StringUil;
import dao.TricketTypeDao;
import model.TricketType;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;public class typeSelectFrame extends javax.swing.JInternalFrame {private connectDao conn=new connectDao();private TricketTypeDao tricketTypeDao=new TricketTypeDao();public typeSelectFrame() {initComponents();}@SuppressWarnings("unchecked")private void initComponents() {station_inframe = new JScrollPane();stationTypeTable = new JTable();jLabel1 = new JLabel();stationName = new JTextField();selectButton = new JButton();jPanel1 = new JPanel();jLabel2 = new JLabel();idTxt = new JTextField();jLabel3 = new JLabel();stationTxt = new JTextField();jLabel4 = new JLabel();jScrollPane1 = new JScrollPane();describeTxt = new JTextArea();updateButton = new JButton();deleteButton = new JButton();setClosable(true);setIconifiable(true);setTitle("火车站点查询");setPreferredSize(new java.awt.Dimension(523, 600));deleteButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {resetValue();}});stationTypeTable.addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent e) {stationTypeTableMousePressed(e);}});updateButton.addActionListener(this::updateButtonActionPerformed);stationTypeTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {{null, null, null},{null, null, null},{null, null, null},{null, null, null}},new String [] {"车站id", "站点名称", "站点信息"}));station_inframe.setViewportView(stationTypeTable);jLabel1.setText("站点名称:");selectButton.setText("查询");selectButton.addActionListener(this::selectButtonActionPerformed);jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("表单操作"));jLabel2.setText("编号:");idTxt.setEditable(false);jLabel3.setText("站点名称:");jLabel4.setText("描述:");describeTxt.setColumns(20);describeTxt.setRows(5);jScrollPane1.setViewportView(describeTxt);updateButton.setText("更新");deleteButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {deleteButtonActionPerformed(evt);}});deleteButton.setText("删除");javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);jPanel1.setLayout(jPanel1Layout);jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup().addContainerGap(34, Short.MAX_VALUE).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jLabel4).addComponent(jLabel2)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addGroup(jPanel1Layout.createSequentialGroup().addComponent(idTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jLabel3).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(stationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)).addComponent(jScrollPane1)).addContainerGap()).addGroup(jPanel1Layout.createSequentialGroup().addGap(61, 61, 61).addComponent(updateButton).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(deleteButton).addGap(50, 50, 50)));jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addGap(15, 15, 15).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2).addComponent(idTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel3).addComponent(stationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel4).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 11, Short.MAX_VALUE).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(updateButton).addComponent(deleteButton)).addContainerGap()));javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addGroup(layout.createSequentialGroup().addGap(70, 70, 70).addComponent(jLabel1).addGap(18, 18, 18).addComponent(stationName, javax.swing.GroupLayout.PREFERRED_SIZE, 203, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 44, Short.MAX_VALUE).addComponent(selectButton)).addGroup(layout.createSequentialGroup().addGap(0, 0, Short.MAX_VALUE).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(station_inframe, javax.swing.GroupLayout.PREFERRED_SIZE, 384, javax.swing.GroupLayout.PREFERRED_SIZE)))).addGap(55, 55, 55)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(33, 33, 33).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(stationName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(selectButton)).addGap(32, 32, 32).addComponent(station_inframe, javax.swing.GroupLayout.PREFERRED_SIZE, 178, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(26, Short.MAX_VALUE)));pack();}private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) {String id=idTxt.getText();String station =stationTxt.getText();String describe=describeTxt.getText();if(StringUil.isEmpty(id)){JOptionPane.showMessageDialog(null,"请选择需要修改的数据");return;}System.out.println(Integer.parseInt(id)+"   "+station+ "   "+ describe);TricketType trick=new TricketType(Integer.parseInt(id),station,describe);System.out.println(trick.getId()+"  "+trick.getStation()+"  "+trick.getDescribe());Connection con=null;try {con=conn.getCon();int number=tricketTypeDao.update(con,trick);if(number==1) {JOptionPane.showMessageDialog(null,"修改成功");resetValue();this.fillTable(new TricketType());}else{JOptionPane.showMessageDialog(null,"修改失败1");}} catch (Exception ex) {ex.printStackTrace();JOptionPane.showMessageDialog(null,"修改失败2");}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}private void resetValue(){this.idTxt.setText("");this.describeTxt.setText("");this.stationTxt.setText("");}private void stationTypeTableMousePressed(MouseEvent e){int row = stationTypeTable.getSelectedRow();idTxt.setText((String) stationTypeTable.getValueAt(row,0));stationTxt.setText((String)stationTypeTable.getValueAt(row,1));describeTxt.setText((String)stationTypeTable.getValueAt(row,2));}private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {String s_stationName=this.stationName.getText();TricketType tricket_type=new TricketType();tricket_type.setStation(s_stationName);this.fillTable(tricket_type);}private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {String id =idTxt.getText();if(StringUil.isEmpty(id)){JOptionPane.showMessageDialog(null,"请选择需要删除的记录");return;}int n=JOptionPane.showConfirmDialog(null,"确定要删除这条记录吗?");if(n==0){Connection con=null;try {con=conn.getCon();int deleteNum=tricketTypeDao.delete(con,id);if(deleteNum==1){JOptionPane.showMessageDialog(null,"删除成功");this.resetValue();this.fillTable(new TricketType());}else{JOptionPane.showMessageDialog(null,"删除失败");}} catch (Exception e) {JOptionPane.showMessageDialog(null,"删除失败");e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}}private javax.swing.JButton deleteButton;private javax.swing.JTextArea describeTxt;private javax.swing.JTextField idTxt;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JLabel jLabel4;private javax.swing.JPanel jPanel1;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTextField stationName;private javax.swing.JButton selectButton;private javax.swing.JTextField stationTxt;private javax.swing.JTable stationTypeTable;private javax.swing.JScrollPane station_inframe;private javax.swing.JButton updateButton;private void fillTable(TricketType tricket_type){DefaultTableModel dtm =(DefaultTableModel) stationTypeTable.getModel();dtm.setRowCount(0);Connection con=null;try{con=conn.getCon();ResultSet rs=tricketTypeDao.list(con,tricket_type);while(rs.next()){Vector v=new Vector();v.add(rs.getString("id"));v.add(rs.getString("station"));v.add(rs.getString("describee"));dtm.addRow(v);}}catch (Exception e){e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}
}

2.3 站点查询功能数据库实现

package dao;import model.Tricket;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Objects;public class TricketDao {public static int add(Connection con, Tricket tricket) throws Exception{String sql ="insert into tricket values(?,?,?,?,?,?,?,?,?,?)";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1,tricket.getId());pstmt.setInt(2,tricket.getStartID());pstmt.setString(3,tricket.getStartStation());pstmt.setInt(4,tricket.getEndID());pstmt.setString(5,tricket.getEndStation());pstmt.setString(6,tricket.getSeat());pstmt.setFloat(7,tricket.getPrice());pstmt.setDate(8,tricket.getStartTime());pstmt.setDate(9,tricket.getEndTime());pstmt.setString(10,tricket.getRemarks());return pstmt.executeUpdate();}public ResultSet list(Connection con,Tricket tricket) throws Exception{StringBuffer srb= new StringBuffer("select * from tricket b,station_inform c where b.startStation=c.station");if(tricket.getId()!=-1 && tricket.getId()!=0){srb.append(" and b.id="+tricket.getId());}if(StringUil.isNotEmpty(tricket.getStartStation()) && !Objects.equals(tricket.getStartStation(), "请选择...")){srb.append(" and b.startStation like '%"+tricket.getStartStation()+"%'");}if(StringUil.isNotEmpty(tricket.getEndStation()) && !Objects.equals(tricket.getEndStation(), "请选择...")){srb.append(" and b.endStation like '%"+tricket.getEndStation()+"%'");}PreparedStatement pstmt = con.prepareStatement(srb.toString());//System.out.println(srb);return pstmt.executeQuery();}public int delete(Connection con,String id) throws Exception{String sql ="delete from tricket where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,id);return pstmt.executeUpdate();}public static int update(Connection con, Tricket tricket) throws Exception{String sql ="update tricket set startStation=?," +"endStation=?,seat=?,price=?,startTime=?,arriveTime=?," +"remarks=? where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,tricket.getStartStation());pstmt.setString(2,tricket.getEndStation());pstmt.setString(3,tricket.getSeat());pstmt.setFloat(4,tricket.getPrice());pstmt.setDate(5,tricket.getStartTime());pstmt.setDate(6,tricket.getEndTime());pstmt.setString(7,tricket.getRemarks());pstmt.setInt(8,tricket.getId());return pstmt.executeUpdate();}
}

3. 售票类型增加

3.1 售票类型界面显示

3.2 售票类型功能界面实现


package view;import dao.StringUil;
import dao.TricketDao;
import dao.TricketTypeDao;
import dao.connectDao;
import model.Tricket;
import model.TricketType;import javax.swing.*;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.text.ParseException;public class tricketAddInterFrame extends javax.swing.JInternalFrame {public tricketAddInterFrame() {initComponents();}private JComboBox<TricketType> endStationBox;private javax.swing.JComboBox<String> seatBox;private JComboBox<TricketType> startStationBox;private connectDao conn=new connectDao();private TricketTypeDao tricketTypeDao=new TricketTypeDao();private TricketDao tricketdao=new TricketDao();@SuppressWarnings("unchecked")private void initComponents() {jLabel1 = new javax.swing.JLabel();TricketIDTxt = new javax.swing.JTextField();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();jLabel4 = new javax.swing.JLabel();jLabel5 = new javax.swing.JLabel();jLabel6 = new javax.swing.JLabel();jLabel7 = new javax.swing.JLabel();startTimetxt = new javax.swing.JTextField();endTimeTxt = new javax.swing.JTextField();jScrollPane1 = new javax.swing.JScrollPane();remarkTxt = new javax.swing.JTextArea();jLabel8 = new javax.swing.JLabel();startStationBox = new javax.swing.JComboBox<TricketType>();endStationBox = new JComboBox<TricketType>();seatBox = new javax.swing.JComboBox<>();jLabel9 = new javax.swing.JLabel();priceTxt = new javax.swing.JTextField();insertButton = new javax.swing.JButton();receiveButton = new javax.swing.JButton();setClosable(true);setIconifiable(true);setTitle("车票添加");jLabel1.setText("车次编号:");jLabel2.setText("出发站点:");jLabel3.setText("到达站点:");jLabel4.setText("座位信息:");jLabel5.setText("发车时间:");jLabel6.setText("到达时间:");jLabel7.setText("备  注:");remarkTxt.setColumns(20);remarkTxt.setRows(5);jScrollPane1.setViewportView(remarkTxt);jLabel8.setFont(new java.awt.Font("华文行楷", 1, 24)); // NOI18NjLabel8.setText("车票信息填写");startStationBox.setModel(new javax.swing.DefaultComboBoxModel<TricketType>(new TricketType[] { }));startStationBox.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {startStationBoxActionPerformed(evt);}});endStationBox.setModel(new javax.swing.DefaultComboBoxModel<TricketType>(new TricketType[] {  }));endStationBox.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {endStationBoxActionPerformed(evt);}});seatBox.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "硬座", "软座", "硬卧", "软卧" }));seatBox.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {seatActionPerformed(evt);}});jLabel9.setText("票   价:");insertButton.setText("添加");insertButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {try {insertButtonActionPerformed(evt);} catch (ParseException e) {e.printStackTrace();}}});receiveButton.setText("重置");receiveButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {receiveButtonActionPerformed(evt);}});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(146, 146, 146).addComponent(jLabel8)).addGroup(layout.createSequentialGroup().addGap(48, 48, 48).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(TricketIDTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 273, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(layout.createSequentialGroup().addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel2).addComponent(jLabel4)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(startStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jLabel3)).addGroup(layout.createSequentialGroup().addComponent(seatBox, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(jLabel9))).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(priceTxt).addComponent(endStationBox, 0, 90, Short.MAX_VALUE))).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false).addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup().addComponent(jLabel5).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(startTimetxt)).addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup().addComponent(jLabel6).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(endTimeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 273, javax.swing.GroupLayout.PREFERRED_SIZE))).addGroup(layout.createSequentialGroup().addComponent(jLabel7).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addGroup(layout.createSequentialGroup().addComponent(insertButton).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(receiveButton)).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 271, javax.swing.GroupLayout.PREFERRED_SIZE)))))).addContainerGap(49, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup().addGap(20, 20, 20).addComponent(jLabel8).addGap(26, 26, 26).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel1).addComponent(TricketIDTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel2).addComponent(startStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel3).addComponent(endStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel4).addComponent(seatBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel9).addComponent(priceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel5).addComponent(startTimetxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel6).addComponent(endTimeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(jLabel7).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(insertButton).addComponent(receiveButton)).addContainerGap(70, Short.MAX_VALUE)));pack();fillstartStationBox();}private  void fillstartStationBox(){Connection con=null;TricketType tricketType=new TricketType();try {con=conn.getCon();ResultSet rs =TricketTypeDao.list(con,new TricketType());while(rs.next()){tricketType=new TricketType();tricketType.setId(rs.getInt("id"));tricketType.setStation(rs.getString("station"));this.startStationBox.addItem(tricketType);this.endStationBox.addItem(tricketType);}} catch (Exception e) {e.printStackTrace();}}private void startStationBoxActionPerformed(java.awt.event.ActionEvent evt) {}private void endStationBoxActionPerformed(java.awt.event.ActionEvent evt) {}private void seatActionPerformed(java.awt.event.ActionEvent evt) {}private void insertButtonActionPerformed(java.awt.event.ActionEvent evt) throws ParseException {String trickID = TricketIDTxt.getText();String price = priceTxt.getText();String remarks = remarkTxt.getText();if (StringUil.isEmpty(trickID)) {JOptionPane.showMessageDialog(null,"车次编号不能为空!!!");return;}else if(StringUil.isEmpty(price)) {JOptionPane.showMessageDialog(null,"车票价格不能为空!!!");return;}else if(StringUil.isEmpty(startTimetxt.getText())) {JOptionPane.showMessageDialog(null,"发车时间不能为空!!!");return;}else if(StringUil.isEmpty(endTimeTxt.getText())) {JOptionPane.showMessageDialog(null,"到站时间不能为空!!!");return;}java.sql.Date endTime = Date.valueOf(endTimeTxt.getText());java.sql.Date startTime = Date.valueOf(startTimetxt.getText());String seatt=(String)seatBox.getSelectedItem();TricketType tricketType=(TricketType) startStationBox.getSelectedItem();TricketType tricketType1=(TricketType) endStationBox.getSelectedItem();assert tricketType != null;assert tricketType1 != null;if(tricketType.getId()==tricketType1.getId()){JOptionPane.showMessageDialog(null,"出发地与目的地相同,请重新选择!!");return;}Tricket tricket=new Tricket(Integer.parseInt(trickID),tricketType.getId(),tricketType.getStation(),tricketType1.getId(),tricketType1.getStation(),seatt,Float.parseFloat(price),startTime,endTime,remarks);Connection con=null;try {con=conn.getCon();int addNum=TricketDao.add(con,tricket);if(addNum==1){JOptionPane.showMessageDialog(null,"车票添加成功");resetValue();}else{JOptionPane.showMessageDialog(null,"车票添加失败!!");}} catch (Exception e) {JOptionPane.showMessageDialog(null,"车票添加失败!!");e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {JOptionPane.showMessageDialog(null,"数据库关闭失败!!");e.printStackTrace();}}}private void resetValue(){this.remarkTxt.setText("");this.endTimeTxt.setText("");this.priceTxt.setText("");this.TricketIDTxt.setText("");this.startTimetxt.setText("");if(this.endStationBox.getItemCount()>0){this.endStationBox.setSelectedIndex(0);}if(this.startStationBox.getItemCount()>0){this.startStationBox.setSelectedIndex(0);}if(this.seatBox.getItemCount()>0){this.seatBox.setSelectedIndex(0);}}private void receiveButtonActionPerformed(java.awt.event.ActionEvent evt) {resetValue();}private javax.swing.JTextField TricketIDTxt;private javax.swing.JTextField endTimeTxt;private javax.swing.JButton insertButton;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JLabel jLabel4;private javax.swing.JLabel jLabel5;private javax.swing.JLabel jLabel6;private javax.swing.JLabel jLabel7;private javax.swing.JLabel jLabel8;private javax.swing.JLabel jLabel9;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTextArea remarkTxt;private javax.swing.JTextField priceTxt;private javax.swing.JButton receiveButton;private javax.swing.JTextField startTimetxt;// End of variables declaration
}

3.3 售票类型功能数据库实现

package dao;import model.TricketType;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class TricketTypeDao {public int add(Connection con, TricketType tricket_type) throws Exception{String sql="insert into station_inform values(null,?,?)";PreparedStatement pstmt =con.prepareStatement(sql);System.out.println(tricket_type.getStation()+"  "+tricket_type.getDescribe());pstmt.setString(1,tricket_type.getStation());pstmt.setString(2,tricket_type.getDescribe());return pstmt.executeUpdate();}public static ResultSet list(Connection con, TricketType tricket_type) throws Exception {StringBuffer strb =new StringBuffer("select * from station_inform");if(StringUil.isNotEmpty(tricket_type.getStation())){strb.append(" and station like '%"+tricket_type.getStation()+"%'");}PreparedStatement pstm=con.prepareStatement(strb.toString().replaceFirst("and","where"));return pstm.executeQuery();}public int delete(Connection con,String id) throws Exception{String sql="delete from station_inform where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,id);return pstmt.executeUpdate();}public int update(Connection con, TricketType tricket)throws Exception{String sql="Update station_inform set station=?,describee=? where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,tricket.getStation());pstmt.setString(2,tricket.getDescribe());pstmt.setInt(3,tricket.getId());return pstmt.executeUpdate();}
}

4. 售票管理

4.1售票管理界面显示

4.2 售票管理功能实现


package view;import dao.StringUil;
import dao.TricketDao;
import dao.TricketTypeDao;
import dao.connectDao;
import model.Tricket;
import model.TricketType;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.util.Vector;public class tricketSelectFrame extends javax.swing.JInternalFrame {private connectDao conn=new connectDao();private TricketTypeDao tricketTydao=new TricketTypeDao();private TricketDao tricketdao=new TricketDao();public tricketSelectFrame() {initComponents();}private JComboBox<TricketType> s_endStationBox;private JComboBox<TricketType> s_startStationBox;private javax.swing.JTextField s_tricketID;private javax.swing.JTable resultTable;@SuppressWarnings("unchecked")private void initComponents() {jScrollPane1 = new javax.swing.JScrollPane();resultTable = new javax.swing.JTable();jPanel1 = new javax.swing.JPanel();jLabel1 = new javax.swing.JLabel();s_tricketID = new javax.swing.JTextField();jLabel2 = new javax.swing.JLabel();jLabel3 = new javax.swing.JLabel();selectButton = new javax.swing.JButton();s_startStationBox = new JComboBox<TricketType>();s_endStationBox = new javax.swing.JComboBox<TricketType>();jPanel2 = new javax.swing.JPanel();jLabel4 = new javax.swing.JLabel();tricketIdTxt = new javax.swing.JTextField();jLabel5 = new javax.swing.JLabel();startStationTxt = new javax.swing.JTextField();jLabel6 = new javax.swing.JLabel();endStationTxt = new javax.swing.JTextField();jLabel7 = new javax.swing.JLabel();seatTypeTxt = new javax.swing.JTextField();jLabel8 = new javax.swing.JLabel();priceTxt = new javax.swing.JTextField();jLabel9 = new javax.swing.JLabel();startTimeTxt = new javax.swing.JTextField();jLabel10 = new javax.swing.JLabel();endTimeTxt = new javax.swing.JTextField();jLabel11 = new javax.swing.JLabel();remarksTxt = new javax.swing.JTextField();updateButton = new javax.swing.JButton();deleteButton = new javax.swing.JButton();setClosable(true);setIconifiable(true);setTitle("车票管理");resultTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] {{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null},{null, null, null, null, null, null, null, null}},new String [] {"车次编号", "出发站名", "目的站名", "座位类型", "车票价格", "发车时间", "到达时间", "备注"}) {Class[] types = new Class [] {java.lang.Object.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.Float.class, java.lang.Object.class, java.lang.Object.class, java.lang.String.class};boolean[] canEdit = new boolean [] {false, false, false, false, false, false, false, false};public Class getColumnClass(int columnIndex) {return types [columnIndex];}public boolean isCellEditable(int rowIndex, int columnIndex) {return canEdit [columnIndex];}});resultTable.addMouseListener(new MouseAdapter() {@Overridepublic void mousePressed(MouseEvent evt) {resultTableMousePressed(evt);}});jScrollPane1.setViewportView(resultTable);jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("搜索条件"));jLabel1.setText("车次信息:");jLabel2.setText("出发站点:");jLabel3.setText("目的站点:");selectButton.setText("搜索");selectButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {selectButtonActionPerformed(evt);}});javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);jPanel1.setLayout(jPanel1Layout);jPanel1Layout.setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addGap(20, 20, 20).addComponent(jLabel1).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(s_tricketID, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jLabel2).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(s_startStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(jLabel3).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED).addComponent(s_endStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addComponent(selectButton).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));jPanel1Layout.setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel1Layout.createSequentialGroup().addGap(12, 12, 12).addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(s_tricketID, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel2).addComponent(jLabel1).addComponent(jLabel3).addComponent(selectButton).addComponent(s_startStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(s_endStationBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(22, Short.MAX_VALUE)));jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("车票修改"));jLabel4.setText("车次编号:");tricketIdTxt.setEditable(false);startStationTxt.setEditable(false);endStationTxt.setEditable(false);jLabel5.setText("出发站点:");jLabel6.setText("目的站点:");jLabel7.setText("座位类型:");jLabel8.setText("车票价格:");jLabel9.setText("发车时间:");startTimeTxt.setEditable(true);jLabel10.setText("到达时间:");endTimeTxt.setEditable(true);jLabel11.setText("备注:");javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);jPanel2.setLayout(jPanel2Layout);jPanel2Layout.setHorizontalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup().addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel2Layout.createSequentialGroup().addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel7).addGap(18, 18, 18).addComponent(seatTypeTxt)).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel4).addGap(18, 18, 18).addComponent(tricketIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE))).addGap(18, 18, 18).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel10).addGap(18, 18, 18).addComponent(endTimeTxt)).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel5).addGap(18, 18, 18).addComponent(startStationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)).addGroup(jPanel2Layout.createSequentialGroup().addComponent(jLabel8).addGap(18, 18, 18).addComponent(priceTxt))).addGap(18, 18, 18).addComponent(jLabel6).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addComponent(endStationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap()).addGroup(jPanel2Layout.createSequentialGroup().addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING).addComponent(jLabel11).addComponent(jLabel9)).addGap(18, 18, 18).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel2Layout.createSequentialGroup().addComponent(startTimeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(434, 434, 434)).addGroup(jPanel2Layout.createSequentialGroup().addComponent(remarksTxt, javax.swing.GroupLayout.PREFERRED_SIZE, 336, javax.swing.GroupLayout.PREFERRED_SIZE).addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))));jPanel2Layout.setVerticalGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(jPanel2Layout.createSequentialGroup().addContainerGap().addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel4).addComponent(tricketIdTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel5).addComponent(startStationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel6).addComponent(endStationTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel7).addComponent(seatTypeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel8).addComponent(priceTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addGap(18, 18, 18).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel9).addComponent(startTimeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addComponent(jLabel10).addComponent(endTimeTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED).addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(jLabel11).addComponent(remarksTxt, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)).addContainerGap(25, Short.MAX_VALUE)));updateButton.setText("修改");updateButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {updateButtonActionPerformed(evt);}});deleteButton.setText("删除");deleteButton.addActionListener(new java.awt.event.ActionListener() {public void actionPerformed(java.awt.event.ActionEvent evt) {deleteButtonActionPerformed(evt);}});javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());getContentPane().setLayout(layout);layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addGap(46, 46, 46).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addComponent(updateButton).addGap(45, 45, 45).addComponent(deleteButton)).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false).addComponent(jScrollPane1).addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE).addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))).addContainerGap(45, Short.MAX_VALUE)));layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGroup(layout.createSequentialGroup().addContainerGap().addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(27, 27, 27).addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 140, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(43, 43, 43).addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE).addGap(18, 18, 18).addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE).addComponent(updateButton).addComponent(deleteButton)).addContainerGap(31, Short.MAX_VALUE)));this.fillTricketBox();//this.fillTable(new Tricket());pack();}// </editor-fold>private void selectButtonActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String tricketID=this.s_tricketID.getText();TricketType tricketType=(TricketType) this.s_startStationBox.getSelectedItem();TricketType tricketType1=(TricketType) this.s_endStationBox.getSelectedItem();String start=tricketType.getStation();String end=tricketType1.getStation();Tricket tricket=null;if(StringUil.isEmpty(tricketID)){tricket=new Tricket(-1,start,end);}else{tricket=new Tricket(Integer.parseInt(tricketID),start,end);}this.fillTable(tricket);}private void resultTableMousePressed(MouseEvent evt) {// TODO add your handling code here:int row= this.resultTable.getSelectedRow();this.tricketIdTxt.setText((String) resultTable.getValueAt(row,0));this.startStationTxt.setText((String) resultTable.getValueAt(row,1));this.endStationTxt.setText((String) resultTable.getValueAt(row,2));this.seatTypeTxt.setText((String) resultTable.getValueAt(row,3));this.priceTxt.setText( resultTable.getValueAt(row,4)+"");this.startTimeTxt.setText( resultTable.getValueAt(row,5)+"");this.endTimeTxt.setText( resultTable.getValueAt(row,6)+"");this.remarksTxt.setText((String) resultTable.getValueAt(row,7));}private void updateButtonActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String id =this.tricketIdTxt.getText();if(StringUil.isEmpty(id)){JOptionPane.showMessageDialog(null,"请选择需要修改的数据");return;}int ID=Integer.parseInt(id);String start=this.startStationTxt.getText();String end=this.endStationTxt.getText();String seat=this.seatTypeTxt.getText();Float price=Float.parseFloat(this.priceTxt.getText());java.sql.Date starttime=java.sql.Date.valueOf(this.startTimeTxt.getText());Date endtime=java.sql.Date.valueOf(this.endTimeTxt.getText());String remarks=this.remarksTxt.getText();Tricket tricket=new Tricket(ID,start,end,price,seat,starttime,endtime,remarks);Connection con=null;try {con=conn.getCon();int addNum=TricketDao.update(con,tricket);if(addNum==1){JOptionPane.showMessageDialog(null,"车票修改成功");this.fillTable(new Tricket());resetValue();}else{JOptionPane.showMessageDialog(null,"车票修改失败!!");}} catch (Exception e) {JOptionPane.showMessageDialog(null,"车票修改失败!!");e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {JOptionPane.showMessageDialog(null,"数据库关闭失败!!");e.printStackTrace();}}}private void deleteButtonActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String id =this.tricketIdTxt.getText();if(StringUil.isEmpty(id)){JOptionPane.showMessageDialog(null,"请选择需要删除的记录");return;}int n=JOptionPane.showConfirmDialog(null,"确定要删除这条记录吗?");if(n==0){Connection con=null;try {con=conn.getCon();int deleteNum=tricketdao.delete(con,id);if(deleteNum==1){JOptionPane.showMessageDialog(null,"删除成功");this.resetValue();this.fillTable(new Tricket());}else{JOptionPane.showMessageDialog(null,"删除失败");}} catch (Exception e) {JOptionPane.showMessageDialog(null,"删除失败");e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}}private void fillTricketBox(){Connection con=null;TricketType tricketType=null;try {con=conn.getCon();ResultSet rs= TricketTypeDao.list(con,new TricketType());tricketType=new TricketType();tricketType.setStation("请选择...");tricketType.setId(-1);this.s_endStationBox.addItem(tricketType);this.s_startStationBox.addItem(tricketType);while (rs.next()){tricketType=new TricketType();tricketType.setStation(rs.getString("station"));tricketType.setId(rs.getInt("id"));this.s_startStationBox.addItem(tricketType);this.s_endStationBox.addItem(tricketType);}} catch (Exception e) {e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}private void resetValue(){this.tricketIdTxt.setText("");this.startStationTxt.setText("");this.endStationTxt.setText("");this.seatTypeTxt.setText("");this.priceTxt.setText("");this.startTimeTxt.setText("");this.endTimeTxt.setText("");this.remarksTxt.setText("");}private void fillTable(Tricket tricket){DefaultTableModel dtm =(DefaultTableModel) resultTable.getModel();dtm.setRowCount(0);Connection con=null;try{con=conn.getCon();ResultSet rs=tricketdao.list(con,tricket);while(rs.next()){Vector<java.io.Serializable> v=new Vector<>();v.add(rs.getString("id"));v.add(rs.getString("startStation"));v.add(rs.getString("endStation"));v.add(rs.getString("seat"));v.add(rs.getFloat("price"));v.add(rs.getDate("startTime"));v.add(rs.getDate("arriveTime"));v.add(rs.getString("remarks"));dtm.addRow(v);}}catch (Exception e){e.printStackTrace();}finally {try {conn.closeCon(con);} catch (Exception e) {e.printStackTrace();}}}// Variables declaration - do not modifyprivate javax.swing.JButton deleteButton;private javax.swing.JTextField endStationTxt;private javax.swing.JTextField endTimeTxt;private javax.swing.JLabel jLabel1;private javax.swing.JLabel jLabel10;private javax.swing.JLabel jLabel11;private javax.swing.JLabel jLabel2;private javax.swing.JLabel jLabel3;private javax.swing.JLabel jLabel4;private javax.swing.JLabel jLabel5;private javax.swing.JLabel jLabel6;private javax.swing.JLabel jLabel7;private javax.swing.JLabel jLabel8;private javax.swing.JLabel jLabel9;private javax.swing.JPanel jPanel1;private javax.swing.JPanel jPanel2;private javax.swing.JScrollPane jScrollPane1;private javax.swing.JTextField priceTxt;private javax.swing.JTextField remarksTxt;private javax.swing.JTextField seatTypeTxt;private javax.swing.JButton selectButton;private javax.swing.JTextField startStationTxt;private javax.swing.JTextField startTimeTxt;private javax.swing.JTextField tricketIdTxt;private javax.swing.JButton updateButton;// End of variables declaration
}

4.3 售票管理功能数据库实现

package dao;import model.Tricket;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Objects;public class TricketDao {public static int add(Connection con, Tricket tricket) throws Exception{String sql ="insert into tricket values(?,?,?,?,?,?,?,?,?,?)";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setInt(1,tricket.getId());pstmt.setInt(2,tricket.getStartID());pstmt.setString(3,tricket.getStartStation());pstmt.setInt(4,tricket.getEndID());pstmt.setString(5,tricket.getEndStation());pstmt.setString(6,tricket.getSeat());pstmt.setFloat(7,tricket.getPrice());pstmt.setDate(8,tricket.getStartTime());pstmt.setDate(9,tricket.getEndTime());pstmt.setString(10,tricket.getRemarks());return pstmt.executeUpdate();}public ResultSet list(Connection con,Tricket tricket) throws Exception{StringBuffer srb= new StringBuffer("select * from tricket b,station_inform c where b.startStation=c.station");if(tricket.getId()!=-1 && tricket.getId()!=0){srb.append(" and b.id="+tricket.getId());}if(StringUil.isNotEmpty(tricket.getStartStation()) && !Objects.equals(tricket.getStartStation(), "请选择...")){srb.append(" and b.startStation like '%"+tricket.getStartStation()+"%'");}if(StringUil.isNotEmpty(tricket.getEndStation()) && !Objects.equals(tricket.getEndStation(), "请选择...")){srb.append(" and b.endStation like '%"+tricket.getEndStation()+"%'");}PreparedStatement pstmt = con.prepareStatement(srb.toString());//System.out.println(srb);return pstmt.executeQuery();}public int delete(Connection con,String id) throws Exception{String sql ="delete from tricket where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,id);return pstmt.executeUpdate();}public static int update(Connection con, Tricket tricket) throws Exception{String sql ="update tricket set startStation=?," +"endStation=?,seat=?,price=?,startTime=?,arriveTime=?," +"remarks=? where id=?";PreparedStatement pstmt=con.prepareStatement(sql);pstmt.setString(1,tricket.getStartStation());pstmt.setString(2,tricket.getEndStation());pstmt.setString(3,tricket.getSeat());pstmt.setFloat(4,tricket.getPrice());pstmt.setDate(5,tricket.getStartTime());pstmt.setDate(6,tricket.getEndTime());pstmt.setString(7,tricket.getRemarks());pstmt.setInt(8,tricket.getId());return pstmt.executeUpdate();}
}

5. 数据库部分

5.1数据库部分展示

6 项目结构

结束

只是部分代码,借鉴的话足够了,想要运行的话还差好多,太长了。这都50000多字了先算了
这个里面已经包含了,数据库操作和java逻辑的实现,学习的话足够了,源码 在下面网盘链接:是全部的代码了,拿了请留下你的关注个赞谢谢。
->网盘链接:https://pan.baidu.com/s/1CD3gFm68jeA0pEvQKriexg 验证码:yyds

java火车售票系统(含网盘链接)相关推荐

  1. 自己在学习的基本java开发电子书(附百度网盘链接)

    1.Spring 3.x企业应用开发实战 链接:https://pan.baidu.com/s/1L7IjOiZ4gozSuTgrl3k33Q      提取码:8k03 (附封面) 2.跟我学Spr ...

  2. java的jdk安装教程附百度网盘链接环境配置遇到的各种问题版本选择

    首先关于JDK版本的选择–附百度网盘链接 现在互联网行业各家公司大部分使用的是jdk8.0(也被叫做jdk1.8,有兴趣的话可以去百度以下jdk演变历史)虽然现在jdk更新到11版本了,但是不建议使用 ...

  3. JAVA_SSM火车售票系统订票(含论文)毕业设计【演示视频】

    演示视频 JAVA 源码下载地址 JAVA_SSM火车售票系统订票(含论文)毕业设计,行业软件|毕业设计,Asp.net源码|- 51Aspx.com一.源码描述本系统基于SSM(Spring+Spr ...

  4. java火车票售票系统,火车购票系统,系统实现了用户会员管理、火车车次管理、火车座位管理、系统公告管理、火车票退票、火车票换乘、换乘查询、直达查询、乘车人管理、订单管理、个人中心管理等

    火车票售票系统 java火车票售票系统,系统实现了用户会员管理.火车车次管理.火车座位管理.系统公告管理.火车票退票.火车票换乘.换乘查询.直达查询.乘车人管理.订单管理.个人中心管理等. 数据库采用 ...

  5. 火车售票系统 java_基于jsp的火车售票系统-JavaEE实现火车售票系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的火车售票系统, 该项目可用各类java课程设计大作业中, 火车售票系统的系统架构分为前后台两部分, 最终实现在线上 ...

  6. Java课设:关于火车售票系统的注意事项

    文章目录 三个表的说明 连接数据库 jdbc包 local host:1433 连接数据库服务器的登陆名及密码 此课设的一系列问题集中在此地讨论 三个表的说明 之前在博客里我说一开始需要创建三个表,当 ...

  7. Java课设:火车售票系统(代码)

    文章目录 登陆界面Access.java 注册Register.java 注册界面RegisterFrame.java 查找主界面FindMain.java 输入起点终点查找车次Find1.java ...

  8. Java课设:火车售票系统2.0

    文章目录 注意 系统概述 数据库表的变化 类名变化 运行 管理员登陆 管理员界面 录入车次 修改车次信息 查看所有车次 删除车次 管理员用户资料查询 注意 火车售票系统等java课设已经停止更新了,博 ...

  9. 如何安装配置JDK(保姆级完美解决教程+附百度网盘链接)

    JDK种类繁多,在这里我以JDK14为例,为什么以JDK14为例呢?当然是为了破解白嫖idea2020旗舰版.^_^^_^(如果大家感兴趣,我后续会一个教程)     首先去甲骨文官方网站下载JDK1 ...

最新文章

  1. JavaScript (二)
  2. Codeforces.809E.Surprise me!(莫比乌斯反演 虚树)
  3. 编程之美-寻找数组中的最大值和最小值方法整理
  4. 杂记2017.10.16
  5. 【svn】svn的使用
  6. 简单使用Boost线程池threadpool
  7. sql注入一点小心得
  8. sed搜索某行在行末追加_示范sed指定某行插入 追加和全局替换
  9. leetcode刷题:数组的最大子序和
  10. nodejs中使用node-sass
  11. idea2020.2中@test是怎么测试的_Sklearn 划分训练集和测试集
  12. 怎么用命令来查询自己的IP地址?
  13. 44.mysqlbinlog
  14. media type
  15. SPC统计及控制图系列标准
  16. Linux 可执行文件结构与进程结构
  17. 编程珠玑第三章笔记加习题解答
  18. 【小程序源码】好玩多功能实用工具箱
  19. STKO助力OpenSEES系列:结构模态分析以及动力特性(MDOF与等效SDOF验证)
  20. 【Python】简体繁体转换

热门文章

  1. android 打开公众号页面_微信公众号页面适配
  2. 网上开期货账号方便快捷
  3. 龙之谷手游WebVR技术分享
  4. js 获取当前时间戳,日期转时间戳,时间戳转日期
  5. java ssm框架_JavaWeb开发SSM框架搭建详解
  6. 你能拥有选择权,而不是被人决定
  7. 大数据使用及现状的调研报告
  8. java--18位身份证号最后一位(检验码)是怎么算出来的?
  9. 技术劳模男B哥的DTCC2017三天,认真你就输了。。。
  10. 大赛获奖选手专访 | 冷燕冰:最佳设计奖TIMING里的时机和时序