import java.awt.Color;
import java.awt.FlowLayout;
import java.util.*;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;import javax.swing.JFrame;
import javax.swing.event.AncestorListener;
public class TrainTicketClass extends JFrame implements Runnable{
public static final int DEFAULT_WIDTH=500;
public static final int DEFAULT_HEIGHT=600;
private int TicketNum1=100;//重庆到贵阳火车票100张;
private int TicketNum2=200;//重庆到北京火车票200张;
private int TicketNum3=300;//重庆到广东火车票300张;
TrainTicketClass begin;
JButton []button=new JButton[6];
public TrainTicketClass(){
super("罗彬制作的火车站售票系统模拟");
}
public void run(){
Thread.sleep(1000);
begin.TrainTicketClass1();
}

public void TrainTicketClass1(){

    JTextField text;
    
    text=new JTextField("欢迎来到火车站售票查询");
    getContentPane().add(text);
    SimpleJPanelClass panel=new SimpleJPanelClass();
    getContentPane().add(panel);

FlowLayout layout;
layout=new FlowLayout(FlowLayout.LEFT,10,30);
layout.setVgap(20);
layout.setHgap(200);
getContentPane().setLayout(layout); button[0]=new JButton("售票查询");//完成
button[1]=new JButton("退票办理");//完成
button[2]=new JButton("车次查询");//完成
button[3]=new JButton("票价查询");//完成
button[4]=new JButton("余票查询");//完成
button[5]=new JButton("车次到站时间查询");
getContentPane().add(button[0],"center");
getContentPane().add(button[1],"center");
getContentPane().add(button[2],"center");
getContentPane().add(button[3],"center");
getContentPane().add(button[4],"center");
getContentPane().add(button[5],"center");
button[0].addActionListener(new TicketCheckBookTicket());//售票查询的监听器类
//button[1].addAncestorListener(new ()); /*
button[0].addActionListener((ActionListener) this);
button[1].addActionListener((ActionListener) this);
button[2].addActionListener((ActionListener) this);
button[3].addActionListener((ActionListener) this);
button[4].addActionListener((ActionListener) this);
button[5].addActionListener((ActionListener) this);
*/
this.setLocation(300,300);
this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
this.setVisible(true);

}
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
TrainTicketClass frame=new TrainTicketClass();
Thread t1=new Thread();
t1.start();
//TicketCheckBookTicket checkbookticket=new TicketCheckBookTicket();
//TrainTicketClass thread=new TrainTicketClass();


frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }

