模拟银行存取款钱java+MySQL
时间: 2025-01-19 13:04:57 浏览: 60
好的,我很乐意为您介绍如何使用Java和MySQL来实现一个简单的银行存取款系统。这个系统将包含基本的用户认证、账户余额查询、存款和取款功能。以下是一个基本的实现方案:
1. 数据库设计:
首先,我们需要创建一个MySQL数据库来存储用户信息和账户信息。可以创建两个表:users(用户表)和accounts(账户表)。
```sql
CREATE DATABASE bank_db;
USE bank_db;
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(50) NOT NULL
);
CREATE TABLE accounts (
account_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
balance DECIMAL(10,2) DEFAULT 0.00,
FOREIGN KEY (user_id) REFERENCES users(user_id)
);
```
2. Java项目结构:
创建一个Java项目,包含以下类:
- BankApp: 主类,包含main方法
- DatabaseConnection: 数据库连接类
- User: 用户实体类
- Account: 账户实体类
- BankService: 银行业务逻辑类
3. 主要代码实现:
```java
// DatabaseConnection.java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseConnection {
private static final String URL = "jdbc:mysql://localhost:3306/bank_db";
private static final String USER = "root";
private static final String PASSWORD = "password";
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(URL, USER, PASSWORD);
}
}
// User.java
public class User {
private int userId;
private String username;
private String password;
// 构造方法、getter和setter方法
}
// Account.java
public class Account {
private int accountId;
private int userId;
private double balance;
// 构造方法、getter和setter方法
}
// BankService.java
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class BankService {
public User login(String username, String password) throws SQLException {
String sql = "SELECT * FROM users WHERE username = ? AND password = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, username);
pstmt.setString(2, password);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
User user = new User();
user.setUserId(rs.getInt("user_id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
return user;
}
}
return null;
}
public Account getAccountInfo(int userId) throws SQLException {
String sql = "SELECT * FROM accounts WHERE user_id = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setInt(1, userId);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
Account account = new Account();
account.setAccountId(rs.getInt("account_id"));
account.setUserId(rs.getInt("user_id"));
account.setBalance(rs.getDouble("balance"));
return account;
}
}
return null;
}
public boolean deposit(int accountId, double amount) throws SQLException {
String sql = "UPDATE accounts SET balance = balance + ? WHERE account_id = ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setDouble(1, amount);
pstmt.setInt(2, accountId);
int rows = pstmt.executeUpdate();
return rows > 0;
}
}
public boolean withdraw(int accountId, double amount) throws SQLException {
String sql = "UPDATE accounts SET balance = balance - ? WHERE account_id = ? AND balance >= ?";
try (Connection conn = DatabaseConnection.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setDouble(1, amount);
pstmt.setInt(2, accountId);
pstmt.setDouble(3, amount);
int rows = pstmt.executeUpdate();
return rows > 0;
}
}
}
// BankApp.java
import java.sql.SQLException;
import java.util.Scanner;
public class BankApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
BankService service = new BankService();
System.out.println("欢迎使用银行系统");
System.out.print("请输入用户名: ");
String username = scanner.nextLine();
System.out.print("请输入密码: ");
String password = scanner.nextLine();
try {
User user = service.login(username, password);
if (user != null) {
System.out.println("登录成功!");
Account account = service.getAccountInfo(user.getUserId());
if (account != null) {
System.out.println("账户余额: " + account.getBalance());
System.out.print("请选择操作: 1.存款 2.取款 3.退出: ");
int choice = Integer.parseInt(scanner.nextLine());
switch (choice) {
case 1:
System.out.print("请输入存款金额: ");
double depositAmount = Double.parseDouble(scanner.nextLine());
if (service.deposit(account.getAccountId(), depositAmount)) {
System.out.println("存款成功!");
} else {
System.out.println("存款失败!");
}
break;
case 2:
System.out.print("请输入取款金额: ");
double withdrawAmount = Double.parseDouble(scanner.nextLine());
if (service.withdraw(account.getAccountId(), withdrawAmount)) {
System.out.println("取款成功!");
} else {
System.out.println("取款失败!可能余额不足");
}
break;
case 3:
System.out.println("谢谢使用,再见!");
break;
default:
System.out.println("无效的选择");
}
} else {
System.out.println("无法获取账户信息");
}
} else {
System.out.println("登录失败!用户名或密码错误");
}
} catch (SQLException e) {
e.printStackTrace();
}
scanner.close();
}
}
```
这个简单的银行系统实现了基本的用户登录、账户余额查询、存款和取款功能。在实际应用中,您可能需要添加更多的错误处理、安全措施以及功能扩展,比如转账功能、交易历史记录等。
阅读全文
相关推荐

















