close

參考答案

import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class JDD02 extends Frame implements ItemListener
{
  BufferedWriter bw = null;
  BufferedReader br = null;
  
  //護士名字
  String name[] =new  String[4];
  String weekDay[] = {"週一","週二","週三","週四","週五"};

  //Panel pn1 包含了 Panel pn1a 及 Panel pn1b
  Panel pn1 = new Panel();

  //pn1a 用來放排班表
  Panel pn1a = new Panel();
  Choice chAM[] = new Choice[5];   //週一至週五早班
  Choice chPM[] = new Choice[5];   //週一至週五晚班
  Choice chNigh[] = new Choice[5]; //週一至週五夜班

  //pn1b 放的是每位護士的班次統計表
  Panel pn1b = new Panel();
  Label lname[]  = new Label[4];    //顯示每位護士名字
  int AM[] = new int[4];            //每一位護士早班次數
  int PM[] = new int[4];            //每一位護士晚班次數
  int Nigh[] = new int[4];            //每一位護士夜班次數
  Label lbAM[]   = new Label[4];    //顯示每一位護士早班次數
  Label lbPM[]   = new Label[4];    //顯示每一位護士晚班次數
  Label lbNigh[] = new Label[4];    //顯示每一位護士夜班次數

  //pn3 是最下方的按鈕區
  Panel pn3 = new Panel();
  Button b1 = new Button("輸出");
  Button b2 = new Button("離開");

  public JDD02()
  {
    super("急診科護士排班表");
    addWindowListener(new WinListener());
  } 
  public static void main(String[] args)
  {
    JDD02 JD02 = new JDD02();
    JD02.setup();
    JD02.setSize(400,300);
    JD02.setVisible(true);
  }

  void setup()
  {
    //請將護士的名單讀入
      try{
    br = new BufferedReader(new FileReader("list.txt"));
    int i=0;
    while(br.ready()){
        name[i++] = br.readLine().trim();
    }
    br.close();
      }catch(Exception ex)
      {
          ex.printStackTrace();
      }
      
    setpn1();
    setpn3();
    add(pn1);
    add(pn3,BorderLayout.SOUTH);
  }

  //設定排班表內容
  void setpn1()
  {
    pn1a.setLayout(new GridLayout(4,0));
    pn1a.add(new Label(" "));
    pn1a.add(new Label(weekDay[0]));
    pn1a.add(new Label(weekDay[1]));
    pn1a.add(new Label(weekDay[2]));
    pn1a.add(new Label(weekDay[3]));
    pn1a.add(new Label(weekDay[4]));
    pn1a.add(new Label("早班"));

    for(int h=0; h<chAM.length; h++)
    {
       chAM[h] = new Choice();
       chPM[h] = new Choice();
       chNigh[h] = new Choice(); //週一至週五夜班
       //請將名單放入下拉式選單
       for(int i=0;i<name.length;i++)
       {
           chAM[h].add(name[i]);
           chPM[h].add(name[i]);
           chNigh[h].add(name[i]);
       }
       chAM[h].addItemListener(this);
       chPM[h].addItemListener(this);
       chNigh[h].addItemListener(this);
    }

    pn1a.add(chAM[0]);
    pn1a.add(chAM[1]);
    pn1a.add(chAM[2]);
    pn1a.add(chAM[3]);
    pn1a.add(chAM[4]);
    pn1a.add(new Label("晚班"));
    pn1a.add(chPM[0]);
    pn1a.add(chPM[1]);
    pn1a.add(chPM[2]);
    pn1a.add(chPM[3]);
    pn1a.add(chPM[4]);
    pn1a.add(new Label("夜班"));
    pn1a.add(chNigh[0]);
    pn1a.add(chNigh[1]);
    pn1a.add(chNigh[2]);
    pn1a.add(chNigh[3]);
    pn1a.add(chNigh[4]);
    //設定班別統計表
    pn1b.setLayout(new GridLayout(4,4));
    for(int a=0; a<lname.length; a++)
    {
      lname[a] = new Label(name[a]);
    }
    pn1b.add(new Label(" "));
    pn1b.add(lname[0]);
    pn1b.add(lname[1]);
    pn1b.add(lname[2]);
    pn1b.add(lname[3]);
    pn1b.add(new Label("早班"));
    lbAM[0] = new Label("");
    lbAM[1] = new Label("");
    lbAM[2] = new Label("");
    lbAM[3] = new Label("");
    pn1b.add(lbAM[0]);
    pn1b.add(lbAM[1]);
    pn1b.add(lbAM[2]);
    pn1b.add(lbAM[3]);
    pn1b.add(new Label("晚班"));
    lbPM[0] = new Label("");
    lbPM[1] = new Label("");
    lbPM[2] = new Label("");
    lbPM[3] = new Label("");
    pn1b.add(lbPM[0]);
    pn1b.add(lbPM[1]);
    pn1b.add(lbPM[2]);
    pn1b.add(lbPM[3]);
    pn1b.add(new Label("夜班"));
    lbNigh[0] = new Label("");
    lbNigh[1] = new Label("");
    lbNigh[2] = new Label("");
    lbNigh[3] = new Label("");
    pn1b.add(lbNigh[0]);
    pn1b.add(lbNigh[1]);
    pn1b.add(lbNigh[2]);
    pn1b.add(lbNigh[3]);
    pn1.setLayout(new GridLayout(0,1));
    pn1.add(pn1a);
    pn1.add(pn1b);
  }

  void setpn3()
  {
     b1.addActionListener(new act());
     pn3.add(b1);

     b2.addActionListener(new act());
     pn3.add(b2);
  }

  //對Item的變動作出即時反應
  public void itemStateChanged(ItemEvent e)
  {
    //先將資料清空
    for(int i=0; i<AM.length; i++)
    {
      AM[i] =0;
      PM[i] =0;
      Nigh[i] = 0;
    }
    //請計算每一位護士早班次數
    for(int i=0;i<chAM.length;i++)
        for(int j=0;j<name.length;j++)
            if(chAM[i].getSelectedItem().equals(name[j]))
                AM[j]++;

    //請計算每一位護士晚班次數
    for(int i=0;i<chPM.length;i++)
        for(int j=0;j<name.length;j++)
            if(chPM[i].getSelectedItem().equals(name[j]))
                PM[j]++;

    //請計算每一位護士夜班次數
    for(int i=0;i<chNigh.length;i++)
        for(int j=0;j<name.length;j++)
            if(chNigh[i].getSelectedItem().equals(name[j]))
                Nigh[j]++;

    //將資料填入畫面
    for(int i=0; i<AM.length; i++)
    {
      lbAM[i].setText("" + AM[i]);
      lbPM[i].setText("" + PM[i]);
      lbNigh[i].setText("" + Nigh[i]);
    }
  }

  //建立一個用來處理按鈕的 ActionListener inner class
  class act implements ActionListener
  {
    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == b2)
        {
           System.exit(0);
        }
        else if(e.getSource() == b1)
        {
           StringBuffer sbAM = new StringBuffer("");
           StringBuffer sbPM = new StringBuffer("");
           StringBuffer sbNight = new StringBuffer("");
           //請撰寫這部份,將排班資料寫入檔案
           try
           {
                   System.out.println("Writing JDA02.txt");
                   
                   bw = new BufferedWriter(new FileWriter("JDA02.txt"));
                   bw.write("值班通知書");
                   bw.newLine();
                   bw.newLine();
                   
                   for(int h=0;h<name.length;h++){
                       sbAM= new StringBuffer("");
                       sbPM=new StringBuffer("");
                       sbNight=new StringBuffer("");
                       bw.write(name[h]+".");
                       bw.newLine();
                       bw.newLine();
                       
                       for(int i = 0;i<chAM.length;i++)
                           if(chAM[i].getSelectedItem().equals(name[h]))
                               sbAM.append(" ").append(weekDay[i]);
                       
                       bw.write("早班"+sbAM);
                       bw.newLine();
                       
                       for(int i = 0;i<chPM.length;i++)
                           if(chPM[i].getSelectedItem().equals(name[h]))
                               sbPM.append(" ").append(weekDay[i]);
                       
                       bw.write("晚班"+sbPM);
                       bw.newLine();
                       
                       for(int i = 0;i<chNigh.length;i++)
                           if(chNigh[i].getSelectedItem().equals(name[h]))
                               sbNight.append(" ").append(weekDay[i]);
                       
                       bw.write("夜班"+sbNight);
                       bw.newLine();
                       bw.newLine();
                   }
                   bw.close();
           }
           catch (Exception ex) {
              ex.printStackTrace();
           }
        }
     }
  }

  /* 覆寫 WindowAdapter 中的 windowClosing()
     讓關閉視窗的按鈕有作用
  */
  class WinListener extends WindowAdapter
  {
    public void windowClosing(WindowEvent e)
    {
      e.getWindow().dispose();
      System.exit(0);
    }
  }
}

 

 

執行結果

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Dino 的頭像
    Dino

    Dino`s Note

    Dino 發表在 痞客邦 留言(0) 人氣()