ATM机程序     

UnionPayTest.java

package oo.day06.work;

public class UnionPayTest {

}

interface UnionPay{ //银联接口
public double getBalance(); //查询余额
public boolean drawMoney(double number); //取款
public boolean checkPwd(String input); //检查密码
} interface ABC extends UnionPay{ //农行接口
/**支付电话费*/
public boolean payTelBill(String phoneNum,double sum);
}
interface CCB extends UnionPay {
/**增加的支付燃气费功能*/
public void payGasBill(double number);
} class ABCImpl implements ABC{ //农行卡
private double money;
private String pwd; public ABCImpl(double money,String pwd){
this.money = money;
this.pwd = pwd;
} @Override
public double getBalance() {
return money;
}
@Override
public boolean drawMoney(double number) {
if(number <= money){
money -=number;
return true;
}
return false;
}
@Override
public boolean checkPwd(String input) {
if(pwd.equals(input))
return true;
else
return false;
}
public boolean payTelBill(String phoneNum,double sum){
if(sum <= money){
money -=sum;
return true;
}
return false;
}
} /**
* 类:用于描述建设银行实际发行的卡片
* 该卡片具有的功能来自于继承的已经符合银联规范的CCB接口
*/
class CCBImpl implements CCB {
private double money;
private String pwd; public CCBImpl(double money,String pwd){
this.money = money;
this.pwd = pwd;
} @Override
public double getBalance() {
return money;
}
@Override
public boolean drawMoney(double number) {
if(number <= money){
money -=number;
return true;
}
return false;
}
@Override
public void payGasBill(double number) {
if(number < money){
money-=number;
}
}
@Override
public boolean checkPwd(String input) {
if(pwd.equals(input))
return true;
else
return false;
}
}

TestUnionPay.java  (用于测试上面的程序使用)

package oo.day06.work;
import java.util.Scanner;
/**
* 测试实现接口后的类的方法调用
*/
public class TestUnionPay {
public static void main(String[] args) {
//ICBCImpl icbc = new ICBCImpl(2000,"123456");
//ICBC icbc = new ICBCImpl(2000,"123456");
//UnionPay icbc = new ICBCImpl(2000,"123456");
//UnionPay icbc = new ABCImpl(2000,"123456");
UnionPay ccb = new CCBImpl(2000,"123456");    //这里用了“向上造型”
Scanner input = new Scanner(System.in);
System.out.println("请输入密码:");
if(ccb.checkPwd(input.next())){
System.out.println("请输入金额:");
double num = Double.parseDouble(input.next());
if(ccb.drawMoney(num)){
System.out.println("取钱成功,卡余额为:"+ccb.getBalance());
}
else{
System.out.println("取钱失败");
}
}else{
System.out.println("密码错误");
}
}
}

ABCATMTest.java

package oo.day06.work;
import java.util.Scanner;
public class ABCATMTest {
} /**
* ABCATM机类,用于描述模拟插入银行卡后的操作
*/
class ABCATM {
private UnionPay card; public void insertCard(UnionPay userCard){
if (card == null) {
card = userCard;
}
} private void outCard(){
card = null;
} private void showBalance(){
System.out.println("当前余额是:" + card.getBalance());
} private void takeMoney(){
Scanner input = new Scanner(System.in);
System.out.println("请输入取款数目:");
double number = Double.parseDouble(input.next());
if(card.drawMoney(number)){
System.out.println("取款成功");
}else{
System.out.println("取款失败");
}
} private void payTelBill(){
Scanner input = new Scanner(System.in);
if(card instanceof ABC){
ABC abcCard = (ABC)card;          //这里用了“向下造型”。
System.out.println("请输入电话 号码:");
String telNum = input.next();
System.out.println("请输入缴费额:");
double sum = Double.parseDouble(input.next());
if(abcCard.payTelBill(telNum,sum)){
System.out.println("缴费成功");
}else{
System.out.println("缴费失败");
} }else{
System.out.println("您的卡不是农业银行卡,无法完成缴费");
}
}
public void allMenu(){
Scanner input = new Scanner(System.in); System.out.println("请输入密码:");
String pwd = input.next(); if(card.checkPwd(pwd)){
System.out.println("请选择功能:\n 1.查看余额 2.取款 3.缴电话费");
int choice = Integer.parseInt(input.next());
switch(choice){
case 1:
showBalance();
break;
case 2:
takeMoney();
break;
case 3:
payTelBill();
break;
default:
System.out.println("非法输入");
}
}else{
System.out.print("密码错误");
}
this.outCard();
}
}

