Java开发实例之图书管理系统的实现

目录
  • 一、项目分布
  • 二、代码展示
    • 1.SQL语句
    • 2.Book类
    • 3.User类
    • 4.用户分为两种
      • 4.1NormalUser类
      • 4.2Admin类
    • 5.DBUtil类
    • 6.BookDao类
    • 7.UserDao类
    • 8.operations包
      • 8.1AddOperation类:增加书籍
      • 8.2BorrowOperation类:借阅书籍
      • 8.3DeleteOperation类:删除书籍
      • 8.4DisplayOperation类:查看书籍列表
      • 8.5ExitOperation类:退出系统
      • 8.6FindOperation类:查找书籍
      • 8.7ReturnOperation类:返还书籍
    • 9.Main方法实现
  • 三、结果实现
    • 1.登录界面
    • 2.普通用户操作
    • 3.管理员操作

声明:本项目不涉及web操作,但需要了解java的基本语法和MySQL的基本语句运用。

一、项目分布

  • db.sql类:SQL语句,在控制台执行,用于建立图书管理库。
  • Book类: 定义了书的一些属性(书编号,书名,作者,价格,分类,状态)并且写了属性的get、set、toSting方法。
  • User类:定义了用户的一些属性(用户编号,用户名,密码和是否为管理员的标记),并且写了属性的get、set、toSting方法。
  • NormalUser类:描述普通用户,实现普通用户的构造方法,并打印普通用户的操作界面。
  • Admin类:描述管理员,实现管理员的构造方法并打印管理员的操作界面。
  • DBUtil类:封装与数据库建立连接的操作(主要用JDBC来编写)。
  • BookDao类:封装 对表的增删查改操作。
  • UserDao类:封装 识别用户的操作。

operations包中定义了IOperation(操作)接口,这个包中的下面这些类都实现了这个IOperation接口(完成增删查改等操作):

  • AddOperation类:增加书籍
  • BorrowOperation类:借阅书籍
  • DeleteOperation类:删除书籍
  • DisplayOperation类:查看书籍列表
  • ExitOperation类:退出系统
  • FindOperation类:查找书籍
  • ReturnOperation类:返还书籍

二、代码展示

1.SQL语句

在控制台执行,用于建立图书管理库(设置“张三”为普通用户,密码为321;“admin”为管理员,密码为123)

create database if not exists bookmanager;

use bookmanager;

-- 创建一个书籍表
drop table if exists book;
create table book(
    bookId int primary key auto_increment,
    name varchar(20),
    author varchar(20),
    -- 为了准确,价格以 分 为单位
    price int,
    type varchar(20),
    -- 如果isBorrowed为1,表示已经借出,为0,表示未借出
    isBorrowed int
);

-- 创建一个用户表(用户有管理员和普通用户两种)
drop table if exists user;
create table user(
    userId int primary key auto_increment,
    username varchar(20) unique,
    password varchar(20),
    -- 如果isAdmin 为1,表示是管理员,为0,表示是普通用户
    isAdmin int
);

-- 插入一些数据
insert into book values(null,'西游记','吴承恩',10000,'古典小说',0);
insert into book values(null, '三国演义', '罗贯中', 10000, '古典小说', 0);
insert into book values(null, '水浒传', '施耐庵', 10000, '古典小说', 0);
insert into book values(null, '金瓶梅', '兰陵笑笑生', 10000, '古典小说', 0);
insert into book values(null,'三体','刘慈欣',10000,'科幻小说',0);

-- 插入一些用户
insert into user values(null,'admin','123',1);
insert into user values(null,'张三','321',0);

2.Book类

定义了书的一些属性(书编号,书名,作者,价格,分类,状态)并且写了属性的get、set、toSting方法

package Java100_1006;

//使用这个类来表示一本书
// +------------+-------------+------+-----+---------+----------------+
// | Field      | Type        | Null | Key | Default | Extra          |
// +------------+-------------+------+-----+---------+----------------+
// | bookId     | int(11)     | NO   | PRI | NULL    | auto_increment |
// | name       | varchar(20) | YES  |     | NULL    |                |
// | author     | varchar(20) | YES  |     | NULL    |                |
// | price      | int(11)     | YES  |     | NULL    |                |
// | type       | varchar(20) | YES  |     | NULL    |                |
// | isBorrowed | int(11)     | YES  |     | NULL    |                |
// +------------+-------------+------+-----+---------+----------------+

