import java.util.Scanner
public class ZH {
private String zh//账户
private String password//密码
private String openTime//开户时间
private String sfz//身份z号
private double je//存款金额
public String getZh() {
return zh
}
public void setZh(String zh) {
this.zh = zh
}
public String getPassword() {
return password
}
public void setPassword(String password) {
this.password = password
}
public String getOpenTime() {
return openTime
}
public void setOpenTime(String openTime) {
this.openTime = openTime
}
public String getSfz() {
return sfz
}
public void setSfz(String sfz) {
this.sfz = sfz
}
public double getJe() {
return je
}
public void setJe(double je) {
this.je = je
}
//存款方法
public void ck(double je){
this.je=this.je+je//存入的金额加上原有的金额
}
//取款方法
public void qk(double je){
if(je>this.je){//取款金额大于余额
System.out.println("存款余额不足")
}else{
this.je=this.je-je//原有的金额减去取出的金额
}
}
public static void main(String[] args) {
ZH zh = new ZH()//初始化一个账户信息
zh.setJe(10000.0)//向zh账户添加余额
zh.setOpenTime("2013.12.3")//向zh账户添加开发时间
zh.setPassword("123456")//向zh账户添加密码
zh.setSfz("123456789")//向zh账户添加身份z
zh.setZh("zhangsan")//向zh账户添加账号
System.out.println("欢迎光临模拟银行")
Scanner scan = new Scanner(System.in)
int count=0//记录输入错误的次数
while(1==1){//循环
System.out.println("请输入账号")
String zhm=scan.next()
System.out.println("请输入密码")
String mm=scan.next()
if(zhm.equals(zh.getZh()) &&mm.equals(zh.getPassword())){//输入的信息与zh账户信息的密码和账号一致
while(1==1){
System.out.println("当前余额为:"+zh.getJe()+"元。请选择 *** 作:1.存款;2.取款;3.退出(只能输入数字)")
String cz=scan.next()
switch (Integer.parseInt(cz)) {
case 1:
System.out.println("请输入存款金额(输入小数)")
double ckje=scan.nextDouble()
zh.ck(ckje)
System.out.println("实施存款:"+ckje+"元,当前余额为"+zh.getJe()+"元")
break
case 2:
System.out.println("请输入取款金额(输入小数)")
double qkje=scan.nextDouble()
zh.qk(qkje)
System.out.println("实施取款:"+qkje+"元,当前余额为"+zh.getJe()+"元")
break
case 3:
break
default:
System.out.println("暂无此功能")//输入1或者2、3以外的 *** 作
break
}
if("3".equals(cz)){
break
}
}
System.out.println("退出 *** 作")
break
}else{
if(count>=3){
System.out.println("已输入错误三次,账号被锁")
break//结束循环
}else{
System.out.println("账号或密码错误,请重新输入")
count++//错误一次count+1
continue//进入下次循环
}
}
}
}
}
我帮你一共写了四个类,一个账户Account类,两个账户类的子类(xyk账户CreditCardAccount类和借记卡DebitCardAccount类),另外再加上一个演示透支效果测试Test类。 代码贴在下面:/**
* 账户类。
*
* @author CodingMouse
* @version 1.0
*/
public abstract class Account { protected String accountNumber // 账号
protected double overage// 余额
protected double annualInterestRate // 年利率
/**
* 参数化构造器方法。
*
* 用于开户。
* @param accountNumber 预设账号
* @param overage 初始余额
* @param annualInterestRate 预设年利率
*/
public Account(String accountNumber, double overage, double annualInterestRate) {
super()
// 设定账号。
this.accountNumber = accountNumber
// 设定初始余额,至少为零。
this.overage = overage >= 0 ? overage : 0
// 设定年利率,至少为零。
this.annualInterestRate = annualInterestRate >= 0 ? annualInterestRate : 0
}
/**
* 查询账号。
* @return 返回账号。
*/
public String getAccountNumber() {
return this.accountNumber
}
/**
* 设置账号。
* @param accountNumber 新账号。
*/
public void setAccountNumber(String accountNumber) {
this.accountNumber = accountNumber
} /**
* 查询余额方法。
* @return 返回账户余额。
*/
public double getOverage() {
return this.overage
} /**
* 存款方法。
* @param money 要存入的金额。
* @return 返回true时存款成功,否则存款失败。
*/
public boolean depositMoney(double money) {
// 如果金额小于零,则不能存款
if (money <= 0)
return false
// 否则将相应的金额累加到账户余额中
this.overage += money
return true
}
/**
* 取款方法。
*
* 默认不能透支。
* @param money 要取出的金额。
* @return 返回true时取款成功,否则取款失败。
*/
public boolean drawMoney(double money) {
// 如果账户余额不足,则不能取款
if (this.overage <money)
return false
// 否则从账户余额中扣除相应的金额
this.overage -= money
return true
} /**
* 查询年利率。
* @return 返回年利率。
*/
public double getAnnualInterestRate() {
return this.annualInterestRate
} /**
* 设置年利率。
* @param annualInterestRate 新的年利率。
*/
public void setAnnualInterestRate(double annualInterestRate) {
this.annualInterestRate = annualInterestRate
}
}
--------------------------------------------------
/**
* 借记卡账户。
*
* 不能透支。
* @author CodingMouse
* @version 1.0
*/
public class DebitCardAccount extends Account { /**
* 重写父类构造器。
* @param accountNumber 预设账号
* @param overage 初始余额
* @param annualInterestRate 预设年利率
*/
public DebitCardAccount(String accountNumber, double overage,
double annualInterestRate) {
super(accountNumber, overage, annualInterestRate)
}}
-------------------------------------------------
/**
* xyk账户。
*
* 可以透支。
* @author CodingMouse
* @version 1.0
*/
public class CreditCardAccount extends Account { private double overdraftLimit // 透支限度
/**
* 重载构造器。
*
* 便于构建可透支的xyk账户实例。
* @param accountNumber 预设账号
* @param overage 初始余额
* @param annualInterestRate 预设年利率
* @param overdraftLimit 透支限度
*/
public CreditCardAccount(String accountNumber, double overage,
double annualInterestRate, double overdraftLimit) {
super(accountNumber, overage, annualInterestRate)
this.overdraftLimit = overdraftLimit
} /**
* 查询透支限度的方法。
* @return 透支限度金额。
*/
public double getOverdraftLimit() {
return this.overdraftLimit
} /**
* 设置透支限度的方法。
* @param overdraftLimit 新的透支限度金额。
*/
public void setOverdraftLimit(double overdraftLimit) {
// 透支限度必须为零和正数,否则为零。
this.overdraftLimit = overdraftLimit >= 0 ? overdraftLimit : 0
} /**
* 重写父类构造器。
* @param accountNumber 预设账号
* @param overage 初始余额
* @param annualInterestRate 预设年利率
*/
public CreditCardAccount(String accountNumber, double overage,
double annualInterestRate) {
super(accountNumber, overage, annualInterestRate)
} /**
* 重写父类取款方法。
*
* 将默认不能透支的取款改为可以透支的取款。
* @param money 要取出的金额。
* @return 返回true时取款成功,否则取款失败。
*/
@Override
public boolean drawMoney(double money) {
// 如果账户余额 + 透支限度的总金额仍不足,则不能取款
if (this.overage + this.overdraftLimit <money)
return false
// 否则从账户余额中扣除相应的金额
this.overage -= money
return true
}}
------------------------------------------
/**
* 测试账户使用。
*
* @author CodingMouse
* @version 1.0
*/
public class Test { /**
* 主程序方法。
* @param args 入口参数。
*/
public static void main(String[] args) {
// 创建一个不能透支的借记卡账户。
System.out.println("------------ 借记卡账户 ------------")
DebitCardAccount debitCardAccount = new DebitCardAccount("CHK20100117001", 100, 0.02)
// 初始余额有100元,调用并打印取90元和取120元的结果。
System.out.println("取90元的结果:" + debitCardAccount.drawMoney(90))
// 重新存入90元
debitCardAccount.depositMoney(90)
System.out.println("取120元的结果:" + debitCardAccount.drawMoney(120))
// 创建一个可以透支的xyk账户。
System.out.println("------------ xyk账户 ------------")
CreditCardAccount crebitCardAccount = new CreditCardAccount("CHK20100117002", 100, 0.03, 50)
// 初始余额有100元,并且透支限度为50元,调用并打印取90元、取120元和取160元的结果。
System.out.println("取90元的结果:" + crebitCardAccount.drawMoney(90))
// 重新存入90元
crebitCardAccount.depositMoney(90)
System.out.println("取120元的结果:" + crebitCardAccount.drawMoney(120))
// 重新存入120元
crebitCardAccount.depositMoney(120)
System.out.println("取160元的结果:" + crebitCardAccount.drawMoney(160))
}
}
-------------------------------------- 在我机器上的测试打印结果为: ------------ 借记卡账户 ------------
取90元的结果:true
取120元的结果:false
------------ xyk账户 ------------
取90元的结果:true
取120元的结果:true
取160元的结果:false ----------------------------------------- 这个题目只是简单考查了下封装、继承、多态三大面向对象特性,我提供的代码仅作参考。 如果你懒得复制,想要程序源代码文件或有不明白的地方,可以发邮件到我QQ邮箱,我再回给你。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)