用java做一个图书管理程序,要有GUP和JDBC结合,数据库有两个表:第一个表是个人信息表,包括学号,登陆密码,姓名,借书时间,是否借书(binary型),第二个表是书本信息表,包括书编号,书本名,书本价格,书本类型,实现数据库的连接和增删改查功能,程序要是GUI界面,从注册到登录,然后到借书界面,借书的用户信息被记录
时间: 2024-04-06 18:33:52 浏览: 53
好的,这是一个比较完整的项目,需要一步一步实现。我会尽可能详细地回答你的问题,但是由于篇幅限制,可能需要分几个回答来完成这个项目的讲解。
首先,我们需要建立两个表,一个是个人信息表,另一个是书本信息表。你可以使用MySQL这样的关系型数据库来实现。在建表时,我们需要注意表的字段和数据类型的定义,以及主键和外键的设置。例如,个人信息表可以这样定义:
```sql
CREATE TABLE user_info (
id INT PRIMARY KEY AUTO_INCREMENT,
student_id VARCHAR(10) NOT NULL,
password VARCHAR(20) NOT NULL,
name VARCHAR(20) NOT NULL,
borrow_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
is_borrowed BOOLEAN DEFAULT FALSE
);
```
这个表中,id是主键,自动递增;student_id表示学号,不能为空;password是登录密码,也不能为空;name是姓名,不能为空;borrow_time是借书时间,可以默认为当前时间;is_borrowed表示是否借书,可以默认为未借。
书本信息表的定义可以类似,例如:
```sql
CREATE TABLE book_info (
id INT PRIMARY KEY AUTO_INCREMENT,
book_id VARCHAR(20) NOT NULL,
book_name VARCHAR(50) NOT NULL,
book_price DECIMAL(6,2) NOT NULL,
book_type VARCHAR(20) NOT NULL
);
```
这个表中,id是主键,自动递增;book_id是书本编号,不能为空;book_name是书本名称,不能为空;book_price是书本价格,保留两位小数,不能为空;book_type是书本类型,不能为空。
接下来,我们需要编写Java程序来连接数据库,实现增删改查功能,以及GUI界面。我们需要使用JDBC技术来访问数据库,以及Swing技术来构建GUI界面。
我们可以先编写一个简单的登录界面,可以使用JFrame和JPanel来实现。例如:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class LoginFrame extends JFrame implements ActionListener {
private JPanel panel;
private JLabel label1, label2;
private JTextField textField1;
private JPasswordField passwordField;
private JButton button1, button2;
public LoginFrame() {
setTitle("图书管理系统");
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel = new JPanel();
panel.setLayout(null);
label1 = new JLabel("学号:");
label1.setBounds(50, 50, 80, 30);
panel.add(label1);
textField1 = new JTextField();
textField1.setBounds(130, 50, 180, 30);
panel.add(textField1);
label2 = new JLabel("密码:");
label2.setBounds(50, 100, 80, 30);
panel.add(label2);
passwordField = new JPasswordField();
passwordField.setBounds(130, 100, 180, 30);
panel.add(passwordField);
button1 = new JButton("登录");
button1.setBounds(100, 160, 80, 30);
button1.addActionListener(this);
panel.add(button1);
button2 = new JButton("注册");
button2.setBounds(200, 160, 80, 30);
button2.addActionListener(this);
panel.add(button2);
add(panel);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1) {
// TODO: 登录操作
} else if (e.getSource() == button2) {
// TODO: 注册操作
}
}
public static void main(String[] args) {
new LoginFrame();
}
}
```
这个登录界面包括学号和密码两个输入框,以及登录和注册两个按钮。当用户点击登录按钮时,我们需要检查输入的学号和密码是否正确,如果正确则跳转到主界面;否则弹出错误提示。当用户点击注册按钮时,我们需要弹出注册界面,让用户输入注册信息。
接下来,我们需要编写连接数据库的代码。我们可以使用JDBC技术来实现,例如:
```java
import java.sql.*;
public class DBUtil {
private static final String URL = "jdbc:mysql://localhost:3306/book_management";
private static final String USER = "root";
private static final String PASSWORD = "123456";
public static Connection getConnection() {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
public static void closeConnection(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeStatement(Statement stmt) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void closeResultSet(ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
这个DBUtil类包括了连接数据库、关闭连接、关闭语句和关闭结果集等方法。我们可以在需要访问数据库的地方调用这些方法,例如:
```java
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
pstmt = conn.prepareStatement("SELECT * FROM user_info WHERE student_id=? AND password=?");
pstmt.setString(1, studentId);
pstmt.setString(2, password);
rs = pstmt.executeQuery();
if (rs.next()) {
// 登录成功,跳转到主界面
} else {
// 登录失败,弹出错误提示
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.closeResultSet(rs);
DBUtil.closeStatement(pstmt);
DBUtil.closeConnection(conn);
}
```
这个代码片段中,我们使用PreparedStatement对象来执行带参数的SQL语句,避免了SQL注入的风险。我们也使用了ResultSet对象来获取查询结果,如果有结果则说明学号和密码正确,否则说明登录失败。
这个回答只是一个简单的指导,你需要自己根据这些代码来实现完整的图书管理系统。在实现过程中,你可能会遇到各种各样的问题,可以再来问我,我会尽力帮助你解决。
阅读全文