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

本文介绍了一款基于Java的图书管理系统的设计与实现,系统包括管理员模块、图书查询模块和读者模块等功能,详细展示了各个模块的代码实现及运行效果。

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

图书管理系统在生活和学校中是最为常见的,这学期的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<String> yearArray = new ArrayList<String>();
			
			// 获取系统时间
			String time = new SimpleDateFormat("yyyy-mm-dd").format(new Date());
			String contentYear = time.split("-")[0];
			
			for(int i = 2000; i <= Integer.parseInt(contentYear); i++)
				yearArray.add(String.valueOf(i));
			
			String[] years = new String[yearArray.size()];
			for(int i = 0; i < yearArray.size(); i++)
				years[i] = yearArray.get(i);
						
			String[] month = {"1","2","3","4","5","6","7","8","9","10","11","12"};
			String[] days = {"1","2","3","4","5","6","7","8","9","10",
					"11","12","13","14","15","16","17","18","19","20",
					"21","22","23","24","25","26","27","28","29","30"};
		
/*			ArrayList<ArrayList<String>> valueDay = new ArrayList<ArrayList<String>>();
			ArrayList<String> value;
			for(int i = 0; i < 12; i++){
				if(i == 1){
					value = new ArrayList<String>();
					for(int j = 0; j < 29; j++)
						value.add(String.valueOf(j +
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值