Java 模擬銀行自助終端系統(tǒng)
一. 本系統(tǒng)模擬銀行用戶使用ATM機(jī)開戶、查詢、存款、取款功能,要求使用java語言編程實(shí)現(xiàn)。
說明:
1. 對于數(shù)據(jù)輸入異常,可使用java異常處理機(jī)制進(jìn)行處理。
2. 評分將以功能實(shí)現(xiàn)與代碼規(guī)范性相結(jié)合的方式進(jìn)行考核。
3. 如果對項(xiàng)目需求有疑問,可以隨時以QQ留言方式聯(lián)系我進(jìn)行咨詢。
4. 國慶放假期間,每天都有老師在公司值班,10月4日是我在公司值班,10月7日正常上班,歡迎大家到公司來做項(xiàng)目。
二. 項(xiàng)目功能要求:
項(xiàng)目開始運(yùn)行顯示主菜單為:
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
此時,用戶可以通過鍵盤輸入選擇自己要實(shí)現(xiàn)的功能,如果輸入不是0,1,2,3,4,則系統(tǒng)提示:
你選擇的菜單不存在!
請重新選擇:
要求用戶重新輸入數(shù)據(jù)進(jìn)行菜單選擇!
當(dāng)用戶輸入0時,則進(jìn)入查詢功能:系統(tǒng)提示:
****************************
你選擇的為開戶功能
請輸入你的姓名:
此時用戶需要輸入姓名,輸入完畢后系統(tǒng)提示:
請輸入你的身份證號:
此時用戶需要輸入18位身份證號,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入,直到驗(yàn)證通過后系統(tǒng)提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入,驗(yàn)證通過后系統(tǒng)提示:
開戶成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當(dāng)用戶輸入1時,則進(jìn)入查詢功能:系統(tǒng)提示:
****************************
你選擇的為查詢功能
請輸入你要查詢的卡號:
此時用戶需要輸入查詢的卡號,系統(tǒng)對卡號進(jìn)行檢測,如果卡號不存在,則提示: 你輸入的卡號不存在,請重新輸入:
請輸入你要查詢的卡號:
要求重新輸入卡號,當(dāng)用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號信息并進(jìn)入主菜單:
你查詢的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
當(dāng)用戶輸入2時,則進(jìn)入存款功能:系統(tǒng)提示:
****************************
你選擇的為存款功能
請輸入你要存款的卡號:
此時用戶需要輸入存款的卡號,系統(tǒng)對卡號進(jìn)行檢測,如果卡號不存在,則提示:
你輸入的卡號不存在,請重新輸入:
請輸入你要存款的卡號:
要求重新輸入卡號,當(dāng)用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號信息并進(jìn)入主菜單:
你要存款的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要存入的金額:
此時要求用戶輸入存款金額,系統(tǒng)對金額進(jìn)行判斷,如果輸入的數(shù)據(jù)小于等于0,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示存款成功,并回到主菜單:
存款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將存入用戶賬號,如果用戶再次進(jìn)行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。 (說明:本系統(tǒng)使用文件進(jìn)行數(shù)據(jù)存儲,因此如果用戶重新啟動程序,數(shù)據(jù)將從文件中讀取重新初始化到內(nèi)存!此功能選做,可參考對象的序列化和反序列化或JSON)
當(dāng)用戶輸入3時,則進(jìn)入取款功能:系統(tǒng)提示:
****************************
你選擇的為取款功能 請輸入你要取款的卡號:
此時用戶需要輸入取款的卡號,系統(tǒng)對卡號進(jìn)行檢測,如果卡號不存在,則提示:
你輸入的卡號不存在,請重新輸入:
請輸入你要取款的卡號:
要求重新輸入卡號,當(dāng)用戶輸入正確卡號后,則提示:
請輸入你的密碼:
此時用戶需要輸入6位純數(shù)字密碼,輸入完畢如果驗(yàn)證未通過要求繼續(xù)輸入(最多3次),驗(yàn)證通過后系統(tǒng)將顯示當(dāng)前用戶賬號信息并進(jìn)入主菜單:
你要取款的賬號信息為:
******************************
姓名 身份證號 卡號 金額
張三豐 420106198410112062 111111 12800.0
請輸入你要取款的金額:
此時要求用戶輸入取款金額,系統(tǒng)對金額進(jìn)行判斷,如果輸入的數(shù)據(jù)小于0或大于賬號總金額,則提示:
你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
如果用戶輸入數(shù)據(jù)合法,系統(tǒng)提示取款成功,并回到主菜單:
取款成功,謝謝使用!
銀行自助終端系統(tǒng)
****************************
0.------開戶
1.------查詢
2.------存款
3.------取款
4.------退出
****************************
請選擇你要執(zhí)行的功能:
數(shù)據(jù)將從用戶賬號扣出,如果用戶再次進(jìn)行數(shù)據(jù)查詢,則能看到已經(jīng)改變后的賬戶金額。
當(dāng)用戶輸入4時,系統(tǒng)將退出。
三.設(shè)計(jì)要求
(一)包一:com.bank.unionpay 表示銀聯(lián),在該包下添加:
表示銀行卡的接口,包含查詢余額,存款,取款等抽象方法。
表示ATM機(jī)的抽象類,使用銀行卡類型的對象作為屬性或參數(shù),實(shí)現(xiàn)查詢余額,存款,取款等實(shí)例方法,添加開戶為抽象方法。
表示四大銀行的枚舉類型:包含ABC,ICBC,CCB,BOC;分別代表農(nóng)行,工行,建行,中行。
(二)包二:com.bank.abc 表示農(nóng)行,在該包下添加:
以單例模式定義銀行類,包含屬性:銀行類型(枚舉類型,常量=ABC),銀行名稱(String),銀行卡列表(集合)等。
定義銀行卡的實(shí)現(xiàn)類-儲蓄卡,包含屬性:銀行類型(枚舉類型=ABC),姓名,身份證號,卡號,密碼,余額;實(shí)現(xiàn)查詢余額,存款,取款等方法。
定義ATM機(jī)的子類,包含屬性:銀行類型(枚舉類型,常量=ABC),實(shí)現(xiàn)開戶方法,其中:只能開辦儲蓄卡,卡號為6位隨機(jī)數(shù)字,自動產(chǎn)生。新開戶的銀行卡添加到銀行的銀行卡列表中。
定義儲蓄卡的子類-信用卡,增加屬性:透支額度,重寫取款方法,控制最大取款金額不能大于余額+透支額度的和。
(三)包三:com.bank.test 表示測試,在該包下添加帶main方法的測試類,實(shí)現(xiàn)項(xiàng)目要求的模擬ATM機(jī)的功能。
以下功能選做:
以單態(tài)模式實(shí)現(xiàn)工商銀行,在測試類中默認(rèn)添加多張銀行卡,在農(nóng)行的ATM機(jī)上實(shí)現(xiàn)跨行查詢和存取款功能。
包一:com.bank.unionpay
1,銀行卡抽象類
package com.bank.unionpay;
public interface Yinhangka {
public void cun();
public void qu();
public void getyu();
}
2,枚舉銀行類型
package com.bank.unionpay;
public enum Yinhang {
ABC("農(nóng)行"),ICBC("工商"),CCB("建行"),BOC("中行");
private final String yinhang;
//私有化構(gòu)造方法
private Yinhang(String yinhang)
{
this.yinhang=yinhang;
}
public String getname()
{
return this.yinhang;
}
}
3,ATM類
package com.bank.unionpay;
import com.bank.abc.Yinhanglei;
public abstract class ATM {
private Yinhanglei yhl; //銀行類屬性
private double yue; //變量yue
public double getYue() {
return yue;
}
public void setYue(double yue) {
this.yue = yue;
}
//查詢方法
public void yue()
{
System.out.println("卡上余額為:" +this.yue);
}
//存款方法
public void cun(double cun)
{
if(cun<0)
{
System.out.println("輸入有誤");
}
else
{
this.yue+=cun;
System.out.println("卡上余額為:"+this.yue);
}
}
//取款方法
public void qu(double qu)
{
if(qu>this.yue)
{
System.out.println("余額不足");
}
else
{
this.yue-=qu;
System.out.println("卡上余額為:"+this.yue);
}
}
//定義開戶抽象方法
public abstract void kaihu();
}
4,主界面類
package com.bank.unionpay;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Zujiemian {
public void zhujiemian()
{
System.out.println("銀行自助終端系統(tǒng) ");
System.out.println();
System.out.println("****************************");
System.out.println();
List<String> li=new ArrayList<String>();
li.add("開戶");
li.add("查詢");
li.add("存款");
li.add("取款");
li.add("退出");
for(int i=0;i<5;i++)
{
System.out.println(i+"-----"+li.get(i));
}
System.out.println();
System.out.println("****************************");
System.out.println();
System.out.println("請選擇你要執(zhí)行的功能: ");
}
}
包二:com.bank.abc
1,ATM2開戶類
package com.bank.abc;
import java.util.Random;
import java.util.Scanner;
import com.bank.unionpay.ATM;
import com.bank.unionpay.Yinhang;
public class ATM2 extends ATM{
private Yinhang yhl=Yinhang.ABC;
@Override
public void kaihu() {
// 開戶方法
//輸入姓名
Cuxuka cxk=new Cuxuka();
try{
Scanner sc1=new Scanner(System.in);
System.out.println("請輸入你的姓名:");
String st=sc1.nextLine();
cxk.setName(st);
//輸入身份證
System.out.println("請輸入你的身份證號:");
for(int ig=0;ig>=0;ig++)
{
Scanner sc2=new Scanner(System.in);
String str=sc2.nextLine();
String st1="\\d{15}|\\d{17}[\\dxX]";
if(str.matches(st1))
{
cxk.setShenfen(str);
break;
}
else
{
System.out.println("輸入的身份證號不是18位身份號");
}
}
//設(shè)置賬戶密碼
System.out.println("請輸入你的密碼:");
for(int ig=0;ig>=0;ig++)
{
Scanner sc3=new Scanner(System.in);
String pass=sc3.nextLine();
String mm="\\d{6}";
if(pass.matches(mm))
{
cxk.setPassword(pass);
break;
}
else
{
System.out.println("請輸入正確的6位數(shù)密碼");
}
}
//生成6位數(shù)儲蓄卡號
Random a=new Random();
int[] ch=new int[6];
StringBuilder str=new StringBuilder();
String s;
for(int i=0;i<6;i++)
{
ch[i]=a.nextInt(9);
}
for(Integer c:ch)
{
str.append(c);
}
s=str.toString();
cxk.setCard(s);
//將生成的數(shù)據(jù)導(dǎo)入銀行卡list列表中
Yinhanglei.getYinhangLei().list.add(cxk.getCard());
//將生成的數(shù)據(jù)導(dǎo)入銀行卡Map列表中
Yinhanglei.getYinhangLei().map.put(cxk.getCard(), cxk);
System.out.println("您的新卡號為:"+cxk.getCard());
System.out.println("開戶成功,謝謝使用");
}catch (Exception e) {
System.out.println("輸入有誤");
}
}
}
2,儲蓄卡類
package com.bank.abc;
import java.util.Scanner;
import com.bank.unionpay.Yinhang;
import com.bank.unionpay.Yinhangka;
public class Cuxuka implements Yinhangka {
//儲蓄卡屬性
private Yinhang yinhang;
private String name;
private String shenfen;
private String card;
private String password;
private double balance;
//生成toString ();
@Override
public String toString() {
return "姓名=" + name + "\t\n"+ "身份證=" + shenfen + "\t\n"+"卡號=" +card + "\t\n"+" 賬戶金額=" + balance
;
}
//對屬性進(jìn)行g(shù)et set設(shè)置
public Yinhang getYinhang() {
return yinhang=Yinhang.ABC;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getShenfen() {
return shenfen;
}
public void setShenfen(String shenfen) {
this.shenfen = shenfen;
}
public String getCard() {
return card;
}
public void setCard(String card) {
this.card = card;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
//存款方法
@Override
public void cun() {
Cuxuka cu1=new Cuxuka();
cu1.chaxun();
Scanner sc2=new Scanner(System.in);
System.out.println("請輸入你要存入的金額:");
double cun=sc2.nextDouble();
// 實(shí)現(xiàn)存款方法
if(cun<0)
{
System.out.println("你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用");
}
else
{
this.balance+=cun;
Yinhanglei.getYinhangLei().map.get(cu1.card).setBalance(balance);
System.out.println("存款成功,剩余金額"+Yinhanglei.getYinhangLei().map.get(cu1.card).getBalance());
}
}
//查詢方法
public void chaxun(){
while(true){
try{
Scanner sc=new Scanner(System.in);
System.out.println("請輸入你要查詢的卡號:");
String s=sc.nextLine();
//遍歷Yinhanglei 的Map集合
for(String temp:Yinhanglei.getYinhangLei().map.keySet())
{
if(s.equals(temp))
{
this.card=s;
}
}
if(s.equals(card)) //驗(yàn)證卡號
{
int i=0;
System.out.println("請輸入你的密碼:");
while(true){
Scanner sc1=new Scanner(System.in);
String st1=sc1.nextLine();
if(st1.equals(Yinhanglei.getYinhangLei().map.get(s).getPassword()))
{
System.out.println("你查詢的賬號信息為:");
System.out.println();
System.out.println("******************************");
System.out.println();
System.out.println("姓名 身份證號 卡號 金額");
System.out.println();
System.out.println(Yinhanglei.getYinhangLei().map.get(s));
break;
}
else
{
i++;
if(i==3)
{
System.out.println("密碼輸入錯誤超過3次");
break;
}
else
{
System.out.println("密碼輸入有誤");
}
}
}
}
else
{
System.out.println("卡號輸入有誤請確認(rèn)");
}
}catch (Exception e) {
System.out.println("輸入有誤");
}
break;
}
}
//取款方法運(yùn)算
@Override
public void qu() {
Cuxuka cu=new Cuxuka();
cu.chaxun();
Scanner sc1=new Scanner(System.in);
System.out.println("請輸入你要取款的金額:");
double qu=sc1.nextDouble();
// 實(shí)現(xiàn)取款方法
if(qu<balance)
{
this.balance-=qu;
Yinhanglei.getYinhangLei().map.get(cu.card).setBalance(balance);
System.out.println("取款成功,剩余金額:"+ Yinhanglei.getYinhangLei().map.get(cu.card).getBalance());
}
else if(qu<0)
{
System.out.println("你輸入的數(shù)據(jù)無效,系統(tǒng)將自動退出!謝謝使用");;
}
else
{
System.out.println("余額不足");
}
}
@Override
public void getyu() {
// 余額計(jì)算
Cuxuka cu=new Cuxuka();
System.out.println("剩余金額"+cu.getBalance());
}
}
3,單例模式銀行類
package com.bank.abc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.bank.unionpay.Yinhang;
public class Yinhanglei {
//銀行類屬性
private Yinhang yinhang=Yinhang.ABC;
private String name;
public List<String> list=new ArrayList<>();
public Map<String, Cuxuka> map=new HashMap<>();
//私有化構(gòu)造方法
private Yinhanglei() {
super();
}
private static Yinhanglei bank=new Yinhanglei();
public static Yinhanglei getYinhangLei()
{
return bank;
}
}
4,信用卡類
package com.bank.abc;
public class Xinyongka extends Cuxuka {
//構(gòu)造自己的屬性
private double touzhi;
public double getTouzhi() {
return touzhi;
}
public void setTouzhi(double touzhi) {
this.touzhi = touzhi;
}
//重寫取款方法
public void qu(double qu) {
// 實(shí)現(xiàn)取款方法
if((touzhi+getBalance())>=qu)
{
System.out.println("透支金額"+(qu-getBalance()));;
}
else
{
System.out.println("無法取款超過最大透支額度");;
}
}
}
包三:com.bank.test
1,測試類
package com.bank.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.bank.abc.ATM2;
import com.bank.abc.Cuxuka;
import com.bank.unionpay.ATM;
import com.bank.unionpay.Zujiemian;
public class Test1 {
public static void main(String[] args) {
//主界面的制作
Cuxuka cxk=new Cuxuka();
//實(shí)例化主界面
Zujiemian zjm=new Zujiemian();
//拋出異常
try{
//創(chuàng)建死循環(huán)
for(int i=0;i>=0;i++)
{
zjm.zhujiemian();
Scanner sc=new Scanner(System.in);
int in=sc.nextInt();
//判斷輸入數(shù)字是否符合界面數(shù)字
if(in==0||in==1||in==2||in==3||in==4)
{
//開戶功能
if(in==0)
{
ATM2 atm2=new ATM2();
atm2.kaihu();
System.out.println("****************************");
System.out.println("你選擇的為開戶功能");
System.out.println();
continue;
}
//查詢功能
if(in==1)
{
System.out.println("****************************");
System.out.println("你選擇的為查詢功能");
cxk.chaxun();
continue;
}
//存款功能
if(in==2)
{
System.out.println("****************************");
System.out.println("你選擇的為存款功能");
cxk.cun();
continue;
}
//取款功能
if(in==3)
{
System.out.println("****************************");
System.out.println("你選擇的為取款功能");
cxk.qu();
continue;
}
//退出功能
if(in==4)
{
System.out.println("謝謝使用!");
break;
}
}
//不符合菜單內(nèi)容打印
else
{
System.out.println("你選擇的菜單不存在!");
}
}
//異常拋出打印
}catch (Exception e) {
System.out.println("輸入有誤");
}
}
}
結(jié)果:

以上所述是小編給大家介紹的Java 模擬銀行自助終端系統(tǒng),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng)
- java實(shí)現(xiàn)簡單銀行ATM系統(tǒng)
- Java實(shí)現(xiàn)簡單銀行ATM功能
- Java實(shí)現(xiàn)銀行ATM系統(tǒng)
- java代碼實(shí)現(xiàn)銀行管理系統(tǒng)
- java實(shí)現(xiàn)簡單銀行管理系統(tǒng)
- java實(shí)現(xiàn)銀行管理系統(tǒng)
- java模擬實(shí)現(xiàn)銀行ATM機(jī)操作
相關(guān)文章
解決SpringMvc中普通類注入Service為null的問題
這篇文章主要介紹了解決SpringMvc中普通類注入Service為null的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Springboot基于BCrypt非對稱加密字符串的實(shí)現(xiàn)
本文主要介紹了Springboot基于BCrypt非對稱加密字符串的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Spring Boot 簡單使用EhCache緩存框架的方法
本篇文章主要介紹了Spring Boot 簡單使用EhCache緩存框架的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
SpringBoot整合Security安全框架實(shí)現(xiàn)控制權(quán)限
本文主要介紹了SpringBoot整合Security安全框架實(shí)現(xiàn)控制權(quán)限,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01

