java实现简单的ATM项目
本文实例为大家分享了java实现简单的ATM项目的具体代码,供大家参考,具体内容如下
首先要了解的是,这个ATM项目本身是一个轻量级的项目,只为了完成一些ATM具备的一些方法,并非是真正完成一个ATM的全部功能和需求
那么在这个轻量级的ATM项目中,我将完成添加储蓄账号,添加信用账户,提款,取款等基本功能。
适合新手查看,需要掌握java的继承,多态,封装等基本技术能力
那么,首先创建如下的对象类:Account(账户类),Bank(银行类),CreditAccount(信用账户),SavingAccount(储蓄账户类);
大家首先应该搞清楚,这些类文件中之间的关系,每个类之间需要用到什么样的方法;
那么我们先填写Account类
packagecom.atm.entity;
/**
*银行账户类
*/
publicabstractclassAccount{
/**
*账户帐号
*/
privateStringaccountId;
/**
*账户姓名
*/
privateStringaccountName;
/**
*账户密码
*/
privateStringaccountPwd;
/**
*账户余额
*/
privatedoubleaccountBalance;
/**
*账户身份证号
*/
privateStringaccountPersonId;
/**
*账户邮箱
*/
privateStringaccountEmail;
/**
*账户联系电话
*/
privatelongaccountTelno;
publicAccount(){
}
publicAccount(StringaccountName,StringaccountPwd,StringaccountPersonId,longaccountTelno,
StringaccountEmail){
this.accountName=accountName;
this.accountPwd=accountPwd;
this.accountPersonId=accountPersonId;
this.accountTelno=accountTelno;
this.accountEmail=accountEmail;
}
publicStringgetAccountId(){
returnaccountId;
}
publicvoidsetAccountId(StringaccountId){
this.accountId=accountId;
}
publicStringgetAccountName(){
returnaccountName;
}
publicvoidsetAccountName(StringaccountName){
this.accountName=accountName;
}
publicStringgetAccountPwd(){
returnaccountPwd;
}
publicvoidsetAccountPwd(StringaccountPwd){
this.accountPwd=accountPwd;
}
publicdoublegetAccountBalance(){
returnaccountBalance;
}
publicvoidsetAccountBalance(doubleaccountBalance){
this.accountBalance=accountBalance;
}
publicStringgetAccountPersonId(){
returnaccountPersonId;
}
publicvoidsetAccountPersonId(StringaccountPersonId){
this.accountPersonId=accountPersonId;
}
publicStringgetAccountEmail(){
returnaccountEmail;
}
publicvoidsetAccountEmail(StringaccountEmail){
this.accountEmail=accountEmail;
}
publiclonggetAccountTelno(){
returnaccountTelno;
}
publicvoidsetAccountTelno(longaccountTelno){
this.accountTelno=accountTelno;
}
/**
*存款
*
*@parammoney
*存款金额
*@return返回账户余额
*/
publicdoubledepoist(doublemoney){//money形式参数
if(money>0)
this.accountBalance+=money;
returnthis.accountBalance;
}
/**
*取款
*
*@parammoney
*取款金额
*@return返回账户余额
*/
publicabstractdoublewithdraw(doublemoney);
/**
*转账
*
*@paramanotherAccount
*转账的对方账户
*@parammoney
*转账金额
*@return返回当前账户的余额
*/
publicdoubletranferAccount(AccountanotherAccount,doublemoney){//形参
anotherAccount.accountBalance+=money;
this.accountBalance-=money;
returnthis.accountBalance;
}
}
之后填写信用账户类CreditAccount;我们应该明白,他是继承Account类的,但是,他又需要拥有自身独立的属性,我们可以添加一个最高透支额度的属性
这样来实现代码
/**
*信用账户
*
*
*/
publicclassCreditAccountextendsAccount{
//成员变量
privatedoublemaxOverdraw;//最高透支额度
//构造函数
publicCreditAccount(StringaccountName,StringaccountPwd,StringaccountPersonId,longaccountTelno,StringaccountEmail,doublemaxOverdraw){
super(accountName,accountPwd,accountPersonId,accountTelno,accountEmail);
this.maxOverdraw=maxOverdraw;
}
//set,get
publicvoidsetMaxOverdraw(doublemaxOverdraw){
this.maxOverdraw=maxOverdraw;
}
publicdoublegetMaxOverdraw(){
returnthis.maxOverdraw;
}
@Override
publicdoublewithdraw(doublemoney){
//TODOAuto-generatedmethodstub
return0;
}
}
同理 填写储蓄账户(SavingAccount)类文件
packagecom.atm.entity;
/**
*储蓄账户
*
*
*/
publicclassSavingAccountextendsAccount{
publicSavingAccount(StringaccountName,StringaccountPwd,StringaccountPersonId,longaccountTelno,StringaccountEmail){
super(accountName,accountPwd,accountPersonId,accountTelno,accountEmail);
}
@Override
publicdoublewithdraw(doublemoney){
//TODOAuto-generatedmethodstub
if(money<=getAccountBalance()){
}
else
System.out.println("账户余额不足");
returngetAccountBalance();
}
}
最重要的是填写Bank类的内容,在这个类中,我们要完成注册,产生银行账户,统计所有信用账户的最高透支额度的总和,统计所有账户的总余额,查询出所有信用账户中透支额度最高的账户,查询出所有储蓄账户中余额最高的账户等功能
我们这样填写
packagecom.atm.entity;
importjava.text.SimpleDateFormat;
importjava.util.Date;
/**
*银行类
*
*@authorqianghj
*
*银行开户---->银行账户Accountaccount=bank.开户(...)
*
*/
publicclassBank{
publicAccount[]accArray=newAccount[2000];
publicintcount=0;//表示银行账户的个数
/**
*银行账户开户
*
*@paramaccName
*用户名称
*@paramaccPwd
*用户密码
*@paramaccPersonId
*用户身份证
*@paramaccTelno
*用户手机号码
*@paramaccEmail
*用户邮箱
*@paramaccountType
*账户类型0:储蓄账户1:信用账户
*@parammaxOverdraw
*信用账户的最高透支额度
*@return返回有效的银行账户
*/
publicAccountregistAccount(StringaccName,StringaccPwd,StringaccPersonId,longaccTelno,StringaccEmail,
intaccountType,doublemaxOverdraw){
Accountaccount=null;
if(accountType==0)
account=newSavingAccount(accName,accPwd,accPersonId,accTelno,accEmail);
else
account=newCreditAccount(accName,accPwd,accPersonId,accTelno,accEmail,maxOverdraw);
account.setAccountId(generateNextAccountId());
accArray[count++]=account;
returnaccount;
}
/**
*产生银行账户帐号
*
*@return返回下一个账户的帐号1,2,3,,4
*/
publicStringgenerateNextAccountId(){
return"62223421"+newSimpleDateFormat("yyyyMMddHHmmssSSS").format(newDate());
}
//统计所有信用账户的最高透支额度的总和(1050)2000,1050
publicdoublestatisticsCreditAccountMaxoverdrawSum(){
doublesum=0;
for(inti=0;item){
tem=creditAccount.getMaxOverdraw();
}
}
}
returntem;
}
//查询出所有储蓄账户中余额最高的账户
publicdoublemaxBalance(){
doubletem=0;
for(inti=0;item){
tem=savingAccount.getAccountBalance();
}
}
}
returntem;
}
}
最后测试类
packagetest;
importorg.junit.Test;
importcom.atm.entity.Account;
importcom.atm.entity.Bank;
importcom.atm.entity.CreditAccount;
publicclassTestAccount{
@Test
publicvoidtestRegist(){
Bankbank=newBank();
for(inti=0;i<1000;i++){
//0:储蓄账户1:信用账户
Accountacc=bank.registAccount("tom"+i,"abc123","2729382932",183923302L,"tom"+i+"@163.com",
i%2,(i%2==0)?0:3000);
if(i%2!=0){
CreditAccountcreditAcc=(CreditAccount)acc;
System.out.println("所有信用账户的名字:"+creditAcc.getAccountName()+"和透支额度:"+creditAcc.getMaxOverdraw());
}
}
//1000个银行账户开户,500是信用账户,最高透支额度随机数赋值,再测试
//doublesum=bank.统计所有信用账户的最高透支额度的总和();
doublesum=bank.statisticsCreditAccountMaxoverdrawSum();
System.out.println("所有信用账户的最高透支额度的总和:"+sum);
doublesum1=bank.aggregateAamount();
System.out.println("总余额为"+sum1);
}
}
测试类的内容不多写,大家有兴趣可以自行测试。这样,我们就完成了一个比较简单的ATM项目。希望对新学者有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。