银行卡系统

  • 一、功能描述
  • 二、实现代码
    • 1、定义银联接口
    • 2、定义工商银行接口,继承银联接口
    • 3、定义农业银行接口,继承银联接口
    • 4、定义银行类,实现银联接口
    • 5、定义工商银行类,继承银行类,实现工商银行接口
    • 6、定义农业银行类,继承银行类,实现农业银行接口
  • 演示效果图

一、功能描述

  1. 要求实现银行卡系统的银联接口,详细要求如下

    1. 银联接口,用于描述银联统一制定的规则,该接口提供检查密码,取钱以及查询余额方法
    2. 工商银行接口,用于描述工行发行的卡片功能,在满足银联接口的规则基础上,增加了在线支付功能。
    3. 农业银行接口,用于描述农行发行的卡片功能,在满足银联接口的规则基础上,增加了支付电话费的功能。另外,农行的卡可以透支5000元。
    4. 实现工行接口和农行接口,并进行测试

二、实现代码

1、定义银联接口

UnionPay.java

package com.feonix;/*** 银联接口* * @author FeoniX**/
public interface UnionPay {/*** 密码认证* * @param passwd*/boolean auth(String passwd);/*** 取钱* * @param money*/void drawMoney(double money, String passwd);/*** 查询余额*/void queryBalance();
}

2、定义工商银行接口,继承银联接口

ICBC.java

package com.feonix;/*** 工商银行接口* * @author FeoniX**/
public interface ICBC extends UnionPay {/*** 在线支付* * @param money* @param passwd*/void onlinePay(double money, String passwd);
}

3、定义农业银行接口,继承银联接口

ABC.java

package com.feonix;/*** 农业银行接口* * @author FeoniX**/
public interface ABC extends UnionPay {/** 透支额度 */public static final double OVERDRAFT = 5000;/*** 充值话费* @param money*/void recharge(double money, String passwd);
}

4、定义银行类,实现银联接口

Bank.java

package com.feonix;import java.util.Scanner;/*** 银行类 实现 银联 接口* * @author FeoniX**/
public abstract class Bank implements UnionPay {/** 银行卡号 */private int id;/** 银行卡密码 */private String passwd;/** 银行卡余额 */private double balance;public Bank(int id, String passwd, double balance) {this.id = id;this.passwd = passwd;this.balance = balance;}public static void main(String[] args) {Scanner key = new Scanner(System.in);boolean flag = true;String passwd;double money;Bank icbc = null, abc = null;while (flag) {System.out.println("***************欢迎使用银行业务系统****************");System.out.println("请选择银行:(工商银行请扣1    农业银行请扣2    退出请扣0)");int bank = key.nextInt();if (bank == 0) {break;}System.out.println("请输入卡号:");int id = key.nextInt();System.out.println("请输入密码:");passwd = key.next();boolean flag2 = true;switch (bank) {case 1:icbc = new ICBCBank(id, "qwer123", 5000);if (!icbc.auth(passwd)) {System.out.println("密码错误,请重试\n");continue;}while (flag2) {System.out.println("请选择操作:(余额查询请扣1    取款请扣2    在线支付请扣3    返回上一级菜单请扣0)");int code = key.nextInt();switch (code) {case 1:icbc.queryBalance();break;case 2:System.out.println("请输入取款金额:");money = key.nextDouble();System.out.println("请输入密码:");passwd = key.next();icbc.drawMoney(money, passwd);break;case 3:System.out.println("请输入在线支付金额:");money = key.nextDouble();System.out.println("请输入密码:");passwd = key.next();icbc.onlinePay(money, passwd);break;case 0:flag2 = false;break;default:System.out.println("指令无效,请重新输入\n");}}break;case 2:abc = new ABCBank(id, "qwer456", 3000);if (!abc.auth(passwd)) {System.out.println("密码错误,请重试\n");continue;}while (flag2) {System.out.println("请选择操作:(余额查询请扣1    取款请扣2    话费充值请扣3    返回上一级菜单请扣0)");int code = key.nextInt();switch (code) {case 1:abc.queryBalance();break;case 2:System.out.println("请输入取款金额:");money = key.nextDouble();System.out.println("请输入密码:");passwd = key.next();abc.drawMoney(money, passwd);break;case 3:System.out.println("请输入充值话费金额:");money = key.nextDouble();System.out.println("请输入密码:");passwd = key.next();abc.recharge(money, passwd);break;case 0:flag2 = false;break;default:System.out.println("指令无效,请重新输入\n");}}break;}}key.close();}/** 在线支付 */abstract void onlinePay(double money, String passwd);/** 话费充值 */protected abstract void recharge(double money, String string);public int getId() {return id;}public void setId(int id) {this.id = id;}public String getPasswd() {return passwd;}public void setPasswd(String passwd) {this.passwd = passwd;}public double getBalance() {return balance;}public void setBalance(double balance) {this.balance = balance;}/** 密码认证方法 */@Overridepublic boolean auth(String passwd) {if (this.passwd.equals(passwd)) {return true;}return false;}/** 取钱方法 */@Overridepublic void drawMoney(double money, String passwd) {double balance = getBalance();if (!auth(passwd)) {System.out.println("银行卡密码输入错误,取款失败\n");return;}if (balance - money <= 0) {System.out.println("银行卡余额不足,取款失败\n");return;}setBalance(balance - money);System.out.println("卡号" + getId() + "取款" + money + "元成功,剩余余额" + getBalance() + "\n");}/** 查询余额方法 */@Overridepublic void queryBalance() {System.out.printf("卡号:%d\n余额:%.2f\n\n", getId(), getBalance());}}

