实验任务四:登录界面、实验任务五:猜数字

[实验任务四:登录界面]

程序设计思想:

  首先是登录界面的布局,因为组件不是很整齐,没有使用固定的布局,主界面的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 }

 

运行结果截图:

  

   

   

   

   

   

编译错误分析:

  无编译错误出现

posted @ 2017-10-05 15:37  我命倾尘  阅读(378)  评论(0编辑  收藏  举报