21xrx.com
2024-09-20 00:56:29 Friday
登录
文章检索 我的文章 写文章
Java实现ATM机:从UI界面到交易操作
2023-06-17 19:54:47 深夜i     --     --
Java ATM机 UI设计 Socket编程 多线程技术

ATM机是我们生活中比较常见的一种自助银行设备。本文将使用Java语言来实现一个基本的ATM机,包括UI界面设计和交易操作等。我们将使用Java Swing框架来构建ATM UI,使用Java Socket编写服务端和客户端之间的通信接口,最后使用Java多线程技术来处理多个用户同时使用ATM机时的情况。

在本文中,我们将了解到Java中Swing框架的使用方法,包括如何设计UI界面,如何使用事件监听器等。我们还将学习Java Socket编程的基本原理和方法,并通过代码实现服务端和客户端之间的通信接口。最后,我们将介绍Java中多线程的概念和并发编程技术,并使用代码实现多个用户同时使用ATM机的情况。

代码案例:

以下是简单的ATM UI设计:


import javax.swing.*;

import java.awt.*;

public class ATMUI {

  public static void main(String[] args) {

    JFrame frame = new JFrame("ATM Machine");

    JPanel panel = new JPanel();

    JLabel label1 = new JLabel("Enter your card number: ");

    JTextField textField1 = new JTextField(10);

    JLabel label2 = new JLabel("Enter your PIN: ");

    JPasswordField passwordField = new JPasswordField(10);

    JButton button1 = new JButton("Withdraw");

    JButton button2 = new JButton("Deposit");

    JButton button3 = new JButton("Check Balance");

    panel.add(label1);

    panel.add(textField1);

    panel.add(label2);

    panel.add(passwordField);

    panel.add(button1);

    panel.add(button2);

    panel.add(button3);

    frame.add(panel, BorderLayout.CENTER);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    frame.pack();

    frame.setVisible(true);

  }

}

使用Java Socket编写服务端和客户端之间的通信接口:

服务端代码:


import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

public class ATMServer {

  public static void main(String[] args) throws IOException {

    ServerSocket serverSocket = new ServerSocket(8000);

    System.out.println("ATM Server started.");

    while (true) {

      Socket socket = serverSocket.accept();

      new TransactionHandler(socket).start();

    }

  }

}

客户端代码:


import java.io.*;

import java.net.Socket;

public class ATMClient {

  public static void main(String[] args) throws IOException {

    Socket socket = new Socket("localhost", 8000);

    System.out.println("Connected to ATM Server.");

    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

    PrintWriter writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);

    writer.println("200"); // 200代表插卡操作

    reader.close();

    writer.close();

    socket.close();

  }

}

使用Java多线程技术处理多个用户同时使用ATM机时的情况:

代码片段:


public class ATM {

  private Map accounts;

  public ATM() {

    accounts = new ConcurrentHashMap<>();

  }

  public void deposit(String accountNumber, double amount) {

    Account account = accounts.get(accountNumber);

    account.deposit(amount);

  }

  public void withdraw(String accountNumber, double amount) {

    Account account = accounts.get(accountNumber);

    account.withdraw(amount);

  }

  public double getBalance(String accountNumber) {

    Account account = accounts.get(accountNumber);

    return account.getBalance();

  }

  //...

}

public class Account {

  private final String accountNumber;

  private double balance;

  public Account(String accountNumber, double balance)

    this.accountNumber = accountNumber;

    this.balance = balance;

  

  public synchronized void deposit(double amount) {

    balance += amount;

  }

  public synchronized void withdraw(double amount) {

    if (balance < amount) {

      throw new IllegalArgumentException("Insufficient funds");

    }

    balance -= amount;

  }

  public double getBalance()

    return balance;

  

  //...

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复