//button[0].addActionListener(new TicketCheckBookTicket());//售票查询的监听器类 //乘客购票
class TicketCheckBookTicket implements ActionListener{//购票的监听器

public void actionPerformed(ActionEvent event) {
       
Scanner in=new Scanner(System.in);
// TODO Auto-generated method stub
int number;
boolean quit=true;
System.out.println();
System.out.println("1:重庆-----〉贵阳");
System.out.println("2:重庆-----〉北京");
System.out.println("3:重庆-----〉广东");
System.out.println("请选择要购买的车次:");
number=in.nextInt();
while(quit){
switch(number){
case 1:BookTicket_cq_gy();//订购重庆到贵阳的火车票
       break;
case 2:BookTicket_cq_bj();//订购重庆到北京的火车票
       break;
case 3:BookTicket_cq_gd();//订购重庆到广东的火车票
           break;
default:System.out.println("是否继续订购(Y/N)");
       break;
}
}
}
        


//订购重庆到贵阳的火车票
public void BookTicket_cq_gy(){
synchronized(this){
if(TicketNum1>0){

System.out.println("恭喜你成功订购一张重庆到贵阳的车票");
TicketNum1--;
}
else{
System.out.println("不好意思,重庆到贵阳的车票已经卖完");
}
}
}

//订购重庆到北京的火车票
public void BookTicket_cq_bj(){
synchronized(this){
if(TicketNum2>0){
System.out.println("恭喜你成功订购一张重庆到北京的火车票");
TicketNum2--;
}
else{
System.out.println("不好意思,重庆到北京的火车票已卖完");
    }

      }
}
//订购重庆到广东的火车票
public void BookTicket_cq_gd(){
synchronized(this){
if(TicketNum3>0){
System.out.println("恭喜你成功订购一张重庆到广东的火车票");
TicketNum3--;

else{
System.out.println("不好意思,重庆到广东的火车票已卖完");
}
}
  }
}

//乘客购票到此完成
class TicketRemainTicket implements ActionListener{//查询各个车次剩余票数查询的监听器 @Override
public void actionPerformed(ActionEvent event) {
Scanner in=new Scanner(System.in);
// TODO Auto-generated method stub
int number;
boolean quit=true;
System.out.println();
System.out.println("1:重庆-----〉贵阳");
System.out.println("2:重庆-----〉北京");
System.out.println("3:重庆-----〉广东");
System.out.println("请选择要查询的车次:");
number=in.nextInt();
while(quit){
switch(number){
case 1:RemainTicket_cq_gy();//重庆到贵阳的剩余火车票
       break;
case 2:RemainTicket_cq_bj();//重庆到北京的剩余火车票
       break;
case 3:RemainTicket_cq_gd();//重庆到广东的剩余火车票
           break;
}
}

}
public void RemainTicket_cq_gy(){//查询重庆到贵阳的剩余火车票
if(TicketNum1<=0){
System.out.println("重庆到贵阳的火车票已全部售完");
}
else{
System.out.println("重庆到贵阳的火车票剩余"+TicketNum1+"张");
}
}
public void RemainTicket_cq_bj(){//查询重庆到北京的剩余火车票
if(TicketNum2<=0){
System.out.println("重庆到北京的火车票已全部售完");
}
else{
System.out.println("重庆到北京的火车票剩余"+TicketNum2+"张");
}
}
public void RemainTicket_cq_gd(){//查询重庆到广东的剩余火车票
if(TicketNum3<=0){
System.out.println("重庆到广东的火车票已全部售完");

}
else{
System.out.println("重庆到广东的火车票剩余"+TicketNum3+"张");
}
}

}

//查询票剩余到此完成
class TicketCancel implements ActionListener{//办理火车票退票的监听器

public void actionPerformed(ActionEvent event) {
Scanner in=new Scanner(System.in);
// TODO Auto-generated method stub
int number;
boolean quit=true;
System.out.println();
System.out.println("1:重庆-----〉贵阳");
System.out.println("2:重庆-----〉北京");
System.out.println("3:重庆-----〉广东");
System.out.println("请选择要退票的车次:");
number=in.nextInt();
while(quit){
switch(number){
case 1:CancelTicket_cq_gy();//重庆到贵阳的剩余火车票
       break;
case 2:CancelTicket_cq_bj();//重庆到北京的剩余火车票
       break;
case 3:CancelTicket_cq_gd();//重庆到广东的剩余火车票
           break;
}
}


}
//退重庆到贵阳的票
public void CancelTicket_cq_gy(){

System.out.println("是否确定退票(1:退票/2:不退票)");
Scanner in =new Scanner(System.in);
char choice;
choice=(char) in.nextInt();
if(choice=='1'){
synchronized(this){
System.out.println("恭喜你成功退票(重庆--〉贵阳)");
TicketNum1++;
}
}else{
System.out.println("输入有误,退票失败,不给你机会返回到主界面再给你解释,懒得再加代码了");
}
 }
//退重庆到广东的票
public void CancelTicket_cq_bj(){//
System.out.println("是否确定退票(1:退票/2:不退票)");
Scanner in =new Scanner(System.in);
char choice;
choice=(char) in.nextInt();
if(choice=='1'){
synchronized(this){
System.out.println("恭喜你成功退票(重庆--〉北京)");
TicketNum1++;
}
}else{
System.out.println("输入有误,退票失败,不给你机会返回到主界面再给你解释,懒得再加代码了");
}
}
public void CancelTicket_cq_gd(){
System.out.println("是否确定退票(1:退票/2:不退票)");
Scanner in =new Scanner(System.in);
char choice;
choice=(char) in.nextInt();
if(choice=='1'){
synchronized(this){
System.out.println("恭喜你成功退票(重庆-〉广东)");
TicketNum1++;
}
}else{
System.out.println("输入有误,退票失败,不给你机会返回到主界面再给你解释,懒得再加代码了");
}
}

  }

}
自学java不到一个月,想实现一个简单的火车订票系统,我想实现的是当运行时出现java gui用户界面,然后选择相应选项,比如订票,退票,车次查询,我遇到情况时当我点击订票出发监听器的时候,假如有多个人同时进行操作,那么多线程的代码应该怎么加,加在监听器方法里面还是哪里,没用数据库知识,我只是做个简单的。终究原因是当出发监听器运行多线程,客户静茹等待,模拟订票,退票等等的小号时间,就想知道那段代码怎么加。自学,帮忙解答。多线程

