图书管理系统(JDBC)

AdminUser是管理员类

NormalUser是用户类

AddOperation是增加图书类

BorrowOperation是借书类

DelOperation是删除图书类

ExitOperation是退出类

FindOperation是查找图书类

IOPeration是接口

ReturnOperation是还书类

ShowOperation是显示所有图书类

注意:我的数据库有个cnm数据库,如果你没有的话,需要先创建一个cnm数据库

sql建表语句:

drop table if exists book;
create table book
(	id			   	 bigint  auto_increment,
   name              varchar(255), 
   author            varchar(255),
   price             int,
   type              varchar(255),
   isBorrowed        varchar(255),
   primary key (id)
);

insert book(name,author,price,type,isBorrowed) values('西游记','吴承恩',35,'小说','未借阅');
insert book(name,author,price,type,isBorrowed) values('活着','余华',40,'文学','未借阅');
commit;
select * from book;

Book类

package book;

public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrowed;//是否被借出,初始值是false,在构造方法中不用写

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

    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name:" + name +
                ",  author:" + author +
                ",  price:" + price +
                ",  type=:" + type +
                ",  isBorrowed:" +(isBorrowed==true?"  已借出":"  未借出") +
                '}';
    }
}

BookList类

package book;

public class BookList {
    private static final int DEFAULT_SIZE=10;//该常量定义一个书架有多少本书
    private  Book[] books=new  Book[DEFAULT_SIZE];
    private int usedSize;//记录下当前book数组中有几本书


    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }



}

User类

package user;

import book.BookList;
import opera.IOPeration;

public abstract class User {//抽象类
    protected String name;//名字.这边的protect代表的是名字的权限。如果是private,它只能在同一个包的同一类使用。就不能让AdminUser类继承了。写public的话
    //权限太大了,不是很好。
    protected IOPeration[] ioPerations;
    public User(String name) {//构造方法
        this.name = name;
    }
    public abstract int menu();//抽象方法,打印菜单,因为有了choice返回值int类型,所以void改成int
    public void doWork(int choice, BookList bookList){//通过选择的操作,去选择执行数组下的哪个操作
        this.ioPerations[choice].work(bookList);
    }
}

AdminUser类

package user;

import opera.*;

import java.util.Scanner;

public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        this.ioPerations=new IOPeration[]{
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new ShowOperation()

        };
        System.out.println("欢迎管理员:"+name);
    }
    @Override
    public int menu() {//因为返回值choice是int类型的
        System.out.println("____________________________________");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
        System.out.println("请选择你需要的功能:");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }

}

NormalUser类

package user;

import opera.*;

import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        this.ioPerations = new IOPeration[]{//引用,这边用super也可以,因为这里没有同名的,不需要做区分。用this最好
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()

        };
        System.out.println("欢迎用户:"+name);
    }

    @Override
    public int menu() {
        System.out.println("_________________");
        System.out.println("1.查找图书!");
        System.out.println("2.借阅图书!");
        System.out.println("3.归还图书!");
        System.out.println("0.退出系统!");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

}

IOPeration接口

package opera;

import book.BookList;

public interface IOPeration {//创建接口
    void work(BookList bookList);//抽象方法
    //功能主要是针对图书的,也就是针对书架。
}

AddOperation类

package opera;

import book.Book;
import book.BookList;

import java.sql.*;
import java.util.Scanner;

public class AddOperation implements IOPeration {
    public void work(BookList bookList) {
        System.out.println("新增图书!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入新增图书名字:");
        String name = scanner.nextLine();
        System.out.println("请输入新增图书作者:");
        String author = scanner.nextLine();
        System.out.println("请输入价格");
        int price = scanner.nextInt();
        //吸收回车符号
        scanner.nextLine();
        System.out.println("请输入图书类型:");
        String type = scanner.nextLine();

        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book where name='"+name+"'";
            rs = stmt.executeQuery(sql);
            if(!rs.next()) {
                String s = "insert into book avalues('"+name+"','"+author+"','"+price+"','"+type+"','未借阅')";
                int x= stmt.executeUpdate(s);
                if(x>0)
                    System.out.println("新增图书成功!");
                else
                    System.out.println("新增图书失败");
            }
            else{
                System.out.println("已经有这本书了");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }


    }

}

