文章目录
****转载请注明出处哦~ ~ ~****
前言
前言:
自动取款机又称ATM(Automated Teller Machine的缩写),意思是自动柜员机,因大部分用于取款,又称自动取款机。它是一种高度精密的机电一体化装置,利用磁性代码卡或智能卡实现金融交易的自助服务,代替银行柜面人员的工作。可提取现金、查询存款余额、进行账户之间资金划拨、余额查询等工作;此项目是实现了模拟ATM系统。
一、项目需求是什么?
模拟实现银行ATM机系统,可以实现开户,登录账户,查询账户,存款,取款,转账,修改账户密码,注销账户。
二、技术选型
技术点分析:
面向对象分析,使用集合容器,程序流程控制,使用常见API。
1. 面型对象分析:
每个用户对象要对应一个账户对象:所以需要设计账户类Account。
2. 使用集合容器:
系统需要提供一个容器用于存储这些账户对象的信息,我们选ArrayList集合。
3. 程序流程控制:
需要结合分支、循环、跳转等相关操作控制程序的业务逻辑。
4. 使用常见API:
内容比较,分析,数据处理等需要用到String等常用API。
三、实现步骤
1.账户类、首页设计
分析:
① 每个用户一个账户对象,需要设计账户类,账户类至少包含(卡号、用户名、余额、取现额度、密码)。
② 需要定义一个ArrayList的集合用于存储账户对象。
③ 需要展示欢迎页包含2个功能:注册开户、登录账户。
2.用户开户功能实现
分析:
① 开户功能应该独立定义成方法,并传入当前集合对象给该方法。
private static void register(ArrayList accounts, Scanner sc) {
② 需要提示用户输入个人信息,开户的卡号是系统自动生成的8位数。
public static String createCardId()
③ 注意:自动生成的卡号不能与其他用户的卡号重复。
④ 最终把用户开户的信息封装成Account对象,存入到集合中。
3.用户登录功能实现
分析:
① 需要根据卡号去集合中查询对应的账户对象。
② 如果找到了账户对象,说明卡号存在,继续输入密码。
③ 如果密码也正确,则登录成功
4.用户操作页设计、查询账户、退出账户功能
分析
① 用户登录成功后,需要进入用户操作页。
② 查询就是直接展示当前登录成功的账户对象的信息。
③ 退出账户是需要回到首页的。
5.用户存款、取款功能
分析
① 存款和取款都是拿到当前用户的账户对象。
② 通过调用账户对象的set方法修改其余额
6.用户转账功能
分析
① 转账功能要分析对方账户是否存在的问题。
② 还要分析自己的余额是否足够的问题。
7.用户密码修改功能、销户功能
如果账户还有余额,则不可销户
分析
① 修改密码就是把当前对象的密码属性使用set方法进行更新。
② 销户是从集合对象中删除当前对象,并回到首页。
四、代码实现
ATMSystem类(ATM系统入口类):
package atmdemo;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
* ATM系统的入口类
*/
public class ATMSystem {
public static void main(String[] args) {
//1.定义账户类
//2.定义一个集合容器,负责存储全部账户对象,进行相应操作
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//3.展示系统的首页
while (true) {
System.out.println("=======================欢迎使用ATM系统==================");
System.out.println("1.登录账户");
System.out.println("2.注册账户");
System.out.println("请输入您的操作:");
int common = sc.nextInt();
switch (common) {
case 1:
//登录操作
login(accounts, sc);
break;
case 2:
//注册操作
register(accounts, sc);
break;
default:
System.out.println("您的输入操作有误,请重新输入!!!");
}
}
}
/**
* 定义一个方法,实现登录功能
*
* @param accounts
* @param sc
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("==================系统登录操作=================");
//1.判断当时系统是否有账户
if (accounts.size() == 0) {
System.out.println("当前系统无任何账户,请先开户!!!");
return;
}
//2.让用户输入卡号,根据卡号查询用户是否存在
while (true) {
System.out.println("请输入您的卡号:");
String cardId = sc.next();
//判断卡号是否存在:根据卡号去账户集合中查询账户对象
Account acc = judgeCardId(accounts, cardId);
if (acc != null) {
while (true) {
System.out.println("请您输入密码:");
String password = sc.next();
if (acc.getPassword().equals(password)) {
System.out.println(acc.getUsername() + "先生/女生密码正确,登陆成功!!!");
//需要显示登录后的操作页
showUserCommand(sc, acc, accounts);
return;//结束登录后的操作页,回到首页
} else {
System.out.println("密码不正确,请您重新输入!!!");
}
}
} else {
System.out.println("您输入的卡号不存在,请重新输入!!!"