用java的swing组件实现简易的图书管理系统

您所在的位置:网站首页 图书管理系统构建图 用java的swing组件实现简易的图书管理系统

用java的swing组件实现简易的图书管理系统

2023-08-11 08:55| 来源: 网络整理| 查看: 265

图书管理系统在生活和学校中是最为常见的,这学期的java课程设计题目中的其中一个就是实现图书管理系统,

做完课设后,在此记录下。

我的图书管理系统一共分为几个模块。图书查询模块,管理员模块(默认只有一个管理员),读者模块。

图书管理系统结构图如下所示:

1、管理员模块

管理员模块中一共包含三个部分,其一是管理员登录(此系统默认只有一个管理员),其二是图书入库管理,其三是用户借阅信息管理。

主窗口程序代码如下:主要执行查询操作和显示查询结果:

package per.tushu.frame; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.table.DefaultTableModel; import per.tushu.storage.FindBook; public class MainFrame extends JFrame{ JLabel label1,label2,info; JPanel jpanel,jp1,jp2,jp3; JTextField text; JButton button,admin,stu; JButton lend; DefaultTableModel tableModel; public MainFrame(){ this.setLayout(new BorderLayout()); this.setBounds(400, 200, 600, 450); this.setTitle("图书查询"); //窗体最上面的部分 label1 = new JLabel("图书查询",SwingConstants.CENTER); label1.setFont(new Font("楷体",Font.BOLD,40)); //设置字体和大小 //窗体中间的部分 label2 = new JLabel("书名:"); text = new JTextField(15); button = new JButton("查询"); jpanel = new JPanel(); jpanel.setLayout(new BorderLayout()); jp1 = new JPanel(); jp2 = new JPanel(); //窗体最下面的部分(及显示查询内容的地方) // jp2.setBackground(Color.BLUE); stu = new JButton("用户登录"); admin = new JButton("管理员"); // //测试 // lend = new JButton("确认借阅"); jp1.add(label2); jp1.add(text); jp1.add(button); // jp1.add(lend); jp3 = new JPanel(); jp2.setLayout(new BorderLayout()); jp3.setLayout(new FlowLayout(FlowLayout.RIGHT)); jp3.add(stu); jp3.add(admin); jp2.add(jp3,BorderLayout.SOUTH); // jp2.add(info,BorderLayout.SOUTH); jpanel.add(jp1,BorderLayout.NORTH); jpanel.add(jp2); this.add(label1,BorderLayout.NORTH); this.add(jpanel); MyEvent(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void MyEvent(){ // 查询按钮事件 button.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new FindBook().findInfo(jp2,text); } }); // 管理员按钮事件 admin.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new LoginFrame().show(); } }); //用户按钮事件 stu.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new UserLoginFrame().show(); } }); } public static void main(String[] args){ new MainFrame(); } }

主窗口显示效果如下:

管理员登录:默认管理员账号为admin,若密码输入错误则有提示信息,密码正确则进入管理员管理界面。完整代码如下:

package per.tushu.frame; import java.awt.BorderLayout; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.SwingConstants; // 管理员登录模块 public class LoginFrame extends JFrame{ JLabel label,name,pass; JButton login; JTextField adminName; JPasswordField password; JPanel panel,jp1,jp2; public LoginFrame(){ this.setBounds(400, 200, 300, 200); this.setTitle("图书馆管理系统登录"); this.setLayout(new BorderLayout()); label = new JLabel("登录",SwingConstants.CENTER); label.setFont(new Font("楷体",Font.BOLD,30)); name = new JLabel("账 号"); pass = new JLabel("密 码"); adminName = new JTextField(12); adminName.setText("admin"); adminName.setHorizontalAlignment(SwingConstants.CENTER); password = new JPasswordField(12); password.setHorizontalAlignment(SwingConstants.CENTER); password.setEchoChar('*'); //设置回显字符 panel = new JPanel(); jp1 = new JPanel(); jp2 = new JPanel(); panel.setLayout(new BorderLayout()); jp1.add(adminName); jp1.add(name); jp1.add(password); jp1.add(pass); panel.add(jp1); login = new JButton("登录"); jp2.add(login); panel.add(jp2,BorderLayout.SOUTH); this.add(label,BorderLayout.NORTH); this.add(panel); MyEvent(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void MyEvent(){ login.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub String word = "123456"; // 正确密码 String str = new String(password.getPassword()); if(str.equals(word)) new LendAdminFrame().show(); // new TableFrame().show(); // new RuKuFrame(); else{ String str1 = "你输入的密码不正确,原因可能是:\n" + "1、忘记密码;\n" + "2、未开启小键盘;\n" + "3、大小写未区分。"; JOptionPane.showMessageDialog(null, str1); // new LoginErrorFrame().show(); } LoginFrame.this.dispose(); } }); } public static void main(String[] args){ new LoginFrame(); } }

代码执行后显示如下:

密码错误时:

图书入库管理:管理员在此界面内对图书信息进行管理。包括图书在馆内的图书号、图书名、撰写此书的作者、书的种类(可以是专业分类)、出版社、入库日期、借阅状态以及分布的校区(或分馆)。

用户借阅信息管理:管理员在此界面可以对用户的借阅信息进行管理。包括借阅者账号(默认为姓名)、所借图书编号、书名以及借书日期。此表会根据用户借阅图书以及归还图书动态变化。

图书入库管理和用户借阅信息管理的功能我用了一个类来实现。不过由另外一个类写了两个按钮,来保证究竟要哪一个功能起作用。用于管理这两个小模块的代码如下:

package per.tushu.frame; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class LendAdminFrame extends JFrame{ JPanel panel; JButton storage,lendInfo; public LendAdminFrame(){ this.setTitle("管理员"); this.setBounds(400,300,200,200); this.setLayout(new FlowLayout(FlowLayout.CENTER)); storage = new JButton("图书入库管理"); lendInfo = new JButton("借阅信息管理"); this.add(storage); this.add(lendInfo); MyEvent(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void MyEvent(){ // 图书入库管理 storage.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new TableFrame(storage.getText()).show(); } }); // 用户借阅信息管理 lendInfo.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub new TableFrame(lendInfo.getText()).show(); } }); } public static void main(String[] args){ new LendAdminFrame(); } }

代码显示效果如下:

两个小模块实现功能的代码如下:

package per.tushu.frame; import java.awt.BorderLayout; import java.awt.CheckboxGroup; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.Vector; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuBar; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; import per.tushu.storage.PutinStorage; public class TableFrame extends JFrame{ DefaultTableModel tableModel; Vector vector; JMenuBar menuBar; JButton add,del,exit,find,save; JTable table; JPanel panelUP,panelDown; //增加信息的面板 // 内部类中的变量 JLabel[] label; // JLabel idLabel,titleLabel,authorLabel,typeLable,pressLable,storageTimeLabel,stateLabel,campuNameLabel; JComboBox typeBox,pressBox; JCheckBox campuNameCheck1,campuNameCheck2; JRadioButton stateRadio1,stateRadio2; JTextField idText,titleText,authorText; CheckboxGroup cg; ButtonGroup bg; JLabel year,mon,day; JComboBox yearText,monText,dayText; JPanel panel,panelSouth; JButton button; String[] str=null; JPanel[] panelLeft,panelRight; private String database = "bookstorage"; // private String database = "haha"; private String tablesName; public TableFrame(String title){ // tablesName = tableName; this.setBounds(300, 200, 600, 450); this.setTitle(title); this.setLayout(new BorderLayout()); add = new JButton("增加"); del = new JButton("删除"); save = new JButton("保存"); find = new JButton("查找"); exit = new JButton("退出"); panelUP = new JPanel(); panelUP.setLayout(new FlowLayout(FlowLayout.LEFT)); panelUP.add(add); panelUP.add(del); panelUP.add(save); panelUP.add(find); panelUP.add(exit); Vector rowData = null; Vector columnNames = null; if(title.equals("图书入库管理")){ rowData = PutinStorage.getRows("books"); columnNames = PutinStorage.getHead("books"); }else{ rowData = PutinStorage.getRows("lendInfo"); columnNames = PutinStorage.getHead("lendInfo"); } /* for(int i = 0; i < columnNames.size(); i++) System.out.println(columnNames.get(i));*/ // 新建表格 tableModel = new DefaultTableModel(rowData,columnNames); table = new JTable(tableModel); // for(int i = 0; i < columnNames.size(); i++){ // int [] aa = {3,4,6}; // for(int i = 0; i < aa.length; i++){ // int t = aa[i]; // TableColumn tableColumn = table.getColumnModel().getColumn(3); // tableColumn.setCellRenderer(new MyRender()); // tableColumn.setCellEditor(new MyEditor()); // } table.setRowHeight(22); JScrollPane s = new JScrollPane(table); this.add(panelUP,BorderLayout.NORTH); this.add(s); MyEvent(); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } // 添加单元格的内部类 class AddFrame extends JFrame{ public AddFrame(){ this.setBounds(300,200,500,350); // this.setLayout(new GridLayout(8,2)); panel = new JPanel(); panel.setLayout(new GridLayout(8,2)); panelSouth = new JPanel(); panelSouth.setLayout(new FlowLayout(FlowLayout.CENTER)); button = new JButton("OK"); panelSouth.add(button); label = new JLabel[8]; label[0] = new JLabel("图书编号:"); label[1] = new JLabel("图书名称:"); label[2] = new JLabel("图书作者:"); label[3] = new JLabel("图书类型:"); label[4] = new JLabel("出版社:"); label[5] = new JLabel("入库时间:"); label[6] = new JLabel("借阅状态:"); label[7] = new JLabel("所在校区:"); idText = new JTextField(10); titleText = new JTextField(10); authorText = new JTextField(10); String[] types = {"计算机","英语","电气","机械","材料"}; String[] press = {"人民邮电出版社","中国铁道出版社","清华大学出版社","工业出版社","电子工业出版社"}; // 年集合(实现动态添加) ArrayList yearArray = new ArrayList(); // 获取系统时间 String time = new SimpleDateFormat("yyyy-mm-dd").format(new Date()); String contentYear = time.split("-")[0]; for(int i = 2000; i = 0){ tableModel.removeRow(rowcount); String aa = table.getValueAt(rowcount, 0).toString().substring(0, 1); for(int i = rowcount; i < table.getRowCount(); i++){ if(table.getValueAt(i, 0).toString().startsWith(aa)){ String ee = table.getValueAt(i, 0).toString(); String ee1 = aa + String.valueOf(Long.parseLong(ee.substring(1, ee.length())) - 1); table.setValueAt(ee1, i, 0); } } } // table.revalidate(); } }); // 保存 save.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { new PutinStorage().saveData(table); } }); // 查找 find.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { // TODO Auto-generated method stub } }); // 退出 exit.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub System.exit(0); } }); } public static void main(String[] args){ new TableFrame("图书入库管理"); } }

图书入库显示效果如下所示:

图书添加操作:

借阅信息管理显示如下:

2、图书查询模块

图书查询分为两个部分,一个是查询全部(查询框无内容时),另一个是按照关键字查询。

查询全部:查询框无查询内容时直接点击查询按钮,则会显示数据库中所有的图书数据。

按照关键字查询:查询框中有关键字时,则会显示与关键字相关的图书数据。

此模块用一个类来实现,需要连接数据库,由主页面的查询按钮控制代码如下:

package per.tushu.storage; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.Vector; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.table.DefaultTableModel; public class FindBook { Vector tableName; // 拿到数据库中所有表的名字并储存到集合中 private Vector getTableName(){ tableName = new Vector(); Connection conn; PreparedStatement preparedStatement; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstorage","root","123456"); // if(!conn.isClosed()) // System.out.println("成功打开数据库"); String sql = "show tables"; preparedStatement = conn.prepareStatement(sql); ResultSet result = preparedStatement.executeQuery(); ResultSetMetaData metaData = result.getMetaData(); while(result.next()){ for(int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3