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日

相关文章

  • 一文给你通俗易懂的讲解Java异常

    接下来我会为您详细讲解如何写出一篇讲解Java异常的通俗易懂的文章。 一、标题的制定 首先,在制定文章标题时,要考虑读者的需求和写作的目的,最好能够让读者很快地了解这篇文章的主旨。因此,我们可以采用“一文给你通俗易懂的讲解Java异常”的形式,直接点明我们的主题,并与读者产生共鸣。 二、在引言中概括Java异常概念 接下来在引言中需要对Java异常相关概念进…

    Java 2023年5月26日
    00
  • springcloud config配置读取优先级过程详解

    Spring Cloud Config 配置读取优先级过程详解 Spring Cloud Config 是 Spring Cloud 生态系统中非常重要的一个子项目。其提供了一种分布式系统中的外部化配置解决方案,让应用程序的配置信息统一存储在一个中心化的配置中心,并且实现了配置的版本管理和追踪,为更好地进行微服务治理提供了基础支持。 在使用 Spring C…

    Java 2023年5月19日
    00
  • Java spring 通过注解方式创建对象的示例详解

    Java spring 通过注解方式创建对象的示例详解 前言 在Java Spring框架中创建对象可以使用XML配置或者注解方式。其中注解方式比较方便快捷,并且代码可读性更好。在本文中,将详细讲解如何使用Java Spring框架通过注解方式创建对象。 环境 JDK版本:1.8+ Spring版本:5.0+ 使用注解方式创建对象 @Component注解 …

    Java 2023年5月26日
    00
  • Erlang初学:Erlang的一些特点和个人理解总结

    Erlang初学:Erlang的一些特点和个人理解总结 概述 Erlang是一门函数式编程语言,适合用于分布式、并发和容错应用的开发。它最初由瑞典电信设备公司Ericsson开发,主要是为了在电话交换机系统中进行并发编程。 Erlang的设计目标是建立一种可容错、可扩展的系统,可以在大规模的、分布式的环境中运行。它的并发机制、错误处理和代码的热升级能力都是它…

    Java 2023年5月26日
    00
  • Spring Boot在开发过程中常用IDEA插件

    Spring Boot在开发过程中常用IDEA插件 在使用Spring Boot进行开发时,我们可以使用一些常用的IDEA插件来提高开发效率和代码质量。本文将详细讲解Spring Boot在开发过程中常用IDEA插件的完整攻略,并提供两个示例。 1. Lombok插件 Lombok是一个Java库,可以通过注解来简化Java代码。在使用Spring Boot…

    Java 2023年5月15日
    00
  • Java 8新时间日期库java.time的使用示例

    Java 8新时间日期库java.time的使用示例 在Java 8中,引入了全新的时间日期库java.time,它遵循ISO-8601标准,提供了一种方便易用、线程安全、不可变的时间日期处理方式。本文将详细讲解java.time的使用示例,包括日期的创建、日期格式化、时区处理等。 日期的创建 在java.time中,有多种方法可以创建日期,具体如下: 创建…

    Java 2023年5月20日
    00
  • Spring超详细讲解事务

    Spring超详细讲解事务 什么是事务 事务是指一个操作序列,该操作序列中的所有操作都必须全部执行成功或全部执行失败。事务支持保证数据库的一致性、完整性和隔离性。 Spring事务的优点 在使用Spring进行数据库操作时,使用Spring事务能够带来以下优点: Spring事务对所有的数据库访问代码提供了一致的编程模型 Spring事务可以将数据库事务的边…

    Java 2023年5月19日
    00
  • XSS测试语句大全

    首先,需要了解XSS攻击的定义和常见形式,XSS攻击是一种Web应用程序漏洞攻击,攻击者将恶意的脚本代码注入到Web页面中。常见的XSS攻击形式包括反射型XSS、存储型XSS和DOM型XSS等。 接着,根据不同的XSS攻击类型选择合适的测试语句。以下是一些常用的测试语句: 基本测试语句: <script>alert(‘XSS’)</scri…

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