Java簡(jiǎn)易登錄注冊(cè)小程序
登錄注冊(cè)小代碼,將學(xué)過(guò)的一些小知識(shí)融合在一起進(jìn)行了使用,加深印象。本例中如果有注釋不詳細(xì)的地方,詳見其它博客。
功能介紹:簡(jiǎn)單的登錄注冊(cè)系統(tǒng),使用了數(shù)據(jù)庫(kù)sqlserver、單例模式、正則表達(dá)式以及圖形化開發(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)建類SQLserver的一個(gè)對(duì)象,大大節(jié)省了內(nèi)存開銷 。
程序完整代碼見: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)聽 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)聽各個(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(); //打開新界面 } //登錄方法 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, "用戶名填寫錯(cuò)誤,必須為3-6位字母_或者數(shù)字", "提示信息", JOptionPane.WARNING_MESSAGE); jtf1.setText(""); }else if(flag2==false) { JOptionPane.showMessageDialog(null, "密碼填寫錯(cuò)誤,必須為6位字母_或者數(shù)字", "提示信息", JOptionPane.WARNING_MESSAGE); jtf2.setText(""); }else if(flag3==false) { JOptionPane.showMessageDialog(null, "姓名填寫錯(cuò)誤,必須漢字2-4位", "提示信息", JOptionPane.WARNING_MESSAGE); jtf3.setText(""); }else if(flag4==false) { JOptionPane.showMessageDialog(null, "學(xué)號(hào)填寫錯(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ú)封裝成類 */ 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)建火箭車 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)文章
Java構(gòu)造方法實(shí)例詳解(動(dòng)力節(jié)點(diǎn)java學(xué)院整理)
其實(shí)java構(gòu)造方法很簡(jiǎn)單,下面通過(guò)示例給大家分享java構(gòu)造方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-04-04Springboot項(xiàng)目中使用redis的配置詳解
這篇文章主要介紹了Springboot項(xiàng)目中使用redis的配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04java中JDBC實(shí)現(xiàn)往MySQL插入百萬(wàn)級(jí)數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了java中JDBC實(shí)現(xiàn)往MySQL插入百萬(wàn)級(jí)數(shù)據(jù)的實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-01-01聊一聊new對(duì)象與Spring對(duì)bean的初始化的差別
這篇文章主要介紹了聊一聊new對(duì)象與Spring對(duì)bean的初始化的差別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02SpringBoot集成Redisson實(shí)現(xiàn)延遲隊(duì)列的場(chǎng)景分析
這篇文章主要介紹了SpringBoot集成Redisson實(shí)現(xiàn)延遲隊(duì)列,本文通過(guò)場(chǎng)景分析實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04SpringCloud中的Hystrix保護(hù)機(jī)制詳解
這篇文章主要介紹了SpringCloud中的Hystrix保護(hù)機(jī)制詳解,Hystrix,英文意思是豪豬,全身是刺,看起來(lái)就不好惹,是一種保護(hù)機(jī)制,Hystrix也是Netflix公司的一款組件,需要的朋友可以參考下2023-12-12java實(shí)現(xiàn)python session功能代碼實(shí)例
這篇文章主要介紹了java實(shí)現(xiàn)python session功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11