JAVA - ATM机程序
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机程序的更多相关文章
- 第一次尝试使用JAVA编写的ATM机程序
package study; import java.util.Scanner; public class ATM { private static int[] users = { 111111, 2 ...
- 简单的小程序实现ATM机操作
简单的小程序实现ATM机操作 代码如下: package Day06; import java.util.Scanner; public class TestAccount { public stat ...
- java: Runtime和Process调用本机程序
java: Runtime和Process调用本机程序 调用纸牌程序,Process用来销毁程序 import java.io.IOException; public class RunTimeDem ...
- 用java实现一个ATM机系统(2.0版)
用java实现一个ATM机系统(2.0版) java实现银行ATM自助取款机,实现功能:用户登录.余额查询.存钱.取钱.转账.修改密码.退出系统. 文章目录 用java实现一个ATM机系统(2.0版) ...
- 模拟ATM机银行系统
淄博汉企Java基础考核项目 模拟银行自助终端系统 一. 本系统模拟银行用户使用ATM机开户.查询.存款.取款功能,要求使用java语言编程实现. 说明: 1. 对于数据输入异常,可使用java异常处 ...
- ATM机模拟系统
实验要求 https://pan.baidu.com/s/1Sq5joWyVsNhY8DYiyI4UmQ 源代码 /*信1705-1 20173458 王嘉梁*/ package atm; impor ...
- JAVA Atm测试实验心得
通过一个假期的自学,完成了老师布置的样卷任务.使用Escipse编写一个学生成绩的管理系统. 一开始两眼摸黑,通过观看Java课程的视频,地址:https://www.bilibili.com/vid ...
- 连接数据库——模拟ATM机查、存、取、开户功能
1.界面:包含开户.查询.存款.取款.功能 package com.bank.test; /** * * @author Administrator *界面类 */ public class Jiem ...
- 简单java web应用程序搭建与部署
1. 准备工作 工具:tomcat.editplus.jdk.windows操作系统 操作:在windows操作系统上安装jdk.tomcat.editplus,配置JAVA_HOME,Path,CL ...
随机推荐
- BZOJ4382 : [POI2015]Podział naszyjnika
对于每种颜色,可以发现可以切的位置被分割成了若干段独立的区域. 给每个区域一个编号,将$m$种颜色的情况当成字符串来看,如果两个切口的字符串完全匹配,那么可以在这里切两刀. 可以构造hash函数,通过 ...
- Hadoop IPC的代码结构分析
与IPC相关的代码在org.apache.hadoop.ipc包下.共七个文件,其中4个辅助类: RemoteException Status VersionedProtocol Connection ...
- 来自于2016.2.23的flag
正是中午,百废待兴,写点什么调节一会儿心情吧.正巧有许多的想法. 机房来了许多小朋友,多么像一年之前的我啊,想写题,心又纷乱,但不同的是他们比我强太多了. 停课是什么感觉?停课在机房与寒暑假.双休日在 ...
- 使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法
使用AFNetworking 2.0 请求数据时出现错误 Request failed: unacceptable content-type: text/html 解决方法 添加一行 manager. ...
- NOI 题库 2753
2753 走迷宫 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直 ...
- C语言与水仙花数
C语言与水仙花数 水仙花数:前提三位数,"个位数的立方"加上"十位数的立方"加上"百位数的立方"恰好等于这个数. 我们来用C语言书写水仙花数 ...
- Maven进价:Maven的生命周期阶段
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...
- Hibernate前置和后置方法
public class Test01 { private ServiceRegistry sr =null; private Session se =null; private Transactio ...
- HDU1051 贪心
Wooden Sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- cms修改后台目录
if (!_dirName.Equals("manage")) { if (PageType.IndexOf(_dirName) != -1) { PageType = PageT ...