银行柜员系统.docx
《银行柜员系统.docx》由会员分享,可在线阅读,更多相关《银行柜员系统.docx(27页珍藏版)》请在冰豆网上搜索。
![银行柜员系统.docx](https://file1.bdocx.com/fileroot1/2022-10/11/0813a3cc-3c8d-4862-a02b-02b3fe4b266f/0813a3cc-3c8d-4862-a02b-02b3fe4b266f1.gif)
银行柜员系统
项目案例:
银行柜员系统
10.1训练技能点
Ø数据类型和变量
ØJava运算符
ØJava常用类
ØJava控制台输入输出
Ø类的设计和编写
Ø对象的创建
Ø数组的使用
10.2需求说明
10.2.1需求概述
储蓄是个人理财的重要手段,是我们生活的重要组成部分。
我们需要通过和银行柜员交互来完成开户、存款、取款、转账等业务。
这就需要一个精确度高、并发性强的银行柜员系统,来帮助我们完成基本的账户理财功能。
该系统的角色包括:
银行柜员和储户。
10.2.2系统用例图
在整个系统中,银行柜员是执行操作的人,储户将自己的信息通过银行柜员写入系统,从而进行银行的各种基础交易。
图10.2.1是该系统的用例图。
图10.2.1银行柜员系统用例图
10.2.3开发环境
JDK1.5以上、MyEclipse8.5以上
10.3设计与思路分析
10.3.1功能分析
结合上面的用例图,系统的功能可以分为以下几个模块:
Ø储户开户
Ø储户存款
Ø储户取款
Ø储户转账
Ø储户当前明细输出
Ø储户详细信息输出
Ø退出
其中,各个功能需要完成的任务如下所示:
(1)储户开户
本模块实现的功能有:
分配账号、写入储户信息、开户信息回显等操作。
(2)储户存款
本模块实现的功能有:
根据输入的账号查找储户信息、存款操作、存款信息回显、明细账输出询问等操作。
其中,操作完毕后系统会询问是否输出账户交易的明细账,如果储户需要,系统会输出该账户自开户日起的所有明细信息。
(3)储户取款
本模块实现的功能有:
根据输入的账号查找储户信息、取款操作、取款信息回显、明细账输出询问等操作。
(4)储户转账
本模块实现的功能有:
根据输入的账号查找欲转出的储户信息、查找欲转入的储户信息、询问是否确认转账、以及转账操作、转账信息回显、明细账输出询问等操作。
(5)储户当前明细账打印
本模块实现的功能有:
根据输入的账号,查询相应储户的当前账户明细账功能。
(6)储户详细信息打印
本模块实现的功能有:
根据输入的账号,查询相应储户的当前账户详细信息功能。
(7)退出
本系统建议分为5个类来实现,可以划分到3个不同的包中运行。
Øcom.test.bank.bean包中的Account实体类和TradeInfo实体类,分别表示账户信息和交易明细信息。
Øcom.test.bank.method包中的BankMethod业务类和BankFace界面业务类。
Øcom.test.bank.main包中的BankMain主类。
其中,系统中这五个类的类图如下图10.2.2所示。
储户类交易信息类
交易业务类交易界面类
系统主类
图10.2.2系统各个类的类图
10.3.2数据要求
本系统没有任何数据文件,也没有任何数据库文件。
所有的信息都存储在系统运行时自动创建的长度为100的数组中。
也就是说,本项目的数据只在运行时存储在内存中,可同时存储100个以内的账户信息。
一旦系统退出,所有的储户信息都会丢失。
虽然如此设计不符合现实生活的实际情况,但是对于现阶段银行系统主要功能的模拟已经足够。
10.4实现步骤
(1)根据交易信息类TradeInfo的类图,设计交易信息类的详细信息,以打印交易明细账。
参考关键代码如下所示:
/**
*此类是交易明细类,用于记录每一笔银行交易的明细信息
*/
packagecom.test.bank.bean;
importjava.util.*;
importjava.text.*;
publicclassTradeInfo{
//账户交易号
//每个账户的交易号从1累加,等于该账户的accountId+tradeIndex;
//开户时tradeIndex=1,此后每交易一笔,tradeId++。
privateinttradeId;
privatechartradeDirection;
privatedoubletradeAmount;
//交易类型:
1开户、2存款、3取款、4、转账
privateinttradeType;
privateDatetradeDate;
privateStringtradeDescription;
publicTradeInfo(){
tradeId=-1;
}
publicTradeInfo(chartradeDirection,doubletradeAmount,inttradeType,
DatetradeDate,StringtradeDescription){
this.tradeId=-1;
this.tradeDirection=tradeDirection;
this.tradeAmount=tradeAmount;
this.tradeType=tradeType;
this.tradeDate=tradeDate;
this.tradeDescription=tradeDescription;
}
publicvoidsetTradeId(inttradeId){
this.tradeId=tradeId;
}
publicintgetTradeId(){
returnthis.tradeId;
}
//tradeId的自增方法
publicvoidaddTradeId(){
tradeId++;
}
//其他属性的getters和setters方法,略去。
......
publicStringtoString(){
DecimalFormatdf=newDecimalFormat("¥0.00");
Stringstr_tradeType="";
switch(this.getTradeType()){
case1:
str_tradeType="开户";
break;
case2:
str_tradeType="存款";
break;
case3:
str_tradeType="取款";
break;
case4:
str_tradeType="转账";
break;
default:
str_tradeType="其他交易";
break;
}
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddhh:
mm:
ss");
StringBufferstb=newStringBuffer();
stb.append(this.getTradeId());
stb.append("");
stb.append(this.getTradeDirection());
stb.append("\t");
stb.append(str_tradeType);
stb.append("\t\t");
stb.append(df.format(this.getTradeAmount()));
stb.append("");
stb.append(sdf.format(this.getTradeDate()));
stb.append("\t");
stb.append(this.getTradeDescription());
stb.append("\t");
returnnewString(stb);
}
}
(2)分析系统功能,根据类图设计储户类Account,编写储户类的详细信息。
参考关键代码如下所示:
/**
*此类是银行账户类,用于记录银行的账户信息
*/
packagecom.test.bank.bean;
importjava.util.*;
importjava.text.*;
publicclassAccount{
privateintaccountId;//储户账户号
privateStringrealName;//储户实名
privateStringpassword;//储户账户密码
privatedoublebalance;//储户账户余额
privateStringidentityId;//储户身份证号码
privateStringaddress;//储户联系地址
privateStringphone;//储户联系电话
privateDateopenDate;//储户开户日期
privateinttradeCount;//储户当前交易记录数(该数目<=100)
privateTradeInfo[]tradeList;//储户交易明细
publicAccount(){
this.tradeCount=0;
tradeList=newTradeInfo[100];
}
publicAccount(intaccountId,StringrealName,Stringpassword,
doublebalance,StringidentityId,Stringaddress,Stringphone,
DateopenDate){
this.tradeCount=0;
tradeList=newTradeInfo[100];
this.accountId=accountId;
this.realName=realName;
this.password=password;
this.balance=balance;
this.identityId=identityId;
this.address=address;
this.phone=phone;
this.openDate=openDate;
}
publicvoidsetAccountId(intaccountId){
this.accountId=accountId;
}
publicintgetAccountId(){
returnthis.accountId;
}
//其他属性的getters和setters方法,此处省略。
......
//tradeCount的set方法不再设置
//addTradeCount()方法定义为私有的,只能为添加明细的方法调用(private修饰的方法是私有的方法,“私有”的概念将在后续学习中讲解)
privatevoidaddTradeCount(){
this.tradeCount++;
}
publicintgetTradeCount(){
returnthis.tradeCount;
}
publicvoidaddTradeInfo(TradeInfoinfo){
i