码迷,mamicode.com
首页 > 其他好文 > 详细

实验任务四、实验任务五

时间:2017-10-05 16:14:31      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:密码   listen   on()   i++   标签   for   images   容器   退出   

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

程序设计思想:

  首先是登录界面的布局,因为组件不是很整齐,没有使用固定的布局,主界面的setLayout()参数设为null,用setBounds()对各个组件标签、文本框、按钮等进行自由布局。验证码用按钮的形式显示便于每点击以此按钮会触发验证码的事件,进行随机转换,重新生成一个新的6位验证码。验证码是先生成0~2的数,0、1、2分别代表数字、小写字母、大写字母出现的一定概率,再用ASCII表的对应值的随机数产生字符,循环6次组合成字符串。用户名和验证码处的文本框直接读入,而密码处的文本框则为了保护密码的安全性,采用JPasswordField进行定义,使输进去的密码变为*。登录按钮的触发事件,用户名不对则提示用户名不存在,密码不对则提示密码有误,验证码不对提示验证码有误,都正确则显示登陆成功,初始的用户名密码设成了自己的学号。快速注册也自动识别并提示注册成功。

程序流程图

                                                        技术分享

程序源代码:

package denglujiemian;

import java.awt.*;

import javax.swing.*;

import java.util.Random;

import java.awt.event.*;

public class Denglujiemian//定义Denglujiemian

{

    JFrame frame;//定义frame

    JLabel label1=new JLabel("登录名:");//定义标签1  label1为“登录名”

    JLabel label2=new JLabel("密码:");//定义标签2  label2为“密码”

    JLabel label3=new JLabel("验证码:");//定义标签3  label3为“验证码”

    JButton button1,button2,button3;//定义三个按钮分别为“登录”,“快速注册”,以及一个验证码按钮

    JPanel panel1=new JPanel();//面板1 panel1

    JPanel panel2=new JPanel();//面板2 panel2

    JTextArea text1,text3;//定义文本框text1,text3

    JPasswordField password=new JPasswordField();//定义密码文本框

    String s="";//定义验证码按钮上的字符串

    Random ran=new Random();

    String user_z,user_m;

    public static void main(String[] args) //主函数

    {

    Denglujiemian p=new Denglujiemian();//Denglujiemian类的实例化

    p.go();//对象p调用go函数

    }

    public void go()//定义go函数

