最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java簡(jiǎn)易登錄注冊(cè)小程序

 更新時(shí)間:2022年04月25日 09:26:54   作者:溫柔狠角色  
這篇文章主要為大家詳細(xì)介紹了Java圖形界面開(kāi)發(fā),簡(jiǎn)易登錄注冊(cè)小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

登錄注冊(cè)小代碼,將學(xué)過(guò)的一些小知識(shí)融合在一起進(jìn)行了使用,加深印象。本例中如果有注釋不詳細(xì)的地方,詳見(jiàn)其它博客。

功能介紹:簡(jiǎn)單的登錄注冊(cè)系統(tǒng),使用了數(shù)據(jù)庫(kù)sqlserver、單例模式、正則表達(dá)式以及圖形化開(kāi)發(fā)等知識(shí)。

1、在登錄界面,可以登錄或者注冊(cè)用戶。 注冊(cè)用戶界面,按照正則表達(dá)式規(guī)定的格式要求來(lái)輸入信息,若有誤,則重新輸入。
2、點(diǎn)擊注冊(cè),首先連接SQLserver數(shù)據(jù)庫(kù),連接成功則會(huì)判斷該用戶名是否已經(jīng)存在,若存在,則給出提示。反之則進(jìn)行注冊(cè)。
3、登錄界面,點(diǎn)擊登錄按鈕時(shí),首先與數(shù)據(jù)庫(kù)建立連接。按照用戶名和密碼來(lái)向數(shù)據(jù)庫(kù)中查找,若有,則登錄成功。反之給出提示。
4、利用單例模式,實(shí)現(xiàn)了只創(chuàng)建類(lèi)SQLserver的一個(gè)對(duì)象,大大節(jié)省了內(nèi)存開(kāi)銷(xiāo) 。
程序完整代碼見(jiàn):https://github.com/chaohuangtianjie994/A-login-register-System
5、基于此,可以進(jìn)行大量的拓展功能。 

代碼如下:

UserRegister.java 登錄界面。

package package1; 
/* 
 * 功能:登錄界面帶著注冊(cè)功能,彈出注冊(cè)界面。 
 * 將注冊(cè)的信息保存在數(shù)據(jù)庫(kù)中,并且可以進(jìn)行登錄操作。 
 * author:ywq 
 */ 
import javax.swing.*; 
 
import java.awt.*; 
import java.awt.event.*; 
import java.sql.*; 
 
public class UserRegister extends JFrame implements ActionListener{ 
  
 //定義登錄界面的組件 
  JButton jb1,jb2,jb3=null; 
  JRadioButton jrb1,jrb2=null; 
  JPanel jp1,jp2,jp3=null; 
  JTextField jtf=null; 
  JLabel jlb1,jlb2=null; 
  JPasswordField jpf=null; 
    
  
 public static void main(String[] args) 
 { 
  UserRegister ur=new UserRegister(); 
 } 
  
 public UserRegister() 
 { 
  //創(chuàng)建組件 
   //創(chuàng)建組件 
  jb1=new JButton("登錄"); 
  jb2=new JButton("注冊(cè)"); 
  jb3=new JButton("退出"); 
  //設(shè)置監(jiān)聽(tīng) 
  jb1.addActionListener(this); 
  jb2.addActionListener(this); 
  jb3.addActionListener(this); 
   
  jlb1=new JLabel("用戶名:"); 
  jlb2=new JLabel("密 碼:"); 
   
  jtf=new JTextField(10); 
  jpf=new JPasswordField(10); 
   
  jp1=new JPanel(); 
  jp2=new JPanel(); 
  jp3=new JPanel(); 
   
  jp1.add(jlb1); 
  jp1.add(jtf); 
   
  jp2.add(jlb2); 
  jp2.add(jpf); 
   
  jp3.add(jb1); 
  jp3.add(jb2); 
  jp3.add(jb3); 
  this.add(jp1); 
  this.add(jp2); 
  this.add(jp3); 
   
  this.setVisible(true); 
  this.setResizable(false); 
  this.setTitle("注冊(cè)登錄界面"); 
  this.setLayout(new GridLayout(3,1)); 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
  this.setBounds(300, 200, 300, 180); 
   
   
 } 
 
