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;
/**