欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

java 定义银行账户类 账户和客户类 客户 java 定义银行卡类

最编程 2024-03-17 08:48:17
...



文章目录

  • 前言
  • 一、关键技术
  • 二、整体思路
  • 三、运行界面
  • 四、UML类图
  • 总结



前言

模拟银行的系统,用户可以在银行填写相关基本信息,选择不同的银行卡类型开户(信用卡、借记卡),不同类型的卡在取款和消费时具有不同的功能,但是两种类型的卡的基本功能相同,存款,取款,账户查询、pos机刷卡消费。
两种卡的区别:信用卡可以透支消费(透支取款)1000元且需要支付1%的手续费,但是借记卡不能透支消费且没有手续费。

一、关键技术

核心要求:利用类的封装、继承、抽象、多态实现。

二、整体思路

1.Card类
定义一个抽象类Card(卡),包括卡的基本属性以及基本方法,并将所有方法抽象,后面在子类中按照子类的需求全部重写

abstract public class Card {
    Scanner scanner=new Scanner(System.in);
    public String name,password; //name:开卡人的姓名,password:该账户的密码
    public double banlance=0; //banlance:账户余额,开卡时账户都为0
    public int count,money; //count:卡号,money:消费/取款金额

    public abstract void setName(String name);
    public abstract void setPassword(String password);
    public abstract String getPassword();
    public abstract void setCount(int count);
    public abstract int getCount();
    public abstract void deposit();
    public abstract void draw();
    public abstract void cardInquire();
    public abstract void spend(int money);
}

2.Credit类
定义一个Credit(信用卡)类,继承了Card类的所有属性和方法并重写所有方法,同时还有信用卡特有的方法

class Credit extends Card{
    public String password,name;
    public double balance=0;
    public int count,money;
    public void setCount(int count) {
        this.count =count;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount(){
        return count;
    }
    public String getPassword() {
        return password;
    }
    public double getBalance() {
        return balance;
    }
    public String getName() {
        return name;
    }

    //atm上存钱
    public void deposit(){
        System.out.println("请输入存款金额(整百):");
        money=scanner.nextInt();
        balance+=money;
        System.out.println("存款成功,您的账户余额为:"+getBalance()+"元");
    }

    //账户信息查询
    public void cardInquire(){
        System.out.println("你卡号为:"+getCount()+"的账户余额为"+getBalance());
    }

    //
    public void balanceInquire(){
        System.out.println("你的账户余额为:"+getBalance());
    }

    public void draw(){
        double forbalance=0;
        System.out.println("请输入取款金额(整百):");
        money=scanner.nextInt();
        forbalance=balance-money-money*0.01;
        if(forbalance>=0){
            System.out.println("取款成功!");
            balance=forbalance;
        }
        else if(forbalance<0&&forbalance>=-1000) {
            System.out.println("你的账户余额不足,且在透支金额内,是否选择透支?Y/N");
            String str=scanner.next();
            if(str.equals("Y")) {
                balance=forbalance;
            }
            else System.out.println("取款失败。");;
        }
        else if(forbalance<-1000){
            System.out.println("你的账户余额不足,且取款数超出透支金额,无法取款");
        }
    }

    public void spend(int money){
        if(balance>=money) {
            System.out.println("扣款成功!账户余额为:"+getBalance());
            balance-=money;
        }
        if(banlance<money){
            System.out.println("账户余额不足,是否透支消费?Y/N");
            String str=scanner.next();
            if(str.equals("Y")){
                banlance-=money;
                System.out.println("扣款成功,账户余额为"+getBalance());
            }
            else System.out.println("扣款失败。");
        }
    }
}

3.Debit类
同第二点:一个Debit(借记卡)类继承于Card类,并重写所有的方法

class Debit extends Card{
    public String password,name;
    public int count,money;
    public double balance=0;

    public void setCount(int count){
        this.count=count;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getCount(){
        return count;
    }
    public String getPassword() {
        return password;
    }
    public double getBalance() {
        return balance;
    }
    public String getName() {
        return name;
    }

    //atm上存钱
    public void deposit(){
        System.out.println("请输入存款金额(整百):");
        money=scanner.nextInt();
        balance+=money;
        System.out.println("存款成功,您的账户余额为:"+getBalance()+"元");
    }

    //账户信息查询
    public void cardInquire(){
        System.out.println("你卡号为:"+getCount()+"的账户余额为"+getBalance());
    }

    //
    public void balanceInquire(){
        System.out.println("你的账户余额为:"+getBalance());
    }

    //取款
    public void draw(){
        double forbalance=0;
        System.out.println("请输入取款金额(整百):");
        money=scanner.nextInt();
        forbalance=balance-money;
        if(forbalance>=0){
            System.out.println("取款成功!");
            balance=forbalance;
        }
        if(forbalance<0) {
            System.out.println("你的账户余额不足,无法取款。");
        }
    }

    public void spend(int money){
        if(banlance>=money){
            System.out.println("扣款成功!账户余额为:"+getBalance());
            balance-=money;
        }
        else System.out.println("账户余额不足,扣款失败!");
    }
}

4.Bank类
创建一个Bank类,对银行卡进行相关的管理,例如开户,账户查询,atm相关操作,pos消费的相关操作等

package company;

import javafx.scene.shape.ClosePathBuilder;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import static company.Main.menu;
import static java.lang.System.exit;


public  class Bank {

