源码获取:博客首页 "资源" 里下载!
功能简介:
机票查询、改签处理、航班动态、退票处理、销售统计、后台管理、退出系统
显示公司的简介信息:
/**
* 显示公司的简介信息
*
*/
public class CompanyPanel extends JPanel{
private ImagePanel iPanel = null;
public CompanyPanel(){
}
public JPanel getPanel(){
return iPanel ;
}
}
登录控制层:
public class LoginView extends JFrame implements MouseListener{
private JTextField userNameField = null;
private JPasswordField userPasswdField = null ;
private JPanel jp ;
private FileOperation fileOperation ;
private Vector<String> loginNames ;
// private JScrollPane autoTipPane ;
/**
* @param args
*/
public static void main(String[] args) {
new LoginView().setVisible(true);
}
public LoginView(){
UIManager.put("TextField.font", Tookit.getFont1()) ;
UIManager.put("Label.font", Tookit.getFont1()) ;
UIManager.put("Button.font", Tookit.getFont1()) ;
fileOperation = new FileOperation();
//从文件中加载用户名过来
loginNames = fileOperation.loading("path/loginName") ;
this.init();
}
private void init() {
//上面 的panel
JPanel top = new JPanel() ;
JLabel jTop = new JLabel(new ImageIcon("image/logo.gif")) ;
top.add(jTop) ;
this.add(top,BorderLayout.NORTH) ;
//下面的panel
JPanel buttom = new JPanel(new BorderLayout()) ;
//左边
buttom.add(this.leftPanel()) ;
//右边
buttom.add(this.rightPanel(),BorderLayout.EAST);
this.add(buttom) ;
this.setSize(823, 500) ;
this.setLocationRelativeTo(null) ;
this.setResizable(false) ;
this.setIconImage(new ImageIcon("image/1.png").getImage()) ;
this.setTitle("飞机订票系统") ;
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
}
/**
* 处理左边登录面板
* @return
*/
public JPanel leftPanel(){
JPanel jPanel = new JPanel(new BorderLayout()) ;
//上面
JLabel jLogin = new JLabel(new ImageIcon("image/enter_font1.jpg"),JLabel.CENTER) ;
jPanel.add(jLogin,BorderLayout.NORTH) ;//加一个jlable
//中间
MyLoginPanel myPanel = new MyLoginPanel() ;
myPanel.setLayout(null) ;
final JLabel userName = new JLabel("登录名:",JLabel.CENTER) ;
userName.setBounds(135, 70, 65, 15) ;
userName.setFont(Tookit.getFont1()) ;
myPanel.add(userName) ;
//加一个面板 可以 存入多个jlabel
jp = new JPanel() ;
jp.setOpaque(false) ;
//jp.setPreferredSize(new Dimension(140, 200)) ;
//autoTipPane = new JScrollPane(jp) ;
jp.setBounds(200, 89, 140, 200) ;
//autoTipPane.setOpaque(false) ;
//autoTipPane.getViewport().setOpaque(false) ;
myPanel.add(jp) ;
userNameField = new JTextField(12) ;
userNameField.setBounds(200, 68, 140, 21) ;
userNameField.getDocument().addDocumentListener(new DocumentListener() {
//创建一个存入 jlabel的集合
//Vector<JLabel> jLabels = new Vector<JLabel>() ;
@Override
public void removeUpdate(DocumentEvent e) {
//每删除一个 字母
LoginView.this.autoTip() ;
}
@Override
public void insertUpdate(DocumentEvent e) {
LoginView.this.autoTip() ;
}
@Override
public void changedUpdate(DocumentEvent e) {
}
}) ;
myPanel.add(userNameField) ;
if(userNameField.getText().trim().equals("")){
}
// center.add(userName) ;
// center.add(userNameField) ;
JLabel userPasswd = new JLabel("密 码:",JLabel.CENTER) ;
userPasswd.setFont(Tookit.getFont1()) ;
userPasswd.setBounds(135, 124, 65, 15) ;
userPasswdField = new JPasswordField(12) ;
userPasswdField.setBounds(200, 124, 140, 21) ;
myPanel.add(userPasswd) ;
myPanel.add(userPasswdField) ;
JLabel userGrade = new JLabel("身 份:",JLabel.CENTER) ;
userGrade.setFont(Tookit.getFont1()) ;
userGrade.setBounds(135, 166, 65, 15) ;
final JComboBox jcb = new JComboBox(new String[]{"旅客","管理员"}) ;
jcb.setBounds(200, 163, 71, 27) ;
myPanel.add(userGrade) ;
jcb.setFont(Tookit.getFont1()) ;
myPanel.add(jcb) ;
JButton login = new JButton("登录");
login.setBounds(151, 215, 81, 30) ;
myPanel.add(login) ;
login.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//取出用户名跟密码以及角色
if(userName.getText().trim().equals("") ||String.valueOf(userPasswdField.getPassword()).trim().equals("")){
JOptionPane.showMessageDialog(LoginView.this, "用户名或密码不能为空!!") ;
return ;
}
//发送数据到数据库验证 数据库处理
DataHandle loginHandle = new DataHandle() ;
//权限
String power = ((String)jcb.getSelectedItem()).equals("旅客")?"0":"1" ;
//用户名
String userId = userNameField.getText().trim() ;
//密码
String userPasswd = String.valueOf(userPasswdField.getPassword()) ;
User user = loginHandle.getUser(
"select * from users where u_id=?",
new String[] { userId });
if(user!=null && user.getU_password().equals(userPasswd) && user.getU_power().equals(power)){
//表示验证成功
//得到用户姓名
String userName = user.getU_name() ;
String userSex = user.getU_sex() ;
String userCall = userSex.equals("男")?"先生":"女士" ;
if(power.equals("0")){
//表示旅客
JOptionPane.showMessageDialog(LoginView.this, "欢迎旅客"+userName+userCall+"登录") ;
new GuestMainView(user).setVisible(true) ;
}else {
JOptionPane.showMessageDialog(LoginView.this, "欢迎管理员"+userName+userCall+"登录") ;
new MangerMainView(user).setVisible(true) ;
}
//登录成功 将用户名加入到集合里
if(!loginNames.contains(userId)){
//表示文件这个Id不存在
loginNames.add(userId) ;
}
//序列到文件
boolean b = fileOperation.save("path/loginName", loginNames) ;
if(!b){
JOptionPane.showMessageDialog(LoginView.this, "序列化文件失败");
return ;
}
LoginView.this.dispose() ;
}else{
//验证不成功
JOptionPane.showMessageDialog(LoginView.this, "用户名、密码与身份不匹配!!") ;
userPasswdField.setText("") ;
}
}
}) ;
login.setPreferredSize(new Dimension(80, 30)) ;
login.setBackground(new Color(0x71B8EC)) ;
JButton exit = new JButton("退出");
exit.setBounds(265, 215, 81, 30) ;
myPanel.add(exit) ;
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//可以在这里加一个滚动条 ??
System.exit(0) ;
}
}) ;
exit.setPreferredSize(new Dimension(80, 30)) ;
exit.setBackground(new Color(46,116,188)) ;
jPanel.add(myPanel) ;
return jPanel ;
}
/**
* 将右边设置为卡片布局
* @return
*/
public JPanel rightPanel(){
final CardLayout card = new CardLayout() ;
final JPanel right = new JPanel(card) ;
right.setBorder(new TitledBorder(new EtchedBorder(), "新用户注册")) ;
right.setPreferredSize(new Dimension(269, 363)) ;
//right.setBackground(new Color(0xFFFFCC)) ;
Box box = Box.createVerticalBox() ;
box.add(Box.createHorizontalStrut(32)) ;
JLabel jLabel = new JLabel() ;
jLabel.setText("<html>" +"<h2>新用户注册</h2><hr>"+
"1、免费注册<br> 2、实名注册 <br>3、注册用户可享受个性化服务<br><br> " +
"</html>") ;
box.add(jLabel) ;
JButton regist = new JButton("注册") ;
regist.setPreferredSize(new Dimension(100, 30)) ;
regist.setBackground(new Color(0xFFFFCC)) ;
box.add(regist) ;
JPanel jpOne = new JPanel() ;
jpOne.setOpaque(false) ;
jpOne.add(box) ;
right.add(jpOne,"one") ;
//第二个panel
JPanel jpTwo = new JPanel() ;
jpTwo.setOpaque(false) ;
jpTwo.setLayout(new BorderLayout()) ;
String info ="<html>1、服务条款的确认<br>您点击服务条款页面下的“我同意”按钮,<br>即视为您已阅读、了解并完全同意服务条款<br>中的各项内容,包括本网站对服务条款所<br>作的任何修改。除另行明确声明外,本网站<br>任何服务范围或功能的变化均受服务条款约束。<br>2、服务条款的修改<br>本网站在必要时可修改服务条款,并在网站<br>进行公告,一经公告,立即生效。如您继续<br>使用服务,则视为您已接受修订的服务条款。<br>3、用户注册<br>考虑到本网站用户服务的重要性,您同意在<br>注册时提供真实、完整及准确的个人资料,<br>并及时更新。 如您提供的资料不准确,或<br>本网站有合理的理由认为该资料不真实、不<br>完整、不准确,本网站有权暂停或终止您的<br>注册身份及资料,并拒绝您<br>使用本网站的服务。4、用户资料及保密<br>注册时,请您选择填写用户名和密码,<br>并按页面提示提交相关信息。您负有对用户<br>名和密码保密的义务,并对该用户名和密<br>码下发生的所有活动承担责任。您同意邮件<br>服务的使用由您自己承担风险。本网站不<br>会向您所使用服务所涉及相关方之外的其他<br>方公开或透露您的个人资料,法律法规规定除外。 <html>" ;
JLabel jLabel2 = new JLabel(info) ;
jLabel2.setFont(Tookit.getFont1()) ;
jpTwo.add(jLabel2) ;
JPanel jpButton = new JPanel() ;
jpButton.setOpaque(false) ;
JButton accept = new JButton("同意") ;
accept.setPreferredSize(new Dimension(100, 30)) ;
accept.setBackground(new Color(0xFFFFCC)) ;
jpButton.add(accept) ;
JButton unaccept = new JButton("不同意") ;
unaccept.setPreferredSize(new Dimension(100, 30)) ;
unaccept.setBackground(new Color(0xFFFFCC)) ;
jpButton.add(unaccept) ;
jpTwo.add(jpButton,BorderLayout.SOUTH);
right.add(new JScrollPane(jpTwo),"two") ;
//第三个panel
JPanel jpThree = new JPanel(new BorderLayout()) ;
//jpThree.setOpaque(false) ;
//jpThree.setPreferredSize(new Dimension(269,300)) ;
JPanel infoPanel = new JPanel(new GridLayout(9, 2)) ;
JLabel userId = new JLabel("用户名:",JLabel.CENTER);
userId.setFont(Tookit.getFont1()) ;
infoPanel.add(userId) ;
final JTextField userIdField = new JTextField() ;
infoPanel.add(userIdField) ;
JLabel userPasswd = new JLabel("密码:",JLabel.CENTER);
userPasswd.setFont(Tookit.getFont1()) ;
infoPanel.add(userPasswd) ;
final JPasswordField userPasswdField = new JPasswordField() ;
infoPanel.add(userPasswdField) ;
JLabel userPasswd1 = new JLabel("确认密码:",JLabel.CENTER);
userPasswd1.setFont(Tookit.getFont1()) ;
infoPanel.add(userPasswd1) ;
final JPasswordField userPasswd1Field = new JPasswordField() ;
infoPanel.add(userPasswd1Field) ;
JLabel userName = new JLabel("姓 名:",JLabel.CENTER);
userName.setFont(Tookit.getFont1()) ;
infoPanel.add(userName) ;
final JTextField userNameField = new JTextField() ;
infoPanel.add(userNameField) ;
//用户性别
JLabel userSex = new JLabel("性别:",JLabel.CENTER) ;
userSex.setFont(Tookit.getFont1()) ;
JPanel jSex = new JPanel() ;
jSex.setOpaque(false) ;
final JRadioButton boy = new JRadioButton("男") ;
boy.setOpaque(false) ;
boy.setFont(Tookit.getFont1()) ;
final JRadioButton girl = new JRadioButton("女") ;
girl.setOpaque(false) ;
girl.setFont(Tookit.getFont1()) ;
ButtonGroup gbGroup = new ButtonGroup();
gbGroup.add(boy) ;
gbGroup.add(girl) ;
jSex.add(boy) ;
jSex.add(girl) ;
infoPanel.add(userSex);
infoPanel.add(jSex) ;
JLabel tel = new JLabel("电话号码:",JLabel.CENTER);
tel.setFont(Tookit.getFont1()) ;
infoPanel.add(tel) ;
final JTextField telField = new JTextField() ;
infoPanel.add(telField) ;
JLabel addr = new JLabel("地址:",JLabel.CENTER);
addr.setFont(Tookit.getFont1()) ;
infoPanel.add(addr) ;
final JTextField addrField = new JTextField() ;
infoPanel.add(addrField) ;
JLabel email = new JLabel("电子邮件:",JLabel.CENTER);
email.setFont(Tookit.getFont1()) ;
infoPanel.add(email) ;
final JTextField emailField = new JTextField() ;
infoPanel.add(emailField) ;
JLabel identity = new JLabel("身份证号:",JLabel.CENTER);
identity.setFont(Tookit.getFont1()) ;
infoPanel.add(identity) ;
final JTextField identityField = new JTextField() ;
infoPanel.add(identityField) ;
jpThree.add(infoPanel) ;
JPanel subMitPanel = new JPanel() ;
JButton submit = new JButton("提交注册信息") ;
submit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//得到所有的数据 9个数据
String uId=userIdField.getText().trim();
String uPassword=String.valueOf(userPasswdField.getPassword());
String uName = userNameField.getText().trim();
String uSex = null;
if(boy.isSelected()){
uSex=boy.getText().trim();
}
if(girl.isSelected()){
uSex=girl.getText().trim();
}
String uTelephone=telField.getText().trim();
String uAddress =addrField.getText().trim();
String uEmail = emailField.getText().trim();
String uIdcard = identityField.getText().trim();
//判断所有的是否为空
if(uId.isEmpty()||uPassword.isEmpty()||userPasswd1Field.getPassword().toString().equals("")||uName.isEmpty()||uSex.isEmpty()||uTelephone.isEmpty()||uAddress.isEmpty()||uEmail.isEmpty()||uIdcard.isEmpty()){
JOptionPane.showMessageDialog(null, "所填项不能为空!");
return;
}
System.out.println(String.valueOf(userPasswd1Field.getPassword())+"-------"+uPassword);
//做出判断 二次密码是 不是一样
if(String.valueOf(userPasswd1Field.getPassword()).equals(uPassword)==false){
JOptionPane.showMessageDialog(null, "两次密码不一致!");
return;
}
//创建一个User
User user = new User(uId, uPassword, uName, uSex, uTelephone, uAddress, uEmail, uIdcard, "0");
CheckInfo checkInfo =new CheckInfo() ;
boolean b = checkInfo.checkRegistInfo(user) ;
System.out.println(b);
if(b==true){
//表示 数据 格式 是 正确的 此时连接数据库操作
String sql="insert into users values(?,?,?,?,?,?,?,?,?)";
String[] ss={uId, uPassword, uName, uSex, uTelephone, uAddress, uEmail, uIdcard, 0+""};
DataHandle dataHandle=new DataHandle();
boolean iss=dataHandle.update(sql, ss);
if(iss){
JOptionPane.showConfirmDialog(null, "注册成功!是否继续?");
card.show(right, "one") ;
}else{
JOptionPane.showMessageDialog(null, "注册失败!");
return;
}
}
// }else{
// JOptionPane.showMessageDialog(null, "格式不正确");
// }
}
}) ;
submit.setFont(Tookit.getFont1()) ;
//submit.setPreferredSize(new Dimension(100, 30)) ;
submit.setBackground(new Color(0xFFFFCC)) ;
subMitPanel.add(submit) ;
JButton reset = new JButton("重置") ;
reset.setFont(Tookit.getFont1()) ;
reset.setPreferredSize(new Dimension(100, 30)) ;
reset.setBackground(new Color(0xFFFFCC)) ;
subMitPanel.add(reset) ;
jpThree.add(subMitPanel,BorderLayout.SOUTH) ;
right.add(jpThree,"three") ;
reset.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
userIdField.setText("") ;
userNameField.setText("") ;
userPasswdField.setText("") ;
userPasswd1Field.setText("") ;
telField.setText("") ;
addrField.setText("") ;
emailField.setText("") ;
identityField.setText("") ;
}
}) ;
regist.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//点击了注册
card.show(right, "two") ;
}
}) ;
accept.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
card.show(right, "three") ;
}
}) ;
unaccept.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
card.show(right, "one") ;
}
}) ;
return right ;
}
public void autoTip(){
System.out.println("===");
//清除面板所有 的 组件
jp.removeAll() ;
//jLabels.removeAllElements() ;
//得到 文本域 的名
String str = userNameField.getText().trim() ;
for(String loginName :loginNames){
if(loginName.startsWith(str) && !str.equals("")){
//创建一个jlabel
JLabel jLabel = new JLabel(loginName) ;
jLabel.addMouseListener(LoginView.this) ;
jLabel.setPreferredSize(new Dimension(140, 20));
//jLabels.add(jLabel) ;
jp.add(jLabel) ;
}
}
jp.repaint() ;
//autoTipPane.repaint() ;
jp.validate() ;//刷新界面
// autoTipPane.validate() ;
}
@Override
public void mouseClicked(MouseEvent e) {
userNameField.setText(((JLabel)e.getSource()).getText()) ;
//设置面板属性
jp.removeAll() ;
this.remove(jp) ;
this.repaint() ;
this.validate() ;
//设置面板的宽度
//jp.setBackground(Color.red) ;
}
@Override
public void mouseEntered(MouseEvent e) {
JLabel jLabel = (JLabel)e.getSource() ;
jLabel.setForeground(Tookit.getColor()) ;
jLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)) ;
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
JLabel jLabel = (JLabel)e.getSource() ;
jLabel.setForeground(Color.black) ;
jLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)) ;
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
票务审查小组:
public class TicketSearchPanel extends JPanel implements ActionListener,MouseListener{
private ImagePanel ticketSearchPanel = null ;
private HashMap<String, Bank> map= null ;//一个票Id是用什么 银行账号买的
private CardLayout card = null ;
private JButton queryButton = null ;
private JButton resetButton = null ;
private JButton order ;
private JTextField jtf1,jtf2,jtf3,jtf1_1,jtf2_1,jtf3_1, idField,priceField;
private JComboBox jcBox,jcBox_1, boxType ;
private JLabel jl1 ,jl2,jl3,jl4,jlTop;
private JTable jTable ;
private DataHandle dataHandle ;
private Vector<FlightInfo> fInfos ;
private Vector<Vector<Seat>> seats ;
private FlightInfo selectFlightInfo = null ;
private Vector<String> remainType = null ;
private Vector<Seat> selectSeat = null ;
private SearchTableModel stmModel ;
private boolean isGoing = false ;
private JScrollPane jsp ;
private String currenTime ,bankName;
private User user ;
private JPanel c ;
private CheckInfo checkInfo ;
public TicketSearchPanel(User user){
checkInfo = new CheckInfo() ;
map = new HashMap<String, Bank>() ;
dataHandle = new DataHandle() ;
this.user = user ;
UIManager.put("Label.font", Tookit.getFont1()) ;
UIManager.put("Button.font", Tookit.getFont1()) ;
UIManager.put("ComboBox.font", Tookit.getFont1()) ;
UIManager.put("CheckBox.font", Tookit.getFont1()) ;
remainType = new Vector<String>() ;
currenTime = Tookit.getDateFormat("yyyy-MM-dd").format(new Date()) ;
card = new CardLayout() ;
this.init();
}
/**
* 第一张面板
* @return
*/
public JPanel onePanel(){
JPanel jPanel = new JPanel(new BorderLayout()) ;
jPanel.setOpaque(false) ;
//控制北边
JPanel north = new JPanel() ;
north.setPreferredSize(new Dimension(1028,145)) ;
north.setOpaque(false) ;
jPanel.add(north,BorderLayout.NORTH) ;
JPanel center = new JPanel(null) ;
center.setOpaque(false) ;
jl1= new JLabel("出发城市:");
jl1.setBounds(200, 20, 74, 20) ;
jl1.setFont(Tookit.getFont1()) ;
jtf1= new JTextField(12) ;
jtf1.setBounds(275, 20, 130, 20) ;
jl2 = new JLabel("到达城市:");
jl2.setBounds(200, 70, 74, 20) ;
jl2.setFont(Tookit.getFont1()) ;
jtf2 = new JTextField() ;
jtf2.setBounds(275, 70, 130, 20) ;
jl3 = new JLabel("出发日期:",JLabel.RIGHT);
jl3.setFont(Tookit.getFont1()) ;
jl3.setBounds(200, 120, 74, 20) ;
jtf3 = new JTextField(currenTime) ;
jtf3.setBounds(275, 120, 130, 20) ;
jl4 = new JLabel("出发时间:",JLabel.RIGHT);
jl4.setBounds(200, 175, 74, 20) ;
jl4.setFont(Tookit.getFont1()) ;
jcBox = new JComboBox(new String[]{"全部时间段","00:00-06:00","06:00-12:00","12:00-18:00","18:00-24:00"}) ;
jcBox.setFont(Tookit.getFont1()) ;
jcBox.setBounds(275, 170, 100, 30) ;
queryButton = new JButton("开始查询");
queryButton.addActionListener(this) ;
queryButton.setFont(Tookit.getFont1()) ;
queryButton.setBounds(180, 220, 120, 30) ;
queryButton.setBackground(new Color(0xA9CAF3)) ;
resetButton = new JButton("重新查询") ;
resetButton.addActionListener(this) ;
resetButton.setBackground(new Color(0xA9CAF3)) ;
resetButton.setFont(Tookit.getFont1()) ;
resetButton.setBounds(320, 220, 120, 30) ;
center.add(jl1) ;
center.add(jtf1) ;
center.add(jl2) ;
center.add(jtf2) ;
center.add(jl3) ;
center.add(jtf3) ;
center.add(jl4) ;
center.add(jcBox) ;
center.add(queryButton) ;
center.add(resetButton) ;
jPanel.add(center) ;
//控制南边
JPanel south = new JPanel() ;
south.setPreferredSize(new Dimension(1028,200)) ;
south.setOpaque(false) ;
jPanel.add(south,BorderLayout.SOUTH) ;
return jPanel ;
}
public JPanel twoPanel(){
JPanel jPanel = new JPanel(new BorderLayout()) ;
jPanel.setOpaque(false) ;
JPanel north = new JPanel() ;
north.setOpaque(false) ;
//得到所有 TextField值
//加入到北边面板里
jl1= new JLabel("出发城市:");
jl1.setFont(Tookit.getFont1()) ;
jtf1_1 = new JTextField(12) ;
jl2 = new JLabel("到达城市:");
jl2.setFont(Tookit.getFont1()) ;
jtf2_1 = new JTextField(12) ;
jl3 = new JLabel("出发日期:",JLabel.RIGHT);
jl3.setFont(Tookit.getFont1()) ;
jtf3_1 = new JTextField() ;
jtf3_1.setPreferredSize(new Dimension(137, 23)) ;
jl4 = new JLabel("出发时间:",JLabel.RIGHT);
jl4.setFont(Tookit.getFont1()) ;
jcBox_1 = new JComboBox(new String[]{"全部时间段","00:00-06:00","06:00-12:00","12:00-18:00","18:00-24:00"}) ;
jcBox_1.setFont(Tookit.getFont1()) ;
queryButton = new JButton("开始查询");
queryButton.addActionListener(this) ;
queryButton.setFont(Tookit.getFont1()) ;
queryButton.setBackground(new Color(0xA9CAF3)) ;
order = new JButton("预订");
order.addActionListener(this) ;
order.setFont(Tookit.getFont1()) ;
order.setBounds(180, 220, 120, 30) ;
order.setBackground(new Color(0xA9CAF3)) ;
north.add(jl1) ;
north.add(jtf1_1) ;
north.add(jl2) ;
north.add(jtf2_1) ;
north.add(jl3) ;
north.add(jtf3_1) ;
north.add(jl4) ;
north.add(jcBox_1) ;
north.add(queryButton) ;
north.add(order) ;
JPanel bank = new JPanel() ;//空面板
bank.setOpaque(false) ;
bank.setPreferredSize(new Dimension(1028,96)) ;
JPanel top = new JPanel(new GridLayout(2,1)) ;
top.setOpaque(false) ;
top.add(bank) ;
top.add(north) ;
jPanel.add(top,BorderLayout.NORTH) ;
jsp = new JScrollPane() ;
//jScrollPane设置透明
jsp.setOpaque(false) ;
jsp.getViewport().setOpaque(false) ;
jPanel.add(jsp) ;
return jPanel ;
}
private void init() {
try {
ticketSearchPanel = new ImagePanel(ImageIO.read(new File("image/ticketsearch.jpg")),new Dimension(Tookit.getScreen().width-100,Tookit.getScreen().height-100)) ;
ticketSearchPanel.setLayout(card);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ticketSearchPanel.add(this.onePanel(),"one") ;
ticketSearchPanel.add(this.twoPanel(),"two") ;
ticketSearchPanel.add(this.threePanel(),"three") ;
ticketSearchPanel.add(this.fourPanel(),"four") ;
}
public JPanel getJPanel() {
return ticketSearchPanel;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("开始查询")){
if(!isGoing){
jtf3_1.setText(jtf3.getText().trim()) ;
jtf2_1.setText(jtf2.getText().trim());
jtf1_1.setText(jtf1.getText().trim()) ;
}
this.query() ;
}
if(e.getActionCommand().equals("重新查询")){
this.clear() ;
}
if(e.getActionCommand().equals("预订")){
this.order();
}
if(e.getActionCommand().equals("重新选择")){
card.show(ticketSearchPanel, "two") ;
}
if(e.getActionCommand().equals("取消订单")){
card.show(ticketSearchPanel, "two") ;
}
if(e.getActionCommand().equals("提交订单")){
//赋值
jlTop.setText("<html>应付金额:<font color=#FF0000 size=7>"+priceField.getText().trim()+"</font>元</html>") ;
//得到所有 的这个用户的银行信息
Vector<String> v = dataHandle.queryStringVector("select b_name from bank where b_u_name=? and b_u_card=?", new String[]{user.getU_name(),user.getU_idcard()}) ;
//判断 有没有该账号
if(v.size()==0){
//表示 该用户没有网上银行
JOptionPane.showMessageDialog(null, "没有网上银行,请注册!") ;
//跳转
card.show(ticketSearchPanel, "two") ;
return ;
}
System.out.println(v);
c.removeAll() ;//清除面板所有组件
for(String bankNames:v){
Box box = Box.createVerticalBox() ;
JLabel jl_bank = new JLabel(bankNames,JLabel.CENTER);
jl_bank.setFont(Tookit.getFont3()) ;
box.add(jl_bank) ;
jl_bank.addMouseListener(TicketSearchPanel.this) ;
jl_bank.setEnabled(false) ;
JLabel jl_picture = new JLabel(new ImageIcon("image/"+bankNames+".jpg")) ;
box.add(jl_picture) ;
c.add(box) ;
}
//跳到付款页面
card.show(ticketSearchPanel, "four") ;
}
if(e.getActionCommand().equals("网上支付")){
//判断钱是不是足够的
String sql = "select b_balance from bank where b_u_name=? and b_u_card=? and b_name=?" ;
String balanceString = dataHandle.queryOneString(sql, new String[]{user.getU_name(),user.getU_idcard(),bankName}) ;
sql = "select b_account from bank where b_u_name=? and b_u_card=? and b_name=?" ;
String account = dataHandle.queryOneString(sql, new String[]{user.getU_name(),user.getU_idcard(),bankName}) ;
System.out.println(balanceString);
if(balanceString==null){
JOptionPane.showMessageDialog(null, "请选择网上银行") ;
return ;
}
double balance = Double.parseDouble(balanceString) ;
//得到 当前票价
double currentPrice = Double.parseDouble(priceField.getText().trim());
if(balance<currentPrice){
JOptionPane.showMessageDialog(TicketSearchPanel.this, "余额不足,无法支付!") ;
//跳转
card.show(ticketSearchPanel, "four") ;
return ;
}
sql = "select t_seatId from tickets where t_date=? and t_f_number =? and t_type=?" ;
//得到已卖座位号
System.out.println(jtf3_1.getText().trim()+selectFlightInfo.getF_number()+(String)boxType.getSelectedItem());
Vector<String> seatIds = dataHandle.queryStringVector(sql, new String[]{jtf3_1.getText().trim(),selectFlightInfo.getF_number(),(String)boxType.getSelectedItem()}) ;
//分配座位
//得到 选择舱位的总数
int seatTotalNum = 0 ;
for(Seat seat : selectSeat){
if(seat.getS_type().equals((String)boxType.getSelectedItem())){
seatTotalNum = Integer.parseInt(seat.getS_number()) ;
break ;
}
}
//卖到 的座位号
int sellSeatNum = -1 ;
System.out.println("座位总数:"+seatTotalNum+"已卖出:"+seatIds);
for (int i = 1; i <=seatTotalNum; i++) {
if(!seatIds.contains(i+"")){
sellSeatNum = i ;
break ;
}
}
System.out.println(sellSeatNum);
System.out.println(selectFlightInfo.getF_number());
//插入一个票务表
sql = "insert into tickets values(?||seq_tickets.nextval,?,?,?,?,?)" ;
boolean b1 = dataHandle.update(sql, new String[]{"e",selectFlightInfo.getF_number(),user.getU_id(),sellSeatNum+"",(String)boxType.getSelectedItem(),jtf3_1.getText().trim()}) ;
//插入一个订单表
sql = "select t_id from tickets where t_date=? and t_seatId=? and t_type=?" ;
String sellTicketId = dataHandle.queryOneString(sql, new String[]{jtf3_1.getText().trim(),sellSeatNum+"",(String)boxType.getSelectedItem()}) ;
System.out.println("卖出的票的id:"+sellTicketId);
boolean b2 = dataHandle.update("insert into orders values(?||seq_orders.nextval,?,?,?)", new String[]{"O",user.getU_id(),sellTicketId,currenTime}) ;
//更新 bank表
String remainBalance = (balance-currentPrice)+"" ;
boolean b3 = dataHandle.update("update bank set b_balance=? where b_name=? and b_u_name=? and b_u_card=?", new String[]{remainBalance,bankName,user.getU_name(),user.getU_idcard()}) ;
System.out.println(b1+" "+b2+" "+b3+" ");
if(b1 && b2 && b3){
JOptionPane.showMessageDialog(null, "<html>恭喜"+user.getU_name()+"订票成功"+"<br>票号为:"+sellTicketId+"<br>座位号:"+(String)boxType.getSelectedItem()+" ZX"+sellSeatNum+"<br>登机时间:"+jtf3_1.getText().trim()+" "+selectFlightInfo.getF_start_time()+"<br>票价 :"+priceField.getText()+"</html>") ;
//产生一个票
FileOperation fileOperation = new FileOperation() ;
boolean b4 = fileOperation.saveTickets(selectSeat.get(0), user, " ZX"+sellSeatNum, (String)boxType.getSelectedItem(), jtf3_1.getText().trim(),sellTicketId) ;
if(b4){
JOptionPane.showMessageDialog(null, "票已保存在path/"+sellTicketId+"下") ;
}else {
JOptionPane.showMessageDialog(null, "票保存失败!!") ;
}
//将 这个 票的id 跟 银行卡号加入到一个hashMap里。。方便以后 退票
Bank bank = dataHandle.queryOneBank("select * from bank where b_u_name=? and b_u_card=? and b_name=?", new String[]{user.getU_name(),user.getU_idcard(),bankName},user) ;
//加载map信息
HashMap<String, Bank> map = fileOperation.loadBank() ;
if(map==null){
map = new HashMap<String, Bank>() ;//防止 第一次的时候 没有值
}
map.put(sellTicketId, bank) ;//放一个值
//保存到文件 里
fileOperation.saveBank(map) ;
}else{
JOptionPane.showMessageDialog(null, "订票失败") ;
}
card.show(ticketSearchPanel, "two") ;
this.query() ;
}
}
public void clear(){
this.jtf1.setText("") ;
this.jtf2.setText("") ;
this.jtf3.setText("") ;
this.jcBox.setSelectedIndex(0) ;
}
public JPanel threePanel(){
JPanel jPanel = new JPanel(new BorderLayout()) ;
jPanel.setOpaque(false) ;
//上面是一个空panel
JPanel blankTop = new JPanel() ;
blankTop.setOpaque(false) ;
blankTop.setPreferredSize(new Dimension(Tookit.getScreen().width,103)) ;
jPanel.add(blankTop,BorderLayout.NORTH) ;
JPanel center = new JPanel(new BorderLayout()) ;
center.setOpaque(false) ;
JPanel top = new JPanel(new GridLayout(2, 7, 63, 30)) ;
top.setOpaque(false) ;
JLabel id = new JLabel("航班号",JLabel.CENTER) ;
JLabel type = new JLabel("舱位",JLabel.CENTER) ;
JLabel price = new JLabel("价格",JLabel.CENTER) ;
JLabel name = new JLabel("姓名",JLabel.CENTER);
JLabel cardType = new JLabel("证件类型",JLabel.CENTER) ;
JLabel cardNum = new JLabel("证件号码") ;
JLabel telNum = new JLabel("手机号码") ;
idField = new JTextField() ;
idField.setEditable(false) ;
boxType = new JComboBox(remainType) ;//录用数据
priceField = new JTextField() ;
priceField.setEditable(false) ;
JTextField nameField = new JTextField(user.getU_name()) ;
nameField.setEditable(false) ;
JComboBox boxCardType = new JComboBox(new String[]{"身份证","学生证","居民证"}) ;
JTextField cardNumField = new JTextField(user.getU_idcard()) ;
cardNumField.setEditable(false) ;
JTextField telNumField = new JTextField(user.getU_telephone()) ;
telNumField.setEditable(false) ;
top.add(id) ;
top.add(type) ;
top.add(price) ;
top.add(name) ;
top.add(cardType) ;
top.add(cardNum) ;
top.add(telNum) ;
top.add(idField) ;
top.add(boxType) ;
top.add(priceField) ;
top.add(nameField) ;
top.add(boxCardType) ;
top.add(cardNumField) ;
top.add(telNumField) ;
//top.setOpaque(false) ;
center.add(top,BorderLayout.NORTH) ;
//监听
boxType.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if(remainType.size()!=0){
//有舱位
String string = (String)boxType.getSelectedItem() ;
for(Seat seat :selectSeat){
if(seat.getS_type().equals(string)){
priceField.setText(seat.getS_price()+"") ;
break ;
}
}
}
}
}) ;
//中间是一个
//JPanel c = new JPanel() ;
String s = "<html>1.一张有效身份证件同一乘车日期同一车次只能购买一张车票。 <br>2.购票时可使用的有效身份证件包括:中华人民共和国居民身份证、港澳居民来往内地通行证、台湾居民来往大陆通行证和按规定可使用的有效护照。<br>3. 购买儿童票时,乘车儿童有有效身份证件的,请填写本人有效身份证件信息。乘车儿童没有有效身份证件的,应使用同行成年人的有效身份证件信息;购票时不受前条限制,<br>4.但购票后、开车前须办理换票手续方可进站乘车。 <br>5.购买学生票时,须在我的常用联系人中登记乘车人的学生详细信息。学生票乘车时间限为每年的暑假6月1日至9月30日、寒假12月1日至3月31日。购票后、开车前,须办理换票手续方可进站乘车。换票时,新生凭录取通知书,毕业生凭学校书面证明,其他凭学生优惠卡。 <br>购买残疾军人(伤残警察)优待票的,须在购票后、开车前办理换票手续方可进站乘车。换票时,不符合规定的减价优待条件,没有有效中华人民共和国残疾军人证或中华<br>人民共和国伤残人民警察证的,不予换票,所购车票按规定办理退票手续。</html>";
JLabel text = new JLabel(s) ;
center.add(text) ;
JPanel bottom = new JPanel() ;
bottom.setOpaque(false) ;
JButton reSelect = new JButton("重新选择");
reSelect.addActionListener(this) ;
reSelect.setFont(Tookit.getFont1()) ;
reSelect.setBackground(new Color(0xA9CAF3)) ;
JButton cancelSelect = new JButton("取消订单");
cancelSelect.addActionListener(this) ;
cancelSelect.setFont(Tookit.getFont1()) ;
cancelSelect.setBackground(new Color(0xA9CAF3)) ;
JButton subSelect = new JButton("提交订单");
subSelect.addActionListener(this) ;
subSelect.setFont(Tookit.getFont1()) ;
subSelect.setBounds(180, 220, 120, 30) ;
subSelect.setBackground(new Color(0xA9CAF3)) ;
bottom.add(reSelect) ;
bottom.add(cancelSelect) ;
bottom.add(subSelect) ;
center.add(bottom,BorderLayout.SOUTH) ;
jPanel.add(center) ;
//下面是一个空panel
JPanel blankbottom = new JPanel() ;
blankbottom.setOpaque(false) ;
blankbottom.setPreferredSize(new Dimension(Tookit.getScreen().width,103)) ;
jPanel.add(blankbottom,BorderLayout.SOUTH) ;
return jPanel ;
}
public JPanel fourPanel(){
JPanel jPanel = new JPanel(new BorderLayout()) ;
jPanel.setOpaque(false) ;
//上面是一个空panel
JPanel blankTop = new JPanel() ;
blankTop.setOpaque(false) ;
blankTop.setPreferredSize(new Dimension(Tookit.getScreen().width,103)) ;
jPanel.add(blankTop,BorderLayout.NORTH) ;
JPanel center = new JPanel(new BorderLayout()) ;
center.setOpaque(false) ;
jlTop = new JLabel() ;
jlTop.setOpaque(false) ;
center.add(jlTop,BorderLayout.NORTH) ;//中间北部
//中间是一个janel
//上面
c = new JPanel() ;
c.setOpaque(false) ;
center.add(c) ;//中间的中间
//中间的南部
JPanel jPanel3 = new JPanel(new GridLayout(2, 1)) ;
jPanel3.setOpaque(false) ;
JLabel jlBottom = new JLabel("<html>1.请您选择支付银行。建议使用中国工商银行、中国农业银行、中国银行、招商银行、中国建设银行的银行卡,支付请直接点击相应银行的<br>按钮;如果您使用其他银行的银行卡,请点击“中国银联”按钮。<br>2.您点击支付银行后,将进入银行页面。请遵守相关银行规定进行操作。您在银行页面上进行的任何操作及其产生的任何法律后果,将按照<br>您与银行之间签订的合同处理。本网站不承担任何责任。</html>") ;
jPanel3.add(jlBottom) ;
JPanel jPanel2 = new JPanel() ;
jPanel2.setOpaque(false) ;
JButton reSelect1 = new JButton("重新选择");
reSelect1.addActionListener(this) ;
reSelect1.setFont(Tookit.getFont1()) ;
reSelect1.setBackground(new Color(0xA9CAF3)) ;
JButton onLine = new JButton("网上支付");
onLine.addActionListener(this) ;
onLine.setFont(Tookit.getFont1()) ;
onLine.setBounds(180, 220, 120, 30) ;
onLine.setBackground(new Color(0xA9CAF3)) ;
jPanel2.add(reSelect1) ;
jPanel2.add(onLine) ;
jPanel3.add(jPanel2) ;
//jPanel3.add(jlBottom)
center.add(jPanel3,BorderLayout.SOUTH) ;
jPanel.add(center) ;
//下面是一个空panel
JPanel blankbottom = new JPanel() ;
blankbottom.setOpaque(false) ;
blankbottom.setPreferredSize(new Dimension(Tookit.getScreen().width,103)) ;
jPanel.add(blankbottom,BorderLayout.SOUTH) ;
return jPanel ;
}
/**
* 开始查询
*/
public void query (){
String startCity = null ,endCity = null,startDate = null,startTime ;
if(!isGoing){
//表示 是第一个页面进入
System.out.println("-------");
startCity = this.jtf1.getText().trim() ;
endCity = this.jtf2.getText().trim();
startDate = this.jtf3.getText().trim() ;//需要作 判断
startTime = (String)this.jcBox.getSelectedItem() ;
}else {
startCity = this.jtf1_1.getText().trim() ;
endCity = this.jtf2_1.getText().trim();
startDate = this.jtf3_1.getText().trim() ;//需要作 判断
startTime = (String)this.jcBox_1.getSelectedItem() ;
}
//拆分
System.out.println(startTime);
String str[] = startTime.split("-") ;
//判断 是不是全为空
if(startCity.equals("") || endCity.equals("") || startDate.equals("")){
JOptionPane.showMessageDialog(TicketSearchPanel.this, "请输入数据!!") ;
return ;
}
//检查日期是不是有误
if(!checkInfo.isTrue(startDate)){
JOptionPane.showMessageDialog(null, "日期不正确,请重新输入!") ;
return ;
}
isGoing = true ;
card.show(ticketSearchPanel, "two") ;
//首先根据 出发城市跟到达城市 查出所有 这个路线的航班地点表的Id
String sql = "select * from flight_addr where a_city=?" ;
String[] paraStartCity = {startCity} ;
String[] paraEndCity = {endCity};
//查出所有 出发城市的航班地点Id号
Vector<FlightAddr> startCityIds = dataHandle.quertyMulInfo(sql, paraStartCity) ;
//如果为空null,,表示 没有该起点城市 机场。。。。。需要转承、、、、
//查出所有 到达城市的航班地点Id号
Vector<FlightAddr> endCityIds = dataHandle.quertyMulInfo(sql, paraEndCity) ;
//查出所有 的 从出发城市到到达城市 航班 飞机信息
fInfos = dataHandle.queryMulFlightInfo(startCityIds, endCityIds,str) ;
if(fInfos.size()==0){
//表示没有直达的飞机
JLabel jLabel = new JLabel("<html>没有直达飞机,是否<font color=#FF0000 size=7>转承</font></html>",JLabel.CENTER) ;
jLabel.setFont(Tookit.getFont2()) ;
jsp.setViewportView(jLabel) ;
//预订按钮不可见
order.setEnabled(false) ;
}else {
order.setEnabled(true) ;
//查出所有 这个航班飞机的座位详细信息
seats = new Vector<Vector<Seat>>() ;
for(FlightInfo fInfo:fInfos){
Vector<Seat> seat = dataHandle.querySeatsInfo("select * from seat where f_number=?", new String[]{fInfo.getF_number()},fInfo) ;
seats.add(seat) ;
// System.out.println(fInfo.getF_number()+" "+fInfo.getF_start().getA_city()+" "+fInfo.getF_start().getA_air()+" "+fInfo.getF_end().getA_city()+" " +fInfo.getF_end().getA_air()+" "+fInfo.getF_start_time()+" "+fInfo.getF_end_time());
}
//创建一个数据模型
//放一个jtable
jTable = new JTable();
stmModel = new SearchTableModel(seats,startDate) ;
this.jTable.setModel(stmModel) ;
//MyButtonRenderer buttonRenderer= new MyButtonRenderer(jTable, 12) ;
//jTable.getColumn("购票").setCellRenderer(buttonRenderer) ;//设置 一个button 在Jtable上
jTable.setRowHeight(60) ;
jTable.setBackground(new Color(0xA9CAF3)) ;
jsp.setViewportView(jTable);
}
}
public void order(){
//得到 选中的行
int selectedRow = jTable.getSelectedRow() ;
if(selectedRow==-1){
JOptionPane.showMessageDialog(null, "至少选 中一行进行预订") ;
return ;
}
//跳到第三个面板 上
//得到User信息
//得到 Seat信息
String selectFlightId = (String)stmModel.getValueAt(selectedRow, 0) ;
//判断这个jtf3_1.getText().trim()日期 是否有航班动态
String state =dataHandle.queryOneString("select fs_state from state where fs_date=? and fs_number=?", new String[]{jtf3_1.getText().trim(),selectFlightId}) ;
System.out.println(state);
if(state!=null){
if(state.matches(".*取消.*|.*延迟.*|.*推迟.*")){
JOptionPane.showMessageDialog(null, "此航班在"+jtf3_1.getText().trim()+"已被取消,请关注航班动态信息") ;
return ;
}
}
for(FlightInfo fInfo: fInfos){
if(fInfo.getF_number().equals(selectFlightId)){
selectFlightInfo = fInfo ;
break;
}
}
for (Vector<Seat> v : seats) {
for(Seat seat:v){
if(seat.getfInfo().equals(selectFlightInfo)){
selectSeat = v ;
break ;
}
}
}
if(selectFlightInfo==null || selectSeat==null){
JOptionPane.showMessageDialog(null, "数据出错!!") ;
return ;
}
//选择的余数 经济舱 商务舱 头等舱
String num1 = (String)stmModel.getValueAt(selectedRow, 8) ;
String num2 = (String)stmModel.getValueAt(selectedRow, 9) ;
String num3 = (String)stmModel.getValueAt(selectedRow, 10) ;
//JOptionPane.showMessageDialog(null,jTable.getColumnName(8) ) ;
//System.out.println(num1+" "+num2+" "+num3);
remainType.removeAllElements() ;//移除所有 的元 素 防止 返回再次点入
if(num1.matches("[1-9][0-9]*")){
//表示 经济舱有票
System.out.println(num1);
remainType.add(jTable.getColumnName(8)) ;
}
if(num2.matches("[1-9][0-9]*")){
//表示 经济舱有票
remainType.add(jTable.getColumnName(9)) ;
}
if(num3.matches("[1-9][0-9]*")){
//表示 经济舱有票
remainType.add(jTable.getColumnName(10)) ;
}
System.out.println(remainType.size());
boxType.setSelectedIndex(0) ;
idField.setText(selectFlightId) ;
card.show(ticketSearchPanel, "three") ;
//得到
}
@Override
public void mouseClicked(MouseEvent e) {
if(e.getSource() instanceof JLabel){
bankName = ((JLabel)e.getSource()).getText().trim() ;
}
}
@Override
public void mouseEntered(MouseEvent e) {
if(e.getSource() instanceof JLabel){
JLabel mjlJLabel = ((JLabel)e.getSource()) ;
mjlJLabel.setEnabled(true) ;
mjlJLabel.setForeground(Tookit.getColor()) ;
mjlJLabel.setCursor(new Cursor(Cursor.HAND_CURSOR)) ;
}
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
if(e.getSource() instanceof JLabel){
JLabel mjlJLabel = ((JLabel)e.getSource()) ;
mjlJLabel.setEnabled(false) ;
mjlJLabel.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)) ;
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
}
源码获取:博客首页 "资源" 里下载!