解决方案 »

  1.   

    //乘客退票到此完成
    class TicketCheCi implements ActionListener{//车次查询的监听器 @Override
    public void actionPerformed(ActionEvent event) {
    Scanner in=new Scanner(System.in);
    // TODO Auto-generated method stub
    int number;
    boolean quit=true;
    System.out.println();
    System.out.println("1:重庆-----〉贵阳");
    System.out.println("2:重庆-----〉北京");
    System.out.println("3:重庆-----〉广东");
    System.out.println("请选择要退票的车次:");
    number=in.nextInt();
    while(quit){
    switch(number){
    case 1:CheCiTicket_cq_gy();//重庆到贵阳的剩余火车票
           break;
    case 2:CheCiTicket_cq_bj();//重庆到北京的剩余火车票
           break;
    case 3:CheCiTicket_cq_gd();//重庆到广东的剩余火车票
               break;
    }
    }

    }
    //下面必须用数据库连接,我就不写数据库的了。
    public void CheCiTicket_cq_gy(){//查询重庆到贵阳的车次
    System.out.println("重庆到贵阳的火车有K9517"+"余票:"+TicketNum1);
    }
    public void CheCiTicket_cq_bj(){//查询重庆到贵阳的车次
    System.out.println("重庆到北京的火车有8867"+"余票:"+TicketNum2);
    }
    public void CheCiTicket_cq_gd(){//查询重庆到贵阳的车次
    System.out.println("重庆到广东的火车有D8818"+"余票:"+TicketNum3);
    }
    }
    //乘客查询余票到此完成
    class TicketPrice implements ActionListener{ @Override
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    Scanner in=new Scanner(System.in);
    // TODO Auto-generated method stub
    int number;
    boolean quit=true;
    System.out.println();
    System.out.println("1:重庆-----〉贵阳");
    System.out.println("2:重庆-----〉北京");
    System.out.println("3:重庆-----〉广东");
    System.out.println("请选择要退票的车次:");
    number=in.nextInt();
    while(quit){
    switch(number){
    case 1:PriceTicket_cq_gy();//重庆到贵阳的剩余火车票
           break;
    case 2:PriceTicket_cq_bj();//重庆到北京的剩余火车票
           break;
    case 3:PriceTicket_cq_gd();//重庆到广东的剩余火车票
               break;
    }
    }

    }
    //重庆到重庆的票价查询
    public void PriceTicket_cq_gy(){
    System.out.println("重庆到贵阳:");
    System.out.println("硬座:90");
    System.out.println("卧铺:120");

    }
    //重庆到北京的票价
    public void PriceTicket_cq_bj(){
    System.out.println("重庆到北京:");
    System.out.println("硬座:300");
    System.out.println("卧铺:400");
    }
    //重庆到广东的票价
    public void PriceTicket_cq_gd(){
    System.out.println("重庆到广东:");
    System.out.println("硬座:300");
    System.out.println("卧铺:400");
    }
    }

    //乘客查询目的站到达时间到此完成

    class ArriveTime implements ActionListener{//车次到达的监听器 @Override
    public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    // TODO Auto-generated method stub
    Scanner in=new Scanner(System.in);
    // TODO Auto-generated method stub
    int number;
    boolean quit=true;
    System.out.println();
    System.out.println("1:重庆-----〉贵阳");
    System.out.println("2:重庆-----〉北京");
    System.out.println("3:重庆-----〉广东");
    System.out.println("请选择要退票的车次:");
    number=in.nextInt();
    while(quit){
    switch(number){
    case 1:ArriveTime_cq_gy();//重庆到贵阳的剩余火车票
           break;
    case 2:ArriveTime_cq_bj();//重庆到北京的剩余火车票
           break;
    case 3:ArriveTime_cq_gd();//重庆到广东的剩余火车票
               break;
    }
    }

    }
    //到达贵阳时间
    public void ArriveTime_cq_gy(){
    System.out.println("到达贵阳时间为早上7点左右");

    }
    //到达广东时间
    public void ArriveTime_cq_bj(){
    System.out.println("到达广东时间为早上晚上10点左右");

    }
    //到达北京时间
    public void ArriveTime_cq_gd(){
    System.out.println("到达北京时间为早上10点左右");

    }
    }这是剩余的
      

  2.   

    首先我下表格给大家呈现的是一个java gui的界面,包含订票,退票办理,车次查询,车次到站时间。然后点击相应的按钮,完成相应的操作,当然这其中比如订票要用到线程同步以及多线程,基本的我已经写好了,至于数据库方面的先不管,只想知道怎么是先点击按钮开始多线程并使线程同步。
      

  3.   

    最简陋的方法...
    YourWorkingThread worker = new YourWorkingThread();
    // 这里可能设置写参数,比如你的票,或者用户信息什么乱七八糟,可能需要的数据
    ....
    worker.start();
      

  4.   

    你的代码没有层次化,java是面向对象的,不知道是不是你贴代码没有有代码版的问题,我觉得你的代码好乱。应该先把代码模块化