用JAVA写一个ATM机系统连接数据库实现增删改查
时间: 2023-03-13 14:12:08 浏览: 167
使用 Java 连接数据库,实现 ATM 系统的增删改查,可以使用 JDBC 和 Java 的数据库 API,将账户信息存储到数据库中,然后在操作 ATM 时,使用这些 API 来实现对数据库中账户信息的增删改查。
相关问题
C++实现ATM系统,并运用链表的增删改查
好的,我可以为您提供一个简单的C++实现的ATM系统,并使用链表来实现增删改查功能。
首先,我们需要定义一个银行账户类(Account),包含账户号码(account_number),账户余额(balance)和账户持有人姓名(owner_name)等属性。定义如下:
```cpp
class Account {
public:
Account(int account_number, string owner_name, double balance = 0.0) :
account_number(account_number), owner_name(owner_name), balance(balance) {}
int getAccountNumber() const { return account_number; }
double getBalance() const { return balance; }
string getOwnerName() const { return owner_name; }
void deposit(double amount) { balance += amount; }
bool withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
return true;
}
return false;
}
private:
int account_number;
string owner_name;
double balance;
};
```
接下来,我们需要定义一个链表节点类(Node),包含指向账户对象的指针(account)和指向下一个节点的指针(next)属性。定义如下:
```cpp
class Node {
public:
Node(Account* account) : account(account), next(nullptr) {}
Account* getAccount() const { return account; }
Node* getNext() const { return next; }
void setNext(Node* node) { next = node; }
private:
Account* account;
Node* next;
};
```
最后,我们定义一个链表类(LinkedList),包含头节点属性(head)和相应的增删改查方法。定义如下:
```cpp
class LinkedList {
public:
LinkedList() : head(nullptr) {}
void add(Account* account) {
Node* node = new Node(account);
node->setNext(head);
head = node;
}
bool remove(int account_number) {
Node* prev = nullptr;
Node* curr = head;
while (curr != nullptr) {
if (curr->getAccount()->getAccountNumber() == account_number) {
if (prev == nullptr) {
head = curr->getNext();
} else {
prev->setNext(curr->getNext());
}
delete curr;
return true;
}
prev = curr;
curr = curr->getNext();
}
return false;
}
Account* get(int account_number) const {
Node* curr = head;
while (curr != nullptr) {
if (curr->getAccount()->getAccountNumber() == account_number) {
return curr->getAccount();
}
curr = curr->getNext();
}
return nullptr;
}
void update(Account* account) {
Account* acc = get(account->getAccountNumber());
if (acc != nullptr) {
acc->deposit(account->getBalance());
}
}
private:
Node* head;
};
```
现在,我们可以在主函数中创建一个链表对象,并对其进行增删改查操作。示例代码如下:
```cpp
int main() {
LinkedList list;
Account* account1 = new Account(1001, "Alice", 1000);
Account* account2 = new Account(1002, "Bob", 2000);
Account* account3 = new Account(1003, "Charlie", 3000);
list.add(account1);
list.add(account2);
list.add(account3);
// 查询账户信息
Account* acc = list.get(1002);
if (acc != nullptr) {
cout << "Account Number: " << acc->getAccountNumber() << endl;
cout << "Owner Name: " << acc->getOwnerName() << endl;
cout << "Balance: " << acc->getBalance() << endl;
}
// 更新账户余额
Account* account4 = new Account(1002, "Bob", 5000);
list.update(account4);
// 删除账户
list.remove(1003);
// 释放内存
delete account1;
delete account2;
delete account3;
delete account4;
return 0;
}
```
这是一个简单的C++实现的ATM系统,并使用链表来实现增删改查功能。
设计一个java程序链接数据库实现模拟银行atm机
好的,下面是一个简单的Java程序实现模拟银行ATM机:
首先,我们需要创建一个ATM类,它代表了整个ATM机的控制器。在ATM类中,我们需要定义以下属性:
- cardNumber:表示插入的银行卡号码;
- cardPin:表示银行卡的密码;
- balance:表示银行卡的余额;
- isCardInserted:表示是否插入了银行卡;
- isPinValid:表示银行卡密码是否正确。
```
import java.sql.*;
public class ATM {
private String cardNumber;
private int cardPin;
private double balance;
private boolean isCardInserted;
private boolean isPinValid;
private Connection connection;
public ATM() {
isCardInserted = false;
isPinValid = false;
balance = 0;
}
public void insertCard(String cardNumber, int cardPin) {
this.cardNumber = cardNumber;
this.cardPin = cardPin;
isCardInserted = true;
validatePin();
}
public void ejectCard() {
isCardInserted = false;
isPinValid = false;
cardNumber = "";
cardPin = 0;
}
public void validatePin() {
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password");
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM accounts WHERE card_number='" + cardNumber + "'");
if (rs.next()) {
int pin = rs.getInt("pin");
if (pin == cardPin) {
isPinValid = true;
balance = rs.getDouble("balance");
}
}
rs.close();
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println(e);
}
}
public void checkBalance() {
if (isCardInserted && isPinValid) {
System.out.println("Your balance is: " + balance);
} else {
System.out.println("Please insert your card and enter your PIN.");
}
}
public void withdraw(double amount) {
if (isCardInserted && isPinValid) {
if (amount <= balance) {
balance -= amount;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/atm", "root", "password");
Statement stmt = connection.createStatement();
stmt.executeUpdate("UPDATE accounts SET balance=" + balance + " WHERE card_number='" + cardNumber + "'");
stmt.close();
connection.close();
} catch (Exception e) {
System.out.println(e);
}
System.out.println("You have withdrawn " + amount + ". Your new balance is " + balance + ".");
} else {
System.out.println("Insufficient funds. Your balance is " + balance + ".");
}
} else {
System.out.println("Please insert your card and enter your PIN.");
}
}
}
```
在ATM类中,我们定义了以下方法:
- insertCard:插入银行卡,并验证密码;
- ejectCard:退卡;
- validatePin:验证密码是否正确;
- checkBalance:查询余额;
- withdraw:取款。
在validatePin方法中,我们通过JDBC连接到MySQL数据库,根据卡号从accounts表中查询密码和余额。如果密码正确,将isPinValid设置为true,并将余额设置为balance。
在withdraw方法中,我们首先检查卡是否插入并且密码是否正确。如果是,则检查余额是否足够取款。如果足够,则将余额减去取款金额,并将新的余额更新到数据库中。
下面是一个简单的测试程序,它创建一个ATM对象并模拟了一些操作:
```
import java.util.Scanner;
public class TestATM {
public static void main(String[] args) {
ATM atm = new ATM();
Scanner scanner = new Scanner(System.in);
System.out.println("Welcome to the ATM!");
System.out.println("Please insert your card.");
System.out.print("Enter card number: ");
String cardNumber = scanner.nextLine();
System.out.print("Enter PIN: ");
int cardPin = scanner.nextInt();
atm.insertCard(cardNumber, cardPin);
while (true) {
System.out.println("What would you like to do?");
System.out.println("1. Check balance");
System.out.println("2. Withdraw");
System.out.println("3. Eject card");
int choice = scanner.nextInt();
switch (choice) {
case 1:
atm.checkBalance();
break;
case 2:
System.out.print("Enter amount to withdraw: ");
double amount = scanner.nextDouble();
atm.withdraw(amount);
break;
case 3:
atm.ejectCard();
System.out.println("Thank you for using the ATM!");
System.exit(0);
default:
System.out.println("Invalid choice. Please try again.");
break;
}
}
}
}
```
这个程序模拟了一个ATM机的基本功能,包括插卡、验证密码、查询余额和取款。当用户选择退出时,程序将退卡并结束。