public class Book {
    private int bookId;
    private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

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

    public int getPrice() {
        return price;
    }

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

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bookId=" + bookId +
                ", name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isBorrowed=" + isBorrowed +
                '}';
    }
}

3.User类

定义了用户的一些属性(用户编号,用户名,密码和是否为管理员的标记),并且写了属性的get、set、toSting方法

package Java100_1006;

import Java100_1006.operations.IOperation;

abstract public class User {
    // 使用这个 User 类来表示一个用户
// +----------+-------------+------+-----+---------+----------------+
// | Field    | Type        | Null | Key | Default | Extra          |
// +----------+-------------+------+-----+---------+----------------+
// | userId   | int(11)     | NO   | PRI | NULL    | auto_increment |
// | username | varchar(20) | YES  |     | NULL    |                |
// | password | varchar(20) | YES  |     | NULL    |                |
// | isAdmin  | int(11)     | YES  |     | NULL    |                |
// +----------+-------------+------+-----+---------+----------------+
    // 针对此处的 isAdmin, 并不是直接使用一个 boolean 变量来区分, 而是使用两个不同的子类.
    // 原因是, 管理员和普通用户支持的方法, 是不一样的.
    private int userId;
    private String userName;
    private String passWord;

    // 包含了一个数组, 数组里面就是该用户支持的哪些操作.
    // 针对普通用户, 和管理员, 分别设置不同的操作.
    IOperation[] operations;

    //普通用户和管理员看到的菜单也不同
    abstract public int menu();

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    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;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", passWord='" + passWord + '\'' +
                '}';
    }
}

4.用户分为两种

普通用户和管理员,所以应该分别建立两个类来描述这两个用户。

4.1NormalUser类

**描述普通用户,实现普通用户的构造方法,并打印普通用户的操作界面。

package Java100_1006;

import Java100_1006.operations.*;

import java.util.Scanner;

//普通用户
public class NormalUser extends User{
    //普通用户的构造方法
    public NormalUser(){
        this.operations = new IOperation[]{
            	//0.退出
                new ExitOperation(),
            	//1.查看书籍列表
                new DisplayOperation(),
            	//2. 查找指定书籍
                new FindOperation(),
            	//3.借阅书籍
                new BorrowOperation(),
            	//4. 归还书籍
                new ReturnOperation()
        };
    }