5、定义工商银行类,继承银行类,实现工商银行接口

ICBCBank.java

package com.feonix;/*** 工商银行类 继承 银行类 实现 工商银行接口* * @author FeoniX**/
public class ICBCBank extends Bank implements ICBC {public ICBCBank(int id, String passwd, double balance) {super(id, passwd, balance);}@Overridepublic void onlinePay(double money, String passwd) {if (!auth(passwd)) {System.out.println("银行卡密码输入错误,在线支付失败\n");return;}if (getBalance() - money <= 0) {System.out.println("银行卡余额不足,在线支付失败\n");return;}setBalance(getBalance() - money);System.out.println("卡号" + getId() + "进行了网上支付,支付金额为:" + money + "\n");}@Overrideprotected void recharge(double money, String string) {}}

6、定义农业银行类,继承银行类,实现农业银行接口

ABCBank.java

package com.feonix;/*** 农业银行类 继承 银行类 实现 农业银行接口* * @author FeoniX**/
public class ABCBank extends Bank implements ABC {private double overdraft = OVERDRAFT;public ABCBank(int id, String passwd, double balance) {super(id, passwd, balance);}@Overridepublic void recharge(double money, String passwd) {if (!auth(passwd)) {System.out.println("银行卡密码输入错误,话费充值失败\n");return;}if (getBalance() + overdraft - money <= 0) {System.out.println("银行卡余额不足,话费充值失败\n");return;}calcBanlance(money);System.out.println("卡号" + getId() + "进行了话费充值,充值金额为:" + money + "\n");}@Overridepublic void drawMoney(double money, String passwd) {double balance = getBalance();if (!auth(passwd)) {System.out.println("银行卡密码输入错误,取款失败\n");return;}if (balance + overdraft - money <= 0) {System.out.println("银行卡余额不足,取款失败\n");return;}calcBanlance(money);System.out.println("卡号" + getId() + "取款" + money + "元成功,剩余余额" + getBalance() + ",可透支余额:" + overdraft + "\n");}@Overridepublic void queryBalance() {System.out.printf("卡号:%d\n余额:%.2f\n可透支额度:%.2f\n\n", getId(), getBalance(), overdraft);}@Overrideprotected void onlinePay(double money, String passwd) {}/*** 扣款后计算并更新余额* * @param money*/private void calcBanlance(double money) {if (money > getBalance()) {money = money - getBalance();setBalance(0);overdraft -= money;} else {setBalance(getBalance() - money);}}public double getOverdraft() {return overdraft;}public void setOverdraft(double overdraft) {this.overdraft = overdraft;}}

演示效果图

