[Java] Book Manager 图书馆系统


Book Manager

1. 主要功能

  • 用户登录;
  • 注册用户;
  • 退出系统;
  • 链接数据库(JDBC);

2. Java 实现

a. package util

i. JdbcUtil.java

package BookManager.src.util;

import java.sql.Connection;
import java.sql.DriverManager;

//操作JDBC工具类
public class JdbcUtil {

    //获取数据库连接
    public static Connection getConnection(){
        try {

            Class.forName("com.mysql.jdbc.Driver");

            String url = "jdbc:mysql://localhost:3306/book_manager";
            Connection conn = DriverManager.getConnection(url, "root", "root");

            return conn;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

b. package test

i. VarCode.java

package BookManager.src.test;

import java.util.Random;

public class VarCode {

    //随机生成4位网站验证码 ,由数字,大小写字母组成
    public static void main(String[] args) {

        Random r = new Random();

        for(int i=0; i<4; i++){
            int n = r.nextInt(3);
            switch(n){
                case 0:
                    //随机生成数字0-9
                    int num = r.nextInt(10);
                    System.out.print(num);
                    break;
                case 1:
                    //随机生成小写字母 ,对应的编码范围 97-122
                    char small = (char)(r.nextInt(26)+97);
                    System.out.print(small);
                    break;
                case 2:
                    //随机生成小写字母 ,对应的编码范围 65-90
                    char big = (char)(r.nextInt(26)+65);
                    System.out.print(big);
            }
        }

    }
}

c. package model

i. Book.java

package BookManager.src.model;

//图书信息类,对应数据库的book表

//Alt + Shift + A
public class Book {
    private int id;
    private String name;
    private double price;
    private String publish;
    private String publishDate;

    public Book(){}

    public Book(int id, String name, double price, String publish, String publishDate) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.publish = publish;
        this.publishDate = publishDate;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getPublish() {
        return publish;
    }
    public void setPublish(String publish) {
        this.publish = publish;
    }
    public String getPublishDate() {
        return publishDate;
    }
    public void setPublishDate(String publishDate) {
        this.publishDate = publishDate;
    }
}

ii. User.java

package BookManager.src.model;

//实体类  javaBean ,对应数据库的user表
public class User {
    private int uid;
    private String username;
    private String password;

    public User(){}

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }
    public int getUid() {
        return uid;
    }
    public void setUid(int uid) {
        this.uid = uid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

d. package dao

i. BookDao.java

package BookManager.src.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import BookManager.src.model.Book;
import BookManager.src.util.JdbcUtil;

//完成图书信息的JDBC操作
public class BookDao {

    //修改图书信息
    public void updateBook(Book b){
        try {
            Connection conn = JdbcUtil.getConnection();
            String sql  = "update book set name=?, price=?,publish=?, publishDate=? where id=?";
            PreparedStatement prps = conn.prepareStatement(sql);
            //设置参数
            prps.setString(1, b.getName());
            prps.setDouble(2, b.getPrice());
            prps.setString(3, b.getPublish());
            prps.setString(4, b.getPublishDate());
            prps.setInt(5, b.getId());

            //执行sql
            prps.execute();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    //根据id查询数据,返回Book对象
    public Book findById(int id){
        try {
            Connection conn = JdbcUtil.getConnection();
            String sql  = "select * from book where id=?";
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setInt(1, id);

            //执行查询
            ResultSet set = prps.executeQuery();

            if(set.next()){
                //获取列的值
                int bid = set.getInt("id");
                String name = set.getString("name");
                double price = set.getDouble("price");
                String publish = set.getString("publish");
                String date = set.getString("publishDate");

                //封装成book对象
                Book b = new Book();
                b.setId(bid);
                b.setName(name);
                b.setPrice(price);
                b.setPublish(publish);
                b.setPublishDate(date);

                return b;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }


    //根据id查询,找到对应id,返回true,否则返回false
    public boolean isExist(int id){
        try {
            Connection conn = JdbcUtil.getConnection();
            String sql  = "select * from book where id=?";
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setInt(1, id);

            //执行删除
            ResultSet set = prps.executeQuery();
            if(set.next()){
                return true;
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        return false;
    }

    //根据编号删除图书信息
    /*
     * 明确参数 :编号
     * 明确返回值 :void
     */
    public void deleteBook(int id){
        try {
            Connection conn = JdbcUtil.getConnection();
            String sql  = "delete from book where id=?";
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setInt(1, id);

            //执行删除
            prps.execute();

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }



    //查看所有图书信息
    /*
     * 明确参数 :无参数
     * 明确返回值 :ArrayList<Book>
     */
    public ArrayList<Book> queryAll(){
        ArrayList<Book> list = new ArrayList<>();

        try {
            //查询数据,封装成book对象,添加到集合中
            Connection conn = JdbcUtil.getConnection();
            String sql  = "select * from book";
            PreparedStatement prps = conn.prepareStatement(sql);

            //执行查询,返回结果集
            ResultSet set = prps.executeQuery();
            while(set.next()){
                int id = set.getInt("id");
                String name = set.getString("name");
                double price = set.getDouble("price");
                String publish = set.getString("publish");
                String date = set.getString("publishDate");
                //封装成book对象
                Book b = new Book();
                b.setId(id);
                b.setName(name);
                b.setPrice(price);
                b.setPublish(publish);
                b.setPublishDate(date);
                //添加到集合中
                list.add(b);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }

        //循环结束,返回集合
        return list;

    }

    //新增图书
    public void addBook(Book b){
        try {
            //获取连接对象
            Connection conn = JdbcUtil.getConnection();
            //获取处理对象
            String sql = "insert into book(name, price, publish, publishDate) values(?,?,?,?)";
            PreparedStatement prps = conn.prepareStatement(sql);
            //设置参数
            prps.setString(1, b.getName());
            prps.setDouble(2, b.getPrice());
            prps.setString(3, b.getPublish());
            prps.setString(4, b.getPublishDate());

            //执行sql新增
            prps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

ii. UserDao.java

package BookManager.src.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import BookManager.src.model.User;
import BookManager.src.util.JdbcUtil;

public class UserDao {


    //检查用户名是否重复,如果重复,返回true,否则返回false
    public boolean isExist(String name){
        try {
            Connection conn = JdbcUtil.getConnection();
            //发送sql
            String sql = "select * from user where username=?";
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setString(1, name);

            //执行查询,得到结果集
            ResultSet set = prps.executeQuery();
            if(set.next()){
                return true;
            }else{
                return false;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return true;
    }

    //完成登录功能
    public boolean login(String name, String pwd){
        try {
            Connection conn = JdbcUtil.getConnection();

            String sql = "select * from user where username=? and password=?";
            //发送sql并设置参数
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setString(1, name);
            prps.setString(2, pwd);

            //执行查询,返回结果
            ResultSet set = prps.executeQuery();
            if(set.next()){
                return true; //表示登录成功
            }


        } catch (SQLException e) {
            e.printStackTrace();
        }


        return false; //程序异常,或者查询不到数据,返回false,表示登录失败
    }

    //完成注册功能,将数据保存到数据库
    public void register(User u){
        try {
            //JDBC操作
            Connection conn = JdbcUtil.getConnection();
            //发送sql
            String sql = "insert into user(username, password) values(?,?)";
            PreparedStatement prps = conn.prepareStatement(sql);
            prps.setString(1, u.getUsername());
            prps.setString(2, u.getPassword());

            //执行操作
            prps.execute();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

e. package console

i. MainConsole.java

package BookManager.src.console;

import java.util.Scanner;

//主控制台
public class MainConsole {
    public static void main(String[] args) {
        showView();
        Scanner sc = new Scanner(System.in);
        UserConsole uc = new UserConsole(); //用户操作模块
        BookConsole bc = new BookConsole(); //图书管理模块
        while(true){
            System.out.println("请选择功能:用户登录(A)  注册用户(B)  退出系统(Q)");
            String option = sc.next().toUpperCase();
            switch(option){
                case "A":
                    //System.out.println("登录成功");
                    boolean flag = uc.login();
                    if(flag){
                        //进入图书管理模块
                        bc.showBookConsole();
                    }
                    break;
                case "B":
                    //System.out.println("注册成功");
                    uc.register();
                    break;
                case "Q":
                    System.out.println("欢迎再次使用");
                    System.exit(0); //退出JVM
                default:
                    System.out.println("输入无效");
            }
        }
    }


    private static void showView() {
        System.out.println("*****************************************");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*             欢迎使用图书管理系统        *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*                                       *");
        System.out.println("*****************************************");
    }
}

ii. BookConsole.java

package BookManager.src.console;

import java.util.ArrayList;
import java.util.Scanner;

import dao.BookDao;
import model.Book;

//图书管理模块
public class BookConsole {

    private Scanner sc = new Scanner(System.in);
    private BookDao bookDao = new BookDao();

    //图书管理模块主界面
    public void showBookConsole(){
        loop : while(true){
            System.out.println("请选择您所要的操作");
            System.out.println("查看图书(A)   新增图书(B)   修改图书(C)   删除图书(D)  注销用户(Q)");
            String option = sc.next().toUpperCase(); //将输入的字母转成大写

            switch(option){
                case "A" :
                    //System.out.println("查看");
                    showBooks();
                    break;
                case "B" :
                    //System.out.println("新增");
                    addBook();
                    break;
                case "C" :
                    //System.out.println("修改");
                    updateBook();
                    break;
                case "D" :
                    //System.out.println("删除");
                    deleteBook();
                    break;
                case "Q" :
                    System.out.println("注销成功!");
                    //打断当前循环
                    break loop;
                default :
                    System.out.println("输入无效");
            }
        }
    }

    //执行修改的操作
    private void updateBook(){
        System.out.println("请输入要修改的图书编号:");
        int id = sc.nextInt();
        Book b = bookDao.findById(id);
        if(b==null){
            System.out.println("id不存在,请重新输入");
        }else{
            //进行修改的操作
            System.out.println("请选择要修改的属性:(A)书名  (B)价格  (C)出版社  (D)出版日期");
            String option = sc.next().toUpperCase();
            switch(option){
                case "A" :
                    System.out.println("请输入新书名:");
                    String name = sc.next();
                    b.setName(name);
                    break;
                case "B" :
                    System.out.println("请输入新价格:");
                    double price = sc.nextDouble();
                    b.setPrice(price);
                    break;
                case "C" :
                    System.out.println("请输入新出版社:");
                    String publish = sc.next();
                    b.setPublish(publish);
                    break;
                case "D" :
                    System.out.println("请输入新出版日期:");
                    String date = sc.next();
                    b.setPublishDate(date);
                    break;
                default :
                    System.out.println("输入无效");
                    return; //结束当前方法
            }
            bookDao.updateBook(b);
            System.out.println("修改成功");
        }
    }

    //执行删除操作
    private void deleteBook(){
        System.out.println("请输入要删除的编号:");
        int id = sc.nextInt();
        //判断id是否存在
        boolean exist = bookDao.isExist(id);
        if(exist){
            bookDao.deleteBook(id);
            System.out.println("删除成功!");
        }else{
            System.out.println("id不存在,请重新输入");
        }

    }

    //显示所有的图书信息
    private void showBooks(){
        ArrayList<Book> list = bookDao.queryAll();
        if(list.size()==0){
            System.out.println("当前无图书信息,请先添加图书信息");
            return;
        }

        //遍历集合,显示信息
        System.out.println("编号\t书名\t\t价格\t出版社\t\t出版日期");
        for(Book b : list){
            int id = b.getId();
            String name = b.getName();
            double price = b.getPrice();
            String publish = b.getPublish();
            String date = b.getPublishDate();
            System.out.println(id+"\t"+name+"\t"+price+"\t"+publish+"\t"+date);
        }

    }

    //新增操作界面方法
    private void addBook(){
        System.out.println("请输入书名:");
        String name = sc.next();

        System.out.println("请输入价格:");
        double price = sc.nextDouble();

        System.out.println("请输入出版社:");
        String publish = sc.next();

        System.out.println("请输入出版日期:");
        String publishDate = sc.next();

        //创建图书对象,封装键盘录入的数据
        Book b = new Book();
        b.setName(name);
        b.setPrice(price);
        b.setPublish(publish);
        b.setPublishDate(publishDate);

        //调用BookDao的新增的方法,将数据传递到dao层,完成数据库的新增
        bookDao.addBook(b);

        System.out.println("新增图书成功!");
    }
}

iii. UserConsole.java

package BookManager.src.console;

import java.util.Scanner; //Ctrl + shift + o

import dao.UserDao;
import model.User;

public class UserConsole {
    private Scanner sc = new Scanner(System.in);
    private UserDao userDao = new UserDao();


    //完成用户登录的操作
    public boolean login(){
        System.out.println("欢迎登录图书系统");
        System.out.println("请输入用户名:");
        String name = sc.next();

        System.out.println("请输入密码:");
        String pwd = sc.next();

        boolean flag = userDao.login(name, pwd);
        if(flag){
            System.out.println("登录成功,当前用户:"+name);
            return true;

        }else{
            System.out.println("用户名或密码错误!");
            return false;
        }
    }

    //完成用户注册操作
    public void register(){
        System.out.println("欢迎注册新用户");

        String name;
        while(true){
            System.out.println("请输入用户名:");
            name = sc.next();
            //注册的用户名不能重复
            boolean exist = userDao.isExist(name);
            if(exist){
                //返回true,表示用户名存在,重新输入
                System.out.println("用户名已被注册,请换一个");
            }else{
                //返回false,用户名可以使用
                break;
            }
        }

        String pwd;
        while(true){
            //密码长度不能小于6位
            System.out.println("请输入密码:");
            pwd = sc.next();
            if(pwd.length()<6){
                System.out.println("密码长度小于6位,请重新输入");
            }else{
                break;
            }
        }

        //创建对象,封装数据
        User u = new User();
        u.setUsername(name);
        u.setPassword(pwd);

        //保存到数据库
        userDao.register(u);

        System.out.println("注册成功");
    }
}
发布了185 篇原创文章 · 获赞 181 · 访问量 5346

猜你喜欢

转载自blog.csdn.net/Regino/article/details/104522399