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. BZOJ3567 : AABB

    考虑以块大小为$32$将序列分块,设$s[i][j]$表示前$i$块和前$j$块矩形相交的对数,$f[i][j]$表示矩形$i$和前$j$块的相交个数. 如果矩形$i$和$j$相交,那么有: $x_1 ...

  2. BZOJ4451 : [Cerc2015]Frightful Formula

    $(i,1)$对答案的贡献为$l_iC(2n-i-2,n-i)a^{n-1}b^{n-i}$. $(1,i)$对答案的贡献为$t_iC(2n-i-2,n-i)*a^{n-i}b^{n-1}$. $(i ...

  3. centos 编译 安装 protobuf

    link:http://dbua.iteye.com/blog/1633079 yum -y install gcc+ gcc-c++ yum -y install make 下载protobuf-2 ...

  4. BZOJ 2049 & LCT又一模板

    题意: 自己看...加边删边问联通... SOL: 就加了一个findroot而已... 然而时间还是惨不忍睹...优化全开也才1700ms...膜seter... Code: /*========= ...

  5. Haskell 笔记 ②

    ①如何写一个求阶层函数? fac 0 =1 fac n=n*fac(n-1) 函数自适应匹配参数,可以把特判情况写在前面,注意按顺序匹配的,n这种万能情况写在最前面就完蛋了.同时你也注意到,函数只能一 ...

  6. RequireJS 循环依赖报 模块undefined 处理方案

    RequireJS 循环依赖 开始学习使用RequireJS之后做了几个小例子,之后想着把手头的项目也用RequireJS写一遍试试.感觉胜利就在前方了,忽然发现始终卡在一个问题上: 很常见的一个问题 ...

  7. POJ 1244 Slots of Fun(计算几何)

    题目链接 很简单的一题,数据 很小,直接暴力的.但是也是写也好久,有几个数,没算好...一次CE,一次PE,3Y. #include <iostream> #include <cst ...

  8. 关于transition回调函数的几种写法

    平时工作中经常遇到需要transition动画结束后触发某个功能的问题,但是在映像中好像只见过animate的回调函数, 而transition的很多属性无法在animate中使用,经过一些总结归纳, ...

  9. UVA 558 判定负环,spfa模板题

    1.UVA 558 Wormholes 2.总结:第一个spfa,好气的是用next[]数组判定Compilation error,改成nexte[]就过了..难道next还是特殊词吗 题意:科学家, ...

  10. Linux_查看linux并发连接数

    1.查看Web服务器(Nginx Apache)的并发请求数及其TCP连接状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a ...