實驗任務四:登入介面、實驗任務五:猜數字

我命傾塵發表於2017-10-05

[實驗任務四:登入介面]

程式設計思想:

  首先是登入介面的佈局,因為元件不是很整齊,沒有使用固定的佈局,主介面的setLayout()引數設為null,用setBounds()對各個元件標籤、文字框、按鈕等進行自由佈局。驗證碼用按鈕的形式顯示便於每點選以此按鈕會觸發驗證碼的事件,進行隨機轉換,重新生成一個新的6位驗證碼。驗證碼是先生成0~2的數,0、1、2分別代表數字、小寫字母、大寫字母出現的一定概率,再用ASCII表的對應值的隨機數產生字元,迴圈6次組合成字串。使用者名稱和驗證碼處的文字框直接讀入,而密碼處的文字框則為了保護密碼的安全性,採用JPasswordField進行定義,使輸進去的密碼變為*。

  登入按鈕的觸發事件,使用者名稱不對則提示使用者名稱不存在,密碼不對則提示密碼有誤,驗證碼不對提示驗證碼有誤,都正確則顯示登陸成功,初始的使用者名稱密碼設成了自己的學號。快速註冊也自動識別並提示註冊成功。

程式流程圖:

   

程式原始碼:

  1 package denglujiemian;
  2 import java.awt.*;
  3 import javax.swing.*;
  4 import java.util.Random;
  5 import java.awt.event.*;
  6 public class Denglujiemian//定義Denglujiemian類
  7 {
  8     JFrame frame;//定義frame
  9     JLabel label1=new JLabel("登入名:");//定義標籤1  label1為“登入名”
 10     JLabel label2=new JLabel("密碼:");//定義標籤2  label2為“密碼”
 11     JLabel label3=new JLabel("驗證碼:");//定義標籤3  label3為“驗證碼”
 12     JButton button1,button2,button3;//定義三個按鈕分別為“登入”,“快速註冊”,以及一個驗證碼按鈕
 13     JPanel panel1=new JPanel();//皮膚1 panel1
 14     JPanel panel2=new JPanel();//皮膚2 panel2
 15     JTextArea text1,text3;//定義文字框text1,text3
 16     JPasswordField password=new JPasswordField();//定義密碼文字框
 17     String s="";//定義驗證碼按鈕上的字串
 18     Random ran=new Random();
 19     String user_z,user_m;
 20     public static void main(String[] args) //主函式
 21     {
 22         Denglujiemian p=new Denglujiemian();//Denglujiemian類的例項化
 23         p.go();//物件p呼叫go函式
 24     }
 25     public void go()//定義go函式
 26     {
 27         frame=new JFrame("登入介面");//建立frame並命名為"登入介面"
 28         text1=new JTextArea(20,100);//建立text1文字框並定義大小為20,100
 29         password=new JPasswordField();//建立password密碼文字框
 30         text3=new JTextArea(20,100);//建立text3文字框並定義大小為20,100
 31         button3=new JButton();//建立驗證碼按鈕
 32         button1=new JButton("登入");//建立登入按鈕並定義為"登入"
 33         button2=new JButton("快速註冊");//建立快速註冊按鈕並定義為"快速註冊"
 34         for(int i=0;i<6;i++)//產生驗證碼,需迴圈6次
 35         {
 36              int x=ran.nextInt(3);//產生0~2三個中的隨機數,分別對應數字,小寫字母,大寫字母
 37              switch(x)//switch語句判斷
 38              {
 39                  case 0://x為0時
 40                  {
 41                      int q=ran.nextInt(10);//產生q為0~9的隨機數
 42                      s=s+q;//驗證碼字串加上一個
 43                      continue;//跳出switch小迴圈
 44                  }
 45                  case 1://x為1時
 46                  {
 47                  char w=(char) (ran.nextInt(26)+65);//產生q為65~91的隨機數,並強制轉換成ASCII表上的字元(小寫字母)
 48                  s=s+w;//驗證碼字串加上一個
 49                  continue;//跳出switch小迴圈
 50                  }
 51                  case 2://x為2時
 52                  {
 53                  char e=(char) (ran.nextInt(26)+97);//產生q為97~126的隨機數,並強制轉換成ASCII表上的字元(大寫字母)
 54                  s=s+e;//驗證碼字串加上一個
 55                  continue;//跳出switch小迴圈
 56                  }
 57              }
 58         }
 59         Container contentPane=frame.getContentPane();//定義容器
 60         contentPane.setLayout(null);//不設定固定的佈局
 61         contentPane.setBackground(Color.GRAY);//設定背景為灰色
 62         //大容器裡把所有元件都新增進去
 63         contentPane.add(label1);
 64         contentPane.add(label2);
 65         contentPane.add(label3);
 66         contentPane.add(text1);
 67         contentPane.add(password);
 68         contentPane.add(text3);
 69         contentPane.add(button3);
 70         contentPane.add(button1);
 71         contentPane.add(button2);
 72         //分別設定元件的位置和長寬
 73         label1.setBounds(10,10,60,30);
 74         label2.setBounds(10,40,60,30);
 75         label3.setBounds(10,70,60,30);
 76         text1.setBounds(70,15,200,20);
 77         password.setBounds(70,45,200,20);
 78         text3.setBounds(70,75,110,20);
 79         button3.setBounds(185,75,85,20);
 80         button1.setBounds(100,100,100,20);
 81         button2.setBounds(100,130,100,20);
 82         button3.setText(s);//將系統生成的6位驗證碼設定成驗證碼按鈕的名稱
 83         frame.setSize(300,200);//設定皮膚的大小
 84         frame.setResizable(false);//設定皮膚大小不可修改
 85         frame.setVisible(true);//顯示皮膚
 86         button3.addActionListener(new ActionListener()//驗證碼按鈕使用匿名類新增事件
 87         {
 88              public void actionPerformed(ActionEvent e)//ActionListener介面中的函式重寫
 89              {
 90                  s="";//定義空字串
 91                  for(int i=0;i<6;i++)//產生驗證碼,需迴圈6次
 92                 {
 93                      int x=ran.nextInt(3);//產生0~2三個中的隨機數,分別對應數字,小寫字母,大寫字母
 94                      switch(x)//switch語句判斷
 95                      {
 96                          case 0://x為0時
 97                          {
 98                              int q=ran.nextInt(10);//產生q為0~9的隨機數
 99                              s=s+q;//驗證碼字串加上一個
100                              continue;//跳出switch小迴圈
101                          }
102                          case 1://x為1時
103                          {
104                              char w=(char) (ran.nextInt(26)+65);//產生q為65~91的隨機數,並強制轉換成ASCII表上的字元(小寫字母)
105                              s=s+w;//驗證碼字串加上一個
106                             continue;//跳出switch小迴圈
107                          }
108                          case 2://x為2時
109                          {
110                              char g=(char) (ran.nextInt(26)+97);//產生q為97~126的隨機數,並強制轉換成ASCII表上的字元(大寫字母)
111                              s=s+g;//驗證碼字串加上一個
112                              continue;//跳出switch小迴圈
113                          }
114                      }
115                 }
116               button3.setText(s);//字串s設定為驗證碼按鈕的名稱
117              }
118         });
119         button1.addActionListener(new ActionListener()//登入按鈕使用匿名類新增事件
120         {
121              public void actionPerformed(ActionEvent e)//ActionListener介面中的函式重寫
122              {
123                  String s1=text1.getText();//得到登入名處的文字框的內容
124                  char[] p=password.getPassword();
125                  String s2=new String(p);//得到密碼處的文字框的內容
126                  String s3=text3.getText();//得到驗證碼處的文字框的內容  if((s1.equals("20163493")&&s2.equals("20163493")&&s3.equals(s))||    (s1.equals(user_z)&&s2.equals(user_m)&&s3.equals(s)))//判斷字串是否相等
127                    JOptionPane.showMessageDialog(frame,"登入成功!","登入資訊",JOptionPane.PLAIN_MESSAGE);//如果登入名密碼驗證碼都正確,彈出登入成功
128             else     if((s1.equals("20163493")&&!s2.equals("20163493"))||(s1.equals(user_z)&&!s2.equals(user_m)))//判斷字串是否相等
129                    JOptionPane.showMessageDialog(frame,"使用者名稱或密碼有誤!","登入資訊",JOptionPane.ERROR_MESSAGE);//如果登入名驗證碼都正確,密碼不正確,彈出使用者名稱或密碼有誤
130             else if((!s1.equals("20163493"))&&(!s1.equals(user_z)))//判斷字串是否相等
131                    JOptionPane.showMessageDialog(frame,"該使用者名稱不存在!","登入資訊",JOptionPane.ERROR_MESSAGE);//如果登入名不正確,彈出該使用者名稱不存在
132             else if((s1.equals("20163493")&&s2.equals("20163493")&&!s3.equals(s))||(s1.equals(user_z)&&s2.equals(user_m)&&!s3.equals(s)))//判斷字串是否相等
133                    JOptionPane.showMessageDialog(frame,"驗證碼錯誤!","登入資訊",JOptionPane.ERROR_MESSAGE);//如果登入名密碼都正確,驗證碼不正確,彈出驗證碼錯誤
134          }
135         });
136         button2.addActionListener(new ActionListener()//快速註冊按鈕使用匿名類新增事件
137         {
138              public void actionPerformed(ActionEvent e)//ActionListener介面中的函式重寫
139             {
140                 user_z=text1.getText();//得到登入名處的文字框的內容
141              char[] p=password.getPassword();
142              user_m=new String(p);//得到密碼處的文字框的內容
143              JOptionPane.showMessageDialog(frame,"註冊成功!","註冊資訊",JOptionPane.PLAIN_MESSAGE);//讀入登入名密碼驗證碼,彈出註冊成功
144         }
145         });
146     }  
147 }      

 