    {

    

        frame=new JFrame("登录界面");//建立frame并命名为"登录界面"

        text1=new JTextArea(20,100);//建立text1文本框并定义大小为20,100

        password=new JPasswordField();//建立password密码文本框

        text3=new JTextArea(20,100);//建立text3文本框并定义大小为20,100

        button3=new JButton();//建立验证码按钮

        button1=new JButton("登录");//建立登录按钮并定义为"登录"

        button2=new JButton("快速注册");//建立快速注册按钮并定义为"快速注册"

        for(int i=0;i<6;i++)//产生验证码,需循环6

        {

         int x=ran.nextInt(3);//产生0~2三个中的随机数,分别对应数字,小写字母,大写字母

         switch(x)//switch语句判断

         {

             case 0://x0

         {

         int q=ran.nextInt(10);//产生q0~9的随机数

         s=s+q;//验证码字符串加上一个

         continue;//跳出switch小循环

         }

             case 1://x1

             {

             char w=(char) (ran.nextInt(26)+65);//产生q65~91的随机数,并强制转换成ASCII表上的字符(小写字母)

             s=s+w;//验证码字符串加上一个

             continue;//跳出switch小循环

             }

             case 2://x2

             {

             char e=(char) (ran.nextInt(26)+97);//产生q97~126的随机数,并强制转换成ASCII表上的字符(大写字母)

             s=s+e;//验证码字符串加上一个

             continue;//跳出switch小循环

             }

         }

        }

        Container contentPane=frame.getContentPane();//定义容器

        contentPane.setLayout(null);//不设置固定的布局

        contentPane.setBackground(Color.GRAY);//设置背景为灰色

        //大容器里把所有组件都添加进去

        contentPane.add(label1);

        contentPane.add(label2);

        contentPane.add(label3);

        contentPane.add(text1);

        contentPane.add(password);

        contentPane.add(text3);

        contentPane.add(button3);

        contentPane.add(button1);

        contentPane.add(button2);

        //分别设置组件的位置和长宽

        label1.setBounds(10,10,60,30);

        label2.setBounds(10,40,60,30);

        label3.setBounds(10,70,60,30);

        text1.setBounds(70,15,200,20);

        password.setBounds(70,45,200,20);

        text3.setBounds(70,75,110,20);

        button3.setBounds(185,75,85,20);

        button1.setBounds(100,100,100,20);

        button2.setBounds(100,130,100,20);

        button3.setText(s);//将系统生成的6位验证码设置成验证码按钮的名称

        frame.setSize(300,200);//设置面板的大小

        frame.setResizable(false);//设置面板大小不可修改

        frame.setVisible(true);//显示面板

        button3.addActionListener(new ActionListener()//验证码按钮使用匿名类添加事件

        {

         public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写

         {

         s="";//定义空字符串

         for(int i=0;i<6;i++)//产生验证码,需循环6

                {

                 int x=ran.nextInt(3);//产生0~2三个中的随机数,分别对应数字,小写字母,大写字母

                 switch(x)//switch语句判断

                 {

                     case 0://x0

                 {

                 int q=ran.nextInt(10);//产生q0~9的随机数

                 s=s+q;//验证码字符串加上一个

                 continue;//跳出switch小循环

                 }

                     case 1://x1

                     {

                     char w=(char) (ran.nextInt(26)+65);//产生q65~91的随机数,并强制转换成ASCII表上的字符(小写字母)

                     s=s+w;//验证码字符串加上一个

                     continue;//跳出switch小循环

                     }

                     case 2://x2

                     {

                     char g=(char) (ran.nextInt(26)+97);//产生q97~126的随机数,并强制转换成ASCII表上的字符(大写字母)

                     s=s+g;//验证码字符串加上一个

                     continue;//跳出switch小循环

                     }

                 }

                }

          button3.setText(s);//字符串s设置为验证码按钮的名称

         }

        });

        button1.addActionListener(new ActionListener()//登录按钮使用匿名类添加事件

        {

         public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写

         {

         String s1=text1.getText();//得到登录名处的文本框的内容

         char[] p=password.getPassword();

         String s2=new String(p);//得到密码处的文本框的内容

         String s3=text3.getText();//得到验证码处的文本框的内容

         if(s1.equals("20163493")&&s2.equals("20163493")&&s3.equals(s))//判断字符串是否相等

         JOptionPane.showMessageDialog(frame,"登录成功!","登录信息",JOptionPane.PLAIN_MESSAGE);//如果登录名密码验证码都正确,弹出登录成功

         else if(s1.equals("20163493")&&!s2.equals("20163493")&&s3.equals(s))//判断字符串是否相等

         JOptionPane.showMessageDialog(frame,"用户名或密码有误!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名验证码都正确,密码不正确,弹出用户名或密码有误

         else if(!s1.equals("20163493"))//判断字符串是否相等

         JOptionPane.showMessageDialog(frame,"该用户名不存在!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名不正确,弹出该用户名不存在

         else if(s1.equals("20163493")&&s2.equals("20163493")&&!s3.equals(s))//判断字符串是否相等

         JOptionPane.showMessageDialog(frame,"验证码错误!","登录信息",JOptionPane.ERROR_MESSAGE);//如果登录名密码都正确,验证码不正确,弹出验证码错误

         }

        

        });

        button2.addActionListener(new ActionListener()//快速注册按钮使用匿名类添加事件

        {

public void actionPerformed(ActionEvent e)//ActionListener接口中的函数重写

{

user_z=text1.getText();//得到登录名处的文本框的内容

char[] p=password.getPassword();

         user_m=new String(p);//得到密码处的文本框的内容

         String s3=text3.getText();//得到验证码处的文本框的内容

         JOptionPane.showMessageDialog(frame,"注册成功!","注册信息",JOptionPane.PLAIN_MESSAGE);//读入登录名密码验证码,弹出注册成功

}

        });

    }  

}

实现结果截图:

                                                                                    技术分享

                                                                                     技术分享

                                                                                      技术分享

                                                                                        技术分享

                                                                                        技术分享

                                                                                        技术分享

实验总结:

对于实现不同功能的按钮来说,使用匿名类的方式添加事件比较方便,不易出现错误。

 

[实验任务五:猜数字]

程序设计思想:

  当程序开始执行时,系统自动生成一个1~100的随机整数。引用do while语句使用户循环输入一个猜测的数值,将其由字符串类型转换成整型数值并与系统生成数进行判断。如果大于,则弹出消息框提示“猜大了!”,否则,则弹出消息框提示“猜小了!”。循环此操作直到用户猜的数值和系统生成数相等,跳出循环,弹出消息框提示猜到正确数值,程序退出。

程序流程图:

                                                   技术分享

程序源代码:

package caishuzi;

import java.util.Random;

import javax.swing.*;

public class Caishuzi//定义Caishuzi

{

    public static void main(String[] args)//主函数

    {

        String s;//定义s为要输入的猜测数值

        int d;//定义d为字符串s转换为的整型数值

        Random random=new Random();//随机数

        int t=random.nextInt(100)%(100)+1;//生成t1~100的随机整数

        do//do while循环语句输入并判断

        {

        s=JOptionPane.showInputDialog( "请输入您猜测的数值:" );//弹出消息框,进行猜测数值的输入

        d=Integer.parseInt(s);//字符串s转化为整型数值d

        if(d>t)//如果猜测数值大于系统随机数

             JOptionPane.showMessageDialog(null,"猜大了!",

           "Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示“猜大了”

        else if(d<t)//如果猜测数值小于系统随机数

            JOptionPane.showMessageDialog(null,"猜小了!",

           "Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示“猜小了”

        }while(d!=t);//满足循环的条件

        JOptionPane.showMessageDialog(null,"恭喜,正确猜出数字!"+t,

           "Results",JOptionPane.PLAIN_MESSAGE );//弹出消息框提示猜出正确数字

    }

}

运行结果截图:

                                                                           技术分享

                                                                              技术分享

                                                                                 技术分享

                                                                                技术分享

                                                                                      技术分享

                                                                                     技术分享

编译错误分析:

无编译错误出现

实验任务四、实验任务五

标签:密码   listen   on()   i++   标签   for   images   容器   退出   

原文地址:http://www.cnblogs.com/guobin-/p/7629289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!