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

程序设计思想:

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

运行结果截图:

  

   

   

   

   

   

编译错误分析:

  无编译错误出现

转载于:https://www.cnblogs.com/guobin-/p/7629289.html

实验任务四:登录界面、实验任务五:猜数字相关推荐

  1. Java实验01 Java编程基础(猜数字游戏、随机点名器)

    实验一 Java编程基础 实验1-1 随机点名器 一.实验描述 1. 任务描述 编写一个随机点名的程序,使其能够在全班同学中随机点中某一名同学的名字.随机点名器具备3个功能,包括存储全班同学姓名.总览 ...

  2. 带登录页面的猜数字小游戏

    本内容包含:登录页面+注册页面+猜数字小游戏页面 登录页面:手机号+密码+校验码+随机校验码+登录按钮+注册 注册页面:手机号+密码+密码确认+注册按钮 游戏页面:标题(提示框)+输入框+猜一下+重置 ...

  3. 判断和循环(实战收尾篇2—猜数字游戏)

    讲完循环和判断我们就可以上游戏啦!兴奋吧,激动吧,直接进入正题,来看! 在进入猜数字游戏之前,先让我们看一下模拟登录(后面用于游戏登录) 目录 1.模拟登录 2.猜数字 1.模拟登录 //模拟登录#p ...

  4. Java实验二猜数字游戏,JAVA-第2周实验-猜数字游戏

    JAVA--第2周实验--猜数字游戏 /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reser ...

  5. C语言中猜数大小的实验报告,猜数字游戏实验报告

    <猜数字游戏实验报告>由会员分享,可在线阅读,更多相关<猜数字游戏实验报告(17页珍藏版)>请在人人文库网上搜索. 1.C语言课程设计报告题 目:猜数字游戏班 级:通信工程组 ...

  6. 实验4-1-9 猜数字游戏 (15 分)

    实验4-1-9 猜数字游戏 (15 分) 猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了("To ...

  7. C语言学习笔记07-2-循环的游戏实验:猜数字(附rand、srand函数说明)

    C语言猜数字游戏实验(07-1笔记的补充) 在C/C++编程练习中代码太多,不能明显体现有关分支.循环语句结构的实验变化,在此处单独归纳汇总一份我尝试过的三次猜数字游戏设计. 猜数字初版 #inclu ...

  8. Java实验2 猜数字游戏

    题目类别: 实验 关键字: Java语言数据类型.基本输入输出.控制语句和方法 内容要求: 1 . 使用Java语言编写一个程序,程序类型为"Java Application(Java应用) ...

  9. Java之猜数字与机动车实验

    猜数字 学过语言的人都知道,猜数字这个游戏在我们编程路上是一个很经典的例子,所以在这里我也将Java中的猜数字游戏记录下来. import java.util.Scanner; import java ...

最新文章

  1. Python趣味打怪:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
  2. python 拾遗(一)
  3. MYSQL数据库表大小计算,计算mysql数据库数据表的大小,不精确,只是大略的数据...
  4. CF936D World of Tank(思维dp)
  5. centos8 阿里云yum源_CentOS7更换阿里yum源
  6. 帆软报表在已经搭载服务器上开发_史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)...
  7. Jquery-无法有效获取当前窗口高度
  8. python视频培训班
  9. Python制作登陆界面(1)(超简单)
  10. iPhone--卡贴是什么
  11. unity LineRender结合多点触摸 实现拖拽 重复画线
  12. python使用matplotlib绘制3D图
  13. macOS开启高性能模式
  14. String.contains()方法
  15. h5嵌入android的视频播放器
  16. [HDU - 2852] KiKi's K-Number (树状数组+二分)
  17. CVE-2017-8464远程命令执行漏洞(震网漏洞)复现
  18. 4、CSS立体盒子动画——复仇者联盟
  19. vue3 openlayers--添加图片图标
  20. 2021-07-16 php获取法定节假日调休接口 http://tool.bitefu.net/jiari/vip.php?type=0apikey=123456d=‘.$day;

热门文章

  1. Lintcode 988解题思路和c++代码
  2. ARM指令集、Thumb指令集、Thumb-2指令集
  3. 一根29cm长的尺子,只允许在它上面刻7个刻度。
  4. 微软官方的.NET Framework API 参考网址
  5. 深度学习(计算机视觉)面试中问题(一)
  6. 人工智能再下一城,在多人扑克中大胜人类
  7. windows mysql 开启日志功能_Windows下开启mysql日志功能
  8. Python---编写一函数 Fabonacci(n),其中参数 n 代表第 n 次的迭代。
  9. VSCode切换默认终端为cmd
  10. 二进制在计算机电路中得到广泛的应用,电子技术与单片机的发展应用2喜欢就下吧(全文完整版)...