java記錄之數據庫操作編寫程序實現用戶登錄、注冊、修改密碼


功能要求:

1)        在磁盤上創建一個Mysql數據庫,名稱自定,在該數據庫下建立一個數據表,名稱為userTable,表結構如圖12-4所示,表中的數據不要錄入(用注冊窗口添加)。

2)        用戶在登錄窗口點擊注冊進入注冊界面,在注冊窗口中輸入賬號、姓名、性別、出生日期、email和密碼(要驗證兩次密碼一致性)等信息后,單擊“注冊”按鈕后完成用戶注冊功能。並且將數據添加到數據庫中。

3)        注冊帳號過程中,輸入完賬號后,回車,進行賬號字符有效性驗證,如果正確,將焦點自動切換到姓名文本框(不用鼠標切換);否則,彈出對話框,提示錯誤,並將焦點保持在賬號文本框;用同樣方法實現Email地址合法性驗證;在確認密碼輸入結束后,按回車,完成注冊功能(即等同於點擊注冊按鈕)

4)        用戶在登錄窗口中輸入用戶和口令,單擊“登錄”按鈕后,如果用戶和口令與數據表文件中某一行匹配,則彈出對話框(對話框的文字提示信息是“登錄成功!”),並進入“更改密碼”窗口,否則彈出對話框(對話框的文字提示信息是“用戶或口令不正確!”)

5)        在“更改密碼”窗口中輸入相應信息后,單擊“確定”,完成更改密碼功能。可以打開數據庫驗證是否成功!

6)        建議設計三個窗口類(登錄、注冊和更改密碼)、一個用戶類(至少包括以下方法:數據庫連接方法、添加數據方法、登錄驗證方法、更改密碼方法以及用於數據合法性檢測的方法)。

package mytest;

