数据库系统概论》课程报告课题名称:小型图书管理系统课题负责人名(学号):best同组成员名单(角色):指导教师:评阅成绩:评阅意见:提交报告时间:2015年 12 月 15日小型图书管理系统计算机科学与技术专业学生指导老师[摘要]随着计算机技术的飞速发展,利用计算机来获得和处理信息是当今信息管理的一大特点。
伴随计算机硬件的快速发展,有关信息管理的软件——数据库系统软件也在迅猛发展着。
图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。
由于图书馆主要从事大量的图书资料的储存和流通。
所以一直以来,计算机在图书馆的图书管理中得到了广泛的应用。
本系统实现图书信息管理的系统化,规范化和自动化,以最大程度提高操作人员的办公效率。
关键词:JAVA、JDBC、SQL Server、数据库、图书馆管理、实验题目:小型图书管理系统、实验的目的和要求: 完成一个小型图书管理系统,功能要求如下:1)能够通过书籍基本信息(包括:书号、书名、出版社、出版日期、作者、内容摘要)单个或以AND 方式组合多个条件查询书籍信息;2)对于每一种书籍,除可查看其基本信息之外还可查看其总数以及目前在馆数量3)可增添新的书籍4)可删除已有书籍(如有读者借了该书籍尚未归还,则不允许删除)5)可修改书籍的基本信息6)能够通过读者基本信息(包括:证号、姓名、性别、系名、年级)单个或以AND方式组合多个条件查询读者信息7)对于每位读者除可查看其基本信息之外,还可查看其已借的书籍列表、数量、借还日期8)可增添新的读者9)可删除已有读者(如该读者有尚未归还的借书,则不允许删除)10)可修改读者的基本信息11)可完成借还书籍的手续12)还书时如超期,应该显示超期天数13)借书时如果有超期的书没有还,则不允许借书14)可查询有哪些读者有超期的书没有还,列出这些读者的基本信息三、实验的环境:1、硬件环境:CPU: Intel(R) Core i5-3230 2.60GHzRAM: 8GB2、软件环境:操作系统:Windows 7 Ultimate SP1 编译软件:EclipseLunaMicrosoft SQL Server 2014四、系统 ER 图五、表结构定义(使用表格说明)添加图书用户名密码删除读者 编号 权限管理员删除图书 拥有书名修改读者修改图书管理 作者 管理编号 出版社姓名 图书读者出版时间 借阅性别摘要 总量系名超期时间 应还时间 借阅时间六、系统功能模块1)能够通过书籍基本信息单个或组合多个条件查询书籍信息;2)对于每一种书籍,除可查看其基本信息之外还可查看其总数以及目前在馆数量3)可增添新的书籍4)可删除已有书籍(如有读者借了该书籍尚未归还,则不允许删除)5)可修改书籍的基本信息6)能够通过读者基本信息单个或组合多个条件查询读者信息7)对于每位读者除可查看其基本信息之外,还可查看其已借的书籍列表、数量、借还日期8)可增添新的读者9)可删除已有读者(如该读者有尚未归还的借书,则不允许删除)10)可修改读者的基本信息11)可完成借还书籍的手续12)还书时如超期,应该显示超期天数13)借书时如果有超期的书没有还,则不允许借书14)可查询有哪些读者有超期的书没有还,列出这些读者的基本信息七、程序框架流程图登录借阅列表组合查询删除读者编辑读者增加读者详细信息详细信息九、程序运行结果课程名称:数据库系统概论八、核心代码AddBook.javaimport java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.*; import java.util.ArrayList; import javax.swing.*;public class AddBook extends JFrame implements ActionListener {SQLOperation op = new SQLOperation(); Container c = getContentPane(); JPanel p1 = new JPanel();JLabel bookNumber = new JLabel("Book Number:"); JLabel bookName = new JLabel("Book Name:");JLabel bookAuthor = new JLabel("Book Author:"); JLabel press = new JLabel("Press:");JLabel pressTime = new JLabel("Press time:"); JLabel bookAbstract = new JLabel("Abstract:"); JLabel storage = new JLabel("Storage:"); JLabel remain = new JLabel("Remain");JLabel remain1 = new JLabel("Update with Storage");numberField = new JTextField(); nameField = new JTextField(); authorField = new JTextField(); pressField = new JTextField(); pressTimeField = new JTextField(); abstractField = newJTextField(); storageField = new JTextField(); JButton cancel = new JButton("Cancel"); JButton confirm = new JButton("Confirm!!"); public AddBook() {c .add(p1, BorderLayout.NORTH ); p1.setLayout(new GridLayout(9, 2, 20, 10)); p1.add(bookNumber ); p1.add(numberField ); p1.add(bookName ); p1.add(nameField );p1.add(bookAuthor ); p1.add(authorField ); p1.add(press ); p1.add(pressField ); p1.add(pressTime );p1.add(pressTimeField ); p1.add(bookAbstract ); p1.add(abstractField ); p1.add(storage );p1.add(storageField ); p1.add(remain ); p1.add(remain1); p1.add(cancel ); p1.add(confirm );cancel .addActionListener(this ); confirm .addActionListener(this );JTextField JTextField JTextField JTextField JTextField JTextField JTextField}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == cancel) {this.dispose();}if (e.getSource() == confirm) {this.dispose();BookInfo book = new BookInfo(numberField.getText(),nameField.getText(), authorField.getText(),pressField.getText(),pressTimeField.getText(),abstractField.getText(),Integer.parseInt(storageField.getText()),Integer.parseInt(storageField.getText()));ArrayList<String> strArray = newArrayList<String>();strArray = op.addBookJudgement();int n = 0;int replicate = 0;while (n < Integer.parseInt(strArray.get(0))) { n++;if(numberField.getText().equals(strArray.get(n))) { replicate++;}}if (replicate == 0) {op.saveBook(book);JOptionPane.showMessageDialog(null, "Add a booksuccessfully!",Information",RMATION_MESSAGE);} else {JOptionPane.showMessageDialog (null,"This book(number) has already existed!", Warning",RMATION_MESSAGE);}AddReader.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;public class AddReader extends JFrame implements ActionListener {SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JLabel readerNumber = new JLabel("Reader Number:");JLabel readerName = new JLabel("Reader Name:");JLabel sex = new JLabel("Sex:");JLabel dpt = new JLabel("Department:");JLabel grade = new JLabel("Grade:");JTextField numberField = new JTextField();JTextField nameField = new JTextField();JTextField sexField = new JTextField();JTextField dptField = new JTextField();gradeField = new JTextField();JTextFieldJButton cancel = new JButton("Cancel");JButton confirm = new JButton("Confirm!!");public AddReader() {c.add(p1, BorderLayout.NORTH);p1.setLayout(new GridLayout(6, 2, 20, 10));p1.add(readerNumber);p1.add(numberField);p1.add(readerName);p1.add(nameField);p1.add(sex);p1.add(sexField);p1.add(dpt);p1.add(dptField);p1.add(grade);p1.add(gradeField);p1.add(cancel);p1.add(confirm);cancel.addActionListener(this);confirm.addActionListener(this);public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource() == cancel) { this.dispose();}if (e.getSource() == confirm) { this.dispose();ReaderInfo reader = newReaderInfo(numberField.getText(),nameField.getText(), sexField.getText(),dptField.getText(),Integer.parseInt(gradeField.getText()));ArrayList<String> strArray = new ArrayList<String>();strArray = op.addReaderJudgement();int n = 0;int replicate = 0;while (n < Integer.parseInt(strArray.get(0))) { n++;if(numberField.getText().equals(strArray.get(n))) { replicate++;}}if (replicate == 0) {if (!sexField.getText().equals("boy")&& !sexField.getText().equals("girl")){ JOptionPane. showMessageDialog(null,"In the Sex field, you can only input 'boy' or 'girl'!","Warning",RMATION_MESSAGE);} else {op.saveReader(reader);JOptionPane.showMessageDialog (null,"Add a reader successfully!","Information",RMATION_MESSAGE);}} else {JOptionPane.showMessageDialog (null,"This reader(number) has already existed!", "Warning",RMATION_MESSAGE); BookDetails.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;import javax.swing.table.DefaultTableModel;public class BookDetails extends JFrame implements ActionListener {SQLOperation op = new SQLOperation(); Container c =getContentPane(); JPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();JLabel bookNumber = new JLabel("Book Number:");JLabel bookName = new JLabel("Book Name:");JLabel author = new JLabel("Author:");JLabel press = new JLabel("Press:");JLabel pressTime = new JLabel("Press time:");JLabel bookAbstract = new JLabel("Abstract:");JLabel storage = new JLabel("Storage:");JLabel remain = new JLabel("Remain:");JLabel numberField = new JLabel();JLabel nameField = new JLabel();JLabel authorField = new JLabel();JLabel pressField = new JLabel();JLabel pressTimeField = new JLabel();JLabel abstractField = new JLabel();JLabel storageField = new JLabel();JLabel remainField = new JLabel();JButton cancel = new JButton("Cancel");JLabel details = new JLabel("Borrow and reaturn details"); Object[] s = { "Reader number", "Borrow time", "Deadline", "Over time" };Object[][] ob1 = new Object[7][4];JTable table = new JTable(ob1, s);JScrollPane scrollPane = new JScrollPane(table);public BookDetails(String number) {BookInfo book = new BookInfo(number);ob1 = op.borrowListForBook(number);for ( int i = 0; i < 5; i++) {DefaultTableModel books = new DefaultTableModel(ob1, s);for (int n = 0; n < 7; n++) {for ( int m = 0; m < 4; m++) { ob1[n][m] =this.ob1[n][m];}table.setModel(books); table.invalidate();}}ArrayList<String> strArray = new ArrayList<String>();strArray = op.outputBook(book);numberField.setText(number);nameField.setText(strArray.get(1));authorField.setText(strArray.get(2));pressField.setText(strArray.get(3));pressTimeField.setText(strArray.get(4));abstractField.setText(strArray.get(5));storageField.setText(strArray.get(6));remainField.setText(strArray.get(7));c.add(p1, BorderLayout.NORTH);c.add(p2, BorderLayout.CENTER);c.add(p3, BorderLayout.SOUTH);p1.setLayout(new GridLayout(9, 2, 20, 10)); p1.add(bookNumber); p1.add(numberField); p1.add(bookName);p1.add(nameField); p1.add(author); p1.add(authorField); p1.add(press);p1.add(pressField); p1.add(pressTime);p1.add(pressTimeField); p1.add(bookAbstract);p1.add(abstractField); p1.add(storage);p1.add(storageField); p1.add(remain); p1.add(remainField);p1.add(details); scrollPane.setBounds(0, 0, 800, 300);p2.add(scrollPane);p3.add(cancel);table.setPreferredScrollableViewportSize(newDimension(400, 100));cancel.addActionListener(this);public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if (e.getSource() == cancel) { this.dispose();}}BookInfo.javapublic class BookInfo {private String number, name, author, press, pressTime, bookAbstract;private int total, remain;// default constructorpublic BookInfo() {}public BookInfo(String number) {this.number = number;}public BookInfo(String number, String name) { this.number = number; = name;}public BookInfo(String number, String name, String author,String press,String pressTime, String bookAbstract, int total, int remain) {this.number = number; = name;this.author = author; this.press = press;this.pressTime = pressTime; this.bookAbstract =bookAbstract; this.total = total;this.remain = remain;}public void setRemain(int i) {this .remain=i;}public String getNumber() {return number;}public String getName() {return name;}public String getAuthor() { return author;}public String getPress() {return press;}public String getPressTime() { return pressTime;}public String getBookAbstract() { return bookAbstract;}public int getTotal() {return total;}public int getRemain() { return remain;}}BookRetrieval.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;import javax.swing.table.DefaultTableModel;class BookRetrieval extends JFrame implements ActionListener { SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JPanel p4 = new JPanel();JPanel p5 = new JPanel();JLabel bookNumber = new JLabel("Book Number:");JLabel bookName = new JLabel("Book Name:");JTextField number = new JTextField();JTextField name = new JTextField();JButton back = new JButton("Back (Fresh)");JButton addBook = new JButton("Add a book");JButton deleteBook = new JButton("Delete a book");JButton editBook = new JButton("Edit a book");JButton search = new JButton("Search for details!");JButton borrowBook = new JButton("Borrow a book");JButton returnBook = new JButton("Return a book");Font font1 = new Font("00", Font.BOLD, 20);Object[] s = { "Number", "Name", "Author", "Press", "Press Time","Abstract", "Storage", "Remain" };Object[][] ob = new Object[40][8];JTable table = new JTable(ob, s);JScrollPane scrollPane = new JScrollPane(table);public BookRetrieval() {BookInfo book = new BookInfo();ob = op.allBook(book);for ( int i = 0; i < 5; i++) {DefaultTableModel books = new DefaultTableModel(ob, s);for (int n = 0; n < 20; n++) {for ( int m = 0; m < 8; m++) {ob[n][m] = this.ob[n][m];}table.setModel(books); table.invalidate();}}c.add(p4, BorderLayout.NORTH);c.add(p1, BorderLayout.CENTER);c.add(p5, BorderLayout.SOUTH);search.setFont(font1);p4.setLayout(new GridLayout(2, 4, 20, 10)); p4.add(back);p4.add(addBook);p4.add(editBook);p4.add(deleteBook);p4.add(borrowBook);p4.add(returnBook);p1.setLayout(null); scrollPane.setBounds(0, 0, 800, 300);p1.add(scrollPane);p5.setLayout(new GridLayout(5, 1, 0, 0));p5.add(bookNumber);p5.add(number);p5.add(bookName);p5.add(name);p5.add(search);table.setPreferredScrollableViewportSize(newDimension(400, 300));addBook.addActionListener(this);search.addActionListener(this);back.addActionListener(this);deleteBook.addActionListener(this);editBook.addActionListener(this);borrowBook.addActionListener(this);returnBook.addActionListener(this);}public void actionPerformed(ActionEvent e) {if (e.getSource() == search) {ArrayList<String> strArray = new ArrayList<String>();strArray = op.addBookJudgement();String s1 = number.getText();String s2 = name.getText();int n = 0;int replicate = 0;while (n < Integer.parseInt(strArray.get(0))) { n++;if (s1.equals(strArray.get(n))) { replicate++;}}ArrayList<String> strArray1 = newArrayList<String>();strArray1 = op.addBookJudgement1();int n1 = 0;int replicate1 = 0;while (n1 < Integer.parseInt(strArray1.get(0))){ n1++;if (s2.equals(strArray1.get(n1))) { replicate1++;}} if (replicate == 0 && replicate1 == 0){ JOptionPane.showMessageDialog (null,"Please input a correct book number or name!","Warning",RMATION_MESSAGE);} else if (replicate != 0 || replicate1 != 0) { if(replicate == 0 && replicate1 != 0) { BookInfo book =new BookInfo(s1, s2); String s =op.searchBookByName(book);BookDetails f = new BookDetails(s); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Book Details"); f.setLocation(300,200);f.setSize(480, 470);f.setVisible(true);} else if (replicate != 0) {BookDetails f = new BookDetails(s1); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Book Details");f.setLocation(300, 200);f.setSize(480, 470); f.setVisible(true);}}}if (e.getSource() == back) {this.dispose();MyFrame f = new MyFrame();//f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Library Management System");f.setLocation(300, 200);f.setSize(580, 300);f.setVisible(true);}if (e.getSource() == addBook) {AddBook f = new AddBook();// f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Add a book");f.setLocation(300, 200);f.setSize(300, 400);f.setVisible(true);}if (e.getSource() == deleteBook) { DeleteBook f = new DeleteBook(); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Delete a book");f.setLocation(300, 200);f.setSize(300, 200);f.setVisible(true);}if (e.getSource() == borrowBook) { BorrowBook f = new BorrowBook(); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Borrow a book");f.setLocation(300, 200);f.setSize(300, 200);f.setVisible(true);}if (e.getSource() == returnBook) { ReturnBook f = newReturnBook(); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Return a book"); f.setLocation(300, 200);f.setSize(300, 200);f.setVisible(true);}if (e.getSource() == editBook) { SelectEdit f = newSelectEdit(); //f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Edit a book"); f.setLocation(300, 200);f.setSize(300, 200); f.setVisible(true);}}}BorrowBook.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;public class BorrowBook extends JFrame implements ActionListener {SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JLabel bookNumber = new JLabel("Book Number:");JTextField numberField = new JTextField();JLabel readerNumber = new JLabel("Reader Number:");JTextField readerNumberField = new JTextField(); JButtoncancel = new JButton("Cancel");JButton borrow = new JButton("Borrow!!");public BorrowBook() {c.add(p1, BorderLayout.NORTH); p1.setLayout(newGridLayout(3, 2, 20, 10)); p1.add(bookNumber);p1.add(numberField);p1.add(readerNumber); p1.add(readerNumberField);p1.add(cancel);p1.add(borrow);cancel.addActionListener(this);borrow.addActionListener(this);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == cancel) { this.dispose();}if (e.getSource() == borrow) {String bookNumber = numberField.getText();ArrayList<String> strArray = newArrayList<String>();strArray = op.addBookJudgement();int n = 0;int replicate = 0;while (n < Integer.parseInt(strArray.get(0))) { n++;if (bookNumber.equals(strArray.get(n))){ replicate++;}}String readerNumber = readerNumberField.getText();ArrayList<String> strArray1 = newArrayList<String>();strArray1 = op.addReaderJudgement();int n1 = 0;int replicate1 = 0;while (n1 < Integer.parseInt(strArray1.get(0))){ n1++;if (readerNumber.equals(strArray1.get(n1))){ replicate1++;}}if (replicate == 0 || replicate1 == 0) {JOptionPane. showMessageDialog(null,"Please input a correct book number and a reader number!","Warning",RMATION_MESSAGE);} else {BookInfo book = new BookInfo(bookNumber);ArrayList<String> s = new ArrayList<String>(); s= op.outputBook(book);if (Integer.parseInt (s.get(7)) > 0) {int s1 =op.reBorrowCheck(numberField.getText(),readerNumberField.getText());if (s1 == 1) {JOptionPane. showMessageDialog(null,"You have borrowed this book, can not reborrow it!","Unsuccessful",RMATION_MESSAGE);} else {long currentTime = System.currentTimeMillis();if(op.deadLineCheck(readerNumberField.getText(), currentTime) != 0) {JOptionPane. showMessageDialog(null,"You have exceeded the deadline, please return these books first!","Unsuccessful", RMATION_MESSAGE);} else {BookInfo book1 = new BookInfo(s.get(0), s.get(1),s.get(2), s.get(3), s.get(4), s.get(5),Integer.parseInt(s.get(6)),Integer.parseInt(s.get(7)) - 1);op.inputBook(book1);String borrowTime =Long.toString(System. currentTimeMillis());String deadline = Long.toString(System. currentTimeMillis() + 2592000000l);System.out.println(borrowTime);System.out.println(deadline);op.insertBorrow(numberField.getText(),readerNumberField.getText(), borrowTime,deadline);JOptionPane. showMessageDialog( null, "Borrowed this book successfully, you have 30 days to enjoy this book!", "Successful",RMATION_MESSAGE);}}} else {JOptionPane.showMessageDialog (null, "This book has been borrowed!", "Unsuccessful",RMATION_MESSAGE); } }this.dispose();}}}BorrowList.Javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;import javax.swing.table.DefaultTableModel;public class BorrowList extends JFrame implements ActionListener {SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JPanel p2 = new JPanel();JButton back=new JButton("Back");Object[] s = { "Book number", "Reader number", "Borrow time", "Deadline","OverTime"};Object[][] ob = new Object[100][5];JTable table = new JTable(ob, s);JScrollPane scrollPane = new JScrollPane(table);public BorrowList() {// TODO Auto-generated constructor stub Object[][] ob1 =op.borrowList();for ( int i = 0; i < 5; i++) {DefaultTableModel list = new DefaultTableModel(ob, s);for (int n = 0; n < 100; n++) { for ( int m = 0; m <5; m++) { ob[n][m] = ob1[n][m];}table.setModel(list); table.invalidate();}}c.add(p1, BorderLayout.CENTER);c.add(p2,BorderLayout.SOUTH);scrollPane.setBounds(0, 0, 800, 300);p1.add(scrollPane);p2.add(back);table.setPreferredScrollableViewportSize(new Dimension(400,400));back.addActionListener(this);}public void actionPerformed(ActionEvent e) {if (e.getSource() == back) {this.dispose();MyFrame f = new MyFrame();f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);f.setTitle("Library Management System");f.setLocation(300, 200);f.setSize(580, 300);f.setVisible(true);}// TODO Auto-generated method stub}}Date.javaimport java.text.DateFormat;import java.text.SimpleDateFormat;public class Date {public Date(){}static String borrowTimeInterface(long time) { SimpleDateFormat df = (SimpleDateFormat) DateFormat.getInstance();df.applyPattern("yyyy-MM-dd");String s = df.format(time);return s;}}DeleteBook.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*;public class DeleteBook extends JFrame implements ActionListener {SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JLabel bookNumber = new JLabel("Book Number:");JTextField numberField = new JTextField();JButton cancel = new JButton("Cancel");JButton delete = new JButton("Delete!!");public DeleteBook() {c.add(p1, BorderLayout.NORTH); p1.setLayout(newGridLayout(2, 2, 20, 10)); p1.add(bookNumber);p1.add(numberField);p1.add(cancel);p1.add(delete);cancel.addActionListener(this);delete.addActionListener(this);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == cancel){ this.dispose();}if (e.getSource() == delete) { BookInfo book = new BookInfo(numberField.getText());this.dispose();if (op.deleteBookCheck(numberField.getText()) != 0){JOptionPane. showMessageDialog(null,"Delete the book unsuccessfully.The book bas been borrowed!","Warning",RMATION_MESSAGE);} else {if (op.deleteBook(book) == 1) {JOptionPane.showMessageDialog (null,"Delete the book successfully!", "Information",RMATION_MESSAGE);} else {JOptionPane. showMessageDialog(null,"Delete the book unsuccessfully. The book does not exist!","Warning",RMATION_MESSAGE);}}}}}DeleteReader.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.*;import javax.swing.*;public class DeleteReader extends JFrame implements ActionListener {SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JLabel readerNumber = new JLabel("Reader Number:");JTextField numberField = new JTextField();JButton cancel = new JButton("Cancel");JButton delete = new JButton("Delete!!");public DeleteReader() {c.add(p1, BorderLayout.NORTH); p1.setLayout(newGridLayout(2, 2, 20, 10)); p1.add(readerNumber);p1.add(numberField);p1.add(cancel);p1.add(delete);cancel.addActionListener(this);delete.addActionListener(this);}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource() == cancel){ this.dispose();}if (e.getSource() == delete) { ReaderInfo reader = new ReaderInfo(numberField.getText()); this.dispose();if (op.deleteReaderCheck(numberField.getText()) != 0) { JOptionPane. showMessageDialog(null,"Delete the reader unsuccessfully. Please return books first!","Warning",RMATION_MESSAGE);} else {if (op.deleteReader(reader) == 1) {"Information", JOptionPane.showMessageDialog(null,"Delete the reader successfully!"RMATION_MESSAGE);} else {unsuccessfully.JOptionPane. showMessageDialog( null,"Delete the reader The reader does not exist!","Warning",RMATION_MESSAGE);}}}}EditBook.javaimport java.awt.BorderLayout;import java.awt.Container;import java.awt.GridLayout;import java.awt.event.*;import java.util.ArrayList;import javax.swing.*;public class EditBook extends JFrame implements ActionListener { SQLOperation op = new SQLOperation();Container c = getContentPane();JPanel p1 = new JPanel();JLabel bookNumber = new JLabel("Book Number:");JLabel bookName = new JLabel("Book Name:");JLabel author = new JLabel("Book Author:");JLabel press = new JLabel("Press:");JLabel pressTime = new JLabel("Press time:");JLabel bookAbstract = new JLabel("Abstract:");JLabel storage = new JLabel("Storage:");JLabel remain = new JLabel("Remain:");JLabel remain1 = new JLabel("Update with storage");JLabel numberField = new JLabel();JTextField nameField = new JTextField();JTextField authorField = new JTextField();JTextField pressField = new JTextField();JTextField pressTimeField = new JTextField();JTextField abstractField = new JTextField();storageField = new JTextField(); JTextFieldJTextField temp1 = new JTextField();JTextField temp2 = new JTextField();JButton cancel = new JButton("Cancel");JButton save = new JButton("Save!!");public EditBook(String number) {BookInfo book = new BookInfo(number); ArrayList<String> strArray = new ArrayList<String>(); strArray = op.outputBook(book); numberField.setText(number);nameField.setText(strArray.get(1));authorField.setText(strArray.get(2));pressField.setText(strArray.get(3));pressTimeField.setText(strArray.get(4));abstractField.setText(strArray.get(5));storageField.setText(strArray.get(6));temp1.setText(strArray.get(6));temp2.setText(strArray.get(7));c.add(p1, BorderLayout.NORTH);p1.setLayout(new GridLayout(9, 2, 20, 10));p1.add(bookNumber);p1.add(numberField);p1.add(bookName);p1.add(nameField);p1.add(author);p1.add(authorField);p1.add(press);p1.add(pressField);p1.add(pressTime);p1.add(pressTimeField);p1.add(bookAbstract);p1.add(abstractField);p1.add(storage);p1.add(storageField);p1.add(remain);p1.add(remain1);。