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、退出程序");
}
}
三、运行界面
运行主函数后出现的主菜单界面,选择相应的功能就会进入各自的子菜单,按照菜单提示进行功能选择即可。
四、UML类图
总结
好了,这篇分享就到这了,希望对你能有帮帮助,这是本人第一次写博客,可能说的有些不清楚,加上这是去年上java课写的代码所以可能有些地方也没解释的太清楚。有问题可以留言哟。