银行管理系统JAVA.docx
- 文档编号:27703766
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:25
- 大小:21.53KB
银行管理系统JAVA.docx
《银行管理系统JAVA.docx》由会员分享,可在线阅读,更多相关《银行管理系统JAVA.docx(25页珍藏版)》请在冰豆网上搜索。
银行管理系统JAVA
1)Account.java类
packagecom.etp;
importjava.util.*;
publicabstractclassAccount{
protectedlongid;
protectedStringpassword;
protectedStringname;
protectedStringpersonId;
protectedStringemail;
protecteddoublebalance;
@Override
publicbooleanequals(Objectobj){
booleanrt=false;
if(this==obj)
rt=true;
if(objinstanceofAccount)
{
AccountanotherAcc=(Account)obj;
if(this.id==anotherAcc.id)
rt=true;
}
returnrt;
}
@Override
publicinthashCode(){
returnpassword.hashCode()+name.hashCode()+personId.hashCode()+email.hashCode();
}
@Override
publicStringtoString(){
returnid+";"+password+";"+name+";"+personId+";"+email+";"+balance;
}
/**无参构造体*/
publicAccount(){
}
/**有参构造体,用于初始化对象的必要属性*/
publicAccount(longid,Stringpassword,Stringname,StringpersonId,
Stringemail,doublebalance)
{
this.setId(id);
this.setPassword(password);
this.setName(name);
this.setPersonId(personId);
this.setEmail(email);
this.setBalance(balance);
}
/**存款方法*/
publicvoiddeposit(doublemoney){
balance+=money;
}
/**取款方法,抽象类,行为不确定,有储蓄账户和信用账户之分
*@throwsBalanceNotEnoughException*/
publicabstractvoidwithdraw(doublemoney)throwsBalanceNotEnoughException;
/**属性的封装*/
publicvoidsetId(longid){
this.id=id;
}
publiclonggetId(){
returnid;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetPersonId(StringpersonId){
this.personId=personId;
}
publicStringgetPersonId(){
returnpersonId;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetBalance(doublebalance){
this.balance=balance;
}
publicdoublegetBalance(){
returnbalance;
}
}
2)ATM.java类
packagecom.etp;
importjava.util.*;
importjava.io.*;
publicclassATM{
privateBankbank;
publicATM(){
/*初始化Bank类,此时调用Bank的构造函数,其中默认的两个测试用户的信息被添加到Account类中*/
bank=newBank();
}
publicstaticvoidmain(String[]args){
ATMatm=newATM();
atm.mainMenu();
}
privatevoidmainMenu(){
booleanoutflag=true;
do{
System.out.println("ATM服务系统");
System.out.println("****************");
System.out.println("1.登录");
System.out.println("2.开户");
System.out.println("0.退出");
System.out.println("****************");
System.out.print("请选择操作:
");
Scannerscanner=newScanner(System.in);
StringfirstChoice;
do{
firstChoice=scanner.next();
if(firstChoice.matches("^[0-2]$")){
break;
}else
System.out.println("选择输入错误!
");
}while(true);
booleanrt=true;
out:
do{
switch(Integer.parseInt(firstChoice)){
case1:
/*进入登录界面或登录成功界面*/
secondMenu();
breakout;
case2:
/*开户,捕捉createAccount方法抛出的所有异常*/
try{
bank.createAccount();
}catch(RegisterExceptione){
System.out.println(e.toString());
}
rt=false;
break;
case0:
rt=false;
outflag=false;
break;
default:
break;
}
}while(rt);
}while(outflag);
System.out.println("谢谢您的使用!
");
}
/**登录成功后的二级菜单*/
privatevoidsecondMenu(){
Scannerscanner=newScanner(System.in);
Accountaccount=null;
out:
do
try{
/*输入卡号,输入exit可以直接退出系统*/
System.out.print("输入卡号:
");
StringcardNo0;
longcardNo;
out1:
do{
cardNo0=scanner.next();
if(cardNo0.equals("exit")||cardNo0.equals("EXIT")){
breakout;
}elseif(cardNo0.matches("^[0-9_]+$")){
cardNo=Long.parseLong(cardNo0);
breakout1;
}else
System.out.println("请输入数字类型的ID!
");
}while(true);
/*输入密码,输入exit可以直接退出系统*/
System.out.print("密码:
");
Stringpassword=scanner.next();
if(password.equals("exit")||password.equals("EXIT")){
breakout;
}
account=bank.login(cardNo,password);
breakout;
}catch(LoginExceptione){
System.out.println(e.toString());
}
while(true);
if(account!
=null){
out:
do{
System.out.println("ATM操作界面");
System.out.println("****************");
System.out.println("1.存款操作");
System.out.println("2.取款操作");
System.out.println("3.查询余额");
System.out.println("4.设置透支额度");
System.out.println("5.统计银行总余额");
System.out.println("6.查询本人信息");
System.out.println("0.退出");
System.out.println("****************");
System.out.print("请选择操作:
");
scanner=newScanner(System.in);
Stringsc;
do{
sc=scanner.next();
if(sc.matches("^[0-6]+$")){
break;
}else
System.out.println("选择操作输入错误!
");
}while(true);
switch(Integer.parseInt(sc)){
case1:
/*存款*/
/*最外层的循环用来询问用户是否继续。
*/
do{
/*金额必须为数字类型,不能存取低于一元金额*/
do{
System.out.println("请输入存款金额:
");
Stringmoney=scanner.next();
if(money.matches("^[0-9_]+$")){
bank
.deposit(account,Double
.parseDouble(money));
break;
}else
System.out.println("金额必须为数字!
");
}while(true);
System.out.println("存款结束!
………………继续存款(Y)/结束存款(输入任意字符)");
Scanners=newScanner(System.in);
Stringchoice=s.next();
if(choice.equals("Y")||choice.equals("y"))
continue;
else
break;
}while(true);
break;
case2:
/*取款*/
/*最外层的循环用来询问用户是否继续。
*/
do{
/*金额必须为数字类型,不能存取低于一元金额*/
do{
System.out.println("请输入取款金额:
");
Stringmoney=scanner.next();
if(money.matches("^[0-9_]+$")){
try{
bank.withdraw(account,Double
.parseDouble(money));
}catch(BalanceNotEnoughExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
break;
}else
System.out.println("金额必须是数字类型!
");
}while(true);
System.out.println("取款结束!
………………继续取款(Y)/结束取款(输入任意字符)");
Scanners=newScanner(System.in);
Stringchoice=s.next();
if(choice.equals("Y")||choice.equals("y"))
continue;
else
break;
}while(true);
break;
case3:
/*查看余额*/
bank.showBalance(account);
break;
case4:
/*设置透支额度*/
bank.setCeiling(account);
break;
case5:
/*统计银行总余额,调用Bank类中的totalBalance方法*/
bank.totalBalance(account);
break;
case6:
/*Account类中覆盖的toString方法使用*/
System.out.println(account.toString());
break;
case0:
/*退出的时候调用写入的方法,把更新的用户信息覆盖掉原来Accounts,txt中旧的数据*/
bank.writeIntoTxt();
breakout;
default:
System.out.println("选择操作输入错误!
");
break;
}
}while(true);
}
}
}
3)Bank.java类
packagecom.etp;
importjava.util.*;
importjava.io.*;
importjava.util.*;
publicclassBank{
List
publicBank(){
list=newLinkedList
longid;
Stringpassword,name,personId,email;
doublebalance,ceiling;
Propertiesp=System.getProperties();
Stringworkpath=p.getProperty("user.dir");
BufferedReaderbr=null;
try{
=new,"Accounts.txt");
br=newBufferedReader(new(sourceFile));
Stringstr=br.readLine();
StringsingleInfo[]=newString[10];
while(str!
=null){
/*以分号为分隔符,把字符串分为字段数组存放*/
singleInfo=str.split(";");
if(singleInfo.length==6){
id=Long.parseLong(singleInfo[0]);
password=singleInfo[1];
name=singleInfo[2];
personId=singleInfo[3];
email=singleInfo[4];
balance=Double.parseDouble(singleInfo[5]);
Accountobj=newSavingAccount(id,password,name,
personId,email,balance);
list.add(obj);
}
/*第line行的长度是7,说明有ceiling字段,是信用卡账户*/
if(singleInfo.length==7){
id=Long.parseLong(singleInfo[0]);
password=singleInfo[1];
name=singleInfo[2];
personId=singleInfo[3];
email=singleInfo[4];
balance=Double.parseDouble(singleInfo[5]);
ceiling=Double.parseDouble(singleInfo[6]);
Accountobj=newCreditAccount(id,password,name,
personId,email,balance,ceiling);
list.add(obj);
}
str=br.readLine();
}
}catch(e){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}finally{
try{
if(br!
=null)
br.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
/**登录功能,登录成功返回Account类型,不成功account引用为空*/
publicAccountlogin(longcardNo,Stringpassword)throwsLoginException{
Accountaccount=null;
intl=list.size();
inti=0;
for(i=0;i if(list.get(i).getId()==cardNo &&list.get(i).getPassword().equals(password)){ /*如果登录成功,返回account引用指向所在的账户对象,账户信息都在该对象中存放*/ account=list.get(i); break; } } if(i==l) thrownewLoginException("卡号或密码错误! "); returnaccount; } /** *存款功能,方法在deposit中定义,ATM无论传来CreditAccount还是SavingAccount的对象, *都只有父类Account实现的方法deposit方法可供调用,此处不存在动态实现多态 */ publicvoiddeposit(Accountaccount,doublemoney){ account.deposit(money); } /** *取款,体现出动态多态,如果在ATM中传来account引用指向CreditAccount类的对象则调用其中的withdraw方法, *指向SavingAccount的对象则调用SavingAccount中实现的方法,不确定性,在运行过程中动态的选择。 */ publicvoidwithdraw(Accountaccount,doublemoney) throwsBalanceNotEnoughException{ account.withdraw(money); } /**显示当前余额*/ publicvoidshowBalance(Accountaccount){ do{ Syst
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行 管理 系统 JAVA