public class Login {
    boolean success = false;
    String id;
    String password;
    public void setID(String string) {
        this.id = string;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public  String getID() {
        return id;
    }
    public  String getPassword() {
         return password;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public boolean getSuccess() {
        return success;
    }
}


package mytest;

public class Change {
    boolean success = false;
    String id;
    String password;
    public void setID(String string) {
        this.id = string;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public  String getID() {
        return id;
    }
    public  String getPassword() {
         return password;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
    public boolean getSuccess() {
        return success;
    }
}


package mytest;

public class Register {
      String id;
      String password;
      String email;
      String sex;
      String name;
      String birth;
      public void setID(String string) {
          this.id = string;
      }
      public void setPassword(String password) {
          this.password = password;
      }
      public void setSex(String sex) {
          this.sex = sex;
      }
      public void setEmail(String email) {
          this.email = email;
      }
      public void setBirth(String birth) {
          this.birth = birth;
      }
      public void setName(String name) {
          this.name = name;
      }
      public String getName() {
          return name;
      }
      public  String getID() {
          return id;
      }
      public  String getPassword() {
           return password;
      }
      public  String getSex() {
          return sex;
      }
      public String getEmail() {
          return email;
      }
      public String getBirth() {
          return birth;
      }
}

package mytest;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

import mytest.*;
import mytest.Login;
import mytest.Register;
public class RegAndLog extends JFrame {
    RLview rl;
    RegAndLog(){
        setBounds(100,100,800,260);
        rl = new RLview();
        add(rl);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
        
    }
    
    public static void main(String args[]) {
            RegAndLog window = new RegAndLog();
            window.setTitle("登錄");
        }

}


package mytest;
import java.awt.*;
import javax.swing.*;

import mytest.Register;

import java.awt.event.*;
public class RegisterView extends JPanel implements ActionListener, ItemListener{
    Register register;
    JTextField id,name,email,password1,password2;
    JComboBox sex,year,month,day;
    int[] DAY={31,28,31,30,31,30,31,31,30,31,30,31};
    JButton reg,esc;
    RegisterView(){
        register = new Register();
        id = new JTextField(15);
        name =new JTextField(15);
        email =new JTextField(15);
        password1 = new JTextField(15);
        password2 =new JTextField(15);
        reg = new JButton("注冊");
        esc = new JButton("退出");
        add(new JLabel("賬號:"));
        add(id);
        add(new JLabel("姓名:"));
        add(name);
        add(new JLabel("性別"));
        sex = new JComboBox();
        sex.addItem("male");
        sex.addItem("female");
        add(sex);
        year=new JComboBox();
        month=new JComboBox();
        day=new JComboBox();
        add(new JLabel("出生日期"));
        for(int i=1910;i<2021;i++) {
            year.addItem(i);
        }
        add(year);
        add(new JLabel("年"));
        for(int i=1;i<13;i++) {
            month.addItem(i);
            month.addItemListener(this);
        }
        add(month);
        add(new JLabel("月"));
        add(day);
        add(new JLabel("日"));
       // add(new JLabel("Email"));
        add(new JLabel(“email:"));
        add(email);
        add(new JLabel("密碼:"));
        add(password1);
        add(new JLabel("確認密碼"));
        add(password2);
        add(reg);
        add(esc);
        reg.addActionListener(this);
        esc.addActionListener(this);
             
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        if(e.getSource()==esc) {
            System.exit(0);
        }
        if(e.getSource()==reg) {
            register.setID(id.getText());
            register.setName(name.getText());
            register.setEmail(email.getText());
            register.setSex(sex.getSelectedItem().toString());
            String born = year.getSelectedItem().toString()+"-"+
            month.getSelectedItem().toString()
            +"-"+day.getSelectedItem().toString();
            register.setBirth(born);
            if(password1.getText().equals(password2.getText())) {
                register.setPassword(password1.getText());
            }
            else {
                JOptionPane.showMessageDialog(null,"密碼前后不一致","警告",JOptionPane.WARNING_MESSAGE);
            
            }
            HandleReg hr = new HandleReg();
            hr.writeReg(register);
            
        }
    }
    public void itemStateChanged(ItemEvent e) {
        if (e.getSource() == month) {
          String year = this.year.getSelectedItem().toString();//獲取選中
          //已知年份
          String mon = this.month.getSelectedItem().toString();//獲取月份
          int y = Integer.valueOf(year);
          int m = Integer.valueOf(mon);//轉換為int
          if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0) {
            DAY[1] = 29;
          } else {
            DAY[1] = 28;//判斷閏年
          }
          day.removeAllItems();//清空選項列表、
          for (int i = 0; i < DAY[m - 1]; i++) {
            day.addItem(i + 1);
          }

    
        }    
}
}



package mytest;
import java.awt.*;
import javax.swing.*;
import mytest.*;
import mytest.Login;

import java.awt.event.*;
public class LoginView extends JPanel implements ActionListener{
    
    Login login;
    JTextField id;
    JPasswordField pass;
    JButton log,esc;
    boolean success;
    LoginView(){
        login = new Login();
        id = new JTextField(15);
        pass = new JPasswordField(15);
        log = new JButton("登錄");
        esc = new JButton("退出");
        add(new JLabel("賬號"));
        add(id);
        add(new JLabel("密碼"));
        add(pass);
        add(log);
        add(esc);
        log.addActionListener(this);
        esc.addActionListener(this);
    }
    public boolean isSuccess() {
        return success;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==esc) {
            System.exit(0);
        }
        if(e.getSource()==log) {
            login.setID(id.getText());
            char [] pw = pass.getPassword();
            login.setPassword(new String (pw));
            HandleLog hl = new HandleLog();
            login = hl.queryVerify(login);
            success = login.getSuccess();
        }
    }
  
}


package mytest;
import java.sql.*;
import javax.swing.JOptionPane;

import mytest.Register;
public class HandleReg {
     Connection con;
     PreparedStatement preSql;
     public HandleReg() {
         try {
             Class.forName("com.mysql.jdbc.Driver");
         }
         catch(Exception e){}
         String uri = "jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";
         try {                                  // 表名↑      密碼↓
             con = DriverManager.getConnection(uri,"root","z123");
         }
         catch (SQLException e) {System.out.println(e.toString());}
     }
         public void writeReg(Register register) {//更新
             String sqlStr = "insert into mess values(?,?,?,?,?,?)";
             int ok = 0;
             try {
                 preSql = con.prepareStatement(sqlStr);//鏈接
                 preSql.setString(1,register.getID());//更新數據
                 preSql.setString(2, register.getName());
                 preSql.setString(3, register.getSex());
                 preSql.setString(4, register.getBirth());
                 preSql.setString(5, register.getEmail());
                 preSql.setString(6, register.getPassword());
                 ok = preSql.executeUpdate();
                 con.close();
                 
             }
             catch (NullPointerException e){
                  System.out.println(e.toString());
                }
             catch(SQLException e) {
                 System.out.println(e.toString());
                 JOptionPane.showMessageDialog(null,"id不能重復","警告",JOptionPane.WARNING_MESSAGE);//提示
             }
             if(ok!=0) {
                 JOptionPane.showMessageDialog(null,"注冊成功","恭喜",JOptionPane.WARNING_MESSAGE);
             }
         }
     }

package mytest;
import java.sql.*;
import javax.swing.JOptionPane;

import mytest.Login;
public class HandleLog {
     Connection con;//鏈接
     PreparedStatement pre;//驅動
     ResultSet rs;
     public HandleLog() {
         try {
             Class.forName("com.mysql.jdbc.Driver");
         }
         catch(Exception e){}
         String uri = "jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";
         try {                                  // ku名      密碼↓
             con = DriverManager.getConnection(uri,"root","zyk123");
         }
         catch(Exception e){System.out.println(e.toString());}
     }
     public Login queryVerify(Login logins) {
         String id = logins.getID();
         String pw = logins.getPassword();
         String sqlStr = "select userID,password from mess where userID = ? and password = ?";//注意語法
         try {
             pre = con.prepareStatement(sqlStr);
             pre.setString(1,id);
             pre.setString(2, pw);
             rs = pre.executeQuery();
             if(rs.next()==true) {
                 logins.setSuccess(true);
                 JOptionPane.showMessageDialog(null,"登錄成功","恭喜",JOptionPane.WARNING_MESSAGE);
             }
             else {
                 logins.setSuccess(false);
                 JOptionPane.showMessageDialog(null,"登錄失敗","抱歉",JOptionPane.WARNING_MESSAGE);
             }
         }
         catch(Exception e){
             System.out.println(e.toString());
         }
         return logins;
     }
}

package mytest;
import java.sql.*;
import javax.swing.JOptionPane;

import mytest.Login;
public class HandleChange {
    Connection con;
    PreparedStatement sql;
    ResultSet rs;
    public HandleChange() {
         try {
             Class.forName("com.mysql.jdbc.Driver");
         }
         catch(Exception e){}
         String uri = "jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";
         try {                                  // 數據庫名      密碼↓
             con = DriverManager.getConnection(uri,"root","z123");
         }
         catch(Exception e){
             System.out.println(e.toString());
         }
        if(con==null) return;
        
    }
    public Change query(Change ch) {
        String id = ch.getID();
        String pw = ch.getPassword();
        String sqlStr = "update mess set password=? where userID =?";
        try {
            sql = con.prepareStatement(sqlStr);
            sql.setString(1,ch.getPassword());
            sql.setString(2,ch.getID());
            int ok = sql.executeUpdate();//括號里面不能再寫sqlStr
            ch.setSuccess(true);
           System.out.println(ok);
        }
        catch(Exception e){
           System.out.println(e.toString());
        }
        return ch;
    }
}


package mytest;

import java.awt.BorderLayout;

import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import java.awt.*;
public class RLview extends JPanel{
    JTabbedPane p;
    RegisterView reg;
    LoginView log;
    ChangePass pa;
    public RLview() {
        reg = new RegisterView();
        log = new LoginView();
        pa = new ChangePass();
        setLayout(new BorderLayout());
        p =new JTabbedPane();
        p.add("注冊",reg);
        p.add("登錄",log);
        p.add("修改密碼",pa);
        p.invalidate();
        add(p,BorderLayout.CENTER);
    }
}


package mytest;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

import mytest.*;
import mytest.Login;
import mytest.Register;
public class RegAndLog extends JFrame {
    RLview rl;
    RegAndLog(){
        setBounds(100,100,800,260);
        rl = new RLview();
        add(rl);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
        
    }
    
    public static void main(String args[]) {
            RegAndLog window = new RegAndLog();
            window.setTitle("登錄");
        }    
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM