用Java實(shí)現(xiàn)簡單ATM機(jī)功能
本文實(shí)例為大家分享了Java實(shí)現(xiàn)簡單ATM機(jī)功能的具體代碼,供大家參考,具體內(nèi)容如下
項(xiàng)目介紹
基于大家使用銀行卡在ATM機(jī)取款操作,進(jìn)行相對(duì)應(yīng)ATM機(jī)操作流程的實(shí)現(xiàn)。
項(xiàng)目功能
1、注冊(cè)功能:
根據(jù)用戶輸入的賬號(hào)密碼申請(qǐng)一張銀行卡,存儲(chǔ)在銀行卡類型的數(shù)組中(一張銀行卡對(duì)應(yīng)一個(gè)有效用戶)。
2、登錄功能:
登陸失敗:重新登陸 或 注冊(cè)
登陸成功:對(duì)登陸的這張銀行卡可以進(jìn)行一下操作:存款、取款、查余額、轉(zhuǎn)賬、退卡功能。
項(xiàng)目知識(shí)點(diǎn)
3、java基本語法的使用
4、一維數(shù)組
5、函數(shù)調(diào)用,封裝
6、Java類和對(duì)象
項(xiàng)目實(shí)現(xiàn)思路
7、設(shè)計(jì)并實(shí)現(xiàn)系統(tǒng)的相關(guān)打印界面:注冊(cè)、登陸、登陸后操作
8、登錄系統(tǒng)必須輸入正確的卡號(hào)和密碼,輸入錯(cuò)誤時(shí)提示用戶重新登陸。
9、實(shí)現(xiàn)取款、存款、查余額等功能。
難點(diǎn)
對(duì)面向?qū)ο缶幊痰睦斫?,以及靜態(tài)變量和實(shí)例變量的理解。
二者區(qū)別:
實(shí)例變量:跟對(duì)象有關(guān),一個(gè)對(duì)象一份實(shí)例變量
靜態(tài)變量:跟對(duì)象無關(guān),一個(gè)類一份靜態(tài)變量
源代碼
1.ATM類
public class ATM {
? ? private static boolean flag = true;
? ? private int id;
? ? private int passwd;
? ? private BankCard bankCard;
? ? private static Bank bank;
? ? /* 不寫跳1空異常*/
? ? public ATM(){
? ? ? ? bank = new Bank();
? ? }
? ? Scanner ?scanner = new Scanner(System.in);
? ? public void start(){
? ? ? ? int chioce;
? ? ? ? while (flag == true){
? ? ? ? ? ? System.out.println("請(qǐng)選擇: 1.注冊(cè) 2.登錄 3.退出");
? ? ? ? ? ? chioce = scanner.nextInt();
? ? ? ? ? ? switch(chioce){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入賬號(hào)和密碼:");
? ? ? ? ? ? ? ? ? ? id = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? passwd = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? register(id,passwd);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入賬號(hào)和密碼:");
? ? ? ? ? ? ? ? ? ? id = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? passwd = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? login(id,passwd);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? //注冊(cè)
? ? private void register(int id, int passwd) {
? ? ? ? //檢查此卡號(hào)是否存在
? ? ? ? if(bank.contains(id)){
? ? ? ? ? ? System.out.println("此卡號(hào)已存在,注冊(cè)失?。?);
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? bankCard = new BankCard(id,passwd);
? ? ? ? ? ? bank.add(bankCard);
? ? ? ? ? ? System.out.println("注冊(cè)成功!");
? ? ? ? }
? ? }
? ? //登錄
? ? private void login(int id, int passwd) {
? ? ? ? //檢查此卡號(hào)是否存在
? ? ? ? if(bank.login(id,passwd)){
? ? ? ? ? ? System.out.println("登陸成功!");
? ? ? ? ? ? //登陸成功 返回卡的信息
? ? ? ? ? ? bankCard = bank.getcard(id,passwd);
? ? ? ? ? ? //調(diào)用 ATM功能函數(shù)
? ? ? ? ? ? function(bankCard);
? ? ? ? }else{
? ? ? ? ? ? System.out.println("登陸失?。?請(qǐng)重新登錄");
? ? ? ? }
? ? }
? ? //ATM功能函數(shù)
? ? private void function(BankCard bankCard) {
? ? ? ? double money;
? ? ? ? int count = 0;
? ? ? ? int chioce;
? ? ? ? while (flag == true){
? ? ? ? ? ? System.out.println("請(qǐng)選擇: 1.存款 2.取款 3.查余額 4.轉(zhuǎn)賬 ?5.退卡");
? ? ? ? ? ? chioce = scanner.nextInt();
? ? ? ? ? ? switch(chioce){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入存款金額:");
? ? ? ? ? ? ? ? ? ? money = scanner.nextDouble();
? ? ? ? ? ? ? ? ? ? bank.setMoney(bankCard,money);
? ? ? ? ? ? ? ? ? ? System.out.println("存款成功!");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入取款金額:");
? ? ? ? ? ? ? ? ? ? money = scanner.nextDouble();
? ? ? ? ? ? ? ? ? ? if(bank.getMoney(bankCard,money)){
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("取款成功!");
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("余額不足取款失敗!");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? ? ? System.out.println("余額為:"+bank.getBalance(bankCard));
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 4:
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入轉(zhuǎn)賬的賬號(hào):");
? ? ? ? ? ? ? ? ? ? while(flag){
? ? ? ? ? ? ? ? ? ? ? ? count = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? ? ? //檢查此卡號(hào)是否存在
? ? ? ? ? ? ? ? ? ? ? ? if(!bank.contains(count)){
? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("此卡號(hào)不存在,請(qǐng)重新輸入:");
? ? ? ? ? ? ? ? ? ? ? ? } else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? flag =false;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? System.out.println("請(qǐng)輸入轉(zhuǎn)賬的金額:");
? ? ? ? ? ? ? ? ? ? money = scanner.nextDouble();
? ? ? ? ? ? ? ? ? ? if(bank.transfer(bankCard,bank.getcard1(count),money)){
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("轉(zhuǎn)賬成功!");
? ? ? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? ? ? System.out.println("余額不足,轉(zhuǎn)賬失??!");
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? ? ? //莫名結(jié)束??
? ? ? ? ? ? ? ? case 5:
? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
}2.Bank類
public class Bank {
? ? private BankCard[] cards;
? ? private static int cardsnum = 0;
// ?private static double cardsmoney = 0.0;
? ? private static final int INITSIZE = 10;
? ? public Bank(){
? ? ? ? cards = new BankCard[INITSIZE];
? ? }
? ? //查詢卡是否存在
? ? public boolean contains(int id) {
? ? ? ? for(int i=0;i<cardsnum;i++){
? ? ? ? ? ? if (cards[i].getId() == id){
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return false;
? ? }
? ? //登錄
? ? public boolean login(int id,int passwd) {
? ? ? ? for(int i=0;i<cardsnum;i++){
? ? ? ? ? ? if (cards[i].getId() == id && cards[i].getPasswd() == passwd){
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return false;
? ? }
? ? //添加一張銀行卡
? ? public void add(BankCard card) {
? ? ? ? //判斷存卡的數(shù)組是否已滿
? ? ? ? if(cards.length == cardsnum){
? ? ? ? ? ? //數(shù)組已滿執(zhí)行擴(kuò)容操作
? ? ? ? ? ? cards = Arrays.copyOf(cards,cards.length+(cards.length>>1));
? ? ? ? }
? ? ? ? //銀行卡存入銀行卡類型數(shù)組
? ? ? ? cards[cardsnum] = card;
? ? ? ? //銀行卡數(shù)+1
? ? ? ? cardsnum++;
? ? }
? ? //輸入卡號(hào),密碼返回銀行卡
? ? public BankCard getcard(int id, int passwd){
? ? ? ? for(int i=0;i<cardsnum;i++){
? ? ? ? ? ? if (cards[i].getId() == id && cards[i].getPasswd() == passwd){
? ? ? ? ? ? ? ? return cards[i];
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return null;
? ? }
? ? //存款
? ? public boolean setMoney(BankCard card,double money){
? ? ? ? return card.setMoney(money);
? ? }
? ? //取款
? ? public boolean getMoney(BankCard card,double money){
? ? ? ? return card.getMoney(money);
? ? }
? ? //查余額
? ? public double getBalance(BankCard card){
? ? ? ? return card.getBalance();
? ? }
? ? //轉(zhuǎn)賬
? ? public boolean transfer(BankCard card, BankCard tempcard, double money){
? ? ? ? if( card.getMoney(money)){
? ? ? ? ? ? tempcard.setMoney(money);
? ? ? ? ? ? return true;
? ? ? ? }
? ? ? ? return false;
? ? }
? ? //輸入卡號(hào),密碼返回銀行卡
? ? public BankCard getcard1(int id){
? ? ? ? for(int i=0;i<cardsnum;i++){
? ? ? ? ? ? if (cards[i].getId() == id){
? ? ? ? ? ? ? ? return cards[i];
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return null;
? ? }
}3.BankCard類
public class BankCard {
? ? private int id;
? ? private int passwd;
? ? private double money;
? ? public BankCard(int id, int passwd) {
? ? ? ? this.id = id;
? ? ? ? this.passwd = passwd;
? ? }
? ? public int getId() {
? ? ? ? return id;
? ? }
? ? public void setId(int id) {
? ? ? ? this.id = id;
? ? }
? ? public int getPasswd() {
? ? ? ? return passwd;
? ? }
? ? public void setPasswd(int passwd) {
? ? ? ? this.passwd = passwd;
? ? }
? ? public boolean getMoney(double money) {
? ? ? ? if(this.money>=money){
? ? ? ? ? ? this.money -= money;
? ? ? ? ? ? return true;
? ? ? ? }else{
? ? ? ? ? ? return false;
? ? ? ? }
? ? }
? ? public boolean setMoney(double deposit) {
? ? ? ? this.money += deposit;
? ? ? ? return true;
? ? }
? ? public double getBalance(){
? ? ? ? return this.money;
? ? }
}以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)簡單控制臺(tái)版ATM系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
- Java簡單實(shí)現(xiàn)銀行ATM系統(tǒng)
- java實(shí)現(xiàn)簡單銀行ATM系統(tǒng)
- Java實(shí)現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏
- Java實(shí)現(xiàn)銀行ATM系統(tǒng)
- java模擬實(shí)現(xiàn)銀行ATM機(jī)操作
- java方法實(shí)現(xiàn)簡易ATM功能
- 基于Java開發(fā)實(shí)現(xiàn)ATM系統(tǒng)
相關(guān)文章
Spring boot基于JPA訪問MySQL數(shù)據(jù)庫的實(shí)現(xiàn)
本文主要介紹了Spring boot基于JPA訪問MySQL數(shù)據(jù)庫的實(shí)現(xiàn),Spring boot結(jié)合Jpa 能夠簡化創(chuàng)建 JPA 數(shù)據(jù)訪問層和跨存儲(chǔ)的持久層功能,用戶的持久層Dao接口只需要繼承定義好的接口,感興趣的可以了解一下2021-06-06
深入淺析Netty 在 Dubbo 中是如何應(yīng)用的
國內(nèi)知名框架 Dubbo 底層使用的是 Netty 作為網(wǎng)絡(luò)通信,那么內(nèi)部到底是如何使用的呢?今天通過本文給大家詳細(xì)講解,對(duì)Netty 在 Dubbo中應(yīng)用相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧2020-05-05
Springboot jar運(yùn)行時(shí)如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中
因?yàn)閳?zhí)行需要,需要把jar內(nèi)templates文件夾下的的文件夾及文件加壓到宿主機(jī)器的某個(gè)路徑下,以便執(zhí)行對(duì)應(yīng)的腳本文件,這篇文章主要介紹了Springboot jar運(yùn)行時(shí)如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中,需要的朋友可以參考下2024-06-06
java實(shí)現(xiàn)潛艇大戰(zhàn)游戲源碼
潛艇大戰(zhàn)游戲相信大家都玩過,是一款非常有趣的小游戲,那么基于代碼是如何實(shí)現(xiàn)的呢?今天小編給大家?guī)硪黄坛處椭蠹覍W(xué)習(xí)java實(shí)現(xiàn)潛艇大戰(zhàn)游戲,感謝的朋友一起看看吧2021-06-06
springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證
本文主要介紹了springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),詳細(xì)的介紹了不加事務(wù)標(biāo)簽和加事物標(biāo)簽的使用,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-07-07
Dubbo擴(kuò)展點(diǎn)SPI實(shí)踐示例解析
這篇文章主要為大家介紹了Dubbo擴(kuò)展點(diǎn)SPI實(shí)踐示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Spring Cloud Stream 高級(jí)特性使用詳解
這篇文章主要為大家介紹了Spring Cloud Stream 高級(jí)特性使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09

