給老師安排課表JAVA專案及登入視窗的實現
阿新 • • 發佈:2019-10-14
實現一個安排課表的Java實驗。
有以下幾點要求:
①用所給的教師姓名進行課表安排
②用所給的地點進行課表安排
③不得有重複的課程名稱出現
④將資訊寫入到檔案裡
⑤用視窗來進行實現
package com.xu; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; import java.io.*; public class manageclass extends JFrame{ public manageclass() throws FileNotFoundException { this.setTitle("請登入"); this.setLayout(null); //建立容器 Container c=this.getContentPane(); //建立課程名稱標籤 JLabel jl1=new JLabel("課程名稱:"); //建立任課老師標籤 JLabel jl2=new JLabel("任課老師:"); //建立上課地點標籤 JLabel jl3=new JLabel("上課地點:"); //建立課程名稱文字框 final JTextField jt=new JTextField(); //建立任課老師文字框 final JTextField jt2=new JTextField(); //建立上課地點文字框 final JTextField jt3=new JTextField(); //建立儲存按鈕 JButton jb=new JButton("儲存"); //在容器中加入所有標籤和按鈕 c.add(jl1); c.add(jl2); c.add(jl3); c.add(jt); c.add(jt2); c.add(jt3); c.add(jb); //設定標籤和文字框,按鈕的位置 //x,y,width,height jl1.setBounds(10, 20, 90, 40); jl2.setBounds(10, 70, 90, 40); jl3.setBounds(10, 120, 90, 40); jt.setBounds(80, 20, 210, 40); jt2.setBounds(80,70,210,40); jt3.setBounds(80, 120,210,40); jb.setBounds(100, 180, 60, 30); //監聽器的功能實現 jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub boolean flag = true; //初始化檔案的寫入 File file=new File("E:\\資料.txt"); Writer out=null; try { out = new FileWriter(file,true); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //來判斷任課老師是否是規定的老師姓名 if(jt2.getText().trim().equals(teacher[0])||jt2.getText().trim().equals(teacher[1])||jt2.getText().trim().equals(teacher[2])||jt2.getText().trim().equals(teacher[3])||jt2.getText().trim().equals(teacher[4])) { //來判斷上課地點是否為規定的上課地點 if(jt3.getText().trim().equals(where[0])||jt3.getText().trim().equals(where[1])||jt3.getText().trim().equals(where[2])||jt3.getText().trim().equals(where[3])) { //對第一個資料的儲存 if(num==0) name[num]=jt.getText().trim(); //對於其它的資料儲存 else { for(int i=0;i<num;i++) { //如果和之前的課程名稱相重,則不進行新增,並重新輸入 if(jt.getText().trim().equals(name[i])) { JOptionPane.showMessageDialog(null, "課程重複,請重新輸入!"); flag=false; break; } //否則就將該資訊加入到數組裡 else name[num]=jt.getText().trim(); } } //如果不重 if(flag==true) { t1[num]=jt2.getText().trim(); w1[num]=jt3.getText().trim(); String s="課程名稱:"+name[num]+" 任課老師:"+t1[num]+" 上課地點:"+w1[num]; //再輸出視窗輸出資訊同時寫入到檔案裡 System.out.println(s); try { out.write(s); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { out.write("\n"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //注意要將緩衝區刷新出來 try { out.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } num++; } } else { JOptionPane.showMessageDialog(null, "無該地點!"); } } else { JOptionPane.showMessageDialog(null, "無該老師!"); } //注意將文字框清除 jt.setText(""); jt2.setText(""); jt3.setText(""); } }); //設定介面大小及可見 this.setSize(500,300); this.setVisible(true); this.setResizable(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } //課程名稱 static String[] name=new String[1000]; //總共資訊條數 static int num=0; //老師資訊 static String[] teacher=new String[1000]; //地點資訊 static String[] where=new String[1000]; //實際儲存老師資訊 static String[] t1=new String[1000]; //實際儲存地點資訊 static String[] w1=new String[1000]; public static void main(String[] args) throws IOException { // TODO Auto-generated method stub teacher[0]="王建民"; teacher[1]="劉立嘉"; teacher[2]="劉丹"; teacher[3]="王輝"; teacher[4]="楊子光"; where[0]="一教"; where[1]="二教"; where[2]="三教"; where[3]="基教"; new manageclass(); } }
實現一個簡單的登入介面,其中註冊頁面被鎖定//後期會改善,驗證碼採用隨機數的原理,可以任意的生成一個小寫/大寫/數字1-9的六位驗證碼
package com.JTextField; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Random; import javax.swing.*; import java.awt.Font; import java.awt.Graphics; /* * 2018316 * xulifeng * 2019-9-21 */ public class JTextFieldTest extends JFrame{ //private static final long serialVersionUID = -1929142760043481303L; static String s=new String(); public String random() { Random r=new Random(); String result = ""; //進行6次迴圈 for(int i = 0 ; i < 6 ; i ++) { //生成一個97~122的int型的整數 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //將intValue強制轉換為char後連線到result後面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } return result; } public JTextFieldTest() { this.setTitle("請登入"); this.setLayout(null); //建立容器 Container c=this.getContentPane(); //建立使用者名稱標籤 JLabel jl1=new JLabel("使用者名稱:"); //建立密碼標籤 JLabel jl2=new JLabel("密碼:"); //建立驗證碼標籤 JLabel jl3=new JLabel("驗證碼:"); //建立文字框 final JTextField jt=new JTextField(); //建立驗證碼輸入文字框 final JTextField jt2=new JTextField(); //建立驗證碼比對文字框按鈕 s=this.random(); JButton jb3=new JButton(s); jb3.setFont(new Font("楷體", Font.BOLD,20)); jb3.setForeground(Color.pink); //建立密碼框 final JPasswordField jp=new JPasswordField(); jp.setEchoChar('*'); //建立登入按鈕 JButton jb=new JButton("登入"); //建立註冊按鈕 JButton jb2=new JButton("註冊"); jb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub if(jt.getText().trim().equals("xlf")&&new String(jp.getPassword()).trim().equals("fengge")&&jt2.getText().trim().equals(s)) { JOptionPane.showMessageDialog(null, "登陸成功!"); System.exit(-1); } else if(jt.getText().trim().equals("")||new String(jp.getPassword()).trim().equals("")||jt2.getText().trim().equals("")) { JOptionPane.showMessageDialog(null, "不能為空"); } else { JOptionPane.showMessageDialog(null, "登入錯誤"); } jt.setText(""); jp.setText(""); jt2.setText(""); Random r=new Random(); String result = ""; //進行6次迴圈 for(int i = 0 ; i < 6 ; i ++) { //生成一個97~122的int型的整數 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //將intValue強制轉換為char後連線到result後面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } s=result; jb3.setText(s); } }); jb2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub JOptionPane.showMessageDialog(null, "註冊成功\n使用者名稱:xlf\n密碼:fengge"); jt.setText(""); jp.setText(""); jt2.setText(""); Random r=new Random(); String result = ""; //進行6次迴圈 for(int i = 0 ; i < 6 ; i ++) { //生成一個97~122的int型的整數 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int f=r.nextInt(2); //將intValue強制轉換為char後連線到result後面 if(f==1) result = result + (char)intVal; else result = result + (char)x; } s=result; jb3.setText(s); } }); jb3.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub Random r=new Random(); String result = ""; //進行6次迴圈 for(int i = 0 ; i < 6 ; i ++) { //生成一個97~122的int型的整數 int intVal = (r.nextInt(26) + 97); int x=(r.nextInt(9)+49); int y=(r.nextInt(26)+65); int f=r.nextInt(3); //將intValue強制轉換為char後連線到result後面 if(f==1) result = result + (char)intVal; else if(f==0) result = result + (char)x; else result = result + (char)y; } s=result; jb3.setText(s); } }); this.getRootPane().setDefaultButton(jb); c.add(jb); c.add(jb2); c.add(jl1); c.add(jl2); c.add(jl3); c.add(jt); c.add(jp); c.add(jt2); c.add(jb3); jl1.setBounds(10, 20, 90, 40); jt.setBounds(60, 20, 210, 40); jl2.setBounds(25, 70, 90, 40); jl3.setBounds(10, 120, 90, 40); jp.setBounds(60, 70, 210, 40); jt2.setBounds(60, 120,100,40); jb3.setBounds(180,120,100,40); jb.setBounds(100, 180, 60, 30); jb2.setBounds(100, 220, 60, 30); //設定窗體格式 this.setSize(500,300); this.setVisible(true); this.setResizable(true); this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); } public static void main(String[] args) { // TODO Auto-generated method stub new JTextFieldTest(); } }
這是對窗體的初步練習,後期有待提高下拉框的實現和註冊頁面的