TestATM.java (用于测试上面的程序使用)

package oo.day06.work;

public class TestATM {
public static void main(String[] args) {
ABCATM atm =new ABCATM();
// ICBCImpl icbc = new ICBCImpl(3000, "123456");//工商银行的卡
ABCImpl abc = new ABCImpl(1000, "123456");//农业银行的卡
// CCBImpl abc = new CCBImpl(1000, "123456");//农业银行的卡 //atm.insertCard(icbc);
atm.insertCard(abc);
atm.allMenu();
}
}

JAVA - ATM机程序的更多相关文章

  1. 第一次尝试使用JAVA编写的ATM机程序

    package study; import java.util.Scanner; public class ATM { private static int[] users = { 111111, 2 ...

  2. 简单的小程序实现ATM机操作

    简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...

  3. java: Runtime和Process调用本机程序

    java: Runtime和Process调用本机程序 调用纸牌程序,Process用来销毁程序 import java.io.IOException; public class RunTimeDem ...

  4. 用java实现一个ATM机系统(2.0版)

    用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...

  5. 模拟ATM机银行系统

    淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...

  6. ATM机模拟系统

    实验要求 https://pan.baidu.com/s/1Sq5joWyVsNhY8DYiyI4UmQ 源代码 /*信1705-1 20173458 王嘉梁*/ package atm; impor ...

  7. JAVA Atm测试实验心得

    通过一个假期的自学,完成了老师布置的样卷任务.使用Escipse编写一个学生成绩的管理系统. 一开始两眼摸黑,通过观看Java课程的视频,地址:https://www.bilibili.com/vid ...

  8. 连接数据库——模拟ATM机查、存、取、开户功能

    1.界面:包含开户.查询.存款.取款.功能 package com.bank.test; /** * * @author Administrator *界面类 */ public class Jiem ...

  9. 简单java web应用程序搭建与部署

    1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...

随机推荐

  1. BZOJ4382 : [POI2015]Podział naszyjnika

    对于每种颜色,可以发现可以切的位置被分割成了若干段独立的区域. 给每个区域一个编号,将$m$种颜色的情况当成字符串来看,如果两个切口的字符串完全匹配,那么可以在这里切两刀. 可以构造hash函数,通过 ...

  2. Hadoop IPC的代码结构分析

    与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...

  3. 来自于2016.2.23的flag

    正是中午,百废待兴,写点什么调节一会儿心情吧.正巧有许多的想法. 机房来了许多小朋友,多么像一年之前的我啊,想写题,心又纷乱,但不同的是他们比我强太多了. 停课是什么感觉?停课在机房与寒暑假.双休日在 ...

  4. 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法

    使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...

  5. NOI 题库 2753

    2753  走迷宫 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直 ...

  6. C语言与水仙花数

    C语言与水仙花数 水仙花数:前提三位数,"个位数的立方"加上"十位数的立方"加上"百位数的立方"恰好等于这个数. 我们来用C语言书写水仙花数 ...

  7. Maven进价:Maven的生命周期阶段

    一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...

  8. Hibernate前置和后置方法

    public class Test01 { private ServiceRegistry sr =null; private Session se =null; private Transactio ...

  9. HDU1051 贪心

    Wooden Sticks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  10. cms修改后台目录

    if (!_dirName.Equals("manage")) { if (PageType.IndexOf(_dirName) != -1) { PageType = PageT ...