DelOperation类

package opera;

import book.Book;
import book.BookList;

import java.sql.*;
import java.util.Scanner;

public class DelOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        System.out.println("请输入要删除图书的名称");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();


        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book where name='"+name+"'";
            rs = stmt.executeQuery(sql);
            if(rs.next()) {
                String s = "delete from book where name='"+name+"'";
                int x = stmt.executeUpdate(s);
                if(x>0)
                    System.out.println("删除成功!");
                else
                    System.out.println("删除失败!");
            }
            else{
                System.out.println("没有这本书");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }


    }

}

FindOperation类

package opera;

import book.Book;
import book.BookList;

import java.sql.*;
import java.util.Scanner;

public class FindOperation implements IOPeration{//继承
    @Override
    public void work(BookList bookList) {//重写IOPeration类中的work方法
        System.out.println("查找图书!");
        System.out.println("请输入要查找的图书名字");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();


        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book where name='"+name+"'";
            rs = stmt.executeQuery(sql);
            if(rs.next()) {
                while (true) {
                    String s1 = rs.getString("name");
                    String s2 = rs.getString("author");
                    int s3 = rs.getInt("price");
                    String s4 = rs.getString("type");
                    String s5 = rs.getString("isBorrowed");

                    System.out.print("name: " + s1);
                    System.out.print(",author:" + s2);
                    System.out.print(",price:" + s3);
                    System.out.print(",type:" + s4);
                    System.out.print(",isBorrowed:" + s5);
                    System.out.println();
                    if(!rs.next())break;
                }
            }
            else{
                System.out.println("没有这本书");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }

}

ShowOperation类

package opera;

import book.BookList;

import java.sql.*;

public class ShowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book ";
            rs = stmt.executeQuery(sql);
            if(rs.next()) {
                while (true) {
                    String s1 = rs.getString("name");
                    String s2 = rs.getString("author");
                    int s3 = rs.getInt("price");
                    String s4 = rs.getString("type");
                    String s5 = rs.getString("isBorrowed");

                    System.out.print("name: " + s1);
                    System.out.print(",author:" + s2);
                    System.out.print(",price:" + s3);
                    System.out.print(",type:" + s4);
                    System.out.print(",isBorrowed:" + s5);
                    System.out.println();
                    if(!rs.next())break;
                }
            }
            else{
                System.out.println("没有这本书");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }
    }
}

BorrowOperation类

package opera;

import book.Book;
import book.BookList;

import java.sql.*;
import java.util.Scanner;

public class BorrowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        System.out.println("请输入要借阅的图书名字:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();

        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book where name='"+name+"'";
            rs = stmt.executeQuery(sql);
            if(rs.next()) {
                String s1 = "select isBorrowed from book where name='"+name+"'";
                rs = stmt.executeQuery(s1);
                if(rs.next()){
                        String str = rs.getString("isBorrowed");
                    if(str.equals("未借阅")) {
                        String s2 = "update book set isBorrowed='已借阅' where name='" + name + "'";
                        int x = stmt.executeUpdate(s2);
                        if (x > 0)
                            System.out.println("借阅成功!");
                        else
                            System.out.println("借阅失败");
                    }
                }
            }
            else{
                System.out.println("没有这本书");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }
}

ReturnOperation类

package opera;

import book.Book;
import book.BookList;

import java.sql.*;
import java.util.Scanner;

