图书管理系统在生活和学校中是最为常见的,这学期的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 +