BAM银行账户管理系统java类.docx
- 文档编号:23090561
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:27
- 大小:148.34KB
BAM银行账户管理系统java类.docx
《BAM银行账户管理系统java类.docx》由会员分享,可在线阅读,更多相关《BAM银行账户管理系统java类.docx(27页珍藏版)》请在冰豆网上搜索。
BAM银行账户管理系统java类
BAM银行账户管理系统(ATM管理系统)
本系统采用JAVA语言并在eclipse环境下编写测试完成,涉及类的概念,以及面向对象的几大特性(继承,封装,多态,抽象),也有异常处理机制,基本可以满足大多数BAM系统的相关实现,且代码内标注大量注释,读者可以很轻松地理解相关逻辑,大家可以开心参考。
系统简介:
1、JAVA类的面相对象的应用,拥有异常处理机制,不会因为输入错误而导致程序崩溃
2、主要有5个类,即①Account(账户类)
②SaveAccount(储蓄账户类):
不能透支
③CreditAccount(信用账户类):
可以透支
④Bank(银行类)
⑤ATM(ATM类)
类的具体属性级行为见代码
ﻩ 3、各个类之间的相互关系,涉及继承、封装、多态、抽象,在多态中又涉及重载和重
写,请读者注意相关联系(关注注释)
4、可以实现数据保存功能,数据将保存在文件中(即当你注册了一个账户,下次再登
陆系统时,可以实现与上次最后的操作相衔接)
5、账户号自动生成,比较符合现实
6、主要功能有:
1。
开户
ﻩ 2.查询账户余额
ﻩﻩﻩﻩﻩ 3.存款
ﻩﻩﻩ4.取款
ﻩ5.转账(一个账户到另一个账户)等……
7、运行时界面简示
ﻩﻩ1。
初始界面(账户登录)
2。
账户登录后界面
注意事项:
1、本系统采用的编程环境是JDK1。
7,jer7.所以,运行代码需要保持电脑上所装的JDK为1.7以上版本,如有报错,只需换个高一点的版本即可。
注意:
第一次装JDK,要配置环境变量(请查阅相关资料,比较简单)
2、本系统代码涉及到包,所以如果报名不一致就会报错,解决方法:
修改一下包名即可
3、建议把各个类写在同一个包下面,且每一个类单独写一个java文件,如下图:
ﻩ4、在运行程序前,需要在项目下面新建一个account.txt(用来保存数据)文件(如上图),并在其中写入至少一个账户信息,(如下图,其中每项代表的意思,请读者参照代码内的注释),否则在初始化的时候会因为找不到账户信息,从而产生异常。
ﻩ
系统源码:
Account类
packagecom.qx;//包名
/**
*账户类:
包含两种账户类型-—〉1.储蓄账户2.信用账户
*/
publicabstractclassAccount{
//属性
ﻩprotectedlongid;
ﻩprotectedStringpassword;
ﻩprotectedString name;
ﻩprotectedStringpersonId;
ﻩprotected intaccountType;
protecteddoublebalance;
//构造方法
ﻩpublicAccount(){
super();
ﻩ}
public Account(longid,Stringpassword,Stringname,StringpersonId,
ﻩintaccoutType,double balance){
ﻩsuper();
ﻩthis。
id = id;
this。
password=password;
this。
name = name;
ﻩthis.personId=personId;
this.accountType= accountType;
ﻩthis.balance=balance;
ﻩ}
ﻩ//getXxx,setXxx方法
public long getId(){
ﻩreturn id;
ﻩ}
ﻩpublicvoidsetId(longid){
ﻩthis.id=id;
}
ﻩpublicStringgetPassword(){
ﻩreturn password;
}
ﻩpublicvoidsetPassword(Stringpassword) {
ﻩthis.password= password;
}
publicString getName(){
ﻩreturnname;
}
ﻩpublicvoidsetName(Stringname) {
ﻩthis.name= name;
ﻩ}
ﻩpublicString getPersonId(){
ﻩreturnpersonId;
}
public voidsetPersonId(StringpersonId){
ﻩthis.personId=personId;
}
ﻩpublicintgetAccountType(){
returnaccountType;
}
ﻩpublicvoid setAccountType(intaccountType) {
ﻩthis。
accountType =accountType;
ﻩ}
publicdouble getBalance(){
ﻩreturnbalance;
}
ﻩpublic voidsetBalance(double balance){
ﻩthis.balance=balance;
ﻩ}
ﻩ/**
*存款
*/
public void deposit(doublemoney){
ﻩbalance+= money;
ﻩ}
ﻩ/**
ﻩ*取款(取款方式由账户类型决定,所以设为抽象方法,相应的Account类应设为抽象类)
*/
publicabstractvoid withdraw(doublemoney);
}
SavingAccount类
packagecom.qx;
/**
*储蓄账户类
*/
publicclassSavingAccountextendsAccount {
//构造函数
ﻩpublicSavingAccount(){
ﻩsuper();
ﻩ}
publicSavingAccount(long id,String password,Stringname,
ﻩString personId,intaccountType,double balance){
ﻩsuper(id, password,name, personId,accountType, balance);
ﻩ}
ﻩ//对父类的withdraw()实现
ﻩpublicvoid withdraw(double money){
ﻩif(balance 〈money){
ﻩﻩSystem。
out.println("对不起,账户余额不足!
");
ﻩﻩ}
ﻩﻩelse
ﻩﻩ{
balance-= money;
ﻩ}
ﻩ}
}
CresitAccount类
packagecom。
qx;
/**
*信用账户类,增加一个信用额度ceiling属性
*/
publicclassCreditAccount extendsAccount{
privateintceiling;
ﻩ//构造函数
ﻩpublic CreditAccount(){
ﻩsuper();
}
publicCreditAccount(longid,Stringpassword,Stringname,
ﻩStringpersonId,intaccountType,doublebalance,intceiling){
ﻩsuper(id,password,name,personId,accountType,balance);
ﻩﻩthis.ceiling =ceiling;
}
//getXxx,setXxx方法
publicintgetCeiling() {
returnceiling;
}
public voidsetCeiling(intceiling){
this.ceiling=ceiling;
}
//实现父类的withdraw()
ﻩpublic voidwithdraw(double money){
if((balance +ceiling) ﻩSystem。 out.println("对不起,已超出您的信用额度! ”); } ﻩelse ﻩ{ ﻩﻩﻩbalance-=money; } ﻩ} } Bank类 packagecom.qx; importjava.io.BufferedReader; importjava。 io.BufferedWriter; import java.io.File; import java.io。 ; importjava.io.; import java。 io。 ; importjava.io.IOException; importjava。 util.Properties; /** *Bank类 *编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数: id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号, 提示: 用s1。 equals(s2)可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户 2.用户登录,参数: id,密码返回登录账户的账号 3.用户存款,参数: id,存款数额,返回void 4.用户取款,参数: id,取款数额,返回void 5.查询余额,参数: id,返回该账户的余额 double 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 */ publicclassBank{ privateAccount[]accounts=newAccount[20]; privateintnumber;//账户数目 ﻩprivateintid=1001;//确定银行账号从1001开始生成,即第一个账户的账号是1001 //构造函数 ﻩpublicBank(){ accounts=newAccount[20];//以后不足时扩容。 number=0; ﻩBufferedReaderbufReader =null; ﻩﻩPropertiesprops=System。 getProperties(); ﻩﻩStringpath=props.getProperty("user。 dir”); try{ ﻩﻩbufReader=newBufferedReader(new (new,"account.txt"))); ﻩString s =bufReader。 readLine(); ﻩﻩwhile(s! =null){ ﻩString[] str =s.split(",”); ﻩﻩﻩif(str[4].equals(”0")) ﻩ{ ﻩﻩﻩﻩﻩAccountsavingAcc=newSavingAccount(Long。 parseLong(str[0]), ﻩﻩﻩﻩstr[1].toString(),str[2]。 toString(), ﻩﻩstr[3].toString(),Integer.parseInt(str[4]), ﻩﻩﻩﻩDouble.parseDouble(str[5])); ﻩaccounts[number] =savingAcc; ﻩﻩ} ﻩﻩﻩﻩelse ﻩﻩ{ ﻩﻩﻩﻩAccountcreditAcc= new CreditAccount(Long.parseLong(str[0]), ﻩstr[1]。 toString(), str[2].toString(), ﻩﻩﻩﻩﻩﻩstr[3].toString(),Integer.parseInt(str[4]), ﻩDouble.parseDouble(str[5]),5000); ﻩﻩaccounts[number]=creditAcc;ﻩ ﻩ} ﻩﻩnumber++; ﻩﻩid++; ﻩs=bufReader.readLine(); } ﻩ}catch(NumberFormatExceptione) { ﻩﻩ//TODOAuto—generated catchblock ﻩe.printStackTrace(); ﻩﻩ}catch(e){ ﻩﻩ//TODOAuto-generatedcatch block ﻩﻩe。 printStackTrace(); }catch (IOExceptione) { ﻩ//TODO Auto-generatedcatchblock ﻩﻩe.printStackTrace(); ﻩ}finally{ ﻩtry { ﻩﻩﻩif(bufReader! =null) ﻩ{ ﻩﻩﻩﻩbufReader。 close(); ﻩﻩﻩﻩ} ﻩﻩ}catch(IOExceptione) { ﻩﻩﻩﻩ//TODOAuto—generatedcatchblock ﻩe。 printStackTrace(); ﻩﻩ} ﻩﻩ} } //getXxx,setXxx ﻩpublic Account[]getAccounts(){ return accounts; ﻩ} ﻩpublic void setAccounts(Account[]accounts){ this。 accounts= accounts; } ﻩpublic intgetNumber(){ ﻩreturnnumber; } ﻩpublicvoid setNumber(intnumber){ this。 number=number; ﻩ} publicintgetId() { ﻩreturnid; } publicvoid setId(intid){ ﻩthis.id=id; ﻩ} /** *开户 ﻩ*/ ﻩpublicAccount openAccount(Stringpasswd1, String passwd2,Stringname, ﻩﻩStringpersonId,inttype){ ﻩ//创建一个新账户 ﻩAccount account= null; ﻩﻩ//判断两次密码是否一致 ﻩif(passwd1.equals(passwd2)){ ﻩﻩﻩ//若一致,再判断账户类型(根据type的值) ﻩﻩif(type ==1){ ﻩﻩ//可令开始余额为10,信用额度为5000 ﻩﻩaccount=new CreditAccount(id,passwd1, name,personId, type, 10,5000); } ﻩﻩelse ﻩﻩﻩ{ ﻩﻩaccount=newSavingAccount(id, passwd1, name, personId,type,10); ﻩﻩ} ﻩﻩ//将账户存入账户数组accounts[]中 ﻩ//判断是否超出存储空间 ﻩif(number >=accounts.length) {//扩容 ﻩﻩAccount[]newAccounts=newAccount[accounts。 length*2]; ﻩ//copy原来的相关数据 ﻩﻩﻩSystem。 arraycopy(accounts,0, newAccounts,0, accounts.length); ﻩﻩﻩ//将newAccounts[]赋给accounts[] accounts=newAccounts; ﻩﻩﻩaccounts[number]=account; ﻩﻩ} ﻩﻩelse ﻩﻩﻩ{ ﻩaccounts[number]= account; ﻩﻩ} ﻩSystem.out。 println("开户成功! ! ! 账户信息见下”); ﻩﻩSystem。 out。 println("您的卡号为: "+id+”\n"+”您的密码为: "+passwd1+"\n”+”您的户名为: "+name+"\n” ﻩﻩ+"您的身份证号为: ”+personId+"\n"+"您的账户类型为: "+type+"\n”);ﻩ ﻩaccount。 accountType =type; ﻩﻩnumber++; ﻩﻩid++; ﻩreturnaccount;//此时开户成功 } else { ﻩSystem.out.println("对不起! 您两次密码输入不匹配,开户失败! ! ! "); ﻩﻩreturn null;//此时开户失败 } ﻩ} ﻩ/** *保存数据 ﻩ*/ publicvoidsaveAccountDate(){ ﻩﻩBufferedWriterbufWriter=null; ﻩﻩtry{ ﻩﻩﻩProperties props=System.getProperties(); ﻩStringpath=props。 getProperty("user.dir"); ﻩﻩbufWriter=newBufferedWriter(new(new,”account。 txt"))); for(int i =0;i〈 accounts。 length;i++) ﻩﻩ{//若存在账户 ﻩﻩif(accounts[i] ! =null) ﻩﻩ{ﻩ ﻩﻩ//写入账户信息到account.txt ﻩbufWriter。 write(accounts[i].id+”,"); ﻩﻩﻩﻩbufWriter。 write(accounts[i]。 getPassword()+”,"); ﻩﻩﻩbufWriter.write(accounts[i].getName()+”,"); ﻩﻩﻩbufWriter。 write(accounts[i]。 getPersonId()+","); ﻩbufWriter。 write(accounts[i]。 getAccountType()+",”); ﻩﻩﻩbufWriter.write(Double.toString(accounts[i]。 getBalance())); ﻩbufWriter.newLine(); ﻩ} ﻩﻩﻩelse ﻩﻩ{ ﻩﻩbreak; ﻩ} ﻩﻩ}ﻩﻩﻩ ﻩﻩbufWriter。 flush();//清空缓存中的内容 }catch(IOExceptione){ // TODOAuto—generatedcatch block ﻩe.printStackTrace(); }finally{ ﻩﻩtry{ ﻩif(bufWriter! =null){ ﻩﻩﻩbufWriter。 close(); ﻩﻩ} } catch(IOExceptione){ ﻩﻩ//TODOAuto-generated catchblock ﻩﻩﻩe.printStackTrace(); } ﻩ} ﻩ} ﻩ/** *登录验证 ﻩ*/ public AccountverifyAccount(longid,String password){ ﻩAccount account=null;ﻩ ﻩﻩfor(inti=0;i< accounts.length;i++) {//若存在账户 ﻩﻩif(accounts[i]! =null) {ﻩ//验证id号和password if(id == accounts[i]。 getId()&& password.equals(accounts[i].getPassword())) ﻩﻩ{ ﻩﻩaccount = accounts[i]; ﻩﻩﻩbreak; } ﻩﻩﻩ} ﻩﻩelse ﻩﻩ{ ﻩﻩbreak; ﻩﻩ} ﻩﻩ} ﻩreturn account; ﻩ} /** ﻩ *转账验证(方法的重载) */ publicAccountverifyAccount(longid){ Accountaccount=null; ﻩﻩfor(inti=0;i< accounts。 length;i++) ﻩﻩ{//若存在账户 ﻩﻩﻩif(accounts[i]! = null) ﻩ{//验证id号和password ﻩif(id==accounts[i]。 getId()) ﻩﻩ{ ﻩﻩﻩaccount=accounts[i]; ﻩﻩbreak; ﻩﻩ} ﻩ} ﻩﻩelse ﻩ{ ﻩbreak; ﻩﻩﻩ} ﻩ} ﻩreturnaccount; } ﻩ/** ﻩ *转账 ﻩ */ publicvoidtransferAccount(Accountaccount1,Accountaccount2,double money){ ﻩﻩaccount1。 withdraw(money); ﻩaccount2.deposit(money); ﻩ} ﻩ/** *存款 ﻩ*/ publicvoiddeposit(Accountaccount, doublemoney){ ﻩﻩaccount.deposit(money); } /** ﻩ *取款 ﻩ */ public voidwithdraw(Accountaccount,doublemoney){ account.withdraw(money); ﻩ} } ATM类 packagecom.qx; import java.io.BufferedReader; import java。 io.BufferedWriter; importjava。 io.File; importjava.io。 ; importjava.io.; importjava。 util.Properties; import java.util.Scanner; /**
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BAM 银行 账户 管理 系统 java