当前位置:实例文章 » 其他实例» [文章]基于Javaweb实现ATM机系统开发实战(十一)存储交易记录

基于Javaweb实现ATM机系统开发实战(十一)存储交易记录

发布人:shili8 发布时间:2025-01-01 09:22 阅读次数:0

**基于JavaWeb实现ATM机系统开发实战(十一)- 存储交易记录**

在前面的章节中,我们已经完成了对用户的基本信息管理、账户管理以及交易操作的实现。然而,一个完整的ATM机系统还需要能够存储和管理每笔交易的记录,以便于后续的统计分析和安全审计。因此,在本章节中,我们将重点介绍如何在JavaWeb项目中实现对交易记录的存储。

**1. 设计数据库表**

首先,我们需要设计一个数据库表来存储每笔交易的记录。假设我们已经有一个名为`atm_user`的表用于存储用户信息,另一个名为`atm_account`的表用于存储账户信息。现在,我们需要创建一个新的表`atm_transaction`来存储交易记录。

sqlCREATE TABLE atm_transaction (
 id INT PRIMARY KEY AUTO_INCREMENT,
 user_id INT NOT NULL,
 account_id INT NOT NULL,
 transaction_date DATE NOT NULL,
 transaction_type VARCHAR(10) NOT NULL,
 amount DECIMAL(10,2) NOT NULL,
 balance DECIMAL(10,2) NOT NULL);


**2. 实现交易记录的存储**

在JavaWeb项目中,我们需要创建一个新的DAO(Data Access Object)类来负责对数据库表`atm_transaction`进行CRUD操作。我们将其命名为`TransactionDAO.java`。

javapublic class TransactionDAO {
 private static final String TABLE_NAME = "atm_transaction";
 public void saveTransaction(Transaction transaction) {
 // 使用JDBC或MyBatis等框架来执行SQL语句 String sql = "INSERT INTO " + TABLE_NAME + " (user_id, account_id, transaction_date, transaction_type, amount, balance) VALUES (?, ?, ?, ?, ?, ?)";
 try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password");
 PreparedStatement pstmt = conn.prepareStatement(sql)) {
 pstmt.setInt(1, transaction.getUserId());
 pstmt.setInt(2, transaction.getAccountId());
 pstmt.setDate(3, new Date(transaction.getTransactionDate()));
 pstmt.setString(4, transaction.getTransactionType());
 pstmt.setDouble(5, transaction.getAmount());
 pstmt.setDouble(6, transaction.getBalance());
 pstmt.executeUpdate();
 } catch (SQLException e) {
 // 处理异常 }
 }
 public List getTransactions(int userId) {
 // 使用JDBC或MyBatis等框架来执行SQL语句 String sql = "SELECT * FROM " + TABLE_NAME + " WHERE user_id = ?";
 try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password");
 PreparedStatement pstmt = conn.prepareStatement(sql)) {
 pstmt.setInt(1, userId);
 ResultSet rs = pstmt.executeQuery();
 List transactions = new ArrayList<>();
 while (rs.next()) {
 Transaction transaction = new Transaction();
 transaction.setId(rs.getInt("id"));
 transaction.setUserId(rs.getInt("user_id"));
 transaction.setAccountId(rs.getInt("account_id"));
 transaction.setTransactionDate(rs.getDate("transaction_date"));
 transaction.setTransactionType(rs.getString("transaction_type"));
 transaction.setAmount(rs.getDouble("amount"));
 transaction.setBalance(rs.getDouble("balance"));
 transactions.add(transaction);
 }
 return transactions;
 } catch (SQLException e) {
 // 处理异常 }
 }
}


**3. 在业务逻辑中使用TransactionDAO**

在我们的ATM机系统中,我们需要在交易操作的业务逻辑中使用`TransactionDAO`来存储每笔交易的记录。我们可以在`TransactionService.java`类中添加一个方法来完成这一步骤。

javapublic class TransactionService {
 private TransactionDAO transactionDAO;
 public void saveTransaction(Transaction transaction) {
 // 使用TransactionDAO来保存交易记录 transactionDAO.saveTransaction(transaction);
 }
}


**4. 测试**

最后,我们需要测试一下我们的ATM机系统是否能够正确地存储每笔交易的记录。我们可以使用JUnit等框架来编写测试用例。

javapublic class TransactionServiceTest {
 @Test public void testSaveTransaction() {
 // 创建一个新的Transaction对象 Transaction transaction = new Transaction();
 transaction.setUserId(1);
 transaction.setAccountId(1);
 transaction.setTransactionDate(new Date());
 transaction.setTransactionType("deposit");
 transaction.setAmount(100.0);
 transaction.setBalance(100.0);
 // 使用TransactionService来保存交易记录 TransactionService transactionService = new TransactionService();
 transactionService.saveTransaction(transaction);
 // 验证是否能够正确地存储交易记录 List transactions = transactionService.getTransactionDAO().getTransactions(1);
 assertEquals(1, transactions.size());
 }
}


通过以上的步骤,我们已经完成了对交易记录的存储。我们可以在我们的ATM机系统中使用`TransactionDAO`来保存每笔交易的记录,并且能够正确地验证是否能够正确地存储交易记录。

其他信息

其他资源

Top