實現結果截圖:

   

   

   

   

  

   

實驗總結:

  對於實現不同功能的按鈕來說,使用匿名類的方式新增事件比較方便,不易出現錯誤。

[實驗任務五:猜數字]

程式設計思想:

  當程式開始執行時,系統自動生成一個1~100的隨機整數。引用do while語句使使用者迴圈輸入一個猜測的數值,將其由字串型別轉換成整型數值並與系統生成數進行判斷。如果大於,則彈出訊息框提示“猜大了!”,否則,則彈出訊息框提示“猜小了!”。

  迴圈此操作直到使用者猜的數值和系統生成數相等,跳出迴圈,彈出訊息框提示猜到正確數值,程式退出。

程式流程圖:

  

程式原始碼:

 1 package caishuzi;
 2 
 3 import java.util.Random;
 4 
 5 import javax.swing.*;
 6 
 7 public class Caishuzi//定義Caishuzi類
 8 
 9 {
10     public static void main(String[] args)//主函式
11     {
12         String s;//定義s為要輸入的猜測數值
13         int d;//定義d為字串s轉換為的整型數值
14         Random random=new Random();//隨機數
15         int t=random.nextInt(100)%(100)+1;//生成t為1~100的隨機整數
16         do//do while迴圈語句輸入並判斷
17         {
18             s=JOptionPane.showInputDialog( "請輸入您猜測的數值:" );//彈出訊息框,進行猜測數值的輸入
19             d=Integer.parseInt(s);//字串s轉化為整型數值d
20             if(d>t)//如果猜測數值大於系統隨機數
21                  JOptionPane.showMessageDialog(null,"猜大了!",
22            "Results",JOptionPane.PLAIN_MESSAGE );//彈出訊息框提示“猜大了”
23             else if(d<t)//如果猜測數值小於系統隨機數
24                 JOptionPane.showMessageDialog(null,"猜小了!",
25            "Results",JOptionPane.PLAIN_MESSAGE );//彈出訊息框提示“猜小了”
26         }
27         while(d!=t);//滿足迴圈的條件
28             JOptionPane.showMessageDialog(null,"恭喜,正確猜出數字!"+t,
29            "Results",JOptionPane.PLAIN_MESSAGE );//彈出訊息框提示猜出正確數字
30     }
31 }

 

執行結果截圖:

  

   

   

   

   

   

編譯錯誤分析:

  無編譯錯誤出現

相關文章