public class ReturnOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书!");
        System.out.println("请输入要归还的图书名字:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();


        //添加到数据库
        //定义3个变量
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            //1.注册驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2.获取连接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/cnm", "root", "123456");
            //3.获取数据库操作对象(执行sql语句的对象)
            stmt = conn.createStatement();
            //4.执行sql语句
            String sql = "select * from book where name='"+name+"'";
            rs = stmt.executeQuery(sql);
            if(rs.next()) {
                String s1 = "select isBorrowed from book where name='"+name+"'";
                rs = stmt.executeQuery(s1);
                if(rs.next()){
                    String str = rs.getString("isBorrowed");
                    if(str.equals("已借阅")) {
                        String s2 = "update book set isBorrowed='未借阅' where name='" + name + "'";
                        int x = stmt.executeUpdate(s2);
                        if (x > 0)
                            System.out.println("归还成功!");
                        else
                            System.out.println("归还失败");
                    }
                }
            }
            else{
                System.out.println("没有这本书");
            }
        }catch (Exception e) {
            e.printStackTrace();
        } finally {

            //6.释放资源
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt != null) {
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

        }

    }
}

ExitOperation类

package opera;

import book.BookList;

public class ExitOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(0);//退出系统。0代表正常退出
    }
}

Main类

import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {
    //登录
    public static User login() {
        System.out.println("请输入你的姓名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请选择你的身份:1->管理员 0->普通用户");
        int choice = scanner.nextInt();
        if (choice == 1) {
            //说明是管理员
            //由于有返回值,所以我们的方法返回值就不能写void了。但是我们也无法确定返回值是什么,可能是管理员,可能是用户。所以,用向上转型,写User.
            return new AdminUser(name);//返回实例化一个管理员对象
        } else {
            return new NormalUser(name);//返回实例化一个用户对象
        }
    }

    public static void main(String[] args) {
        User user = login();//执行上面的login方法
        BookList bookList = new BookList();
        while (true) {
            int choice = user.menu();//实现打印菜单
            user.doWork(choice, bookList);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/905950.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装,如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

如何保护网站安全

1. 使用 Web 应用防火墙(WAF) 功能:WAF 可以实时检测和阻止 SQL 注入、跨站脚本(XSS)、文件包含等常见攻击。它通过分析 HTTP 流量来过滤恶意请求。 推荐:可以使用像 雷池社区版这样的 WAF,它提…

【CPN TOOLS建模学习】设置变迁的属性

使用Tab键在属性之间进行切换 与一个变迁相关联的四个铭文,均为可选项: 变迁名称守卫(Guard)时间代码段 变迁延迟必须是一个正整数表达式。该表达式前面加上,这意味着时间铭文的形式为 delayexpr。在添加时间铭文之前,铭文的默…

Cityscapes数据集:如何将像素级的多边形标注的分割数据标注转为目标检测的bbox标注

Cityscapes数据集官网下载地址: https://www.cityscapes-dataset.com/ 相关介绍:从官网下载这三个压缩包文件leftImg8bit_trainvaltest.zip、gtCoarse.zip、gtFine_trainvaltest.zip 1)leftImg8bit_trainvaltest.zip分为train、val以及tes…

NVR批量管理平台EasyNVR多品牌NVR管理工具/设备关于远程控制的详细介绍

在数字化安防时代,视频监控技术已成为维护公共安全、提升管理效能的重要基石。随着科技的飞速发展,流媒体技术和视频监控正经历着前所未有的变革与融合。NVR批量管理平台EasyNVR,作为一款基于“云-边-端”一体化架构的视频融合云平台&#xf…

理解原子变量之一:从互斥锁到原子变量,最粗浅的认识

目录 三个实例对比 结论 多线程编程对于程序员来说,是一项非常重要的技能。在C11标准问世之前,C标准是不支持多线程的。在C11出台前,如果你想在linux平台进行多线程编程,就要使用linux的多线程库pthread,而pthread是…

eBay自养号测评养成攻略:从环境系统搭建到养号下单

eBay账号在测评中的重要性不言而喻,然而,新注册的账号往往面临被封禁或下单即封的风险。如何养成稳定的买家号,成为众多商家关注的焦点。以下将详细讲解eBay测评中如何稳定养成买家号。 一、账号注册后的初期养护 新注册的eBay账号&#xf…

Docker(二):Docker的基本使用

1 Docker的基本使用 1.1 镜像相关操作 1、从DockerHub搜索镜像 [rootmaster ~]# docker search centos # 镜像名字 描述 星标 是否官方(有OK表示为官方镜像) NAME …

【hector mapping参数设置】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 hector mapping部分参数介绍调整hector_mapping中的参数ros常见问题总结 hector mapping部分参数介绍 在wiki.ros.org/hector_mapping界面找到3.1.4 Parameters章节…

使用wordcloud与jieba库制作词云图

目录 一、WordCloud库 例子: 结果: 二、Jieba库 两个基本方法 jieba.cut() jieba.cut_for_serch() 关键字提取: jieba.analyse包 extract_tags() 一、WordCloud库 词云图,以视觉效果提现关键词,可以过滤文本…

ios Framework版本号的问题。

自己创建的framework和普通的app的版本号设置的地方是有所有不同的。 framework 的版本号是在 TARGETS -> Build Settings -> current Project Version 这个地方设置的, 在创建framework的时候xcode 会自动创建一个framework.h的文件名,framewo…

Axure设计之多级菜单导航教程(中继器)

在数字化时代,优化产品设计,提升用户界面交互,是产品设计着重考虑的点。针对传统菜单导航复杂繁琐的问题,本设计提出了一套灵活的菜单导航方案,结合中继器与动态面板,实现一键搜索、菜单收藏、多级菜单导航…

真题总结和整理

补码的符号位在最高位 IEEE754 规格化要求 小数点前面是1,其他的认为是小数点后面为1即可 计算之前要对阶 左移和右移在寄存器中如果未说明定点数,可以通过移动小数点实现 涉及最小帧长要记得除以2 求用于外设的时钟周期数 指令两端只允许有寄存器,间接寻址要通过MA…

计组-层次化存储结构

这里主要看存储的整体结构,cache,内存 这里看存储结构是按什么样的层次来划分存储结构,速度由慢到快,容量由大到小,这是基于性价比的考虑,所以分为多级多层次,可以做到提高速度的同时没有增加多…

Rust整合Elasticsearch

Elasticsearch是什么 Lucene:Java实现的搜索引擎类库 易扩展高性能仅限Java开发不支持水平扩展 Elasticsearch:基于Lucene开发的分布式搜索和分析引擎 支持分布式、水平扩展提高RestfulAPI,可被任何语言调用 Elastic Stack是什么 ELK&a…

CoTAM——思维属性操纵链,一种利用大规模语言模型的新的高效快速学习方法

概述 近年来,大规模语言模型已显示出惊人的能力,可以从少量样本中学习。然而,这种能力需要昂贵的大规模模型,其运行成本是一大挑战。此外,在推理过程中,需要对所有测试输入的上下文(包括演示&a…

Chromium 中chrome.topSites扩展接口定义c++

一、chrome.topSites 使用 chrome.topSites API 访问新标签页上显示的热门网站(即最常访问的网站)。不包括用户自定义的快捷方式。 权限 topSites 您必须声明“topSites”扩展程序清单中授予使用此 API 的权限。 {"name": "My exten…

物联网设备如何助力实现高效远程老人监护

在发达国家,老龄化进程加速,老年人常需医疗、行动辅助、安全保障及个人卫生护理,费用高昂。传统老人监护依赖护士或助理现场照料,而物联网远程监控方案能有效改进此模式。它通过运用传感器等技术,实现全天候低成本实时…

NPM 包开发与优化全面指南

前言 Hey, 我是 Immerse系列文章首发于【Immerse】,更多内容请关注该网站转载说明:转载请注明原文出处及版权声明! 1. 理解 NPM 包的结构 1.1 package.json 文件:包的核心 package.json文件是 NPM 包的中央配置,定…

基于redis实现延迟队列

Redis实现延时队列 延时队列里装的主要是延时任务,用延时队列来维护延时任务的执行时间。 1、延时队列有哪些使用情景? 1、如果请求加锁没加成功 可以将这个请求扔到延时队列里,延后处理。 2、业务中有延时任务的需要 比如说&#xff0…