 @Override 
 public void actionPerformed(ActionEvent e) { 
   
  //監(jiān)聽(tīng)各個(gè)按鈕 
  if(e.getActionCommand()=="退出") 
  { 
   System.exit(0); 
  }else if(e.getActionCommand()=="登錄") 
  { 
   //調(diào)用登錄方法 
   this.login(); 
  }else if(e.getActionCommand()=="注冊(cè)") 
  { 
   //調(diào)用注冊(cè)方法 
   this.Regis(); 
  } 
   
 } 
  
 //注冊(cè)方法 
  public void Regis() { 
   
   
   this.dispose(); //關(guān)閉當(dāng)前界面 
   new UI(); //打開(kāi)新界面 

 } 
 
 //登錄方法 
 public void login() { 
   
  SQLserver s=new SQLserver(); 
  s.ConnectSQL(); 
  s.SQLverify(jtf.getText(), jpf.getText()); 
   
  this.jtf.setText(""); 
  this.jpf.setText(""); 
   
 } 
 
} 

UI.java 用于注冊(cè)的頁(yè)面顯示。使用了正則表達(dá)式來(lái)規(guī)定輸入的內(nèi)容。注冊(cè)時(shí)候,需要首先判斷用戶名是否存在,若存在,則給出提示,反之進(jìn)行注冊(cè)。

package package1; 
 
import java.awt.event.*; 
import java.awt.*; 
 
import javax.swing.*; 
 
/* 
 * 注冊(cè)界面。 
 */ 
class UI extends JFrame implements ActionListener{ 
 
 //定義組件 
 JFrame jf; 
 JPanel jp; 
 JLabel jl1,jl2,jl3,jl4; 
 JTextField jtf1,jtf2,jtf3,jtf4; 
 JButton jb1,jb2; 
  
 public UI() 
 { 
  //初始化組件 
  jf=new JFrame(); 
  jp=new JPanel(); 
  jl1=new JLabel("請(qǐng)輸入用戶名:"); 
  jtf1=new JTextField(10); 
  jtf1.setToolTipText("用戶名必須為3-6位字母_或者數(shù)字"); 
  jl2=new JLabel("請(qǐng)輸入密碼:"); 
  jtf2=new JTextField(10); 
  jtf2.setToolTipText("密碼必須為6位字母_或者數(shù)字"); 
  jl3=new JLabel("請(qǐng)輸入姓名:"); 
  jtf3=new JTextField(10); 
  jtf3.setToolTipText("姓名必須漢字2-4位"); 
  jl4=new JLabel("請(qǐng)輸入學(xué)號(hào):"); 
  jtf4=new JTextField(10); 
  jtf4.setToolTipText("學(xué)號(hào)必須為3-6位數(shù)字"); 
   
  jb1=new JButton("返回"); 
  jb1.setToolTipText("點(diǎn)我返回登錄界面哦"); 
  jb2=new JButton("注冊(cè)"); 
  jb1.addActionListener(this); 
  jb2.addActionListener(this); 
   
  jp.setLayout(new GridLayout(5,2)); 
   
  jp.add(jl1); 
  jp.add(jtf1); 
   
  jp.add(jl2); 
  jp.add(jtf2); 
   
  jp.add(jl3); 
  jp.add(jtf3); 
   
  jp.add(jl4); 
  jp.add(jtf4); 
   
  jp.add(jb1); 
  jp.add(jb2); 
   
  this.add(jp); 
  this.setTitle("注冊(cè)界面"); 
  this.setBounds(200, 100, 250, 150); 
  this.setVisible(true); 
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
//  this.setResizable(false); 
   

 } 

