Java实现ATM系统超全面步骤解读建议收藏

Java实现ATM系统超全面步骤解读

1. 前言

ATM系统是日常生活中经常使用的自助银行系统,本文将介绍如何使用Java完成ATM系统的开发。该系统主要包括用户登录、查询账户信息、存款、取款、转账等基本功能。

2. 数据库设计

在开发ATM系统之前,需要先进行数据库设计。具体步骤如下:

2.1. 创建数据库

首先需要在MySQL数据库中创建一个名为ATM的数据库。

CREATE DATABASE ATM;

2.2. 创建数据表

ATM数据库中创建一个名为user的数据表。

CREATE TABLE user (
 id INT(11) NOT NULL AUTO_INCREMENT,
 name VARCHAR(255) NOT NULL,
 password VARCHAR(255) NOT NULL,
 balance DOUBLE NOT NULL,
 PRIMARY KEY (id)
);

其中,字段id为自增主键,name为用户名,password为密码,balance为账户余额。

3. Java代码实现

3.1. 连接数据库

使用Java程序连接MySQL数据库需要使用JDBC驱动,需要先将JDBC驱动包添加到工程中。

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ATM", "root", "123456");

其中,com.mysql.jdbc.Driver是MySQL的JDBC驱动类,localhost:3306为MySQL服务器地址和端口号,ATM为数据库名,root为数据库用户名,123456为数据库密码。

3.2. 用户登录

用户登录需要用户输入用户名和密码,并将其与数据库中的用户信息进行比对。

Scanner input = new Scanner(System.in);
System.out.print("请输入用户名:");
String name = input.nextLine();
System.out.print("请输入密码:");
String password = input.nextLine();

PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE name=? AND password=?");
ps.setString(1, name);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();

if(rs.next()) {
    System.out.println("登录成功!");
} else {
    System.out.println("用户名或密码错误!");
}

3.3. 查询账户信息

查询账户信息需要根据用户输入的用户名,在数据库中查询该用户的相关信息。

System.out.print("请输入用户名:");
String name = input.nextLine();

PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE name=?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

if(rs.next()) {
    System.out.println("账户余额:" + rs.getDouble("balance"));
} else {
    System.out.println("用户名不存在!");
}

3.4. 存款

存款需要用户输入存款金额,并将其加入到用户在数据库中的账户余额中。

System.out.print("请输入存款金额:");
double amount = input.nextDouble();

PreparedStatement ps = conn.prepareStatement("UPDATE user SET balance=balance+? WHERE name=?");
ps.setDouble(1, amount);
ps.setString(2, name);
int result = ps.executeUpdate();

if(result > 0) {
    System.out.println("存款成功!");
} else {
    System.out.println("存款失败!");
}

3.5. 取款

取款需要用户输入取款金额,并将其从用户在数据库中的账户余额中扣除。

System.out.print("请输入取款金额:");
double amount = input.nextDouble();

PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE name=?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

if(rs.next()) {
    double balance = rs.getDouble("balance");
    if(balance >= amount) {
        ps = conn.prepareStatement("UPDATE user SET balance=balance-? WHERE name=?");
        ps.setDouble(1, amount);
        ps.setString(2, name);
        int result = ps.executeUpdate();
        if(result > 0) {
            System.out.println("取款成功!");
        } else {
            System.out.println("取款失败!");
        }
    } else {
        System.out.println("余额不足!");
    }
} else {
    System.out.println("用户名不存在!");
}

3.6. 转账

转账需要用户输入转账金额和目标账户名,并将转账金额从用户账户余额中扣除,并将转账金额加入目标账户的余额中。

System.out.print("请输入转账金额:");
double amount = input.nextDouble();
input.nextLine();
System.out.print("请输入目标账户名:");
String targetName = input.nextLine();

PreparedStatement ps = conn.prepareStatement("SELECT * FROM user WHERE name=?");
ps.setString(1, name);
ResultSet rs = ps.executeQuery();

if(rs.next()) {
    double balance = rs.getDouble("balance");
    if(balance >= amount) {
        ps = conn.prepareStatement("SELECT * FROM user WHERE name=?");
        ps.setString(1, targetName);
        rs = ps.executeQuery();
        if(rs.next()) {
            ps = conn.prepareStatement("UPDATE user SET balance=balance-? WHERE name=?");
            ps.setDouble(1, amount);
            ps.setString(2, name);
            ps.executeUpdate();

            ps = conn.prepareStatement("UPDATE user SET balance=balance+? WHERE name=?");
            ps.setDouble(1, amount);
            ps.setString(2, targetName);
            int result = ps.executeUpdate();
            if(result > 0) {
                System.out.println("转账成功!");
            } else {
                System.out.println("转账失败!");
            }
        } else {
            System.out.println("目标账户不存在!");
        }
    } else {
        System.out.println("余额不足!");
    }
} else {
    System.out.println("用户名不存在!");
}

