图书管理系统设计说明书
图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。由于图书馆主要从事大量的图书资料的储存和流通。所以一直以来,计算机在图书馆的图书管理中得到了广泛的应用。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理。现今,有很多的图书馆尚未使用计算机进行信息管理。图书馆若采取手工方式对图书资料和图书借阅情况进行人工管理,由于资料繁多,手工处理的工作量大,整体管理效率低下,也不方便读者对图书资料的查阅。为了提高日常的图书管理效率,必须开发满足大多数中小型的图书管理要求的图书管理系统。本系统与MySQL数据库相结合,使大量繁杂的信息能够实现快速查询。
图书管理系统需要满足来自两方面的需求,这两个方面分别是图书馆工作人员和读者。图书用户的需求是查询图书馆所存的图书、及图书借阅和归还;图书馆管理人员的功能最为复杂,包括对工作人员、读者、图书进行管理和维护。游客可直接查看图书馆图书情况,如果读者根据本人学号和密码登录系统,就可以实现对图书的借阅和归还。一般情况下,读者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他读者的借书情况和个人信息,就要知道其他图书用户的学号和密码,这些是很难得到的,特别是密码,所以不但满足了图书用户的要求,还保护了图书用户的个人隐私。
我设计的图书馆管理系统主要用于对图书馆日常工作的管理,主要任务是用计算机对读者、图书等各种信息进行日常管理,如查询、修改、增加、删除等。本系统实现了图书馆的信息化管理,完成了图书馆管理系统的基本功能。
该系统主要包括系统主界面、用户界面、管理员界面、注册界面,各部分主要功能如下:
(1) 主界面:用于一般的图书查询,但是在未登陆的时候不能借书。
(2) 用户界面:用于用户信息的管理以及图书的借阅和归还。
(3) 管理员界面:用于图书信息的管理和用户管理,如图书的查看、新书入库、旧书删除、增加新管理员、以及删除管理员和用户。
3.1 设计思想
- 系统分成两个主要的模块,管理员的模块和用户管理的模块。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。
(3)采用良好的界面视图,布局明显,能够使用户在使用过程中有良好的体验感、操作感。
(4)系统应该满足对图书的查看、修改、添加和删除,以及对用户的增加、删除以及对他们身份的区别。
3.2程序总体设计
图3.1 图书管理系统功能结构图
图3.2 管理员模块功能结构图
图3.3 读者模块功能结构图
3.3.1主界面主体代码:
package library;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.awt.*;
public class menu extends JFrame implements ActionListener {
JLabel lblLogo;
JPanel jPanel;
JMenuBar menubar=new JMenuBar();
JMenu m1=new JMenu("系统管理");
JMenu m2=new JMenu("查询图书信息");
JMenu m3=new JMenu("帮助");
JMenuItem item11=new JMenuItem("用户登录",new ImageIcon("image/login.jpg"));
JMenuItem item12=new JMenuItem("管理员登录",new ImageIcon("image/login.jpg"));
JMenuItem item13=new JMenuItem("注册",new ImageIcon("image/key.jpg"));
JMenuItem item21=new JMenuItem("查询图书信息",new ImageIcon("image/query.jpg"));
JMenuItem item31=new JMenuItem("帮助",new ImageIcon("image/help.jpg"));
private Container contentPane;
static Dimension deSize;
static Toolkit toolkit=Toolkit.getDefaultToolkit();
JPanel cardPanel=new JPanel();
String namep=null;
String sql="";
connectdt jdbc = new connectdt();//连接数据库类
Connection conn = jdbc.conn;
Statement stmt = jdbc.stmt;
public menu(String p1) {
namep=p1;
init();
deSize=toolkit.getScreenSize();//获取屏幕大小
setLocation(deSize.width/3-getWidth()/2,
deSize.height/4-getHeight()/2);
setVisible(true);
setSize(400, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);}
public void init() {
setTitle("图书管理系统");
//常用功能
Container c=getContentPane();
c.add(menubar);
menubar.add(m1);
menubar.add(m2);
menubar.add(m3);
//系统管理菜单项
m1.add(item11);
m1.add(item12);
m1.add(item13);
item11.addActionListener(this);
item12.addActionListener(this);
item13.addActionListener(this);
//个人管理菜单项
m2.add(item21);
item21.addActionListener(this);
//管理菜单项
m3.add(item31);
item31.addActionListener(this);
//帮助管理菜单项
m2.setEnabled(true);
m3.setEnabled(true);
setJMenuBar(menubar);
lblLogo=new JLabel(new ImageIcon("image\\main.jpg"));//背景
add(lblLogo);}
public void actionPerformed(ActionEvent e) {
try {if (e.getSource()==item11) {//用户登录
new login("readers","name","code","用户登录");
dispose();
} else if(e.getSource()==item13){//注册
new user_regist();
}else if(e.getSource()==item12){//后台(管理员)
new login("admindt","username","password","管理员登录");
dispose();}
else if (e.getSource()==item21) {//查找图书
new select_borrow(namep);}
else if(e.getSource()==item31){//帮助
new menu_help();}
} catch (Exception ee) {
ee.printStackTrace();}}}
3.3.2用户(管理员)登录界面主体代码:
(管理员用户名:2密码:1464179427
读者用户名:補原普密码:654321)
package library;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.awt.*;
public class login extends JFrame implements ActionListener {
JLabel label1 = new JLabel("用户名");
JLabel label2 = new JLabel("密码");
JButton button1 = new JButton("确认");
JTextField textField1 = new JTextField();//用户名输入
JPasswordField password = new JPasswordField();//密码输入
String user , pass , table1,title;
connectdt jdbc = new connectdt();
Connection conn = jdbc.conn;
Statement stmt = jdbc.stmt;
String st1=null;
JLabel lblBackground=new JLabel(new ImageIcon("image/登陆界面.jpg"));
public login(String p1,String p2,String p3,String p4) {
this.table1=p1;
this.user=p2;
this.pass=p3;
this.title=p4;
init();
setVisible(true);
setLocation(500, 150);//位置
setSize(300, 300);//大小
setTitle(title);//窗口标题
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);}
public void init() {
setLayout(null);//空布局
label1.setBounds(40, 30, 50, 30);
add(label1);
textField1.setBounds(90, 30, 150, 30);
add(textField1);
label2.setBounds(40, 130, 50, 30);
add(label2);
password.setBounds(90, 130, 150, 30);
add(password);
button1.setBounds(90, 200, 150, 30);
add(button1);
lblBackground.setBounds(0, 0, 300, 300);
add(lblBackground);
textField1.addActionListener(this);//监听
password.addActionListener(this);
button1.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
//加入动作
new menu(st1);}});}
//登陆按钮的控制,
public void actionPerformed(ActionEvent e) {
try {st1 = textField1.getText();
String st2 = new String(password.getPassword());
if (st1.length() == 0) {
JOptionPane.showMessageDialog(null, "账号不能为空");
return;}
if (st2.length() == 0) {
JOptionPane.showMessageDialog(null, "密码不能为空");
return;}
String sql,readerName = null;
sql = "select * from " + table1 + " where " + pass + "='" + st2 + "' and "+user+" ='"+st1+"'";
ResultSet rs = stmt.executeQuery(sql);
if (!rs.next()) {
JOptionPane.showMessageDialog(null, "账号或密码不正确");
return;}else{
readerName= rs.getString(2);}
dispose();// 隐藏登录窗口
if(title=="管理员登录"){
new manager();}
else{new UserMain(readerName);//返回主界面}
rs.close();
stmt.close();
conn.close();
} catch (Exception ee) {
ee.printStackTrace();}}}
3.3.3用户注册主体代码:
package library;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class user_regist extends JFrame implements ActionListener {
JLabel jlArray[] = { new JLabel("姓名"), new JLabel("密码"), new JLabel("专业"), new JLabel("学号") };
JLabel j2lArr[] = { new JLabel("性别"), new JLabel("出生"), new JLabel("罚款"), new JLabel("注册时间") };
JTextField jtArray[] = { new JTextField(), new JTextField(), new JTextField(), new JTextField() };
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
String datestr=df.format(new Date());
JTextField fine = new JTextField("0"), date = new JTextField(datestr);
ButtonGroup group = new ButtonGroup();
JRadioButton male = new JRadioButton("男", true), female = new JRadioButton("女");
JComboBox comBox = new JComboBox();
JButton submit = new JButton("提交");
JLabel lblBackground=new JLabel(new ImageIcon("image/查阅背景.jpg"));
String[] pattern = { "[\u4e00-\u9fa5]{2,6}", "[0-9a-zA-Z]{6,12}", "[\u4e00-\u9fa5]{4,12}", "[0-9]{11}" };
JTextArea helpArea = new JTextArea("提示:姓名格式为2到6位汉字\n 密码为6到12位数字或字母\n " +
" 专业为4到12位汉字\n 学号为12位数字");
connectdt jdbc = new connectdt();// 连接数据库类
Statement stmt = jdbc.stmt;
public user_regist() {
init();
setLocation(400, 150);
setVisible(true);// 设置窗口可见
setSize(500, 350);
setTitle("注册用户");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// 设置关闭当前窗口
setResizable(false);// 不可调整窗口尺寸}
public void init() {
setLayout(null);
for (int i = 0; i < jlArray.length; i++) {// 设置第一列的表头和文本框
jlArray[i].setBounds(50, 20 + i * 50, 50, 50);
jtArray[i].setBounds(100, 30 + i * 50, 150, 30);
add(jlArray[i]);
add(jtArray[i]);}
for (int i = 0; i < j2lArr.length; i++) {// 设置第二列的表头
j2lArr[i].setBounds(290, 20 + i * 50, 80, 50);
add(j2lArr[i]);}
male.setBounds(350, 20, 50, 50);
female.setBounds(400, 20, 50, 50);
group.add(male);// 性别选择加入到
group.add(female);
for (int i = 1990; i < 2016; i++) {
comBox.addItem(i);}
comBox.setBounds(350, 80, 100, 30);
fine.setBounds(350, 130, 50, 30);
fine.setEditable(false);
date.setBounds(350, 180, 80, 30);
date.setEditable(false);
submit.setBounds(350, 240, 60, 30);
helpArea.setBounds(50, 230, 200, 70);
helpArea.setEditable(false);
add(comBox);
add(male);
add(female);
add(fine);
add(date);
add(submit);
add(helpArea);
addListener();lblBackground.setBounds(0, 0, 500, 500);
add(lblBackground);}
public void addListener() {
for (int i = 0; i < jtArray.length; i++) {//
jtArray[i].addActionListener(this);}
submit.addActionListener(this);}
public void actionPerformed(ActionEvent e) {
try {if (e.getSource() == submit) {
String[] str = new String[4];
String sql;
for (int i = 0; i < str.length; i++) {
str[i] = jtArray[i].getText();
if (str[i].length() == 0) {
JOptionPane.showMessageDialog(null, "输入不能为空");
return;}
if (!str[i].matches(pattern[i])) {
JOptionPane.showMessageDialog(null, "输入不合法");
return;}}
int sexbg = male.isSelected() ? 0 : 1;
String sech = "男";
if (sexbg != 0) {
sech = "女";}
Object born = comBox.getSelectedItem();
sql = "insert into readers (name,code,major,stu_id,sex,born,fine,date) values('"+str[0]+"','"+str[1]+"','"+str[2]+"','"+str[3]+"','"+sech+"',"+born+",0,NOW());";
stmt.executeUpdate(sql);
JOptionPane.showMessageDialog(null, "注册成功");
dispose();
stmt.close();}
} catch (Exception ee) {
3.4 数据库的总体设计:
数据库中总体有四张表,一张是管理员的表,一张是用户的表,一张是所有书籍的表,还有一张是用户借阅书籍的表具体结构如下图所示:
Book的设计表如下图3.1所示:
图3.1 数据库book的设计表
Admindt的设计图如下图3.2所示:
图3.2 数据库user的设计表
Borrow的设计图如下图3.2所示:
图3.2 数据库user的设计表
Reader的设计图如下图3.2所示:
图3.2 数据库user的设计表
连接数据库的代码如下:
package library;
import java.sql.*;
public class connectdt {//此类为连接数据库的类
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/emp?useUnicode=true&characterEncoding=GBK";//使用户在输入用户名以及密码的时候,在数据库中是中文
static final String USER = "root";
static final String PASS = "123456";
String struser = "username", strpass = "password", strtable1 = "admindt", strtable2 = "books",ID="id";//连接数据库中emp中admindt
Connection conn = null;
Statement stmt = null;
public connectdt() {
try {
Class.forName(JDBC_DRIVER);// 工程要连接额外的jar包
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
} catch (Exception ee) {
ee.printStackTrace();
}}}
(一)主界面,(包括了登陆类型的选择(用户登陆、管理员登陆),用户注册,查询图书以及帮助菜单)如图4.1所示:
图4.1 主界面
(二) 管理员登录界面与用户登录界面(登陆界面存在的时候,其他的界面会关闭。只有输入用户号和密码的文本框以及登陆按钮,但是登陆界面的窗口关闭会返回到主界面,登陆成功会切换到用户界面或者是管理员界面)如图4.2所示:
图4.2 用户登录界面
(三)用户主界面(在用户主界面可以实现个人信息的查询、借阅图书和归还图书、以及系统帮助)如图4.3所示:
图4.3 用户主界面
(四)用户个人信息界面(在用户个人信息界面可以查看用户的姓名专业班级借书等一些基本信息)如图4.4所示:
图4.4 用户个人信息
(五)用户借阅图书界面(在用户借阅图书界面可以查看图书,并且实现借书操作)如图4.5所示:
图4.5 用户检索图书和借书
(六)用户还书界面(在用户还书界面可以归还图书)如图4.6所示:
图4.6 用户的还书
(七)用户帮助界面(在用户帮助界面查询系统中可以查看该系统的各项操作)如图4.7所示:
图4.7 帮助菜单
(八)管理员主界面(管理员主界面中可以实现图书增加、删除,注册管理员、删除管理员(读者),帮助)如图4.8所示:
图4.8 管理员主界面
(九)添加图书界面(在添加图书界面中可以完成图书增加)如图4.9所示:
图4.9 添加图书界面
(十)删除图书界面(在添加图书界面中可以完成图书增加)如图4.10所示:
图4.10删除图书界面
图书管理系统设计说明书
第一章 项目选题说明
图书馆是高等院校的重要组成部门,是教师和学生获取知识的重要场所。由于图书馆主要从事大量的图书资料的储存和流通。所以一直以来,计算机在图书馆的图书管理中得到了广泛的应用。
图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理。现今,有很多的图书馆尚未使用计算机进行信息管理。图书馆若采取手工方式对图书资料和图书借阅情况进行人工管理,由于资料繁多,手工处理的工作量大,整体管理效率低下,也不方便读者对图书资料的查阅。为了提高日常的图书管理效率,必须开发满足大多数中小型的图书管理要求的图书管理系统。本系统与MySQL数据库相结合,使大量繁杂的信息能够实现快速查询。
图书管理系统需要满足来自两方面的需求,这两个方面分别是图书馆工作人员和读者。图书用户的需求是查询图书馆所存的图书、及图书借阅和归还;图书馆管理人员的功能最为复杂,包括对工作人员、读者、图书进行管理和维护。游客可直接查看图书馆图书情况,如果读者根据本人学号和密码登录系统,就可以实现对图书的借阅和归还。一般情况下,读者只应该查询和维护本人的借书情况和个人信息,若查询和维护其他读者的借书情况和个人信息,就要知道其他图书用户的学号和密码,这些是很难得到的,特别是密码,所以不但满足了图书用户的要求,还保护了图书用户的个人隐私。
第二章 项目需求分析
我设计的图书馆管理系统主要用于对图书馆日常工作的管理,主要任务是用计算机对读者、图书等各种信息进行日常管理,如查询、修改、增加、删除等。本系统实现了图书馆的信息化管理,完成了图书馆管理系统的基本功能。
该系统主要包括系统主界面、用户界面、管理员界面、注册界面,各部分主要功能如下:
(1) 主界面:用于一般的图书查询,但是在未登陆的时候不能借书。
(2) 用户界面:用于用户信息的管理以及图书的借阅和归还。
(3) 管理员界面:用于图书信息的管理和用户管理,如图书的查看、新书入库、旧书删除、增加新管理员、以及删除管理员和用户。
(4) 注册界面:用于用户的注册。
第三章 系统设计
3.1 设计思想
- 系统分成两个主要的模块,管理员的模块和用户管理的模块。
(2)分层的模块化程序设计思想,整个系统采用模块化结构设计。作为应用程序有较强的可操作性和扩展性。
(3)采用良好的界面视图,布局明显,能够使用户在使用过程中有良好的体验感、操作感。
(4)系统应该满足对图书的查看、修改、添加和删除,以及对用户的增加、删除以及对他们身份的区别。
3.2程序总体设计
图3.1 图书管理系统功能结构图
图3.2 管理员模块功能结构图
图3.3 读者模块功能结构图
3.3程序详细设计
3.3.1主界面主体代码:
package library;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.awt.*;
public class menu extends JFrame implements ActionListener {
JLabel lblLogo;
JPanel jPanel;
JMenuBar menubar=new JMenuBar();
JMenu m1=new JMenu("系统管理");
JMenu m2=new JMenu("查询图书信息");
JMenu m3=new JMenu("帮助");
JMenuItem item11=new JMenuItem("用户登录",new ImageIcon("image/login.jpg"));
JMenuItem item12=new JMenuItem("管理员登录",new ImageIcon("image/login.jpg"));
JMenuItem item13=new JMenuItem("注册",new ImageIcon("image/key.jpg"));
JMenuItem item21=new JMenuItem("查询图书信息",new ImageIcon("image/query.jpg"));
JMenuItem item31=new JMenuItem("帮助",new ImageIcon("image/help.jpg"));
private Container contentPane;
static Dimension deSize;
static Toolkit toolkit=Toolkit.getDefaultToolkit();
JPanel cardPanel=new JPanel();
String namep=null;
String sql="";
connectdt jdbc = new connectdt();//连接数据库类
Connection conn = jdbc.conn;
Statement stmt = jdbc.stmt;
public menu(String p1) {
namep=p1;
init();
deSize=toolkit.getScreenSize();//获取屏幕大小
setLocation(deSize.width/3-getWidth()/2,
deSize.height/4-getHeight()/2);
setVisible(true);
setSize(400, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setResizable(false);}
public void init() {
setTitle("图书管理系统");
//常用功能
Container c=getContentPane();
c.add(menubar);
menubar.add(m1);
menubar.add(m2);
menubar.add(m3);
//系统管理菜单项
m1.add(item11);
m1.add(item12);
m1.add(item13);
item11.addActionListener(this);
item12.addActionListener(this);
item13.addActionListener(this);
//个人管理菜单项
m2.add(item21);
item21.addActionListener(this);
//管理菜单项
m3.add(item31);
item31.addActionListener(this);
//帮助管理菜单项
m2.setEnabled(true);
m3.setEnabled(true);
setJMenuBar(menubar);
lblLogo=new JLabel(new ImageIcon("image\\main.jpg"));//背景
add(lblLogo);}
public void actionPerformed(ActionEvent e) {
try {if (e.getSource()==item11) {//用户登录
new login("readers","name","code","用户登录");
dispose();
} else if(e.getSource()==item13){//注册
new user_regist();
}else if(e.getSource()==item12){//后台(管理员)
new login("admindt","username","password","管理员登录");
dispose();}
else if (e.getSource()==item21) {//查找图书
new select_borrow(namep);}
else if(e.getSource()==item31){//帮助
new menu_help();}
} catch (Exception ee) {
ee.printStackTrace();}}}
3.3.2用户(管理员)登录界面主体代码:
(管理员用户名:2密码:1464179427
读者用户名:補原普密码:654321)
package library;
import java.awt.event.*;
import javax.swing.*;
import java.sql.*;
import java.awt.*;
public class login extends JFrame implements ActionListener {
JLabel label1 = new JLabel("用户名");
JLabel label2 = new JLabel("密码");
JButton button1 = new JButton("确认");
JTextField textField1 = new JTextField();//用户名输入
JPasswordField password = new JPasswordField();//密码输入
String user , pass , table1,title;
connectdt jdbc = new connectdt();
Connection conn = jdbc.conn;
Statement stmt = jdbc.stmt;
String st1=null;
JLabel lblBackground=new JLabel(new ImageIcon("image/登陆界面.jpg"));
public login(String p1,String p2,String p3,String p4) {
this.table1=p1;
this.user=p2;
this.pass=p3;
this.title=p4;
init();
setVisible(true);
setLocation(500, 150);//位置
setSize(300, 300);//大小
setTitle(title);//窗口标题
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);}
public void init() {
setLayout(null);//空布局
label1.setBounds(40, 30, 50, 30);
add(label1);
textField1.setBounds(90, 30, 150, 30);
add(textField1);
label2.setBounds(40, 130, 50, 30);
add(label2);
password.setBounds(90, 130, 150, 30);
add(password);
button1.setBounds(90, 200, 150, 30);
add(button1);
lblBackground.setBounds(0, 0, 300, 300);
add(lblBackground);
textField1.addActionListener(this);//监听
password.addActionListener(this);
button1.addActionListener(this);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
super.windowClosing(e);
//加入动作
new menu(st1);}});}
//登陆按钮的控制,
public void actionPerformed(ActionEvent e) {
try {st1 = textField1.getText();
String st2 = new String(password.getPassword());
if (st1.length() == 0) {
JOptionPane.showMessageDialog(null, "账号不能为空");
return;}
if (st2.length() == 0) {
JOptionPane.showMessageDialog(null, "密码不能为空");
return;}
String sql,readerName = null;
sql = "select * from " + table1 + " where " + pass + "='" + st2 + "' and "+user+" ='"+st1+"'";
ResultSet rs = stmt.executeQuery(sql);
if (!rs.next()) {
JOptionPane.showMessageDialog(null, "账号或密码不正确");
return;}else{
readerName= rs.getString(2);}
dispose();// 隐藏登录窗口
if(title=="管理员登录"){
new manager();}
else{new UserMain(readerName);//返回主界面}
rs.close();
stmt.close();
conn.close();
} catch (Exception ee) {
ee.printStackTrace();}}}
3.3.3用户注册主体代码:
package library;
import javax.swing.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Date;
import java.text.SimpleDateFormat;
public class user_regist extends JFrame implements ActionListener {
JLabel jlArray[] = { new JLabel("姓名"), new JLabel("密码"), new JLabel("专业"), new JLabel("学号") };
JLabel j2lArr[] = { new JLabel("性别"), new JLabel("出生"), new JLabel("罚款"), new JLabel("注册时间") };
JTextField jtArray[] = { new JTextField(), new JTextField(), new JTextField(), new JTextField() };
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// 设置日期格式
String datestr=df.format(new Date());
JTextField fine = new JTextField("0"), date = new JTextField(datestr);
ButtonGroup group = new ButtonGroup();
JRadioButton male = new JRadioButton("男", true), female = new JRadioButton("女");
JComboBox comBox = new JComboBox();
JButton submit = new JButton("提交");
JLabel lblBackground=new JLabel(new ImageIcon("image/查阅背景.jpg"));
String[] pattern = { "[\u4e00-\u9fa5]{2,6}", "[0-9a-zA-Z]{6,12}", "[\u4e00-\u9fa5]{4,12}", "[0-9]{11}" };
JTextArea helpArea = new JTextArea("提示:姓名格式为2到6位汉字\n 密码为6到12位数字或字母\n " +
" 专业为4到12位汉字\n 学号为12位数字");
connectdt jdbc = new connectdt();// 连接数据库类
Statement stmt = jdbc.stmt;
public user_regist() {
init();
setLocation(400, 150);
setVisible(true);// 设置窗口可见
setSize(500, 350);
setTitle("注册用户");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// 设置关闭当前窗口
setResizable(false);// 不可调整窗口尺寸}
public void init() {
setLayout(null);
for (int i = 0; i < jlArray.length; i++) {// 设置第一列的表头和文本框
jlArray[i].setBounds(50, 20 + i * 50, 50, 50);
jtArray[i].setBounds(100, 30 + i * 50, 150, 30);
add(jlArray[i]);
add(jtArray[i]);}
for (int i = 0; i < j2lArr.length; i++) {// 设置第二列的表头
j2lArr[i].setBounds(290, 20 + i * 50, 80, 50);
add(j2lArr[i]);}
male.setBounds(350, 20, 50, 50);
female.setBounds(400, 20, 50, 50);
group.add(male);// 性别选择加入到
group.add(female);
for (int i = 1990; i < 2016; i++) {
comBox.addItem(i);}
comBox.setBounds(350, 80, 100, 30);
fine.setBounds(350, 130, 50, 30);
fine.setEditable(false);
date.setBounds(350, 180, 80, 30);
date.setEditable(false);
submit.setBounds(350, 240, 60, 30);
helpArea.setBounds(50, 230, 200, 70);
helpArea.setEditable(false);
add(comBox);
add(male);
add(female);
add(fine);
add(date);
add(submit);
add(helpArea);
addListener();lblBackground.setBounds(0, 0, 500, 500);
add(lblBackground);}
public void addListener() {
for (int i = 0; i < jtArray.length; i++) {//
jtArray[i].addActionListener(this);}
submit.addActionListener(this);}
public void actionPerformed(ActionEvent e) {
try {if (e.getSource() == submit) {
String[] str = new String[4];
String sql;
for (int i = 0; i < str.length; i++) {
str[i] = jtArray[i].getText();
if (str[i].length() == 0) {
JOptionPane.showMessageDialog(null, "输入不能为空");
return;}
if (!str[i].matches(pattern[i])) {
JOptionPane.showMessageDialog(null, "输入不合法");
return;}}
int sexbg = male.isSelected() ? 0 : 1;
String sech = "男";
if (sexbg != 0) {
sech = "女";}
Object born = comBox.getSelectedItem();
sql = "insert into readers (name,code,major,stu_id,sex,born,fine,date) values('"+str[0]+"','"+str[1]+"','"+str[2]+"','"+str[3]+"','"+sech+"',"+born+",0,NOW());";
stmt.executeUpdate(sql);
JOptionPane.showMessageDialog(null, "注册成功");
dispose();
stmt.close();}
} catch (Exception ee) {
ee.printStackTrace();}}}
3.4 数据库的总体设计:
数据库中总体有四张表,一张是管理员的表,一张是用户的表,一张是所有书籍的表,还有一张是用户借阅书籍的表具体结构如下图所示:
Book的设计表如下图3.1所示:
图3.1 数据库book的设计表
Admindt的设计图如下图3.2所示:
图3.2 数据库user的设计表
Borrow的设计图如下图3.2所示:
图3.2 数据库user的设计表
Reader的设计图如下图3.2所示:
图3.2 数据库user的设计表
连接数据库的代码如下:
package library;
import java.sql.*;
public class connectdt {//此类为连接数据库的类
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/emp?useUnicode=true&characterEncoding=GBK";//使用户在输入用户名以及密码的时候,在数据库中是中文
static final String USER = "root";
static final String PASS = "123456";
String struser = "username", strpass = "password", strtable1 = "admindt", strtable2 = "books",ID="id";//连接数据库中emp中admindt
Connection conn = null;
Statement stmt = null;
public connectdt() {
try {
Class.forName(JDBC_DRIVER);// 工程要连接额外的jar包
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
} catch (Exception ee) {
ee.printStackTrace();
}}}
第四章 系统测试及实现
(一)主界面,(包括了登陆类型的选择(用户登陆、管理员登陆),用户注册,查询图书以及帮助菜单)如图4.1所示:
图4.1 主界面
(二) 管理员登录界面与用户登录界面(登陆界面存在的时候,其他的界面会关闭。只有输入用户号和密码的文本框以及登陆按钮,但是登陆界面的窗口关闭会返回到主界面,登陆成功会切换到用户界面或者是管理员界面)如图4.2所示:
图4.2 用户登录界面
(三)用户主界面(在用户主界面可以实现个人信息的查询、借阅图书和归还图书、以及系统帮助)如图4.3所示:
图4.3 用户主界面
(四)用户个人信息界面(在用户个人信息界面可以查看用户的姓名专业班级借书等一些基本信息)如图4.4所示:
图4.4 用户个人信息
(五)用户借阅图书界面(在用户借阅图书界面可以查看图书,并且实现借书操作)如图4.5所示:
图4.5 用户检索图书和借书
(六)用户还书界面(在用户还书界面可以归还图书)如图4.6所示:
图4.6 用户的还书
(七)用户帮助界面(在用户帮助界面查询系统中可以查看该系统的各项操作)如图4.7所示:
图4.7 帮助菜单
(八)管理员主界面(管理员主界面中可以实现图书增加、删除,注册管理员、删除管理员(读者),帮助)如图4.8所示:
图4.8 管理员主界面
(九)添加图书界面(在添加图书界面中可以完成图书增加)如图4.9所示:
图4.9 添加图书界面
(十)删除图书界面(在添加图书界面中可以完成图书增加)如图4.10所示:
图4.10删除图书界面
(七)添加图书界面(在添加图书界面中可以完成图书增加)如图4.11所示:
图4.11添加图书界面
(七)添加图书界面(在添加图书界面中可以完成图书增加)如图4.11所示:
图4.11添加图书界面