银行系统UML分析与设计1系统需求银行是与人们生活密切相关的一个机构,银行可以提供存款、取款、转账和管理账户等业务。在银行设立账户的人或机构被称为银行的客户。一个客户可以在银行开设多个账户,客户可以存钱到账户中,也可以从自己的账户中取钱,还可以将存款从一个账户转到另一个账户。另外,客户可以随时查询自己的账户情况,以及查询以前所进行的存款、取款等交易记录。客户还有权利要求关闭自己的账户。通过分析简化版的银行系统的特点,确定了系统的功能需求。银行系统软件软件所要完成的主要功能有三方面:(1)存取款功能。存款时,用户填写存款单,然后交给收银员键入系统,同时系统还要记录存款人姓名,住址,身份证号码,存款类型,存款日期,利率及密码(可选)等信息,完成后由系统反馈成功存款信息给用户。取款时,用户填写取款的相关信息(取款金额、取款币种)进行提交,系统要求用户输入密码以确认身份,核对密码正确无误后系统计算利息并印出利息单给用户。(2)转账功能。转帐分为同一个银行之间的转帐和不同银行之间的转帐。用户填写转账的相关信息进行提交,系统要求用户输入密码以确认身份,核对密码正确无误后进行转帐操作,并反馈信息给用户。(3)管理账户功能。管理账户包括创建账户、删除帐户以及修改账户信息。创建账户时,用户提交相关信息(姓名、ID号、地址、金额等),系统为用户创建账户。删除账户时,用户提交帐号,系统检索账户信息并且确认删除。修改账户时,用户提供账号,系统检索账户信息,修改完毕后提交系统更新。2分析问题领域2.1系统的参与者通过分析银行系统的功能需求,可以识别出三个参与者:“Clerk”(银行职员)、“CustomerActor”(客户)、BankActor(银行)。参与者的描述如下:Clerk(银行职员)描述:Clerk可以创建、删除账户,并可以修改账户信息。CustomerActor(客户)描述:CustomerActor可以存钱、取钱,并在不同的账户之间转账。BankActor(银行)描述:客户可以在BankActor中设立或关闭账户。2.2系统的用例通过对需求的进一步分析,可以确定系统中有如下用例存在:Login(登陆),提供验证用户身份的功能;Depositfund(存款),提供存钱到账户的功能;Withdrawfund(取款),提供从账户中取钱的功能MaintainAccount(管理账户),提供创建、删除、修改账户信息的功能由于转账既可以在属于同一银行的账户之间发生,也可以在属于不同银行的账户之间发生,而发生于不同银行的账户之间的转账需要与参与者BankActor交互,因此需要用两个不同的用例来描述银行内的转账和银行之间的转账;Transferfundwithinabank(行内转账),提供在银行内账户间转账的功能;Transferfundbetweenbanks(在不同的银行之间转账),提供在属于不同银行的账户之间进行转账的功能;上面两个用例可以抽象出一个父用例“Transferfund”。Transferfund(转账),描述转账的通用行为,是用例Transferfundwithinabank与Transferfundbetweenbanks的父用例。用例图描述系统外部的执行者与系统提供的用例之间的某种联系。用例是指对系统提供的功能或用途的一种描述,执行者是可能使用这些用例的用户或外部系统,用例和执行者之间的联系描述了使用者和用例的对应关系。用例图着重于从系统外部执行者的角度来描述系统需要提供哪些功能。银行系统的用例图如图2-1所示,参与者“Clerk”与用例“Login”、“MaintainAccount”交互,参与者“Clerk”作为参与者“CustomerActor”的代理与用例“Depositfund”、“Withdrawfund”、“Transferfund”交互,也即参与者“CustomerActor”依赖参与者“Clerk”完成存在、取钱、转账的动作。用例“Transferfund”具有两个子用例“Transferfundwithinabank”和“Transferfundbetweenbanks”。因此他们之间存在类属关系。另外用例“Transferfundbetweenbanks”要与代表另一个银行的参与者“BankActor”交互。图2-1系统用例图2.3用例的事件流描述用例:Login(登录)简述:描述了用户如何登录到系统银行中参与者:Clerk前提条件:无主流:1、系统提示用户输入用户名和密码2、用户输入自己的用户名和密码、提交3、系统验证输入的名字和密码,用户登录系统成功其他流:如果输入用户名和密码无效,系统提示错误信息,用户可以重新输入或者终止该用例。后置条件:如果用例成功,则用户登录到系统中。否则系统状态不变。用例:Depositfund(存款)简述:本用例允许客户借助Clerk存款账户中。参与者:Clerk,Customer前提条件:Clerk必须登录到系统中。主流:当客户需要存钱时,需要向Clerk提交存款单和现金,用例启动。1、系统提示Clerk殊途用户名、用户的Id号、账号和所存款项的金额。2、Clerk输入相关的信息后提交,系统确认账户是否存在并有效。3、系统建立存款事件记录,并更新账户的相关信息。其他流:账户不存在或无效,显示提示信息,用户可以重新输入或终止该用例。后置条件:如果用例成功,则客户账户中存款的金额发生变化。否则,系统状态不变。用例:Withdrawfund(取款)简述:本用例允许Clerk按照客户的要求从客户的账户中取款。参与者:Clerk,Customer前提条件:Clerk必须登录到系统中。主流:当客户需要存钱时,需要向Clerk提交取款单,用例启动。1、系统提示Clerk殊途用户名、用户的Id号、账号和所存款项的金额。2、Clerk输入相关的信息后提交,系统确认账户是否存在并有效。3、系统建立存款事件记录,并更新账户的相关信息。其他流:1、账户不存在或无效,显示提示信息,用户可以重新输入或终止该用例。2、账户中的存款金额不足,显示提示信息,用户可以重新输入金额或终止该用例。后置条件:用例:Transferfund(转帐)简述:本用例允许Clerk按照客户的要求将资金从一个账户转到另一个账户。参与者:Clerk,Customer前提条件:在本用例开始前,用例必须登录到系统中。主流:当客户要求转帐时,用例启动。1、系统提示Clerk输入用户姓名、用户的Id号、账户号码和转账金额。2、Clerk输入相关信息后提交。3、系统确认资金转出账户是否存在并有效。4、更新资金转出账户的相关信息。5、为资金转出账户建立转账记录。6、存储转帐记录。7、判断资金转入账户是否属于同一银行如果资金转入账户与资金转出账户属于同一银行,则执行在同一银行转帐业务;如果资金转入账户与资金转出账户属于不同银行,则执行在不同银行的账户间转账业务。其他流:1、账户不存在或无效,显示提示信息,用户可以重新输入或终止该用例。2、账户中的存款金额不足,显示提示信息,用户可以重新输入金额或终止该用例。后置条件:如果用例成功,则客户账户中的存款的金额发生变化。否则,系统状态不变。用例:MaintainAccount(管理帐户)简述:本用例允许Clerk按照客户的要求将资金从一个账户转到另一个账户。参与者:Clerk,Customer前提条件:在本用例开始前,用例必须登录到系统中。主流:当Clerk想添加、修改或删除账户时,用例启动。系统要求Clerk选择所要执行的活动(添加账户、修改账户信息、或者删除帐户)。其他流:1、账户不存在或无效,显示提示信息,用户可以重新输入或终止该用例。2、账户中的存款金额不足,显示提示信息,用户可以重新输入金额或终止该用例。3、取消删除,删除账户操作被取消,用例终止。后置条件:如果这个用例成功,这账户信息会被添加到系统中、或被更新(修改),或从系统中删除。否则系统的状态没有变化。3类类是一类具有相同特征的对象的描述,对象的基本特征包括对象的属性和对象的行为。类描述了此类对象的属性和行为,对象则是某个类的实例。3.1系统对象类银行系统的对象类主要包括类Bank(银行)、类Account(账户)、类Customer(客户)、类Transaction(交易)。交易类又包括类Transfer(转帐)、类Withdraw(取款)、类Deposit(存款)。下面确定这些对象的属性和行为:(1)类Bank类Bank代表物理存在的银行。类Bank应该具有下列私有属性:bankCode:Stringname:Stringaddress:Stringphone:Stringfax:String一般情况下,都要将属性声明为私有属性,访问私有属性必须通过方法来进行,因此对于每个私有属性,都有相应的setXX()方法用来设置私有属性值,相应的getXX()方法用来访问私有属性值。(2)类Account类Account应该具有如下私有属性:bank:BankHolder:CustomerAccountNo:DateCreateDate:DateBanlance:floate类Account的方法:getHolders():Customer[]获取账户的客户newAccount(holder:Customer,balance:float):void开户remAccount(accountNo:String):void注销账户withdraw(holderName:String,holderID:String,accountNo:String,money:float):float取款deposit(holderName:String,holderID:String,accountNo:String,money:float):float存款transferOut(accountNo:String,bankCode:String,money:float):floattransferIn(accountNo:String,bankCode:String,money:float):float银行内转帐newBalance():float计算账户余额update():void更新数据库中的账户信息save():void账户信息存储到数据库delete():void删除账户closeAccount(accountNo:String):void账户进行结算getAccount(accountNo:String):Account返回指定账号的账户信息query(holderName:String,holderID:String,accountNo:String,money:float,isSaving:Boolean):Boolean查询账户(是否存在、账户余额)(3)类Customer类Customer具有如下私有属性:name:StringcustomerID:Stringaddress:Stringaccount:Account类Customer的方法:getAccount():Account[]query(name:String,id:String):Boolean查询指定客户名和ID号的客户newCustomer(name:String,id:String,address:String,account:Account[]):void创建客户对象save():void将客户信息存储到数据库中update():void更新数据库中客户的信息hasAccount()Boolean判断客户是否还持有账户delete():void删除数据库中的客户信息在银行中,对账户进行存钱、取钱、转账操作,要保留业务记录,因此在系统中海应有代表这些业务记录的对象存在,可以为这些对象建立如下3个类:Deposit(存款业务记录)、Withdraw(取款业务记录)、Transfer(转账业务记录),这3个类都是一中业务记录,因此可以抽象出父类:Tran