    List<Card>cardList=new ArrayList<Card>(); //利用存储开户的所有账户信息
    Scanner scanner=new Scanner(System.in);
    static int i=0;

    //创建一个新的账户,填写相应的信息
    public void createAccount(){
        Card acount; //创建一个父类的对象
        System.out.println("请输入开户类型:");
        System.out.println("1.信用卡");
        System.out.println("2.借记卡");
        int kind=scanner.nextInt();
        //根据用户的选择,用对应的子类来实例化父类对象,会自动完成向上转型(父类->子类)。之后该实例对象在调用相关方法时就会调用对应的子类方法,从而实现借记卡和信用卡的不同功能。
        //ps:在java里面,向上转型是自动进行的,但是向下转型却不是,需要我们自己定义强制进行。
        if(kind==1){
            acount=new Credit();
        }
        else{
            acount=new Debit();
        }
        int count=(int)(Math.random()*100000); //随机生成一个5位数的账号
        acount.setCount(count);
        System.out.println("系统已经为你随机生成一个卡号"+acount.getCount()+"的账户");
        System.out.println("请设置密码");
        String password=scanner.next();
        acount.setPassword(password);
        System.out.println("请输入您的姓名");
        String name=scanner.next();
        acount.setName(name);
        cardList.add(acount);
        System.out.println("开户成功,您的卡号为"+acount.getCount());
    }

    //实现atm自助机上的相关操作(存款、取款、账户查询)
    public void atm() {
        Card card;
        while(true){
            card=login();
            if(card==null){
                System.out.println("账号或密码输入错误!请重新输入");
            }
            else {break;}
        }
        while (true){
            int flag=0;
            menu1();
            int choice=scanner.nextInt();
            switch (choice){
                case 1:card.deposit();break;
                case 2:card.draw();break;
                case 3:card.cardInquire();break;
                case 4:flag=1;break;
            }
            if(flag==1){
                break;
            }
        }
    }

    //atm操作的子菜单
    public static void menu1(){
        System.out.println("请选择要进行的操作:");
        System.out.println("1.存款");
        System.out.println("2.取款");
        System.out.println("3.查询账户信息");
        System.out.println("4.回到主菜单界面");
    }

    //pos刷卡功能(消费)
    public void pos(){
        Card card;
        while(true){
            card=login();
            if(card==null){
                System.out.println("账号或密码输入错误!请重新输入");
            }
            else {break;}
        }
        System.out.println("请输入消费金额");
        int money=scanner.nextInt();
        card.spend(money);
    }

//账户信息查询函数
    public Card checkCount(){
        Card c=null;
        System.out.println("请输入您的银行卡号:");
        int inputcount=scanner.nextInt();
        for(Card c1:cardList){
            if(c1.getCount()==inputcount){
                c=c1;
                break;
            }
        }
        return c;
    }
//登录,在list列表中查找到对应卡的信息,返回一个Card类对象
    public Card login(){
        Card c2=null;
        Card c3=null;
        c3=checkCount();
        System.out.println("请输入账号密码");
        String inputpassword=scanner.next();
        if(c3!=null && c3.getPassword().equals(inputpassword)){
           c2=c3;
        }
        return c2;
    }

}

5.Main函数
最后用一个简单的主函数将这个系统逻辑的连接起来就好了

package company;

import java.util.Scanner;

public class Main {
    int i=0;
    public static void main(String[] args) {
        Bank b=new Bank();
        Scanner scanner=new Scanner(System.in);
        while(true) { //只要不选择退出,每次完成对应的功能都会到主页面
            menu() ;
            int choice = scanner.nextInt();
            switch(choice){
                case 1:b.createAccount();break;
                case 2:b.atm();break;
                case 3:b.pos();break;
                case 4:System.exit(-1);
            }
        }

    }

    public static void menu(){
        System.out.println("请选择相应的功能:");
        System.out.println("1、开户,输入用户相关信息,创立相关的银行卡账户");
        System.out.println("2、ATM柜员机实现存、取、查询账户信息功能");
        System.out.println("3、POS机实现刷卡消费功能");
        System.out.println("4、退出程序");
    }
}

三、运行界面

运行主函数后出现的主菜单界面,选择相应的功能就会进入各自的子菜单,按照菜单提示进行功能选择即可。

java 定义银行账户类Account和顾客类Customer java定义银行卡类_System

四、UML类图

java 定义银行账户类Account和顾客类Customer java定义银行卡类_java_02

总结

好了,这篇分享就到这了,希望对你能有帮帮助,这是本人第一次写博客,可能说的有些不清楚,加上这是去年上java课写的代码所以可能有些地方也没解释的太清楚。有问题可以留言哟。