    //打印普通用户的菜单
    @Override
    public int menu() {
        System.out.println("=============================");
        System.out.println("欢迎您"+this.getUserName()+"!");
        System.out.println("1. 查看书籍列表");
        System.out.println("2. 查找指定书籍");
        System.out.println("3. 借阅书籍");
        System.out.println("4. 归还书籍");
        System.out.println("0. 退出系统");
        System.out.println("=============================");
        System.out.println("请输入您的选项:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

4.2Admin类

描述管理员,实现管理员的构造方法并打印管理员的操作界面

package Java100_1006;

import Java100_1006.operations.*;

import java.util.Scanner;

//管理员
public class Admin extends User{
    //管理员的构造方法
    public Admin(){
        //初始化operation
        //继承与User类,所以可以使用父类的中的数组
        this.operations = new IOperation[]{
            	//0. 退出系统
                new ExitOperation(),
           	 	//1. 查看书籍列表
                new DisplayOperation(),
            	//2. 查找指定书籍
                new FindOperation(),
            	//3. 新增书籍
                new AddOperation(),
            	//4. 删除书籍
                new DeleteOperation()
        };
    }
    //打印管理员的菜单
    @Override
    public int menu() {
        System.out.println("================================");
        System.out.println("欢迎您, " + this.getUserName() + "! 您是管理员! ");
        System.out.println("1. 查看书籍列表");
        System.out.println("2. 查找指定书籍");
        System.out.println("3. 新增书籍");
        System.out.println("4. 删除书籍");
        System.out.println("0. 退出系统");
        System.out.println("================================");
        System.out.println("请输入选项: ");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

5.DBUtil类

封装与数据库建立连接的操作(主要用JDBC来编写)

package Java100_1006;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

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

//先建立这个类来 封装 数据库建立连接的操作
//具体步骤:
//1.创建DataSouse实例
//2.根据DataSouse创建对应的Connection
public class DBUtil {
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/bookmanager?characterEncoding=utf8&useSSL=false";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "1234";

    //懒汉模式:
    private static DataSource dataSource = null;

    //初始情况下,dataSource为null,没有被实例化
    //首次调用getDataSource()时才会被实例化
    private static DataSource getDataSource(){
        if(dataSource == null){
            dataSource = new MysqlDataSource();
            ((MysqlDataSource)dataSource).setUrl(URL);
            ((MysqlDataSource)dataSource).setUser(USERNAME);
            ((MysqlDataSource)dataSource).setPassword(PASSWORD);
        }
        return dataSource;
    }

    //提供一个方法来建立连接
    //用static来修饰,那么就无需实例化DBUtil实例就能调用这个方法,更加方便
    public static Connection getConnection() throws SQLException {
        return getDataSource().getConnection();
    }

    //释放资源
    public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
        try{
            if(resultSet != null){
                resultSet.close();
            }
            if(statement != null){
                statement.close();
            }
            if(connection != null){
                connection.close();
            }
        }catch (SQLException e){
            e.printStackTrace();
        }

    }
}

6.BookDao类

封装 对表的增删查改操作

package Java100_1006;

import Java100_1006.Book;
import Java100_1006.DBUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//封装 对Book表的增删查改操作
public class BookDao {

    //1.新增书籍(插入)
    public boolean add(Book book){
        //把book对象插入数据库的书籍表中
        Connection connection = null;
        PreparedStatement statement = null;
        try {
            //1.和数据库建立连接
            connection = DBUtil.getConnection();

            //2.拼装sql语句
            String sql = "insert into book values(null,?,?,?,?,?)";
            statement = connection.prepareStatement(sql);
            statement.setString(1,book.getName());
            statement.setString(2,book.getAuthor());
            statement.setInt(3,book.getPrice());
            statement.setString(4,book.getType());
            statement.setInt(5,book.isBorrowed()?1:0);

            //3.执行SQL
            int ret = statement.executeUpdate();
            if(ret == 1)
                return true;
            return false;

        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,null);
        }
        return false;
    }
    //2.查找所有书籍(查找)
    public List<Book> selectAll() {
        List<Book> list = new ArrayList<>();
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            //1.与数据库建立连接
            connection = DBUtil.getConnection();
            //2.拼装SQL
            String sql = "select * from book";
            statement = connection.prepareStatement(sql);
            //3.执行SQL
            resultSet = statement.executeQuery();
            //4.遍历结果集合
            while(resultSet.next()){
                //取出当前行的这些列,构造一个Book对象来
                Book book = new Book();
                book.setBookId(resultSet.getInt("bookId"));
                book.setName(resultSet.getString("name"));
                book.setAuthor(resultSet.getString("author"));
                book.setPrice(resultSet.getInt("price"));
                book.setType(resultSet.getString("type"));
                book.setBorrowed(resultSet.getInt("isBorrowed")==1);
                //把这个book对象添加到链表中
                list.add(book);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }
        return list;
    }
    //3.根据名字查找书籍(查找)
    public List<Book> selectByName(String name){
        List<Book> list = new ArrayList<>();
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;

        try {
            //1.先与数据库建立连接
            connection = DBUtil.getConnection();
            //2.拼装SQL语句
            String sql = "select * from book where name=?";
            statement = connection.prepareStatement(sql);
            statement.setString(1,name);
            //3.执行SQL
            resultSet = statement.executeQuery();
            //4.遍历结果集合
            while(resultSet.next()){
                Book book = new Book();
                book.setBookId(resultSet.getInt("bookId"));
                book.setName(resultSet.getString("name"));
                book.setAuthor(resultSet.getString("author"));
                book.setPrice(resultSet.getInt("price"));
                book.setType(resultSet.getString("type"));
                book.setBorrowed(resultSet.getInt("isBorrowed") == 1);
                list.add(book);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }
        return list;
    }
    //4.删除书籍(删除)
    public boolean delete(int bookId){
     Connection connection = null;
     PreparedStatement statement = null;
        try {
            //1.建立连接
            connection = DBUtil.getConnection();
            //2.拼装SQL
            String sql = "delete from book where bookId=?";
            statement = connection.prepareStatement(sql);
            statement.setInt(1,bookId);
            //3.执行SQL
            int ret = statement.executeUpdate();
            if(ret != 1){
                return  false;
            }
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,null);
        }
        return false;
    }
    //5.借书(修改)
    public boolean borrowBook(int bookId){

        Connection connection = null;
        //statement1用于查找操作
        PreparedStatement statement1 = null;
        //statement2用于修改操作
        PreparedStatement statement2 = null;
        ResultSet resultSet = null;
        try {
            //1.建立连接
            connection = DBUtil.getConnection();
            //要借书,就必须知道这本书存不存在,所以我们先查找,再操作
            //2.拼装SQL
            String sql = "select * from book where bookId=?";
            statement1 = connection.prepareStatement(sql);
            statement1.setInt(1,bookId);
            //3.执行SQL
            resultSet = statement1.executeQuery();
            //4.遍历结果,预期结果要么是1条,要么是0条
            if(resultSet.next()){
                //进入if就说明书是存在的
                boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
                if(isBorrowed) {
                    //说明书已经被借出了,不能再次借阅
                    System.out.println("书已经借出! 无法再次借出! bookId = " + bookId);
                    return false;
                }
            }else{
                //进入else,那么书是不存在的
                System.out.println("书不存在! 无法借出! bookId = " + bookId);
                return false;
            }
            //[接下来是开始进行借书逻辑]
            //5.拼装SQL
            sql = "update book set isBorrowed=1 where bookId=?";
            statement2 = connection.prepareStatement(sql);
            statement2.setInt(1,bookId);

            //6.执行SQL
            int ret = statement2.executeUpdate();
            if(ret != 1){
                return false;
            }
            return true;

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(resultSet != null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement2 != null){
                try {
                    statement2.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement1 != null){
                try {
                    statement1.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
    //6.还书(修改)
    public boolean returnBook(int bookId){
        Connection connection = null;
        PreparedStatement statement1 = null;
        PreparedStatement statement2 = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtil.getConnection();
            //查询书是否存在
            String sql = "select * from book where bookId=?";
            statement1 = connection.prepareStatement(sql);
            statement1.setInt(1,bookId);
            resultSet = statement1.executeQuery();
            if(resultSet.next()){
                //进入if语句就说明这本书存在于书籍名单中
                boolean isBorrowed = (resultSet.getInt("isBorrowed")==1);
                if(!isBorrowed){
                    System.out.println("书没有借出, 没必要还! bookId = " + bookId);
                    return false;
                }
            }else{
                //不是图书系统中的书,不需要还
                System.out.println("书不存在, 无法归还! bookId = " + bookId);
                return false;
            }
            //[还书]
            //修改书籍的借出状态就可
            sql = "update book set isBorrowed=0 where bookId=?";
            statement2 = connection.prepareStatement(sql);
            statement2.setInt(1,bookId);
            int ret = statement2.executeUpdate();
            if(ret != 1){
                return false;
            }
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(resultSet != null){
                try {
                    resultSet.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement2 != null){
                try {
                    statement2.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(statement1 != null){
                try {
                    statement1.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        return false;
    }
}

7.UserDao类

封装 识别用户的操作

package Java100_1006;

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

public class UserDao {
    //实现根据用户名找密码这样一个过程(用户名 唯一)
    public User selectByName(String name){
        Connection connection = null;
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            connection = DBUtil.getConnection();
            String sql = "select * from user where username=?";
            statement = connection.prepareStatement(sql);
            statement.setString(1,name);
            resultSet = statement.executeQuery();
            if(resultSet.next()){
                //存在这个用户,返回一个User对象
                //判断这个用户是普通用户还是管理员
                boolean isAdmin = (resultSet.getInt("isAdmin"))==1;
                User user = null;
                if (isAdmin){
                    user = new Admin();
                }else{
                    user = new NormalUser();
                }
                user.setUserId(resultSet.getInt("userId"));
                user.setUserName(resultSet.getString("username"));
                user.setPassWord(resultSet.getString("password"));
                return user;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }
        return null;
    }
}

8.operations包

创建IOperation接口和实现这个接口的其他类

接口:

package Java100_1006.operations;

//后续的增加 删除  借书 还书 等操作都要实现这个接口
public interface IOperation {
    void work();
}

8.1AddOperation类:增加书籍

package Java100_1006.operations;

import Java100_1006.Book;
import Java100_1006.BookDao;

import java.util.Scanner;

public class AddOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("新增书籍!");
        Scanner scanner  = new Scanner(System.in);
        System.out.println("请输入书名: ");
        String bookName = scanner.next();
        System.out.println("请输入作者: ");
        String author = scanner.next();
        System.out.println("请输入价格:");
        int price = scanner.nextInt();
        System.out.println("请输入类别:");
        String type = scanner.next();
        //假设新增书籍都是未借出的状态
        Book book = new Book();
        book.setName(bookName);
        book.setAuthor(author);
        book.setPrice(price);
        book.setType(type);
        BookDao bookDao = new BookDao();
        boolean ret = bookDao.add(book);
        if(ret){
            System.out.println("新增书籍成功");
        }else{
            System.out.println("新增书籍失败!");
        }
    }
}

8.2BorrowOperation类:借阅书籍

package Java100_1006.operations;

import Java100_1006.BookDao;

import java.util.Scanner;

public class BorrowOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("借阅书籍!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要借阅的书籍id:");
        int bookId = scanner.nextInt();
        BookDao bookDao = new BookDao();
        boolean ret = bookDao.borrowBook(bookId);
        if (ret) {
            System.out.println("借阅书籍成功!");
        } else {
            System.out.println("借阅书籍失败!");
        }
    }
}

8.3DeleteOperation类:删除书籍

package Java100_1006.operations;

import Java100_1006.BookDao;

import java.util.Scanner;

public class DeleteOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("删除书籍!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除的书籍id: ");
        int bookId = scanner.nextInt();

        BookDao bookDao = new BookDao();
        boolean ret = bookDao.delete(bookId);
        if (ret) {
            System.out.println("删除成功!");
        } else {
            System.out.println("删除失败!");
        }
    }
}

8.4DisplayOperation类:查看书籍列表

package Java100_1006.operations;

import Java100_1006.Book;
import Java100_1006.BookDao;

import java.util.List;

public class DisplayOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("展示所有书籍!");
        BookDao bookDao = new BookDao();
        List<Book> books = bookDao.selectAll();
        for(Book book:books){
            System.out.println(book);
        }
        System.out.println("展示所有书籍完毕!");
    }
}

8.5ExitOperation类:退出系统

package Java100_1006.operations;

//退出操作
public class ExitOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("退出程序");
        System.exit(0);
    }
}

8.6FindOperation类:查找书籍

package Java100_1006.operations;

import Java100_1006.Book;
import Java100_1006.BookDao;

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

public class FindOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("根据名字查找书籍!");
        System.out.println("请输入要查找的书名: ");
        Scanner scanner = new Scanner(System.in);
        String bookName = scanner.next();
        BookDao bookDao = new BookDao();
        List<Book> books = bookDao.selectByName(bookName);
        for(Book book:books){
            System.out.println(book);
        }
        System.out.println("根据名字查找书籍完毕!");
    }
}

8.7ReturnOperation类:返还书籍

package Java100_1006.operations;

import Java100_1006.BookDao;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    @Override
    public void work() {
        System.out.println("归还书籍!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要归还的书籍id:");
        int bookId = scanner.nextInt();
        BookDao bookDao = new BookDao();
        boolean ret = bookDao.returnBook(bookId);
        if (ret) {
            System.out.println("归还书籍成功!");
        } else {
            System.out.println("归还书籍失败!");
        }
    }
}

