基于mysql--jdbc图书管理系统前半

不积跬步无以至千里,不积细流,无以成江河!

1.工具类Utils,用来驱动连接数据库

package com.jdbc.bookSystem.Utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Utils {
    private static String driver="com.mysql.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/test1";
    private static String username = "root";
    private static String passwod = "123456";

    public static Connection connection() throws ClassNotFoundException, SQLException {
        Class.forName(driver);


        return  DriverManager.getConnection(url, username, passwod);
    }
}

2.随机数生成包RandomStringUtils,用来生成随机字符串

package com.jdbc.bookSystem.Utils;

import java.util.Random;

public class RandomStringUtils {
    public static String getRandomString(int length){
        String str="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random random=new Random();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<length;i++){
            int number=random.nextInt(62);
            sb.append(str.charAt(number));
        }
        return sb.toString();
    }
}

3.hash加密包SHA256Utils,用来生成哈希码

package com.jdbc.bookSystem.Utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SHA256Utils {

    /**
     * 利用java原生的类实现SHA256加密
     
     * @param str 参数拼接的字符串
     * @return
     */
    public static String getSHA256(String str) {
        MessageDigest messageDigest;
        String encodeStr = "";
        try {
            messageDigest = MessageDigest.getInstance("SHA-256");
            messageDigest.update(str.getBytes("UTF-8"));
            encodeStr = byte2Hex(messageDigest.digest());
        } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return encodeStr;
    }

    /**
     * 将byte转为16进制
     *
     * @param bytes
     * @return
     */
    private static String byte2Hex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        String temp = null;
        for (byte aByte : bytes) {
            temp = Integer.toHexString(aByte & 0xFF);
            if (temp.length() == 1) {
                // 1得到一位的进行补0操作
                sb.append("0");
            }
            sb.append(temp);
        }
        return sb.toString();
    }
}

4.Model实体类

package com.jdbc.bookSystem.Model;

public class Book {
  private long id;
  private String bookname;
  private String author;
  private double price;
  private long readerId;
  public Book(){

  }

  public Book(long id, String bookname, String author, double price, long readerId) {
    this.id = id;
    this.bookname = bookname;
    this.author = author;
    this.price = price;
    this.readerId = readerId;
  }

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }


  public String getBookname() {
    return bookname;
  }

  public void setBookname(String bookname) {
    this.bookname = bookname;
  }


  public String getAuthor() {
    return author;
  }

  public void setAuthor(String author) {
    this.author = author;
  }


  public double getPrice() {
    return price;
  }

  public void setPrice(double price) {
    this.price = price;
  }


  public long getReaderId() {
    return readerId;
  }

  public void setReaderId(long readerId) {
    this.readerId = readerId;
  }

  @Override
  public String toString() {
    return "Book{" +
            "id=" + id +
            ", bookname='" + bookname + '\'' +
            ", author='" + author + '\'' +
            ", price=" + price +
            ", readerId=" + readerId +
            '}';
  }
}

package com.jdbc.bookSystem.Model;
public class Reader {
  private long id;
  private String username;
  private String salt;
  private String hash;

  public long getId() {
    return id;
  }

  public void setId(long id) {
    this.id = id;
  }
  
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }

  public String getSalt() {
    return salt;
  }
  public void setSalt(String salt) {
    this.salt = salt;
  }

  public String getHash() {
    return hash;
  }
  public void setHash(String hash) {
    this.hash = hash;
  }

  public Reader(long id, String username, String salt, String hash) {
    this.id = id;
    this.username = username;
    this.salt = salt;
    this.hash = hash;
  }
}

5.dao层,对数据库操作

package com.jdbc.bookSystem.Dao;
import com.jdbc.bookSystem.Model.Reader;
import com.jdbc.bookSystem.Utils.Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 * @author zyh
 * @items
 * @create 2021/7/27
 */

