急求! 谢谢各位了!
设计一个多线程程序,模拟银行业务办理。应包括:
       1)该银行可以办理8种业务;
       2)3个业务处理线程模拟银行营业员处理业务,业务处理时间按照业务类型而变化;
       3)使用随机数时间模拟客户到达银行需要办理不同业务,客户需要办理何种业务也从银行可办理业务中随机生成;
       4)在处理完200个业务后打印出客户列表,包括以下项目:
          (客户名称,客户到达时间,客户办理业务类型,客户所用时间)
       5)计算并打印客户平均办理业务时间;

解决方案 »

  1.   

    下面是我的代码,自己实力不行,希望你们能帮我改改,谢谢了!
    class bank1 implements Runnable{ 
    int count = 0; 
    boolean flag1 = false;        //flag1 flag2 flag2 用于判断营业员是否在忙 ,为true表示正在工作。 
    boolean flag2 = false; 
    boolean flag3 = false; 
    boolean flag4 = false; //判断对象 wait中是否有等待的客户 ,为true表示有等待的客户。 
    List<People1>  wait = new ArrayList();                    //创建一个List 类型的对象 wait,用来存放排队的客户    没有等待直接办理业的也被放在wait里面。 
    List<People1>  peoples = new ArrayList(); //创建 一个List 类型的对象 People1s 用来存放已近完成业务的客户列表 
    Thread banker1,banker2,banker3,customer; 
    public bank1(){ 
    banker1= new Thread(this); 
    banker1.setName("banker1"); 
    banker2= new Thread(this); 
    banker2.setName("banker2"); 
    banker3= new Thread(this); 
    banker3.setName("banker3"); 
    customer= new Thread(this);
    customer.setName("customer");
    customer.start();
    banker2.start();
    banker3.start();
    banker1.start();
    }  
    public void run(){ 
    if(Thread.currentThread().getName().equalsIgnoreCase("customer")){
    for(int i=1;i <=10;i++){      
    People1 people1 = new People1(null, null, null, 1);
    wait.add(people1);
    System.out.println(wait.size());
    peoples.add(people1);
    System.out.println("新客户");
    }
    }
    else if(Thread.currentThread().getName().equalsIgnoreCase("banker1")) {
    try {
    Thread.sleep(1);
    } catch (InterruptedException e1) {
    // TODO 自动生成 catch 块
    e1.printStackTrace();
    }
    System.out.println(wait.size());
    while((wait.size())!=0){ 
    System.out.println("b1");
    flag1=true; 
    switch ((int)(Math.random()*8)+1){ 
    case 1  : a();break; 
    case 2  : b();break; 
    case 3  : c();break; 
    case 4  : d();break; 
    case 5  : e();break; 
    case 6  : f();break; 
    case 7  : g();break; 
    case 8  : h();break; 
    }    
    //System.out.println("agh");
    count++; 
    wait.remove(0); //业务员处理一个业务  wait中的第一个元素就被删掉了。 
    flag1=false; 

    }
    else if(Thread.currentThread().getName().equalsIgnoreCase("banker2")){ 
    try {
    Thread.sleep(1);
    } catch (InterruptedException e2) {
    // TODO 自动生成 catch 块
    e2.printStackTrace();
    }
    System.out.println(wait.size());
    System.out.println(wait.size());
    while(wait.size() !=0){ 
    System.out.println("b2");
    flag2=true; 
    switch ((int)(Math.random()*8)+1){ 
    case 1  : a();break; 
    case 2  : b();break; 
    case 3  : c();break; 
    case 4  : d();break; 
    case 5  : e();break; 
    case 6  : f();break; 
    case 7  : g();break; 
    case 8  : h();break; 
    }  

    count++;  
    wait.remove(0); 
    flag2=false; 


    else if(Thread.currentThread().getName().equals("banker3")){ 
    try {
    Thread.sleep(1);
    } catch (InterruptedException e3) {
    // TODO 自动生成 catch 块
    e3.printStackTrace();
    }
    System.out.println(wait.size());
    System.out.println(wait.size());
    while(wait.size()!=0){ 
    System.out.println("b3");
    flag3=true; 
    switch ((int)(Math.random()*8)+1){ 
    case 1  : a();break; 
    case 2  : b();break; 
    case 3  : c();break; 
    case 4  : d();break; 
    case 5  : e();break; 
    case 6  : f();break; 
    case 7  : g();break; 
    case 8  : h();break; 
    }   

    count++; 
    wait.remove(0); 
    flag2=false; 

    } //if(count == 10)
    //dump();
    }   

    public  void a(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"a",1 );  
    peoples.add(b); 

    public  void b(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"b",1 );  
    peoples.add(b); 

    public  void c(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"c",2);  
    peoples.add(b); 

    public  void d(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"d",2);  
    peoples.add(b); 

    public  void e(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"e",3);  
    peoples.add(b); 

    public  void f(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"f",3);  
    peoples.add(b); 


    public  void g(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"g",4);  
    peoples.add(b); 

    public  void h(){ 
    People1 b=new People1("客户"+count,wait.get(0).getarriveTime(),"h",4);  
    peoples.add(b); 

    void dump(){//显示所有学生对象信息 
    Iterator <People1> iterator = peoples.iterator(); 
    while(iterator.hasNext()){ 
    People1 people = (People1)iterator.next(); 
    people.dump();


    }
    class People1 {     
    private String name;
    private String type;
    private int needTime;
    public People1 (String name, Date arriveTime,String type,int needTime){
    this.name = name;
    this.type = type;
    this.needTime = needTime;
    }
    public String getName() {
    return name;
    }

    public  Date getarriveTime() { 
    Date nowTime = new Date();      
    return  nowTime;
    }

    public String getType() {
    return type;
    }
    public int getNeedTime() {
    return needTime;
    }
    public void dump(){
    System.out.println("客户名称"+getName());
    System.out.println("客户到达时间"+getarriveTime());
    System.out.println("客户办理业务类型"+getType());
    System.out.println("客户所用时间"+getNeedTime());

    }
    }
    public class ThreadBank1 { 
    public static void main(String[] args) {  
    bank1 a = new bank1(); 
    // Thread b = new Thread(a);
    // b.start();

      

  2.   

    虽然lz是新手,但还是要奉劝lz一句,代码要规范啊,你的代码让人提不起兴趣看啊,太乱了。
      

  3.   

    楼主代码要规范 看看下面的线程同步问题在银行中是必须考虑的http://blog.csdn.net/mengxiangyue/article/details/6871219
      

  4.   

    很有潜力,刚学java就写银行系统