Java面向对象——图书管理系统(小白也能看的懂!)

本文介绍了如何使用Java面向对象思想设计一个图书管理系统,包括功能介绍、包的分装、代码框架搭建,涉及Book类、BookList类、operation接口包及User类的详细设计。文章提供了一个适合初学者理解的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.功能介绍

我们需要实现一个可以进行管理员操作和用户操作的图书管理系统,其中包括了管理员操作(查找,添加,删除,显示,退出系统);用户操作(查找,借阅,归还,退出系统).

管理员操作实例:
在这里插入图片描述

用户操作实例:
在这里插入图片描述

二.JAVA面向对象思想 包的分装

java面向对象的思想,让我们可以分装出来许多的包,包中也可以包含许多需要的类

在图书馆里系统中,我们需要准备3个包,分别是,book包(用来创建书这个对象的属性,同时创建一个书架用来存放书),user包(包含了管理员和普通用户),operation接口包(用来具体实现查找添加等逻辑)。

1.book包

Book属性的创建,BookList创建书架

2.user包 较复杂

在这里插入图片描述

3.operation包(接口包)

在这里插入图片描述

三.代码框架的搭建

1.book包 Book类

首先我们需要创建一个Book类,用来创建书的属性,同时面向对象的思想,我们需要对类中的成员属性进行分装(private修饰符),让他只能在类内使用不能再类外使用,如果要使用,需要get和set成员方法(set初始化成员属性,get返回成员属性,原本只能在类内访问,现在可以通过方法的引用来实现在类外的使用) ,同时使用构造方法来初始化对象的内容和属性。
注:get set方法和tostring方法在IDEA编译器中可以自动生成 鼠标右键然后进行选择

Book类 代码实现

package book;
//Book成员属性的创建 private修饰
public class Book {
   
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrowed;//是否被借出