我的Java学习之路(六)-- 银行卡系统相关推荐

  1. java学习之路之javaSE基础1

    <h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解) * A:什么是计算机?计算机在生活中的应 ...

  2. 萌新的java学习之路——第一周

    萌新的java学习之路--第一周 第一周的学习 这是我学习Java的第一周,写这个博客更多的时为了总结自己这一周的学习情况,如果有人看到我写的博客,有什么问题的话,可以问我.虽然我也是一个小白,但我会 ...

  3. java学习之路---java学习的方法和java学习路线

    转载于: http://blog.csdn.net/zhangerqing 前段时间逛论坛,总会有很多新手很迷茫,问到:到底该怎么学好Java,这个问题很重要,尤其对于像我们这样大多数都是靠自学的人来 ...

  4. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  5. java学习之路目录(已完结)

    java学习之路目录(持续更新中-) 第一阶段 javaSE(完结) 序号 标题 内容 001 java初识 java语言特点.体系结构.运行机制 002 java SE基础语法 注释.关键字.变量. ...

  6. java学习之路2--简单工厂模式实现饮料自动贩卖机

    java学习之路2 用简单工厂模式实现饮料自动贩卖机 功能简介 具体实现 1.简单工厂模式 2.代码 总结 用简单工厂模式实现饮料自动贩卖机) 功能简介 接收用户输入的信息,选择购买的饮料. 可供选择 ...

  7. Java学习之路——接口

    Java学习之路--接口 概述 总所周知,我们是父母的孩子.我们的身上既继承了爸爸的基因也继承了妈妈的基因.这就是多继承. 然而在 Java 程序中,是不支持多继承的.Java 仅仅支持单继承.但是接 ...

  8. 我的Java学习之路2009-11-17

    -------------------------------2009年3月19日开始----------------------------- 下载JDK Myeclipse Netbeans JB ...

  9. JAVA学习之路:不走弯路,就是捷径(一)

      0.引言 在ChinaITLAB导师制辅导中,笔者发现问得最多的问题莫过于"如何学习编程?JAVA该如何学习?".类似的问题回答多了,难免会感觉厌烦,就萌生了写下本文的想法.到 ...

  10. Java学习之路1——安装JDK1.8||安装idea2022||Java项目创建【重拾Java】

    Java学习之路1--安装JDK1.8||安装idea2022[重拾Java] 前言 安装 安装JDK1.8 安装idea2022(JetBrains Toolbox) Java项目创建 创建 项目结 ...

最新文章

  1. linux 磁盘管理上(分区操作,格式化文件,挂载和卸载)
  2. 在NOILINUX下的简易VIM配置
  3. python定义函数的组成部分有_Python基础11- 函数之自定义函数
  4. ajax刷新iframe页面,通过iframe实现简单的ajax表单提交
  5. 一起来庆祝 .NET 20 周年!
  6. python之Map函数 reduce 函数
  7. Web框架——Flask系列之设置和读取cookie(十五)
  8. tft lcd驱动参数详解_LED拼接屏和LCD拼接屏的区别
  9. mysql引擎模式_mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件...
  10. 华岗(1977-),男,博士,宁波市智慧城市规划标准发展研究院副研究员.
  11. python opencv 实现从一个文件夹中读取图片做切割处理后放入另一个文件夹
  12. Fourier变换、Laplace变换与广义函数总结
  13. JavaScript学习笔记:数组
  14. codevs 1191 树轴染色 线段树区间定值,求和
  15. http 和 https 区别?
  16. 【idea插件开发】从0入门idea插件开发,idea插件开发教程,如何开发idea插件
  17. 搜狗输入法安装上问题
  18. 自助装机配置专家点评3
  19. 【Mysql数据库 第10章】MySQL的存储函数使用
  20. matplotlib—画正弦、余弦函数图

热门文章

  1. 润滑油市场现状研究分析与发展前景预测报告
  2. 培养自己的财商——读《穷爸爸富爸爸》有感
  3. Java 获得纯数字格式的时间
  4. 2022年仿魔客吧素材下载站主题源码+Discuz内核开发
  5. 前端三件套(一):HTML
  6. CakePHP快速入门
  7. 瑞芯微新一代旗舰Soc芯片RK3588详细介绍
  8. rk3588对npu的再探索,yolov5使用rknn模型推理教程
  9. CS224n学习笔记:Lecture1 2
  10. laravel-debugbar调试工具的安装