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 ...
随机推荐
-
(三)Maven仓库介绍与本地仓库配置
1.Maven本地仓库/远程仓库的基本介绍 示意图: 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找.对于依赖的包大家可以从这个地 ...
-
number 数据类型的分析。
在js中,number数据类型可能算最令人关注的的类型之一了. number类型分为整数和浮点数. 一,整型数,整型又分为十进制,八进制,十六进制. 十进制即是生活中接触到的:而八进制数的首位必须是零 ...
-
Linux系统下的Nginx安装
nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译环 ...
-
node.js初学遇到的问题
是用express安装一个网站基础架构时 express -t ejs microblog 但是出来的模板引擎是jade,通过修改js也修改模板引用npm install 等等修改了index.ejs ...
-
15个Linux Wget下载实例终极指南
15个Linux Wget下载实例终极指南 Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到 ...
-
javaScript的一些奇妙动画
今天我给大家讲一下JavaScript中的显示隐藏.淡入淡出的效果 显示与隐藏动画效果 show()方法: show()方法会动态地改变当前元素的高度.宽度和不透明度,最终显示当前元素,此时 ...
-
Windows系统完全退出VMware方法
原始日期:2013-11-30 16:09 事件起因:本来机子上装的Vbox,装了个winXp系统,目的是将一些开发用地软件工具神马的安装在虚拟机,保证主机的流畅稳定.无奈,Vbox对主机与虚拟机的文 ...
-
Linux下多路复用IO接口epoll/select/poll的区别
select比epoll效率差的原因:select是轮询,epoll是触发式的,所以效率高. Select: 1.Socket数量限制:该模式可操作的Socket数由FD_SETSIZE决定,内核默认 ...
-
《你不知道的JavaScript下卷》知识点笔记
1. [1, 2, 3] == [1, 2, 3] 返回false [1, 2, 3] == “1, 2, 3” 返回true 2. 如果 < 比较的两个值都是字符串, 就像在b < c中 ...
-
电梯调度 结对项目开发(郭林林&;胡潇丹)
(一)需求分析: 上升,下降,开门,关门: 超过负载以后发出警报,下去乘客: 电梯出现故障后,电梯停止: 电梯楼层的输入框可以同时指定所要到的楼层,也是楼层的显示框: 电梯同时记录多个状态,即为到达多 ...