4. 总结

本文详细讲解了Java实现ATM系统的步骤,包括数据库设计以及Java代码实现。通过本文的学习,读者可以掌握如何使用Java开发一个简单的ATM系统。

5. 示例说明

5.1. 用户登录

请输入用户名:admin
请输入密码:123456
登录成功!

5.2. 查询账户信息

请输入用户名:admin
账户余额:1000.0

5.3. 存款

请输入用户名:admin
请输入存款金额:500
存款成功!

5.4. 取款

请输入用户名:admin
请输入取款金额:800
余额不足!

5.5. 转账

请输入用户名:admin
请输入转账金额:500
请输入目标账户名:test
转账成功!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现ATM系统超全面步骤解读建议收藏 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Abp.NHibernate连接PostgreSQl数据库的方法

    Abp框架是一个基于ASP.NET Boilerplate的ASP.NET Core应用程序开发框架,支持多种ORM框架。NHibernate是其中一个优秀的ORM框架,可以与PostgreSQL数据库进行连接,下面是连接的方法: 步骤一:安装相关包 在项目的Nuget包控制台中,安装以下三个包: Install-Package Abp.NHibernate…

    Java 2023年5月19日
    00
  • 五种JAVA GUI布局管理的方式

    下面我们来详细讲解“五种JAVA GUI布局管理的方式”。 概述 在Java图形用户界面(GUI)编程中,布局管理是重要的一部分。GUI布局管理的主要作用是定义GUI组件相对于容器的位置和大小。Java提供了五种布局管理方式,分别是FlowLayout、BorderLayout、GridLayout、GridBagLayout和SpringLayout。本篇…

    Java 2023年5月24日
    00
  • Java遍历起止日期中间的所有日期操作

    下面是Java遍历起止日期中间的所有日期的完整攻略: 前置条件 在使用Java进行日期遍历之前,首先需要使用Java提供的LocalDate类来表示起止日期。 LocalDate startDate = LocalDate.of(2021, 5, 1); LocalDate endDate = LocalDate.of(2021, 5, 10); 上面的代码…

    Java 2023年5月20日
    00
  • java 读写 ini 配置文件的示例代码

    要读写ini配置文件,我们可以使用Java的Properties类。Properties类提供了一种简单的机制来将“key-value”对存储到配置文件中,并从中检索。 以下是读取配置文件的示例代码: import java.io.FileInputStream; import java.util.Properties; public class ReadI…

    Java 2023年5月19日
    00
  • Tomcat6.0与windows 2003 server 的IIS服务器集成

    Tomcat6.0和windows 2003 server的IIS服务器集成需要以下步骤: 1. 安装IIS和Tomcat 首先,需要在Windows 2003 Server上安装IIS Web服务器。接着需要安装Tomcat6.0版本,安装时需要注意把Tomcat安装在一个容易找到的目录下。 2. 配置IIS 在IIS上创建一个Web站点,为了和Tomca…

    Java 2023年5月19日
    00
  • springboot多环境(dev、test、prod)配置详解

    在Spring Boot应用程序中,我们通常需要在不同的环境中配置不同的属性,例如数据库连接、日志级别等。以下是实现Spring Boot多环境配置的完整攻略: 创建配置文件 在Spring Boot应用程序中,我们可以使用不同的配置文件来配置不同的环境。以下是一个示例: application-dev.properties:开发环境配置文件。 applic…

    Java 2023年5月15日
    00
  • Java序列化JSON丢失精度问题的解决方法(修复Long类型太长)

    Java序列化JSON丢失精度问题的解决方法(修复Long类型太长) 问题描述 在使用Java自带的GSON等JSON序列化工具时,会出现Long类型数据过长而丢失精度的问题,导致数据不准确或错误。例如,当Long类型数字过大时,就无法正确表示,例如Long.MAX_VALUE加1即可出现此问题。这种情况会导致传输的数据与实际值出现差异,影响数据的准确性。 …

    Java 2023年5月26日
    00
  • Java数组声明、创建、初始化基础

    下面我们来详细讲解一下Java数组声明、创建、初始化基础的攻略。 什么是Java数组 数组是一种数据结构,可以用来将一系列相同类型的数据存储在同一变量名下。在Java中,数组是一个固定大小的连续内存块,每个元素可以是任何Java数据类型,包括对象和基本类型。 Java数组的声明 Java数组的声明需要明确指定数组的类型、数组名和数组大小。其基本语法如下: t…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部