用Java實現(xiàn)簡單ATM機功能
本文實例為大家分享了Java實現(xiàn)簡單ATM機功能的具體代碼,供大家參考,具體內(nèi)容如下
項目介紹
基于大家使用銀行卡在ATM機取款操作,進行相對應(yīng)ATM機操作流程的實現(xiàn)。
項目功能
1、注冊功能:
根據(jù)用戶輸入的賬號密碼申請一張銀行卡,存儲在銀行卡類型的數(shù)組中(一張銀行卡對應(yīng)一個有效用戶)。
2、登錄功能:
登陸失?。褐匦碌顷?或 注冊
登陸成功:對登陸的這張銀行卡可以進行一下操作:存款、取款、查余額、轉(zhuǎn)賬、退卡功能。
項目知識點
3、java基本語法的使用
4、一維數(shù)組
5、函數(shù)調(diào)用,封裝
6、Java類和對象
項目實現(xiàn)思路
7、設(shè)計并實現(xiàn)系統(tǒng)的相關(guān)打印界面:注冊、登陸、登陸后操作
8、登錄系統(tǒng)必須輸入正確的卡號和密碼,輸入錯誤時提示用戶重新登陸。
9、實現(xiàn)取款、存款、查余額等功能。
難點
對面向?qū)ο缶幊痰睦斫?,以及靜態(tài)變量和實例變量的理解。
二者區(qū)別:
實例變量:跟對象有關(guān),一個對象一份實例變量
靜態(tài)變量:跟對象無關(guān),一個類一份靜態(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("請選擇: 1.注冊 2.登錄 3.退出");
? ? ? ? ? ? chioce = scanner.nextInt();
? ? ? ? ? ? switch(chioce){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? System.out.println("請輸入賬號和密碼:");
? ? ? ? ? ? ? ? ? ? id = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? passwd = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? register(id,passwd);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? System.out.println("請輸入賬號和密碼:");
? ? ? ? ? ? ? ? ? ? id = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? passwd = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? login(id,passwd);
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 3:
? ? ? ? ? ? ? ? ? ? flag = false;
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? }
? ? ? ? }
? ? }
? ? //注冊
? ? private void register(int id, int passwd) {
? ? ? ? //檢查此卡號是否存在
? ? ? ? if(bank.contains(id)){
? ? ? ? ? ? System.out.println("此卡號已存在,注冊失?。?);
? ? ? ? }
? ? ? ? else{
? ? ? ? ? ? bankCard = new BankCard(id,passwd);
? ? ? ? ? ? bank.add(bankCard);
? ? ? ? ? ? System.out.println("注冊成功!");
? ? ? ? }
? ? }
? ? //登錄
? ? private void login(int id, int passwd) {
? ? ? ? //檢查此卡號是否存在
? ? ? ? if(bank.login(id,passwd)){
? ? ? ? ? ? System.out.println("登陸成功!");
? ? ? ? ? ? //登陸成功 返回卡的信息
? ? ? ? ? ? bankCard = bank.getcard(id,passwd);
? ? ? ? ? ? //調(diào)用 ATM功能函數(shù)
? ? ? ? ? ? function(bankCard);
? ? ? ? }else{
? ? ? ? ? ? System.out.println("登陸失敗! 請重新登錄");
? ? ? ? }
? ? }
? ? //ATM功能函數(shù)
? ? private void function(BankCard bankCard) {
? ? ? ? double money;
? ? ? ? int count = 0;
? ? ? ? int chioce;
? ? ? ? while (flag == true){
? ? ? ? ? ? System.out.println("請選擇: 1.存款 2.取款 3.查余額 4.轉(zhuǎn)賬 ?5.退卡");
? ? ? ? ? ? chioce = scanner.nextInt();
? ? ? ? ? ? switch(chioce){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? System.out.println("請輸入存款金額:");
? ? ? ? ? ? ? ? ? ? money = scanner.nextDouble();
? ? ? ? ? ? ? ? ? ? bank.setMoney(bankCard,money);
? ? ? ? ? ? ? ? ? ? System.out.println("存款成功!");
? ? ? ? ? ? ? ? ? ? break;
? ? ? ? ? ? ? ? case 2:
? ? ? ? ? ? ? ? ? ? System.out.println("請輸入取款金額:");
? ? ? ? ? ? ? ? ? ? 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("請輸入轉(zhuǎn)賬的賬號:");
? ? ? ? ? ? ? ? ? ? while(flag){
? ? ? ? ? ? ? ? ? ? ? ? count = scanner.nextInt();
? ? ? ? ? ? ? ? ? ? ? ? //檢查此卡號是否存在
? ? ? ? ? ? ? ? ? ? ? ? if(!bank.contains(count)){
? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.println("此卡號不存在,請重新輸入:");
? ? ? ? ? ? ? ? ? ? ? ? } else{
? ? ? ? ? ? ? ? ? ? ? ? ? ? flag =false;
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? System.out.println("請輸入轉(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í)行擴容操作
? ? ? ? ? ? cards = Arrays.copyOf(cards,cards.length+(cards.length>>1));
? ? ? ? }
? ? ? ? //銀行卡存入銀行卡類型數(shù)組
? ? ? ? cards[cardsnum] = card;
? ? ? ? //銀行卡數(shù)+1
? ? ? ? cardsnum++;
? ? }
? ? //輸入卡號,密碼返回銀行卡
? ? 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;
? ? }
? ? //輸入卡號,密碼返回銀行卡
? ? 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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring boot基于JPA訪問MySQL數(shù)據(jù)庫的實現(xiàn)
本文主要介紹了Spring boot基于JPA訪問MySQL數(shù)據(jù)庫的實現(xiàn),Spring boot結(jié)合Jpa 能夠簡化創(chuàng)建 JPA 數(shù)據(jù)訪問層和跨存儲的持久層功能,用戶的持久層Dao接口只需要繼承定義好的接口,感興趣的可以了解一下2021-06-06
深入淺析Netty 在 Dubbo 中是如何應(yīng)用的
國內(nèi)知名框架 Dubbo 底層使用的是 Netty 作為網(wǎng)絡(luò)通信,那么內(nèi)部到底是如何使用的呢?今天通過本文給大家詳細講解,對Netty 在 Dubbo中應(yīng)用相關(guān)知識感興趣的朋友跟隨小編一起看看吧2020-05-05
Springboot jar運行時如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中
因為執(zhí)行需要,需要把jar內(nèi)templates文件夾下的的文件夾及文件加壓到宿主機器的某個路徑下,以便執(zhí)行對應(yīng)的腳本文件,這篇文章主要介紹了Springboot jar運行時如何將jar內(nèi)的文件拷貝到文件系統(tǒng)中,需要的朋友可以參考下2024-06-06