public class ReaderDao {
    //插入数据
    public boolean insert(Reader reader) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        //1.获取连接
        try {
            connection = Utils.connection();
            //2.定义SQL语句
            String sql = "insert into reader values(null,?,?,?)";
            //3.预编译SQL
            preparedStatement = connection.prepareStatement(sql);
            //4.处理占位符
            //Reader reader1 = new Reader();
            preparedStatement.setString(1, reader.getUsername());
            preparedStatement.setString(2, reader.getSalt());
            preparedStatement.setString(3, reader.getHash());
            //4.执行诗SQL
            int execute = preparedStatement.executeUpdate();
            if (execute==1) {
                return true;
            }


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {//5.关闭资源
                preparedStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }

        }
        return false;

    }
    //查找
    public Reader select(String  username){
        try {
            Connection connection = Utils.connection();
            String sql="select*from reader where username=?";
            //预编译SQL
            PreparedStatement preparedStatement = connection.prepareStatement(sql);
            //填充占位符
            preparedStatement.setString(1,username);
            //执行SQL
            ResultSet resultSet = preparedStatement.executeQuery();
            //判断返回集
            while (resultSet.next()){
                //获取查询到的值,reader对象获取
                Reader reader = new Reader();
                reader.setId(resultSet.getInt("id"));
                reader.setUsername(resultSet.getString("username"));
                reader.setHash(resultSet.getString("hash"));
                reader.setSalt(resultSet.getString("salt"));
                return reader;


            }

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;

    }
}

6.控制层

package com.jdbc.bookSystem.Controller;
import com.jdbc.bookSystem.Dao.ReaderDao;
import com.jdbc.bookSystem.Model.Reader;
import com.jdbc.bookSystem.Utils.RandomStringUtils;
import com.jdbc.bookSystem.Utils.SHA256Utils;
import java.util.Scanner;
/**
 * @author zyh
 * @items
 * @create 2021/7/27
 */
public class ReaderControllr {
    private Scanner scanner = new Scanner(System.in);
    private ReaderDao readerDao=new ReaderDao();
    
    /**
     * 注册
     */
    public  void logon() {

        Reader reader = new Reader();
        System.out.println("输入用户名:");
        reader.setUsername(scanner.next());
        //String username = scanner.next();
        System.out.println("请输入密码:");
        String pwd=scanner.next();


        //使用工具类生成16位字符串的随机数即盐值
        String salt = RandomStringUtils.getRandomString(16);
        //把输出的明文密码和随机字符串拼接生成哈希盐码,(称为注册密码—不太稳妥)
        String Hashpassword= SHA256Utils.getSHA256(pwd+salt);
        //调用Reader对象,给用户直和密码赋值
        reader.setHash(Hashpassword);
        reader.setSalt(salt);
        if (!readerDao.insert(reader)){
            System.out.println("注册成功");
            throw new RuntimeException("注册失败");

        }


    }
    /**]
     * 登录
     */
    public boolean login(){
        System.out.println("输入用户名:");
        String username = scanner.next();
        System.out.println("请输入密码:");
        String pwd=scanner.next();

        //创建ReaderDao对象,调用查找方法
        Reader selectReader=readerDao.select(username);
        //把输入的明码和查找得到的盐值拼接生成哈希码,成为输入密码
        String inputhash=SHA256Utils.getSHA256(pwd+selectReader.getSalt());
        //如果输入密码与所查得到的哈希码(注册密码)相相等,则登录成功
        if (inputhash.equals(selectReader.getHash())){
            System.out.println("登陆成功");
            return true;
        }else {
            System.out.println("登陆失败");
            return false;
        }



    }
}

7.实现类

package com.jdbc.bookSystem.View;
import com.jdbc.bookSystem.Controller.ReaderControllr;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        ReaderControllr readerControllr = new ReaderControllr();
        System.out.println("******欢迎来到图书管理系统*******");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请选择你要进行的操作:1.登录   2.注册");
        System.out.println("请输入数字:");
        int falg=scanner.nextInt();
        switch(falg){
            case 1:

                boolean loginFlog=readerControllr.login();
                if (loginFlog){
                    break;
                }else{

                }
                break;

            case 2:
                readerControllr.logon();
                break;
                
        }

    }
}

未完待续.......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值