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 ...
随机推荐
- ACM: meixiuxiu学图论-并查集-最小生成树-解题报告
/* 最小生成树,最小环的最大权值按照排序后去构建最小生成树就可以了,注意遇到的第一个根相同的点就记录权值,跳出,生成的环就是最小权值环. */ //AC代码: #include"iostr ...
- 读书笔记:javascript高级技巧(一)
一.安全的类型检测 javascript内置的类型检测机制并非完全可靠,由于浏览器或者作用域等原因,经常会发生错误.大家知道,在任何值调用toString()方法都会返回一个[object Nativ ...
- 【BZOJ】1105: [POI2007]石头花园SKA
题意 二维平面上有\(n(2 \le n \le 1000000)\)个点,可以花费\(w_i\)交换第\(i\)个点的横纵坐标.求在满足能覆盖所有点的最小矩阵周长最短的情况下花费最小. 分析 这题太 ...
- 【BZOJ2049】 [Sdoi2008]Cave 洞穴勘测 LCT/并查集
两种方法: 1.LCT 第一次LCT,只有link-cut和询问,无限T,到COGS上找了数据,发现splay里的父亲特判出错了(MD纸张),A了,好奇的删了反转T了.... #include < ...
- GO语言练习:网络编程 TCP 示例
1.代码 2.编译及运行 1.网络编程 TCP 示例 simplehttp.go 代码 package main import ( "net" "os" &qu ...
- osg 路径 动画 效果
osg 路径 动画 效果 转自:http://blog.csdn.net/zhuyingqingfen/article/details/8248157 #include <osg/Group&g ...
- 初识WebSocket
众所周知,Http协议是无状态的,并且是基于Request/Response的方式与服务器进行交互,也就是我们常说的单工模式.但是随着互联 网的发展,浏览器与服务端进行双向通信需求的增加,长轮询向服务 ...
- js判断图片加载完成后获取图片实际宽高
通常,我们会用jq的.width()/.height()方法获取图片的宽度/高度或者用js的.offsetwidth/.offsetheight方法来获取图片的宽度/高度,但这些方法在我们通过样式设置 ...
- [zt]摄像机标定(Camera calibration)笔记
http://www.cnblogs.com/mfryf/archive/2012/03/31/2426324.html 一 作用建立3D到2D的映射关系,一旦标定后,对于一个摄像机内部参数K(光心焦 ...
- 学习使用vim,熟悉Linux
随着对vim一步一步的熟悉,对Linux的资料查阅,在加上今天阅读了王垠的文章,更加的觉得学习vim是正确的选择.抛弃Windows思维,进入Linux的世界,才发现是思维上的转变,如学习英语一样,是 ...