1.银行管理系统的基本用户信息,建议设置成私有
private String aId;//卡号
private String uesrname;//用户名
private double balance;//余额
private int withdrawAmount;//取款额度
private String password;//密码
2.构造基本的javaBean(含有get和set方法以及有参和无参构造方法)
public String getaId() {
return aId;
}
public void setaId(String aId) {
this.aId = aId;
}
public String getUesrname() {
return uesrname;
}
public void setUesrname(String uesrname) {
this.uesrname = uesrname;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public int getWithdrawAmount() {
return withdrawAmount;
}
public void setWithdrawAmount(int withdrawAmount) {
this.withdrawAmount = withdrawAmount;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Account(String aId, String uesrname, double balance, int withdrawAmount, String password) {//有参构造方法
this.aId = aId;
this.uesrname = uesrname;
this.balance = balance;
this.withdrawAmount = withdrawAmount;
this.password = password;
}
public Account() {//无参构造方法
}
3.整个的银行账户类源代码
public class Account {
private String aId;//卡号
private String uesrname;//用户名
private double balance;//余额
private int withdrawAmount;//取款额度
private String password;//密码
public String getaId() {
return aId;
}
public void setaId(String aId) {
this.aId = aId;
}
public String getUesrname() {
return uesrname;
}
public void setUesrname(String uesrname) {
this.uesrname = uesrname;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public int getWithdrawAmount() {
return withdrawAmount;
}
public void setWithdrawAmount(int withdrawAmount) {
this.withdrawAmount = withdrawAmount;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Account(String aId, String uesrname, double balance, int withdrawAmount, String password) {//有参构造方法
this.aId = aId;
this.uesrname = uesrname;
this.balance = balance;
this.withdrawAmount = withdrawAmount;
this.password = password;
}
public Account() {//无参构造方法
}
}
4.系统主界面代码
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
//定义一个集合,存储用户对象
ArrayList<Account> list = new ArrayList<>();
OUT: while(true){
//设置一个死循环,输入一个int类型的数字对应其相应的功能
System.out.println("======欢迎您进入xx银行ATM系统=========");
System.out.println("1.登录账户");
System.out.println("2.注册开户");
System.out.println("3.退出系统");
System.out.print("请输入命令1、2、3选择对应的操作:");
int select = sc.nextInt();
//swithch用来匹配键盘录入的结果,然后进入相应的功能
switch (select){
case 1 :
login(list);
break;
case 2 :
enroll(list);
break;
case 3 :
System.out.println("感谢您的使用");
break OUT;
}
}
}
5.注册界面代码(输入完用户基本的信息,系统随机生成一个卡号)
//注册界面
public static void enroll(ArrayList<Account> list) {
//创建用户对象
Account account = new Account();
Scanner sc = new Scanner(System.in);
System.out.println("=======欢迎您进入XX银行用户办卡界面=======");
System.out.println("请输入您的姓名:");
String name = sc.nextLine();
account.setUesrname(name);
String password1,password2;
//防止用户输入的两次密码不一致
while (true) {
System.out.println("请您输入您的密码:");
password1 = sc.next();
System.out.println("请再次确认您的密码:");
password2 = sc.next();
if (password1.equals(password2)){
break;
}
System.out.println("您输入的两次密码不相同,请重新输入!!");
}
account.setPassword(password2);
System.out.println("请设置当日取现额度:");
int withdrawAmount = sc.nextInt();
account.setWithdrawAmount(withdrawAmount);
String aId = createCardId(list);
System.out.println("XX" + name + "贵宾,您的账户已经开卡成功,您的卡号:" + aId );
account.setaId(aId);
list.add(account);
}
//随机生成卡号的方法
public static String createCardId(ArrayList<Account> list) {
//创建一个StringBuilder对象用来存储随机生成的卡号
StringBuilder sb = new StringBuilder();
Random r = new Random();
//死循环,用来生成系统中不存在的卡号
while (true) {
for (int i = 0; i < 8; i++) {
int num = r.nextInt(10);
sb.append(num);
}
int index = findCardId(list, sb.toString());
if (index == -1){
break;
}else{
System.out.println("该卡号已经存在,正在为您重新选择卡号!");
}
}
//将StringBuilder转化成String
return sb.toString();
}
//寻找系统内的卡号,存在返回其存储在集合内的索引,不存在返回-1
public static int findCardId(ArrayList<Account> list,String aId){
int index = -1;
for (int i = 0; i < list.size(); i++) {
if (aId.equals(list.get(i).getaId())){
index = i ;
break;
}
}
return index;
}
6.登录界面代码
//登录界面
public static void login(ArrayList<Account> list){
Scanner sc = new Scanner(System.in);
int index = 0;
int count = 0 ;
OK2:while(true) {
//设置一个死循环,用来防止卡号输入错误
System.out.println("=======XX银行ATM系统登录界面=======");
System.out.print("请输入您的卡号:");
String aId = sc.nextLine();
index = findCardId(list,aId);
if (index == -1){
System.out.println("不存在该卡号!!");
}else{
OK1: for (;;){
//死循环,输入正确的密码才可以进入下一步的操作功能
System.out.println("请您输入您的密码:");
String password = sc.next();
//匹配密码
if (password.equals(list.get(index).getPassword())){
System.out.println("XX"+ list.get(index).getUesrname() +"贵宾,欢迎您进入系统,您的卡号是:" +aId);
break OK2;
}
System.out.println("您的密码有误,请确认!");
}
}
count++;
//当输入三次不存在的卡号后,自动退回上一级,防止为系统内不存在用户,却一直卡在此界面
if (count == 3){
System.out.println("您已经三次输入不存在的账户,系统将为您退出此界面");
return;
}
}
//用户操作界面,设置了一个死循环,输入相应的序号进入对应的功能
OK:while(true){
System.out.println("=======欢迎您进入XX银行用户操作界面========");
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("您可继续选择功能继续操作:");
int select = sc.nextInt();
//匹配用户输入的功能序号
switch (select){
case 1:
query(list,index);
break ;
case 2:
saveMoney(list,index);
break ;
case 3:
withdrawMoney(list,index);
break ;
case 4:
transferMoney(list,index);
break ;
case 5:
resetPassword(list,index);
//重新设置密码后返回上一级
return;
case 6:
System.out.println("退出成功!!");
break OK;
case 7:
removeAccount(list,index);
//注销用户后返回上一级
return ;
default:
System.out.println("请选择正确的操作功能!!");
break ;
}
}
}
//注册界面
7.查看账户信息界面代码
//查看账户信息界面
public static void query(ArrayList<Account> list,int index){
System.out.println("=======欢迎您进入XX银行用户详情界面=======");
System.out.println("您的账户信息如下:");
System.out.println("卡号:" + list.get(index).getaId());
System.out.println("姓名:" + list.get(index).getUesrname());
System.out.println("余额:" + list.get(index).getBalance());
System.out.println("当次取现额度:" +list.get(index).getWithdrawAmount());
}
8.存款界面代码
//存款界面
public static void saveMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("=========欢迎您进入XX银行用户存款界面=======");
System.out.println("请您输入您的存款金额:");
double money = sc.nextDouble();
list.get(index).setBalance(list.get(index).getBalance() + money);
//存款成功,余额加上存款金额
System.out.println("您已经存款成功!!");
}
9.取款界面代码
//取款界面
public static void withdrawMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
//设置一个死循环,防止程序顺序执行,进入下一步的操作
while(true) {
System.out.println("=========欢迎您进入XX银行用户取款界面========");
//小于100,退出循环
if (list.get(index).getBalance() < 100){
System.out.println("账户余额不足100元,先去存钱吧!");
break;
}
System.out.println("请您输入您的取款金额:");
double money = sc.nextDouble();
//判断用户的取款金额和余额以及取现额度之间的大小
if (money <= list.get(index).getWithdrawAmount()){
//先判断取款金额和取现额度之间的大小
if (money <= list.get(index).getBalance()){
//在判断取款金额和余额之间的大小
list.get(index).setBalance(list.get(index).getBalance() - money);
System.out.println("您已经取款成功!");
break;
}else{
System.out.println("您的账户余额不足!");
}
}else{
System.out.println("您当前取款超过了当次限额");
}
}
}
10.转账界面代码(实现判断系统内存在两个及以上账户,且判断余额不为零并且转账时输入转账用户的姓氏方可转账的功能)
//转账界面
public static void transferMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("======欢迎您进入XX银行用户转账界面======");
//账户小于两个无法转账
if (list.size() < 2){
System.out.println("当前系统,账户不足两个,不能转账,将为您自动退出转账界面!!");
return;
}
//账户没钱,无法转账
if (list.get(index).getBalance() == 0){
System.out.print("你自己都没钱,就别转了");
System.out.print("将为您自动退出转账界面!!");
return;
}
//死循环,防止用户输错卡号
EXIT1: while(true){
System.out.println("请您输入您要转账的账户卡号:");
String aId = sc.nextLine();
int num = findCardId(list,aId);
if (num == -1){
System.out.println("不存在该账户,请重新确认!!");
}else {
//死循环用来确认用户转账对象的姓氏
EXIT2:while (true) {
//隐藏转账用户的姓氏
System.out.println("您当前要为*" + list.get(num).getUesrname().substring(1) + "转账!");
System.out.println("请您输入姓氏确认:");
//获取键盘录入的第一个字符
char a = sc.next().charAt(0);
if (a == list.get(num).getUesrname().charAt(0)) {
//死循环,防止用户的额度不够,无法转账
EXIT3: while(true) {
System.out.println("请输入您要转账的金额:");
double money = sc.nextDouble();
if (money > list.get(index).getBalance()){
System.out.println("您的账户余额不足,请重新输入您要转账的金额!!");
}else{
list.get(index).setBalance(list.get(index).getBalance() - money);
list.get(num).setBalance(list.get(num).getBalance() + money);
System.out.println("转账成功!");
return;
}
}
} else{
System.out.println("您输入的姓氏不正确,为了您的账户安全,请您重新输入姓氏,进行确认!!");
}
}
}
}
}
11.修改密码界面代码
//修改密码界面
public static void resetPassword(ArrayList<Account> list,int index) {
Scanner sc = new Scanner(System.in);
System.out.println("======欢迎您进入XX银行密码修改界面==========");
//死循环防止用户,输错密码,可以根据需求增加输错密码的次数
while (true) {
System.out.println("请您输入当前账户的密码:");
String password = sc.nextLine();
//比较密码是否输入正确
if (password.equals(list.get(index).getPassword())){
//死循环,防止用户两次输入的密码不一致
while(true) {
System.out.println("请您输入新密码:");
password = sc.next();
System.out.println("请您确认您的密码:");
String password2 = sc.next();
if (password.equals(password2)){
list.get(index).setPassword(password2);
System.out.println("密码修改成功,请您重新登录!");
//密码修改成功,结束方法
return;
}
System.out.println("您两次输的密码不一致,请重新输入!");
}
}else{
System.out.println("当前账户密码不正确!");
}
}
}
12.注销账户界面代码
//销户界面
public static void removeAccount(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("=======欢迎您进入XX银行销户界面========");
System.out.println("您要删除当前的账户吗? 请输入:Yes或者No!");
String select = sc.next();
//防止用户输入界面不提供的操作符
while(true) {
//比较输入的操作符,忽略大小写
if (select.equalsIgnoreCase("yes")) {
//销户的方法
list.remove(list.get(index));
System.out.println("您的账户已经销户成功,正在为您退出系统!");
//销户成功结束方法
return;
} else if (select.equalsIgnoreCase("no")) {
System.out.println("系统正为您退出系统!");
return;
} else {
System.out.println("请输入正确的操作符号!");
}
}
}
13.整个银行管理系统源代码
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
//系统主界面
public class BankATMSystem {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
ArrayList<Account> list = new ArrayList<>();
OUT: while(true){
//设置一个死循环,输入一个int类型的数字对应其相应的功能
System.out.println("======欢迎您进入XX银行ATM系统=========");
System.out.println("1.登录账户");
System.out.println("2.注册开户");
System.out.println("3.退出系统");
System.out.print("请输入命令1、2、3选择对应的操作:");
int select = sc.nextInt();
//swithch用来匹配键盘录入的结果,然后进入相应的功能
switch (select){
case 1 :
login(list);
break;
case 2 :
enroll(list);
break;
case 3 :
System.out.println("感谢您的使用");
break OUT;
}
}
}
//登录界面
public static void login(ArrayList<Account> list){
Scanner sc = new Scanner(System.in);
int index = 0;
int count = 0 ;
OK2:while(true) {
//设置一个死循环,用来防止卡号输入错误
System.out.println("=======XX银行ATM系统登录界面=======");
System.out.print("请输入您的卡号:");
String aId = sc.nextLine();
index = findCardId(list,aId);
if (index == -1){
System.out.println("不存在该卡号!!");
}else{
OK1: for (;;){
//死循环,输入正确的密码才可以进入下一步的操作功能
System.out.println("请您输入您的密码:");
String password = sc.next();
//匹配密码
if (password.equals(list.get(index).getPassword())){
System.out.println("XX"+ list.get(index).getUesrname() +"贵宾,欢迎您进入系统,您的卡号是:" +aId);
break OK2;
}
System.out.println("您的密码有误,请确认!");
}
}
count++;
//当输入三次不存在的卡号后,自动退回上一级,防止为系统内不存在用户,却一直卡在此界面
if (count == 3){
System.out.println("您已经三次输入不存在的账户,系统将为您退出此界面");
return;
}
}
//用户操作界面,设置了一个死循环,输入相应的序号进入对应的功能
OK:while(true){
System.out.println("=======欢迎您进入XX银行用户操作界面========");
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("您可继续选择功能继续操作:");
int select = sc.nextInt();
//匹配用户输入的功能序号
switch (select){
case 1:
query(list,index);
break ;
case 2:
saveMoney(list,index);
break ;
case 3:
withdrawMoney(list,index);
break ;
case 4:
transferMoney(list,index);
break ;
case 5:
resetPassword(list,index);
//重新设置密码后返回上一级
return;
case 6:
System.out.println("退出成功!!");
break OK;
case 7:
removeAccount(list,index);
//注销用户后返回上一级
return ;
default:
System.out.println("请选择正确的操作功能!!");
break ;
}
}
}
//注册界面
public static void enroll(ArrayList<Account> list) {
//创建用户对象
Account account = new Account();
Scanner sc = new Scanner(System.in);
System.out.println("=======欢迎您进入XX银行用户办卡界面=======");
System.out.println("请输入您的姓名:");
String name = sc.nextLine();
account.setUesrname(name);
String password1,password2;
//防止用户输入的两次密码不一致
while (true) {
System.out.println("请您输入您的密码:");
password1 = sc.next();
System.out.println("请再次确认您的密码:");
password2 = sc.next();
if (password1.equals(password2)){
break;
}
System.out.println("您输入的两次密码不相同,请重新输入!!");
}
account.setPassword(password2);
System.out.println("请设置当日取现额度:");
int withdrawAmount = sc.nextInt();
account.setWithdrawAmount(withdrawAmount);
String aId = createCardId(list);
System.out.println("XX" + name + "贵宾,您的账户已经开卡成功,您的卡号:" + aId );
account.setaId(aId);
list.add(account);
}
//随机生成卡号的方法
public static String createCardId(ArrayList<Account> list) {
//创建一个StringBuilder对象用来存储随机生成的卡号
StringBuilder sb = new StringBuilder();
Random r = new Random();
//死循环,用来生成系统中不存在的卡号
while (true) {
for (int i = 0; i < 8; i++) {
int num = r.nextInt(10);
sb.append(num);
}
int index = findCardId(list, sb.toString());
if (index == -1){
break;
}else{
System.out.println("该卡号已经存在,正在为您重新选择卡号!");
}
}
//将StringBuilder转化成String
return sb.toString();
}
//寻找系统内的卡号,存在返回其存储在集合内的索引,不存在返回-1
public static int findCardId(ArrayList<Account> list,String aId){
int index = -1;
for (int i = 0; i < list.size(); i++) {
if (aId.equals(list.get(i).getaId())){
index = i ;
break;
}
}
return index;
}
//取款界面
public static void withdrawMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
//设置一个死循环,防止程序顺序执行,进入下一步的操作
while(true) {
System.out.println("=========欢迎您进入XX银行用户取款界面========");
//小于100,退出循环
if (list.get(index).getBalance() < 100){
System.out.println("账户余额不足100元,先去存钱吧!");
break;
}
System.out.println("请您输入您的取款金额:");
double money = sc.nextDouble();
//判断用户的取款金额和余额以及取现额度之间的大小
if (money <= list.get(index).getWithdrawAmount()){
//先判断取款金额和取现额度之间的大小
if (money <= list.get(index).getBalance()){
//在判断取款金额和余额之间的大小
list.get(index).setBalance(list.get(index).getBalance() - money);
System.out.println("您已经取款成功!");
break;
}else{
System.out.println("您的账户余额不足!");
}
}else{
System.out.println("您当前取款超过了当次限额");
}
}
}
//查看账户信息界面
public static void query(ArrayList<Account> list,int index){
System.out.println("=======欢迎您进入XX银行用户详情界面=======");
System.out.println("您的账户信息如下:");
System.out.println("卡号:" + list.get(index).getaId());
System.out.println("姓名:" + list.get(index).getUesrname());
System.out.println("余额:" + list.get(index).getBalance());
System.out.println("当次取现额度:" +list.get(index).getWithdrawAmount());
}
//存款界面
public static void saveMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("=========欢迎您进入XX银行用户存款界面=======");
System.out.println("请您输入您的存款金额:");
double money = sc.nextDouble();
list.get(index).setBalance(list.get(index).getBalance() + money);
//存款成功,余额加上存款金额
System.out.println("您已经存款成功!!");
}
//转账界面
public static void transferMoney(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("======欢迎您进入XX银行用户转账界面======");
//账户小于两个无法转账
if (list.size() < 2){
System.out.println("当前系统,账户不足两个,不能转账,将为您自动退出转账界面!!");
return;
}
//账户没钱,无法转账
if (list.get(index).getBalance() == 0){
System.out.print("你自己都没钱,就别转了");
System.out.print("将为您自动退出转账界面!!");
return;
}
//死循环,防止用户输错卡号
EXIT1: while(true){
System.out.println("请您输入您要转账的账户卡号:");
String aId = sc.nextLine();
int num = findCardId(list,aId);
if (num == -1){
System.out.println("不存在该账户,请重新确认!!");
}else {
//死循环用来确认用户转账对象的姓氏
EXIT2:while (true) {
//隐藏转账用户的姓氏
System.out.println("您当前要为*" + list.get(num).getUesrname().substring(1) + "转账!");
System.out.println("请您输入姓氏确认:");
//获取键盘录入的第一个字符
char a = sc.next().charAt(0);
if (a == list.get(num).getUesrname().charAt(0)) {
//死循环,防止用户的额度不够,无法转账
EXIT3: while(true) {
System.out.println("请输入您要转账的金额:");
double money = sc.nextDouble();
if (money > list.get(index).getBalance()){
System.out.println("您的账户余额不足,请重新输入您要转账的金额!!");
}else{
list.get(index).setBalance(list.get(index).getBalance() - money);
list.get(num).setBalance(list.get(num).getBalance() + money);
System.out.println("转账成功!");
return;
}
}
} else{
System.out.println("您输入的姓氏不正确,为了您的账户安全,请您重新输入姓氏,进行确认!!");
}
}
}
}
}
//修改密码界面
public static void resetPassword(ArrayList<Account> list,int index) {
Scanner sc = new Scanner(System.in);
System.out.println("======欢迎您进入XX银行密码修改界面==========");
//死循环防止用户,输错密码,可以根据需求增加输错密码的次数
while (true) {
System.out.println("请您输入当前账户的密码:");
String password = sc.nextLine();
//比较密码是否输入正确
if (password.equals(list.get(index).getPassword())){
//死循环,防止用户两次输入的密码不一致
while(true) {
System.out.println("请您输入新密码:");
password = sc.next();
System.out.println("请您确认您的密码:");
String password2 = sc.next();
if (password.equals(password2)){
list.get(index).setPassword(password2);
System.out.println("密码修改成功,请您重新登录!");
//密码修改成功,结束方法
return;
}
System.out.println("您两次输的密码不一致,请重新输入!");
}
}else{
System.out.println("当前账户密码不正确!");
}
}
}
//销户界面
public static void removeAccount(ArrayList<Account> list,int index){
Scanner sc = new Scanner(System.in);
System.out.println("=======欢迎您进入XX银行销户界面========");
System.out.println("您要删除当前的账户吗? 请输入:Yes或者No!");
String select = sc.next();
//防止用户输入界面不提供的操作符
while(true) {
//比较输入的操作符,忽略大小写
if (select.equalsIgnoreCase("yes")) {
//销户的方法
list.remove(list.get(index));
System.out.println("您的账户已经销户成功,正在为您退出系统!");
//销户成功结束方法
return;
} else if (select.equalsIgnoreCase("no")) {
System.out.println("系统正为您退出系统!");
return;
} else {
System.out.println("请输入正确的操作符号!");
}
}
}
}
14.运行结果截图
ps:java小白一个,功能写的不完善,轻喷!