继承执行,我啥也不行;对象与类,我听了不会。
下面这个课堂小程序几乎覆盖到了本周学习的所有知识
简易的ATM机系统
主要功能:当农行ATM机插入一张银联卡时,输入密码,可以实现查询余额与取款功能,
当这张银联卡是农业银行卡的时候,在实现前面功能的基础上还可以实现手机缴费功能,
同时可以透支2000元。
主要运用到的知识:接口的继承,类的继承以及类对接口的执行
银联顶层接口代码:
public interface UnionPay {
public double viewBlance();//查看余额
public boolean passWord(String num);//输入密码
public boolean getMoney(double n);//取款
}
工商银行子接口代码:
public interface ICBC extends UnionPay {
public boolean onlinePay(double num);
}
工商银行接口执行代码:
public class ICBC_Test implements ICBC{
private double money;
private String password;
//初始化密码,余额
public ICBC_Test(String password,double money){
this.password=password;
this.money=money;
}
@Override
//查看余额
public double viewBlance() {
// TODO Auto-generated method stub
return money;
}
@Override
//输入密码
public boolean passWord(String num) {
// TODO Auto-generated method stub
if(num.equals(password))
{
return true;
}else{
return false;
}
}
@Override
//取钱
public boolean getMoney(double n) {
// TODO Auto-generated method stub
if(n<=money)
{
money-=n;
return true;
}
return false;
}
//在线支付
public boolean onlinePay(double num ) {
// TODO Auto-generated method stub
if(num<=money)
{
money-=num;
return true;
}else{
return false;
}
}
}
农行子接口代码:
public interface ABC extends UnionPay{
public boolean tele_Charge(String tele_num,double tele_cost);
}
农行接口执行代码:
public class ABC_Test implements ABC{
private double money;
private String password;
public ABC_Test(String password,double money){//初始化密码余额
this.money=money;
this.password=password;
}
@Override
public double viewBlance() {//查看余额
// TODO Auto-generated method stub
return money;
}
public boolean passWord(String num) {
// TODO Auto-generated method stub
if(password.equals(num)){
return true;
}else{
return false;
}
}
@Override
public boolean getMoney(double n) {
// TODO Auto-generated method stub
if(n<=money+2000){
money=money-n;
return true;
}else{
return false;
}
}
@Override
public boolean tele_Charge(String tele_num, double tele_cost) {
if(tele_num.length()==11&&tele_cost<=money+2000){
money=money-tele_cost;
return true;
}else{
return false;
}
// TODO Auto-generated method stub
}
}
农行ATM机类代码:
import java.util.Scanner;
public class ATM {
public UnionPay card;//银联卡
// ATM(UnionPay card){
// this.card=card;
// }
public void instertCard(UnionPay card){//插卡
if(this.card==null){
this.card=card;
}
}
public void outCard(){//取卡
this.card=null;
}
public void showMoney(){//查看余额
System.out.println("余额为"+card.viewBlance());
}
public void takeMoney(){//取款
Scanner scan=new Scanner(System.in);
System.out.println("请输入取款金额:");
double num=scan.nextDouble();
if(card.getMoney(num)){
System.out.println("取款成功,余额"+card.viewBlance());
}else{
System.out.println("取款失败,余额不足");
}
}
public void telePay(){//话费充值
Scanner scan=new Scanner(System.in);
if(card instanceof ABC){
ABC abcCard=(ABC)card;
System.out.println("请输入电话号码:");
String telNum=scan.next();
System.out.println("请输入充值金额");
double telCost=scan.nextDouble();
if(abcCard.tele_Charge(telNum, telCost)){
System.out.println("充值成功余额"+card.viewBlance());
}else{
System.out.println("充值失败,卡内余额不足或电话号码有误");
}
}else{
System.out.println("充值失败,非本行卡");
}
}
public void ATM_Menu(){//菜单栏
int i=3;
while(true){
Scanner scan=new Scanner(System.in);
System.out.println("请输入密码");
String pwd=scan.next();
//System.out.println(pwd);
if(card.passWord(pwd)){
while(true){
System.out.println("请选择服务项目:\n 1.查看余额\n" +
" 2.取款\n 3.话费充值");
int n=scan.nextInt();
switch(n){
case 1:
showMoney();
break;
case 2:
takeMoney();
break;
case 3:
telePay();
break;
default:
System.out.println("非法操作");
}
System.out.println("按0键退出,按其他键返回主界面");
int a=scan.nextInt();
if(a==0){
break;
}
}
}else{
i--;
if(i>0){
System.out.println("密码输入错误,还有"+i+"次机会!");
}else{
System.out.println("听话,给人家还回去吧!");
break;
}
}
}
this.outCard();//取卡
}
}
农行卡测试代码:
public class ATM_test {
public static void main(String[] args) {
ABC_Test abc=new ABC_Test("199952", 3000);
//ICBC_Test icbc=new ICBC_Test("199952",3000);
ATM atm=new ATM();
atm.instertCard(abc);
atm.ATM_Menu();
}
}
测试结果:
工商银行卡测试代码:
public class ATM_test {
public static void main(String[] args) {
//ABC_Test abc=new ABC_Test("199952", 3000);
ICBC_Test icbc=new ICBC_Test("199952",3000);
ATM atm=new ATM();
atm.instertCard(icbc);
atm.ATM_Menu();
}
}
测试结果:
密码连续输错三次会自动退出:
初次接触JAVA,学习起来感觉并没有想象中的那么容易,但也没有因为太难而被劝退,emmmm,睡了睡了,总结个锤锤。