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日

相关文章

  • 浅谈SpringBoot优化技巧

    SpringBoot优化技巧 SpringBoot是目前广泛应用于Java web开发中的一款优秀框架,其简化了开发流程、提高了开发效率、提升了代码的可维护性,在实际开发中应用广泛。但是,一些不良操作或者技术栈的选择不当,会导致性能问题出现。 为了解决这些问题,我们需要对SpringBoot进行优化。在本文中,我将详细介绍一些SpringBoot的优化技巧,…

    Java 2023年5月15日
    00
  • Java中如何使用Response重定向

    在JavaWeb中,可以使用Response对象的sendRedirect()方法进行重定向操作。该方法可以让服务器重定向到别的页面,实现页面跳转的功能。 下面是在Java中如何使用Response重定向的完整攻略: 1. 导入相关的包和类库 在使用重定向功能之前,需要先导入一些需要的包和类库。 import java.io.IOException; imp…

    Java 2023年5月26日
    00
  • Java实现学生管理系统(控制台版本)

    Java实现学生管理系统的控制台版本是一个常见的练手项目,同时也是Java编程语言的入门级别的练习项目,其主要目的是通过实现一个简单的学生信息管理系统来训练Java编程的基本能力。 以下是实现Java学生管理系统的大致步骤: 1. 设计学生类 学生类是整个学生信息管理系统的核心,需要包含学生的基本信息,例如姓名、学号、性别、年龄等。 示例代码: public…

    Java 2023年5月19日
    00
  • java 服务器接口快速开发之servlet详细教程

    下面是“java 服务器接口快速开发之servlet详细教程”的完整攻略: 1. 什么是 Servlet Servlet 是一个在 Web 服务器上运行的 Java 类,主要用于接收和响应来自 Web 客户端的请求。根据 Servlet 规范,我们需要继承 HttpServlet 类来创建一个 Servlet,并在 web.xml 文件中进行配置。 2. s…

    Java 2023年5月19日
    00
  • Java面向对象程序设计:类的定义,静态变量,成员变量,构造函数,封装与私有,this概念与用法详解

    Java面向对象程序设计攻略 类的定义 Java中类是一个基本的概念,它是一组相关属性和方法的集合;是一个模板,用于创建对象。 类的定义格式如下: public class ClassName { // 成员变量(属性) // 构造函数 // 成员方法 } 其中,类名以大写字母开头,每个单词的首字母也应该大写。 成员变量 成员变量是类的一个重要组成部分,它和…

    Java 2023年5月26日
    00
  • 什么是JVM调优?

    JVM调优指的是对Java虚拟机(JVM)进行优化,以提高Java应用程序的性能和稳定性。JVM调优需要仔细研究应用程序的运行状况,分析GC日志和线程转储,调整JVM的内存配置和垃圾回收参数等来提高应用程序的性能。 下面,我们来详细介绍JVM调优的使用攻略: 步骤一:分析GC日志 首先,我们需要通过分析GC日志找出应用程序中发生GC的原因及频率。我们可以使用…

    Java 2023年5月10日
    00
  • Java 判断实体对象及所有属性是否为空的操作

    Java 判断实体对象及所有属性是否为空的操作是日常开发中经常遇到的问题之一,可以用来对数据进行合法性校验。下面将详细介绍如何实现该操作的完整攻略。 判断实体对象是否为空 判断实体对象是否为空可以通过对实体对象本身进行判断的方法实现。我们可以使用 Java 中的 == 或 null 进行判断。 示例: public boolean isObjectNull(…

    Java 2023年5月26日
    00
  • java后台防止表单重复提交方法详解

    针对Java后台防止表单重复提交的方法,我会提供以下完整攻略。 1. 问题定义 在Web应用中,提交表单是非常常见的操作。不过,我们可能会遇到一个叫“表单重复提交”的问题。其核心原因是当用户对某个表单数据进行了提交操作之后,客户端会向服务端发出请求,创建一个新的请求,这个新的请求和之前的请求有相同的数据。这个问题带来的结果可能是用户会在数据库中创建重复记录,…

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