9.Main方法实现

package Java100_1006;

import java.util.Scanner;

//编写系统的主体逻辑
public class Main {
    public static void main(String[] args) {
        //通过login方法进行登录
        User user = login();
        while(true){
            int choice = user.menu();
            user.doOperation(choice);
        }
    }

    private static User login() {
        //1.实现用户登录逻辑
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String userName = scanner.next();
        System.out.println("请输入密码:");
        String passWord = scanner.next();
        //2.从数据库根据用户名查询密码
        UserDao userDao = new UserDao();
        User user = userDao.selectByName(userName);
        if(user == null){
            //不存在该用户
            System.out.println("登陆失败!");
            // 直接退出程序
            System.exit(0);
        }
        if(!user.getPassWord().equals(passWord)){
            //密码不正确
            System.out.println("登陆失败");
            System.exit(0);
        }
        return user;
    }
}

三、结果实现

1.登录界面

2.普通用户操作

3.管理员操作

到此这篇关于Java开发实例之图书管理系统的实现的文章就介绍到这了,更多相关Java 图书管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JAVA实战项目实现客户选购系统详细流程

    客户选购信息系统功能需求: 1)输入多个客户购买商品信息.包括客户名称,年龄,购买的商品,每种商品的单价和数量. 2)输出多个客户购买商品的信息.包括客户名字,年龄,购买商品,每种商品的单价和数量,总的消费金额. 方法:1)定义一个多个客户信息处理的类 CustomerGoodsAdmin .包括: 属性: Customer [ ]customers 方法: void show () //用户交互界面 void inputCustomerlnfo () / /客户采购信息输入 Void prin

  • JAVA实战练习之图书管理系统实现流程

    目录 前言 项目说明: 项目功能如下: 项目分析: (-)用户管理模块 (二)基本信息维护模块 读者管理模块 前言 长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐.在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息.在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息.太过于繁琐了!所以,我们需求设计一个图书管理

  • Java练手小项目实现一个项目管理系统

    目录 前言: 一.项目需求 二.功能实现 三.具体模块的实现 四.总结 前言: 时隔多日,我们学习完java的面向对象阶段,毕竟需要付诸实践,这个小项目就 作为我们第一个java面向对象解决的项目,接下来就让我们一起进入项目的世界吧 一.项目需求 • 模拟实现一个基于文本界面的 < 项目开发团队分配管理软件 > • 熟悉 Java 面向对象的高级特性,进一步掌握编程技巧和调试技巧 •主要涉及以下知识点: Ø 类的继承性和多态性 Ø 对象的值传递.接口 Ø static 和 final 修饰符

  • Java实现学生管理系统详解

    目录 总结 学生管理系统(Java版) 前言:这个是大二做的课设(还是学生管理系统-),理论上虽然是4个人一组一起做的,但是,注意这个"但是",还是我一个人承担了所有-代码和文档基本都是我一个人写的,当初直接肝得吐血,这也是为啥后面的 Web 版部分功能没有完成的原因. 项目介绍 项目分为一个JavaSwing写的GUI桌面应用和一个半成品的Web应用,下图是项目的整体功能结构展示 JavaSwing JavaSwing这里使用的是 MyBatis + Spring 的框架组合,后面发

  • java实现简易外卖订餐系统

    用java实现简易外卖订餐系统,供大家参考,具体内容如下 一.使用技术 javaSE 二.实现功能 外卖订餐系统 具体要求如下: 使用选择结构,循环结构,数组的知识实现一个外卖订餐系统 三.运行效果图 1.订餐功能 2.查看餐袋 3.签收订单 4.删除订单 5.点赞 6.退出 代码实现 public class Order { public static void main(String[] args) { int zero = 1; int x = 0;//订单数组下标 String[] na

  • Java开发实例之图书管理系统的实现

    目录 一.项目分布 二.代码展示 1.SQL语句 2.Book类 3.User类 4.用户分为两种 4.1NormalUser类 4.2Admin类 5.DBUtil类 6.BookDao类 7.UserDao类 8.operations包 8.1AddOperation类:增加书籍 8.2BorrowOperation类:借阅书籍 8.3DeleteOperation类:删除书籍 8.4DisplayOperation类:查看书籍列表 8.5ExitOperation类:退出系统 8.6Fin

  • JAVA初级项目——实现图书管理系统

    今天博主再给大家分享一个小项目:MiNi图书管理系统.用的是Java语言开发的,代码不多,大概260行左右吧,系统是实现图书的新增图书.删除图书.借阅图书.归还图书.查看图书等简单的功能(后附源代码)! 首先展示一下运行界面效果图:运行代码后,会在控制台显示如下界面: 然后让用户选择,如果用户不小心或者误输入了错误的数,会再次让用户进行输入. 当用户输入2后,可以查看图书,会显示已有的图书:包括图书书名.借阅状态.借阅次数.借阅日期等信息. 当用户输入1后,可以新增图书,再次让用户输入新增的图书

  • java实现简单的图书管理系统

    本文实例为大家分享了java实现简单的图书管理系统的具体代码,供大家参考,具体内容如下 一.项目分布 Book类: 定义了书的一些属性(书名,作者,价格,分类,状态)并且写了属性的get.set方法 Library类: 写了登录函数(1.普通用户,2.管理员,3.退出系统), Person类:定义的人的属性(姓名,性别,年龄)并且写了属性的get.set方法,定义了一些书. operate接口:操作的接口,操作方法:查询/查阅,删除/借阅,增加/还书,显示书籍列表 Root类:继承了Person

  • Java顺序表实现图书管理系统

    本文实例为大家分享了Java顺序表实现图书管理系统的具体代码,供大家参考,具体内容如下 一.简介 实现此项目的目的是巩固并理解前面的知识点:类,抽象类,封装,继承,多态,接口等 二.核心需求 管理端   查阅书籍   增加书籍   删除书籍   打印书籍列表   退出系统 用户端   查询书籍   借阅书籍   归还书籍   打印书籍列表   退出系统 三.类的设计 1. 创建图书类 图书类中包含图书的名称,价格,类型,作者和是否被借出等信息,并生成构造方法,Getter()和Setter()方

  • JAVA大作业之图书管理系统实现全解

    目录 一.简介 二.系统的设计 1.Book包: 1.1.book类: 1.2.bookList类: 2.Operation包: 2.1.增加书籍: 2.2.删除书籍: 2.3.借阅书籍 2.4.归还书籍 2.5.显示书籍 2.6.查找书籍 2.7.整理书籍 2.8.退出系统 3.User包: 3.1.User 3.2.管理员 3.3.普通用户 4.程序的运行 三.结尾 一.简介 在学习了Java语法的类.接口.继承.多态.接口等基础语法后的一简单的项目练习. 具体功能为: 1.简单的根据姓名的

  • Java实现迷你图书管理系统案例全程

    目录 项目需求 覆盖知识 开发思路 开发步骤 全部代码展示 1.Book类 2.DBUtils类 3.数据访问层的BookDao接口 4.数据访问层的BookDaoImpl类 5.服务层的BookService接口 6.服务层的BookServiceImpl类 7.视图层BookMgr测试类 ​ 项目需求 为某图书馆开发一个迷你图书管理系统,实现图书的管理,包括如下功能: (1)新增图书 (2)查看图书 (3)删除图书 (4)借出图书 (5)归还图书 (6)退出图书系统 覆盖知识 程序基本概念.

  • Java图书管理系统课程设计

    本文实例为大家分享了Java图书管理系统的具体代码,供大家参考,具体内容如下 大二上学期做的一个Java课程设计,总分为四个Java文件,AllBook,AllBorrow,AllStudent,Tushu. 本系统是一个面向图书馆的管理系统,具有一定的实用性.它主要完成了图书的基本操作功能,全校学生信息的相关基本操作,以及对图书的借阅归还管理.本系统采用当前流行的面向对象的JAVA语言开发工具eclipse来完成整个系统的设计.系统在设计过程中不可避免地遇到了各种各样的问题,由于整个系统完全都

  • java开发中基于JDBC连接数据库实例总结

    本文实例讲述了java开发中基于JDBC连接数据库的方法.分享给大家供大家参考,具体如下: 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String  className)实现. 例如: try{ //加载MySql的驱动类 Class.forName("com.mysql.jdbc.Driver") ; }c

  • 图书管理系统java代码实现

    本文实例为大家分享了java实现图书管理系统的具体代码,供大家参考,具体内容如下 /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:    <图书管理系统--java>                          * 作    者:       刘江波                       * 完成日期:    2012     年  3    

随机推荐