 public void actionPerformed(ActionEvent e) { 
  
  if(e.getActionCommand()=="返回") 
  { 
   this.dispose(); 
   new UserRegister(); 
//   System.out.println("-------"); 
    
  }else if(e.getActionCommand()=="注冊(cè)") 
  { 
    //調(diào)用注冊(cè)方法 
   this.zhuce(); 
    
  } 
   
 } 
 public void zhuce() 
 { 
  String regex1="\\w{3,6}"; //用戶名必須是3-6位 
  boolean flag1=jtf1.getText().matches(regex1); 
   
  String regex2="\\w{6}"; //密碼必須是6位 
  boolean flag2=jtf2.getText().matches(regex2); 
   
  String regex3="[\\u4e00-\\u9fa5]{2,4}"; //姓名必須是漢字2-4個(gè)字 
  boolean flag3=jtf3.getText().matches(regex3); 
   
  String regex4="\\d{3,6}"; //學(xué)號(hào)必須是3-6位 
  boolean flag4=jtf4.getText().matches(regex4); 
   
//  if(jtf1.getText()==null||jtf2.getText()==null||jtf3.getText()==null||jtf4.getText()==null) 
  if(flag1==false) 
  { 
   JOptionPane.showMessageDialog(null, "用戶名填寫(xiě)錯(cuò)誤,必須為3-6位字母_或者數(shù)字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf1.setText(""); 
  }else if(flag2==false) 
  { 
   JOptionPane.showMessageDialog(null, "密碼填寫(xiě)錯(cuò)誤,必須為6位字母_或者數(shù)字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf2.setText(""); 
  }else if(flag3==false) 
  { 
   JOptionPane.showMessageDialog(null, "姓名填寫(xiě)錯(cuò)誤,必須漢字2-4位", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf3.setText(""); 
  }else if(flag4==false) 
  { 
   JOptionPane.showMessageDialog(null, "學(xué)號(hào)填寫(xiě)錯(cuò)誤,必須為3-6位數(shù)字", "提示信息", JOptionPane.WARNING_MESSAGE); 
   jtf4.setText(""); 
  }else 
  {    
   //調(diào)用注冊(cè)方法/先檢查要注冊(cè)的用戶名是否存在 
    SQLserver ss=new SQLserver(); 
    ss.ConnectSQL(); 
    ss.ZhuceVerify(jtf1.getText()); 
    
//   ss.UserRegis(jtf1.getText(),jtf2.getText(),jtf3.getText(), jtf4.getText()); 
   this.jtf1.setText(""); 
   this.jtf2.setText(""); 
   this.jtf3.setText(""); 
   this.jtf4.setText(""); 
    
  } 
 } 
  
} 

SQLserver.java實(shí)現(xiàn)了與數(shù)據(jù)庫(kù)的連接以及查詢驗(yàn)證等各個(gè)功能。

package package1; 
 
import java.sql.*; 
 
import javax.swing.JOptionPane; 
/* 
 * 與數(shù)據(jù)庫(kù)相關(guān)的操作,單獨(dú)封裝成類(lèi) 
 */ 
 
class SQLserver { 
 
 Connection ct; 
 PreparedStatement ps; 
 ResultSet rs; 
 String user,pwd; 
  
 //將連接數(shù)據(jù)庫(kù)的方法封裝為一個(gè)方法 
 public void ConnectSQL() 
 { 
  try { 
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //加載驅(qū)動(dòng) 
    
   ct=DriverManager.getConnection("jdbc:odbc:ywq"); //得到連接 
    
   System.out.println("已成功連接數(shù)據(jù)庫(kù)..."); 
    
  } catch (Exception e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
  
 //注冊(cè)用戶的方法 
 public void UserRegis(String a,String b,String c,String d) 
 { 
  //創(chuàng)建火箭車(chē) 
  try { 
   ps=ct.prepareStatement("insert into users values(?,?,?,?)"); 
   ps.setString(1,a); 
   ps.setString(2,b); 
   ps.setString(3,c); 
   ps.setString(4,d); 
    
   //執(zhí)行 
   int i=ps.executeUpdate(); 
   if(i==1) 
   { 
    JOptionPane.showMessageDialog(null, "注冊(cè)成功","提示消息",JOptionPane.WARNING_MESSAGE); 
     
   }else 
   { 
    JOptionPane.showMessageDialog(null, "注冊(cè)失敗","提示消息",JOptionPane.ERROR_MESSAGE); 
   } 
    
    
  } catch (SQLException e) { 
   // TODO Auto-generated catch block 
   e.printStackTrace(); 
  } 
 } 
  
// 登錄驗(yàn)證方法 
 public void SQLverify(String a,String b) 
 { 
  try { 
   ps=ct.prepareStatement("select * from users where 用戶名=? and 密碼=? "); 
   ps.setString(1, a); 
   ps.setString(2, b); 
    
   // ResultSet結(jié)果集,大家可以把ResultSet理解成返回一張表行的結(jié)果集 
   rs = ps.executeQuery(); 
    
   if(rs.next()) 
   { 
    user = rs.getString(1); 
    pwd = rs.getString(2); 
    JOptionPane.showMessageDialog(null, "登錄成功!?。?, "提示消息", JOptionPane.WARNING_MESSAGE); 
    System.out.println("成功獲取到密碼和用戶名from數(shù)據(jù)庫(kù)"); 
    System.out.println(user + "\t" + pwd + "\t"); 
   }else 
   { 
    JOptionPane.showMessageDialog(null, "用戶名或者密碼錯(cuò)誤,請(qǐng)重新輸入!", "提示消息", JOptionPane.ERROR_MESSAGE); 
     
   } 
    
  } catch (SQLException e) { 
    
   e.printStackTrace(); 
  } 
 } 
  
 //注冊(cè)驗(yàn)證方法,判斷用戶名是否已經(jīng)存在 
 public void ZhuceVerify(String a) 
 { 
  try { 
   ps=ct.prepareStatement("select * from users where 用戶名=?"); 
//   System.out.println(ps); 
   ps.setString(1, a); 
    
   rs=ps.executeQuery(); 
   if(rs.next()) 
   { 
    JOptionPane.showMessageDialog(null, "該用戶名已經(jīng)存在", "提示信息", JOptionPane.WARNING_MESSAGE); 
   }else 
   { 
//    進(jìn)行注冊(cè) 
    UI ui=new UI(); 
    this.UserRegis(ui.jtf1.getText(),ui.jtf2.getText(),ui.jtf3.getText(),ui.jtf4.getText()); 
   } 
    
  } catch (SQLException e) { 
    
   e.printStackTrace(); 
  } 
 } 

} 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 學(xué)習(xí)java多線程

    學(xué)習(xí)java多線程

    本文運(yùn)用了大量的代碼講解了java多線程,它可以提高程序并行執(zhí)行的速度,更快的響應(yīng)程序。感興趣的小伙伴一起來(lái)看看吧
    2021-08-08
  • Java中Stream?Filter多條件篩選過(guò)濾代碼舉例

    Java中Stream?Filter多條件篩選過(guò)濾代碼舉例

    這篇文章主要給大家介紹了關(guān)于Java中Stream?Filter多條件篩選過(guò)濾的相關(guān)資料,Java Stream中的filter方法可以使用多個(gè)條件來(lái)過(guò)濾數(shù)據(jù),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-12-12
  • Struts2實(shí)現(xiàn)自定義攔截器的三種方式詳解

    Struts2實(shí)現(xiàn)自定義攔截器的三種方式詳解

    這篇文章主要介紹了Struts2實(shí)現(xiàn)自定義攔截器的三種方式詳解,一些與系統(tǒng)邏輯相關(guān)的通用功能如權(quán)限的控制和用戶登錄控制等,需要通過(guò)自定義攔截器實(shí)現(xiàn),本節(jié)將詳細(xì)講解如何自定義攔截器,需要的朋友可以參考下
    2023-07-07
  • 為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年

    為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年

    這篇文章主要介紹了為什么阿里巴巴要求日期格式化時(shí)必須有使用y表示年,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 前端往后端傳遞參數(shù)的方式有哪些舉例詳解

    前端往后端傳遞參數(shù)的方式有哪些舉例詳解

    這篇文章主要介紹了前端向后端傳遞參數(shù)的多種方式,包括URL參數(shù)(查詢參數(shù)、路徑參數(shù))、請(qǐng)求體(JSON數(shù)據(jù)、表單數(shù)據(jù)、文件上傳)、請(qǐng)求頭和Cookie,并總結(jié)了每種方式的適用場(chǎng)景,需要的朋友可以參考下
    2025-03-03
  • IDEA之如何快速生成get和set方法

    IDEA之如何快速生成get和set方法

    這篇文章主要介紹了IDEA之如何快速生成get和set方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Spring?Cloud?Stream消息驅(qū)動(dòng)組件使用方法介紹

    Spring?Cloud?Stream消息驅(qū)動(dòng)組件使用方法介紹

    Spring?Cloud?Stream?消息驅(qū)動(dòng)組件幫助我們更快速,更方便,更友好的去構(gòu)建消息驅(qū)動(dòng)微服務(wù)的。當(dāng)時(shí)定時(shí)任務(wù)和消息驅(qū)動(dòng)的?個(gè)對(duì)比。消息驅(qū)動(dòng):基于消息機(jī)制做一些事情
    2022-09-09
  • Java并發(fā)編程之volatile與JMM多線程內(nèi)存模型

    Java并發(fā)編程之volatile與JMM多線程內(nèi)存模型

    這篇文章主要介紹了Java并發(fā)volatile與JMM多線程內(nèi)存模型,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Windows安裝兩個(gè)或多個(gè)JDK并實(shí)現(xiàn)自由切換的方法

    Windows安裝兩個(gè)或多個(gè)JDK并實(shí)現(xiàn)自由切換的方法

    最近新接手一個(gè)項(xiàng)目,啟動(dòng)的時(shí)候,發(fā)現(xiàn)有些jar和現(xiàn)在正在使用的JDK版本不一致,一直啟動(dòng)有問(wèn)題,想著就多裝一個(gè)JDK,由于為了保證java的運(yùn)行環(huán)境和編譯環(huán)境保持一致,就需要我們?cè)O(shè)置jdk的環(huán)境變量,所以本文給大家介紹了Windows安裝兩個(gè)或多個(gè)JDK并實(shí)現(xiàn)自由切換的方法
    2025-03-03
  • 基于HttpServletRequest 相關(guān)常用方法的應(yīng)用

    基于HttpServletRequest 相關(guān)常用方法的應(yīng)用

    本篇文章小編為大家介紹,基于HttpServletRequest 相關(guān)常用方法的應(yīng)用,需要的朋友參考下
    2013-04-04

最新評(píng)論

安溪县| 涪陵区| 兰州市| 临桂县| 宿州市| 九寨沟县| 米泉市| 临湘市| 旅游| 青田县| 聊城市| 库尔勒市| 巴彦淖尔市| 利川市| 易门县| 黔西县| 和静县| 改则县| 溧水县| 库伦旗| 阿瓦提县| 城步| 磐安县| 天津市| 荃湾区| 海晏县| 平遥县| 石阡县| 肇州县| 丘北县| 宁都县| 沽源县| 汨罗市| 观塘区| 旬邑县| 如东县| 平罗县| 金坛市| 陵川县| 九寨沟县| 肇州县|