Java实现基础银行ATM系统
作者:哇咔蹦 发布时间:2021-06-02 23:56:40
标签:java,银行,ATM
本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下
一、前言
银行ATM系列简单操作
二、使用步骤
1.创建用户信息类Account.java
代码如下(示例):
package ATM;
public class Account {
private String id;
private String name;
private double balance;
private double norm;
private String password;
public Account() {
}
public Account(String id, String name, String password,double balance, double norm) {
this.id = id;
this.name = name;
this.password=password;
this.balance = balance;
this.norm = norm;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
if(balance<0){
this.balance=0;
}
this.balance = balance;
}
public double getNorm() {
return norm;
}
public void setNorm(double norm) {
if(norm<=0||norm>50000){
this.norm=50000;
}
this.norm = norm;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
2.编写用户界面和操作功能(代码中含有注释)
ATMSystem.java代码如下(示例):
package ATM;
import java.util.*;
public class ATMSystem {
public static void main(String[] args) {
//1.准备系统需要的容器对象,用于存储账户对象
ArrayList<Account> account=new ArrayList<>(100);
//提前准备了,甄嬛用户信息,可删 ——自行注册
account.add(new Account("11111111","甄嬛","111",0.0, 30000));
//2.准备系统首页,登录和开户
//调用shouMain方法
shouMain(account);
}
//首页
public static void shouMain(ArrayList<Account> account){
Scanner sc=new Scanner(System.in);
while(true){
System.out.println("=========欢迎您进入赵氏ATM系统=========");
System.out.println("1.登录账户");
System.out.println("2.注册开户");
System.out.println("请输入命令(1、2)选择对应操作:");
String a1=sc.next();
switch(a1){
case "1":
//登录
DL(account,sc);
break;
case "2":
//开户
ZC(account,sc);
break;
default:
System.out.println("错误:命令输入不规范!");
}}
}
//开户功能的实现
public static void ZC(ArrayList<Account> account,Scanner sc){
System.out.println("=========用户开户功能=========");
System.out.println("请输入姓名:");
String name=sc.next();
String password="";
while(true){
System.out.println("请设置密码:");
password=sc.next();
System.out.println("请再输入一次密码:");
String againPassword=sc.next();
if(password.equals(againPassword)){
break;
}else{
System.out.println("两次密码不一致,请重新设置密码!");
}
}
System.out.println("请输入取现限额:");
Double norm=sc.nextDouble();
if(norm<=0||norm>50000){
norm=50000.0;
System.out.println("您的取现额度不规范,默认为50000元");
}
String id=ID(account);
Account accounts=new Account(id,name,password,0,norm);
account.add(accounts);
System.out.println("您的卡号为:"+id);
}
//随机生成八位数卡号不与已存在的卡号重复
//关键 !!!!!此方法与此方法下方的两个方法效果一样,任选其一
public static String ID(ArrayList<Account> account){
while(true){
Random r=new Random();
String id="";
for(int i=0;i<1;i++){
int q=r.nextInt(2);
id+=q;
}int T=0;
for(int j=0;j<account.size();j++){
Account ac=account.get(j);
if(ac.getId().equals(id)){
T=1;
break;
}
}
if(T==0){
return id;
}
}
}
//随机生成八位数卡号不与已存在的卡号重复
// public static String ID(ArrayList<Account> account){
// while(true){
// Random r=new Random();
// String id="";
// for(int i=0;i<8;i++){
// int q=r.nextInt(10);
// id+=q;
// }
// //判断卡号是否重复了
// Account ac=pdid(account,id);
// if(ac==null){
// //说明当前卡号没有重复
// return id;
// }
// }
// public static Account pdid(ArrayList<Account> account,String id){
// int acount=0;
// //如果有重复的返回重复的对象
// for(int i=0;i<account.size();i++){
// Account ac=account.get(i);
// if(id.equals(ac.getId())){
// return ac;
// }
// }
// return null;
// }
//登录
public static void DL(ArrayList<Account> account,Scanner sc){
//调用检查卡号的JC方法
Account acc=JC(account,sc);
while(true){
//核对输入密码
System.out.println("请输入密码:");
String password=sc.next();
if(acc.getPassword().equals(password)){
//登录后页面//操作页面
System.out.println("恭喜您,"+acc.getName()+"成功进入系统!");
showUser(account,acc,sc);
return;
}else{
System.out.println("密码错误!");
}
}
}
//检查登录卡号是否存在
public static Account JC(ArrayList<Account> account,Scanner sc){
while(true){
System.out.println("请输入卡号:");
String id=sc.next();
for(int i=0;i<account.size();i++){
Account acc=account.get(i);
if(id.equals(acc.getId())){
return acc;
}}
System.out.println("警告:卡号错不存在!");
}
}
//用户操作页面
private static void showUser(ArrayList<Account> account,Account acc,Scanner sc) {
while(true){
System.out.println("====================用户操作页面==========================");
System.out.println("1.查询账户");
System.out.println("2.存款");
System.out.println("3.取款");
System.out.println("4.转账");
System.out.println("5.修改密码");
System.out.println("6.退出");
System.out.println("7.注销账户");
System.out.println("请输入命令(1、2、3、4、5、6、7)选择对应操作:");
String a2=sc.next();
switch(a2){
case "1"://查询
CX(acc);
break;
case "2"://存款
CK(acc,sc);
break;
case "3"://取款
QK(acc,sc);
break;
case "4"://转账
ZZ(account,acc,sc);
break;
case "5"://修改密码
XG(acc,sc);
return;
case "6"://退出
System.out.println("欢迎下次登录!");
return;
case "7"://注销
SC(account,acc);
return;
default:
System.out.println("错误:命令输入不规范!");
}
}
}
//简单的删除该对象
private static void SC(ArrayList<Account> account,Account acc) {
account.remove(acc);
return;
}
//通过Account类中set方法修改对象的密码,可举一反三修改取款限额
private static void XG(Account acc, Scanner sc) {
while(true){
System.out.println("请输入修改后的密码:");
String mima=sc.next();
System.out.println("请再输入一次:");
String mm=sc.next();
if(mima.equals(mm)){
acc.setPassword(mima);
System.out.println("密码修改成功!");
System.out.println("请重新登录~~");
return;
}
}
}
//转账有账户个数限制,转账的卡号是否存在,并核对姓名,限制转账金额
//通过Account类中set方法修改对象的余额
private static void ZZ(ArrayList<Account> account,Account acc, Scanner sc) {
if(account.size()<2){
System.out.println("当前系统,账户不足2个,不支持转账!");
return;
}else{
while(true){
System.out.println("请您输入转账的账户卡号:");
String cards=sc.next();
for(int i=0;i<account.size();i++){
Account car=account.get(i);
if(cards.equals(car.getId())&&!cards.equals(acc.getId())){
QR(car,sc);
while(true){
System.out.println("请您输入转账的金额:");
double money=sc.nextDouble();
if(money>acc.getNorm()){
System.out.println("转账金额不能大于限额:"+acc.getNorm()+"元");
}else if(money>acc.getBalance()){
System.out.println("您的余额为:"+acc.getBalance()+"元,不支持大额度的转账金额!");
}else{
acc.setBalance(acc.getBalance()-money);
car.setBalance(acc.getBalance()+money);
System.out.println("转账成功,现在你的余额为:"+acc.getBalance());
break;
}
}
break;
}else{System.out.println("警告:卡号错,不存在!");}break;
}break;
}
}
}
//确认转账对象的姓名,避免转错对象
private static void QR( Account car, Scanner sc) {
String name="**"+car.getName().substring(2);
while(true){
System.out.println("您确定要为"+name+"转账!");
System.out.println("请您输入对方姓名确认:");
String names=sc.next();
if(names.equals(car.getName())){
System.out.println("请继续转账");
break;
}else{
System.out.println("姓名不符合");
}
}
}
//取款是简单的修改余额,注意取款限额
private static void QK(Account acc, Scanner sc) {
while(true){
System.out.println("输入您要取款的金额:");
double money=sc.nextDouble();
if(money>acc.getNorm()){
System.out.println("取款金额不能大于限额:"+acc.getNorm()+"元");
}else if(money>acc.getBalance()){
System.out.println("您的余额为:"+acc.getBalance()+"元,不支持大额度的取款金额!");
}else{
acc.setBalance(acc.getBalance()-money);
System.out.println("取款成功,现在你的余额为:"+acc.getBalance());
break;
}
}
}
//存款是简单的修改余额
private static void CK(Account acc, Scanner sc) {
System.out.println("输入您要存款的金额:");
double money=sc.nextDouble();
double balance=acc.getBalance();
double bal=money+balance;
acc.setBalance(bal);
System.out.println("存款成功~您现在的金额为"+bal+"元");
}
//查询信息,通过Account类中get方法读出想知道的数据
private static void CX(Account acc) {
System.out.println("您的帐户信息如下:");
System.out.println("卡号:"+acc.getId());
System.out.println("姓名:"+acc.getName());
System.out.println("余额:"+acc.getBalance());
System.out.println("当前取现额度:"+acc.getNorm());
}
}
三、运行效果图:
来源:https://blog.csdn.net/z2446649/article/details/124252733


猜你喜欢
- 目标多级表头、分页、动态数据实现依赖<!-- poi工具类--> &nbs
- 本文实例为大家分享了Android悬浮窗菜单的具体代码,供大家参考,具体内容如下MainActivity.java代码:package si
- 一、APP通过View修改鼠标样式app view上修改鼠标样式比较简单,通过 hover event 获取鼠标坐标并使用如下方法
- 父类空间优先于子类对象产生在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空间,便可以包含
- 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体
- EventBus 可以很方便地进行各组件间的通信,解耦性更强,比广播更好用。EventBus 3 简介EventBus是一种为了优化Andr
- 前言一直用C#开发程序,.NET的功能越来越多,变化也挺大的,从最初的封闭,到现在的开源,功能不断的增加,一直在进步。下面就来给大家详细介绍
- 本文实例讲述了Android布局之LinearLayout自定义高亮背景的方法。分享给大家供大家参考,具体如下:首先创建linearlayo
- maven插件主要是为maven中生命周期中的阶段服务的,maven中只是定义了3套生命周期,以及每套生命周期中有哪些阶段,具体每个阶段中执
- Android里判断是否可以上网,常用的是如下方法:/** * 检测网络是否连接 * * @return */private boolea
- 我就废话不多说了,大家还是直接看代码吧~<resultMap id="ParentMap" type="
- 常见尺寸单位Android开发中的常用尺寸单位有如下几种:dp (dip)pxptinchsp算不知道确切含义,相信对于以上这几种尺寸单位大
- jpa之动态插入与修改(重写save)1.动态插入@Data@Entity@DynamicInsert@Table(name = "
- Android对sdcard扩展卡文件的操作其实就是普通的文件操作,但是仍然有些地方需要注意。比如:1.加入sdcard操作权限;2.确认s
- 本文实例讲述了Java实现二分查找算法。分享给大家供大家参考。具体如下:1. 前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的
- 本文实例为大家分享了SpringMVC实现上传下载文件的具体代码,供大家参考,具体内容如下一、SpringMVC专门提供了CommonsMu
- Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、P
- 日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这
- 本文实例为大家分享了java编写的贪吃蛇源码,供大家参考,具体内容如下程序共包含以下两个文件:文件:ShellWin.javaimport
- 随着目前微信越来越火,所以研究微信的人也就越来越多,这不前一段时间,我们公司就让我做一个微信公众号中问卷调查发红包功能,经过一段时间的研究,