    /**
     *构造方法 用来创建对象 初始化对象的内容和属性
     */
    public Book(String name, String author, int price, String type) {
   
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

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

    //toString方法
    @Override
    /**
     * 重写toString的isBorrowed
     */
    public String toString() {
   
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price='" + price + '\'' +
                ", type='" + type + '\'' +
                ((isBorrowed == true) ? "已经借出":"未借出")+//三目运算符
                '}';
    }

2.book包 BookList类

我们需要准备一个书架来存放我们的书,我们可以把这个书架设为Book类型的数组,同时需要一个成员属性来记录此时我的书架中放了多少本书,同时构造方法也是不能少的,用来初始化对象的属性和内容,构造方法时可以在书架中先放入几本书。

代码如下:

public class BookList {
   
    Book[] books = new Book[10];//可以存放十本书
    private int usedSize;//记录当前的books这个数组里有多少本书

    //构造方法
    public BookList(){
   
        books[0] = new Book("你的名字","新海诚",20,"轻小说");
        books[1] = new Book("老人与海","海明威",25,"小说");
        books[2] = new Book("天气之子","新海诚",22,"轻小说");
        usedSize = 3;
    }

在BookList书架中,我们要做到可以拿出书,也可以在书架中放入书,在你拿出书或者放入书的时候,还需要来实时的记录书架现存的书。
翻译为代码就是,需要一个方法来找到书的下标,需要一个方法来在合适的位置放入书,还需要get set方法来实时获取书架中书的个数。

代码如下:

//pos 位置是合法的 返回下标为pos的books数组里的书 拿到书
    public Book getBook(int pos){
   
        return books[pos];
    }
    /**
     *  book是你要放入的书(添加)
     *  pos位置是合法的
     */
    public void setBooks(int pos,Book book) {
   
        books[pos] = book;
    }
    /**
     * 实时获取或修改Size的值
     * @return
     */
    public int getUsedSize() {
   
        return usedSize;
    }

    public void setUsedSize(int size) {
   
        usedSize = size;
    }
}

BookList类完整代码:

package book;

public class BookList {
   
    Book[] books = new Book[10];//可以存放十本书
    private int usedSize;//记录当前的books这个数组里有多少本书

    //构造方法
    public BookList(){
   
        books[0] = new Book("你的名字","新海诚",20,"轻小说");
        books[1] = new Book("老人与海","海明威",25,"小说");
        books[2] = new Book
import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; import javax.swing.event.*; import javax.swing.border.*; import java.sql.*; import java.io.*; import java.net.*; import javax.swing.*; public class Java{ public static void main(String args[]){ One one=new One(); } } class One extends JFrame implements ActionListener{ JLabel jlabel1,jlabel2; JButton jbutton1,jbutton2; JTextField jtextfield1; JPanel jpanel1; JPasswordField passwordText; One(){ jpanel1=new JPanel(); jlabel1=new JLabel("用户名:"); jlabel2=new JLabel("密 码:"); jbutton1=new JButton("登录"); jbutton2=new JButton("取消"); Font f=new Font("楷体_GB2312",Font.BOLD,22); jlabel1.setFont(f); jlabel2.setFont(f); jtextfield1=new JTextField(10); passwordText=new JPasswordField(10); passwordText.setEchoChar('*'); jbutton1.addActionListener(this); jbutton2.addActionListener(this); setLayout(new FlowLayout()); jpanel1.add(jbutton1); jpanel1.add(jbutton2); add(jlabel1); add(jtextfield1); add(jlabel2); add(passwordText); add(jpanel1); setBounds(100,100,200,200); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); } public void actionPerformed(ActionEvent e){ if(e.getSource()==jbutton1){ String str1,str2; str1=jtextfield1.getText().trim(); str2=passwordText.getText(); Connection con; Statement sql; ResultSet rs; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ee){ System.out.println(""+ee); } try{ con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); rs=sql.executeQuery("SELECT * FROM login"); boolean boo=true; while(rs.next()){ if(rs.getString(1).equals(str1) && rs.getString(2).equals(str2)){ JOptionPane.showMessageDialog(this,"欢迎进入图书管理系统","login",JOptionPane.PLAIN_MESSAGE); setVisible(false); FrameMain t=new FrameMain(); boo=false; } } if(boo){ JOptionPane.showMessageDialog(this,"用户不存在或者输入错误请重新输入!","提示",JOptionPane.WARNING_MESSAGE); jtextfield1.setText(""); passwordText.setText(""); } con.close(); }catch(SQLException eee){System.out.println(eee);} } else{ System.exit(0); } } } class FrameMain extends JFrame implements ActionListener{ JPanel contentPane; JMenuBar mb1=new JMenuBar(); JMenu readr=new JMenu("读者"); JMenu book=new JMenu("图书"); JMenu help=new JMenu("帮助"); JMenu exit=new JMenu("退出"); JMenuItem r1=new JMenuItem("浏览读者信息"); JMenuItem b1=new JMenuItem("浏览图书信息"); JMenuItem b2=new JMenuItem("增加图书"); JMenuItem b3=new JMenuItem("删除图书"); JMenuItem b4=new JMenuItem("修改图书信息"); JMenuItem h1=new JMenuItem("使用网络信息帮助"); JMenuItem h2=new JMenuItem("读取java文件帮助信息"); JMenuItem e1=new JMenuItem("退出系统"); FrameMain(){ setTitle("图书馆信息管理系统"); readr.add(r1); book.add(b1); book.add(b2); book.add(b3); book.add(b4); help.add(h1); help.add(h2); exit.add(e1); mb1.add(readr); mb1.add(book); mb1.add(help); mb1.add(exit); setJMenuBar(mb1); r1.addActionListener(this); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); h1.addActionListener(this); h2.addActionListener(this); e1.addActionListener(this); setBounds(200,200,500,500); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void actionPerformed(ActionEvent e){ if(e.getSource()==r1){ new showReader(); } else if(e.getSource()==b1){ new showBook(); } else if(e.getSource()==b2){ new InsertBook(); } else if(e.getSource()==b3){ new Delete(); } else if(e.getSource()==b4){ new Modify(); } else if(e.getSource()==h1){ Help1 flink=new Help1(); } else if(e.getSource()==h2){ class Help2 extends JFrame { Help2(){ byte b[]=new byte[30]; JTextArea text=new JTextArea(20,20); setSize(330,300); setVisible(true); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); add(text,BorderLayout.CENTER); try{ FileInputStream input=new FileInputStream("help.java"); ProgressMonitorInputStream in=new ProgressMonitorInputStream(this,"读取help文件",input); ProgressMonitor p=in.getProgressMonitor(); while(in.read(b)!=-1){ String s=new String(b); text.append(s); Thread.sleep(200); } }catch(InterruptedException e){} catch(IOException e){} } } new Help2(); } else if(e.getSource()==e1){ System.exit(0); } } } class Help1 extends JFrame implements ActionListener,Runnable{ JButton button; URL url; JTextField text; JEditorPane editPane; byte b[]=new byte[118]; Thread thread; public Help1(){ text=new JTextField(20); editPane=new JEditorPane(); editPane.setEditable(false); button=new JButton("确定"); button.addActionListener(this); thread=new Thread(this); JPanel p=new JPanel(); p.add(new JLabel("输入网址: ")); p.add(text); p.add(button); Container con=getContentPane(); con.add(new JScrollPane(editPane),BorderLayout.CENTER); con.add(p,BorderLayout.NORTH); setBounds(60,60,500,500); setVisible(true); validate(); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); editPane.addHyperlinkListener(new HyperlinkListener (){ public void hyperlinkUpdate(HyperlinkEvent e){ if(e.getEventType()==HyperlinkEvent.EventType.ACTIVATED){ try{ editPane.setPage(e.getURL()); }catch(IOException e1){ editPane.setText(""+e1); } } } }); } public void actionPerformed(ActionEvent e){ if(!(thread.isAlive())) thread=new Thread(this); try{ thread.start(); }catch(Exception ee){ text.setText("我正在读取"+url); } } public void run(){ try{ int n=-1; editPane.setText(null); url=new URL(text.getText().trim()); editPane.setPage(url); }catch(MalformedURLException e1){ text.setText(""+e1); return; }catch(IOException eee){ text.setText(""+eee); return; } } } class InsertBook extends JDialog implements ActionListener{ JLabel insertBook; Object name[]={"编号","书名","出版社","出版日期"}; Object a[][]=new Object[1][4]; JTable table; JButton insert; Connection con; Statement sql; ResultSet rs; InsertBook(){ insertBook=new JLabel("请输入新书信息:"); table=new JTable(a,name); insert=new JButton("确定插入"); setLayout(new FlowLayout()); add(insertBook); add(table); add(insert); setBounds(100,100,800,200); setVisible(true); insert.addActionListener(this); } public void actionPerformed(ActionEvent e){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ee){ System.out.println(""+ee); } try{ con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); int k=sql.executeUpdate("INSERT INTO bookinformation VALUES('"+a[0][0]+"','"+a[0][1]+"','"+a[0][2]+"','"+a[0][3]+"')"); if(k==1) JOptionPane.showMessageDialog(this,"插入成功","成功",JOptionPane.PLAIN_MESSAGE); setVisible(false); con.close(); } catch(SQLException ee){ JOptionPane.showMessageDialog(this,"插入失败","失败",JOptionPane.ERROR_MESSAGE); } } } class showReader extends JDialog implements ActionListener{ JTable table; Object a[][]; Object name[]={"学号","姓名","年龄","出生日期"} ; JButton showReader; showReader(){ showReader=new JButton("显示信息"); showReader.addActionListener(this); add(showReader,BorderLayout.NORTH); setBounds(200,200,500,500); setVisible(true); } public void actionPerformed(ActionEvent e){ Connection con; Statement sql; ResultSet rs; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ee){ System.out.println(""+ee); } try{ con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=sql.executeQuery("SELECT * FROM readerinformation"); rs.last(); int lastNumber=rs.getRow(); a=new Object[lastNumber][4]; int k=0; rs.beforeFirst(); while(rs.next()){ a[k][0]=rs.getString(1); a[k][1]=rs.getString(2); a[k][2]=rs.getString(3); a[k][3]=rs.getString(4); k++; } con.close(); }catch(SQLException ee){ System.out.println(ee); } table=new JTable(a,name); getContentPane().removeAll(); add(showReader,BorderLayout.NORTH); add(new JScrollPane(table),BorderLayout.CENTER); setVisible(true); validate(); } } class showBook extends JDialog implements ItemListener{ JTable table; Object a[][]; Object name[]={"编号","书名","出版社","出版日期"} ; JCheckBox showBook; showBook(){ showBook=new JCheckBox("显示信息"); showBook.addItemListener(this); add(showBook,BorderLayout.NORTH); setBounds(200,200,500,500); setVisible(true); } public void itemStateChanged(ItemEvent e){ JCheckBox box=(JCheckBox)e.getItemSelectable(); if(box.isSelected()){ Connection con; Statement sql; ResultSet rs; try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ee){ System.out.println(""+ee); } try{ con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=sql.executeQuery("SELECT * FROM bookinformation"); rs.last(); int lastNumber=rs.getRow(); a=new Object[lastNumber][4]; int k=0; rs.beforeFirst(); while(rs.next()){ a[k][0]=rs.getString(1); a[k][1]=rs.getString(2); a[k][2]=rs.getString(3); a[k][3]=rs.getString(4); k++; } con.close(); }catch(SQLException ee){ System.out.println(ee); } table=new JTable(a,name); getContentPane().removeAll(); add(showBook,BorderLayout.NORTH); add(new JScrollPane(table),BorderLayout.CENTER); setVisible(true); validate(); } else table.setVisible(false); } } class Delete extends JDialog implements ActionListener{ JLabel input; JTextField inputNumber; Object name[]={"编号","书名","出版社","出版日期"} ; Object a[][]=new Object[1][4]; JTable table; JButton delete; JPanel pane=new JPanel(); Connection con; Statement sql; ResultSet rs; String num; Delete(){ input=new JLabel("请输入删除书的编号:(以回车结束)"); inputNumber=new JTextField(20); delete=new JButton("删除"); table=new JTable(a,name); pane.add(input); pane.add(inputNumber); add(pane,BorderLayout.NORTH); add(table,BorderLayout.CENTER); add(delete,BorderLayout.SOUTH); inputNumber.addActionListener(this); delete.addActionListener(this); setBounds(100,100,800,300); setVisible(true); } public void actionPerformed(ActionEvent e){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException eee){ System.out.println(""+eee); } try{ num=inputNumber.getText().trim(); con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); rs=sql.executeQuery("SELECT *FROM bookinformation where 编号='"+num+"'"); boolean boo=rs.next(); if(boo==false){ JOptionPane.showMessageDialog(this,"编号不存在","提示",JOptionPane.WARNING_MESSAGE); } else{ a[0][0]=rs.getString(1); a[0][1]=rs.getString(2); a[0][2]=rs.getString(3); a[0][3]=rs.getDate(4).toString(); table.repaint(); if(e.getSource()==delete){ int n=JOptionPane.showConfirmDialog(this,"确认要删除吗?","确认对话框",JOptionPane.YES_OPTION); if(n==JOptionPane.YES_OPTION){ sql=con.createStatement(); int k=sql.executeUpdate("DELETE FROM bookinformation WHERE 编号='"+num+"'"); if(k==1) { JOptionPane.showMessageDialog(this,"删除成功!","删除",JOptionPane.PLAIN_MESSAGE); setVisible(false); } else { JOptionPane.showMessageDialog(this,"删除失败!","删除",JOptionPane.ERROR_MESSAGE); setVisible(false); } } } } con.close(); }catch(SQLException ee){ System.out.println(ee); } } } class Modify extends JDialog implements ActionListener{ JLabel infor; JTextField inputNumber; Object name[]={"编号","书名","出版社","出版日期"}; Object a[][]=new Object[1][4]; JTable table; JButton queren; Connection con; Statement sql; ResultSet rs; String num; Modify(){ infor=new JLabel("输入编号(以回车确认):"); inputNumber=new JTextField(20); table=new JTable(a,name); queren=new JButton("修改记录"); setLayout(new FlowLayout()); infor.setPreferredSize(new Dimension(100,70)); add(infor); add(inputNumber); add(table); queren.setPreferredSize(new Dimension(80,50)); add(queren); inputNumber.addActionListener(this); queren.addActionListener(this); setBounds(20,60,300,500); setVisible(true); } public void actionPerformed(ActionEvent e){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); }catch(ClassNotFoundException ee){ System.out.println(""+ee); } if(e.getSource()==inputNumber){ try{ num=inputNumber.getText().trim(); con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); rs=sql.executeQuery("SELECT * FROM bookinformation WHERE 编号='"+num+"'"); boolean boo=rs.next(); if(boo==false){ JOptionPane.showMessageDialog(this,"编号不存在","提示",JOptionPane.WARNING_MESSAGE); } else{ a[0][0]=rs.getString(2); a[0][1]=rs.getString(3); a[0][2]=rs.getDate(4).toString(); table.repaint(); } con.close(); } catch(SQLException eee){ System.out.println(eee); } } if(e.getSource()==queren){ try{ table.repaint(); con=DriverManager.getConnection("jdbc:odbc:renshi","",""); sql=con.createStatement(); int k=sql.executeUpdate("UPDATE bookinformation SET 书名='"+a[0][0]+"',出版社='"+a[0][1]+"',出版日期 ='"+a[0][2]+"' WHERE 编号='"+num+"'"); if(k==1){ JOptionPane.showMessageDialog(this,"更新成功","成功",JOptionPane.PLAIN_MESSAGE); con.close(); setVisible(false); } }catch(SQLException eeee){ JOptionPane.showMessageDialog(this,"更新失败"+eeee,"失败",JOptionPane.ERROR_MESSAGE); } } } }
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

keild

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值