银行管理系统设计文档-Java - 图文

更新时间:2023-10-05 23:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1、开发工具和模式

该系统采用3-tier架构,从上往下分别为表示层,业务逻辑层,数据访问层。开发工具为eclipse,开发语言Java,应用数据库MySql。

2 需求分析 2.1 功能需求

该系统所涉及的用户包括系统用户分为:前台操作员, 银行经理,银行业务总管、系统管理员。用户注册时,默认每次输入的用户不重复,且权限固定而且正确。

该系统所涉及的客户有三类:普通个人,VIP,企业。对于这三类客户,系统为各类客户分别生成不同类账户。

系统用户利用该系统是为客户服务。对于每一类用户都必须支持以下功能:开户、存款、取款、查询、转账、修改密码、销户等。所有对账户的操作都要产生日志。 所有的数据都要存到硬盘。系统重新启动时要能恢复数据。

各个功能的具体要求如下: (1)开户:

开户时需要用户输入身份证号码,决定开的账户类型,存款的初始金额。系统会根据申请的账户类型生成各类用户的帐号,用户输入初始密码,并再输入确认密码正确后,开户成功,并可以接受其他服务。同时,系统给出开户的时间日志。 (2)存款:

存款时需要客户向系统用户提供自己的账号,密码以及要存款的金额;在验证各类信息正确,且不越权限操作(透支)后,方可完成操作。同时银行系统反馈用户帐户的余额以及存款的日志。 (3)取款:

取款时需要客户向系统用户提供自己的账号、密码以及要取的金额;系统判断是否有足够余额以供取款。取款后系统显示出用户帐户的余额,产生取款日志。

1

(4)查询:

查询时用户需要给银行提供自己的身份证、账号和密码;在验证各类信息正确后,系统显示出用户帐户的余额以及查询的日志。用户还可以查询一段时间所以的操作(流水)。 (5)转帐:

对不同用户转账有限制,其限制条件包括:

(1) 转账只能在个人用户之间进行,或在企业用户之间进行。

(2) 普通用户只能接收转账转入,不能转钱到别人的账户。但普通用户可以

在他自己的账号内转账。VIP和企业用户容许转入、转出。

(3) 转账过程时,确保各类账户的余额满足限制要求。如企业账户总余额不

能小于一万元,普通个人客户不能透支,VIP客户不能透支超过十万元。 在用户转帐时需要判断上述转账条件是否满足。如满足条件,系统用户根据客户提供的转出帐户的账号、身份证号码、密码和用户名称及转入帐户的帐号和用户名称,转账金额这些信息,在验证各类信息正确后,系统将显示是否转账成功,并且系统方面将产生转账日志、转出用户帐户的余额等信息。 (6)改密码:

系统在为账户修改密码时,用户需要根据客户提供,向系统输入的身份证、帐号、以及密码,并且输入新的密码。同时系统方面将产生相关日志。 (7)销户:

系统在处理销户是,用户需要根据客户提供,向系统输入身份证、帐号以及密码,在验证各类信息正确后,显示操作成功,并且把帐户的余额全部取出。系统方面将产生相关日志。

2.2 业务需求

(1) 所有的用户可开两种账户—活期和定期。用户的活期和定期账号之间可

以转账。

(2) 普通用户不能产生透支。

(3) 转账只能在个人用户之间进行,或在企业用户之间进行。

2

(4) 普通用户只能接收转账转入,不能转钱到别人的账户。但普通用户可以

在他自己的账号内转账。VIP和企业用户容许转入、转出。

(5) 企业用户容许多个账号操作人。 我们指定其中的一到两个人作为账户超

级用户,可以要求增加账户操作人。不同账户操作人必须使用不同密码。 (6) 企业用户不容许透支。要求账面存款余额总数(包括所有的账户)不小

于1万元。

(7) VIP用户的初始存款额(包括活期和定期)要求大于100万, 每月平均

日余额要求不低于10万。如果连续2个月月平均日余额要低于10万, 将收取每月1000元的管理费。VIP用户将能够透支最多 10万元。 但要求透支的款项在规定的时间(30天)内归还。如不归还,账户将被冻结。

2.3 性能需求

(1)软件环境: Window XP及以上 (2)硬件环境:

Pentium(R) Dual-Core CPU T7500 @ 2.2GHZ

安装内存(RAM): 1.00GB 硬盘空间:160G

3 总体设计

系统主要实现用户注册,用户登录,查看日志,查看报告,查看部门人员情况,银行开户、取款、存款、查询、转账、修改密码,销户等功能。对于每一步操作,系统会记录日志。

其中用户包括前台操作员, 银行经理,银行业务总管、系统管理员。进入程序后首先选择身份,身份确定后再进行相关的操作。

系统根据业务需求将系统内的用户设计部门分为个人账户部和企业账户部,分别设置一个业务总管,银行经理和多个前台操作员。

以下介绍各类用户的具体操作权限:

3

(1) 前台操作员(frontOperator):用户注册,用户登录,银行开户、取款、

存款、查询、转账、修改密码,销户等功能。该用户本身所作的操作的日报,月报,季度报和年报(包括数据和日志)。前台操作员向一个银行经理报告。

(2) 银行经理(bankMgr):作为前台操作员的所有操作,部门操作的日报,月

报,季度报和年报(包括数据和日志, 及每个成员的报告)。银行经理必须较容易查到他部门人员总数及具体情况。银行经理向银行业务总管报告。

(3) 银行业务总管(businessMgr)(包括个人账户和企业账户两类):作为前

台操作员和部门经理的所有操作,整个银行相关业务操作的日报,月报,季度报和年报(包括数据和日志, 及每个成员的报告,每个部门的报告)。银行业务总管应较容易查到他所管人员总数及具体情况。

(4) 系统管理员(systemMgr):雇员管理。 产生整个银行的总报表和总日志

(日报,月报,季度报和年报)。

4 详细设计 4.1 功能规划

4.1.1 用户功能

(1)用户查看日志功能。

对于三类普通用户:前台操作员,银行经理,业务总管。前台操作员能查看自己的日志记录;银行经理能查询自己和其部门员工的日志记录;业务总管能查询自己和其同部门的银行经理和前台业务员的操作日志记录。

表1查看日志

输入 1、用户名 2、密码 3、角色 4、查看类型

处理 1、密码有三次输入机会 2、验证用户名及密码 输出 如果用户名或者密码不正确,给用户一个友好提示3、日志类型分为日报日志,月报并提示还有几次机会。根日志和年报日志 4

据不同日志类型显示日志

记录。

(2)用户查看报告

在登录时,用户需选择正确的角色,在输入用户名和密码,验证正确后进入系统。可以进入系统查看报告。用户查看报告功能。报告只要是现实用户的开户数和销户数情况。而不同用户能查看不同范围的报告。其中前台操作员只能查看自己的报告;银行经理能查询自己和其部门前台操作员的报告;业务总管能查询自己和其同部门的银行经理和前台业务员的操作报告。

表2 用户登录

输入 1、用户名 2、密码 3、角色 4、查看类别 处理 1、密码有三次输入机会 2、验证用户名及密码 输出 如果用户名或者密码不正确,给用户一个友好提示3、根据用户权限和查看类别返回并提示还有几次机会。现相应的报告数据 4、写日志 实相应数据报告。

(3)主菜单功能

输出主菜单(开户、存款、取款、查询、转账、修改密码、销户、退出)供用户选择,然后根据用户的输入选择进入不同的系统功能。

表3 主菜单功能

输入 处理 输出 1、菜单项编号 1、验证用户输入的菜单项编号是如果用户输入的菜单项否正确(0~7之间),0为返回或者编号不正确,给用户一个退出; 友好提示,并要求用户重2、根据用户的选择进入不同的功新输入。 能界面。

(4)开户功能

用户能为三类用户开户。根据不同客户的开户类型,要求客户提供不同的信

5

银行管理系统 前台操作员 银行经理 业务总管 管理员 登录开户查询销户转账取款存款退出查看日志用户管理退出 其中,前台操作员,银行经理,业务总管皆具有开户,查询余额,取款,转账,存款,登录,退出,查看日志的功能,管理功能包括添加用户,删除用户和查看用户信息,退出的功能。

本银行管理系统包括四类用户,前台操作员,银行经理,业务总管和管理员。

图 1 银行账户管理系统

11

4.2.2用例图

银行管理系统登录系统退出系统前台操作员注销登录开户查询取款银行经理存款转账修改客户密码银行业务总管销银行账户查看日志注销用户系统管理员注册用户

图 2系统用例图

12

4.2.3类图

CustomerEmployees+userName : string+pwd : string+type : int+Id : int+set()+setId()+getUserName() : string+getPwd() : string+getType() : int+getId() : int+name+identiy+accountNumBankMgr+set()+setId()+getUserName() : string+getPwd() : string+getType() : int+getId() : intOrdinaryCustomerSystemMgr+set()+setId()+getUserName() : string+getPwd() : string+getType() : int+getId() : intBusinessMgr-+set()+setAccountNum()+setName()+setIdentity()+getName()+getAccountNum()+getIdentity()+getOrdinaryAccount()-VIPCustomer+set()+setAccountNum()+setName()+setIdentity()+getName()+getAccountNum()+getIdentity()+getVIPAccount()EnterpriseCustomer+set()+getName()+getPwd()+getRole()+getIsUse()+setName()+steIdentity()+setPwd()+setRole()+setIsUsed()+set()+setId()+getUserName() : string+getPwd() : string+getType() : int+getId() : intFrontOperator+set()+setId()+getUserName() : string+getPwd() : string+getType() : int+getId() : int<>接口2EnterpiseAccount+getName()+getAccountNum()+getPwd()+getBalance()+getAccountType()+getIsUse()+setIsUsed()+setPwd()+setBalance()+setAccountType()+addUser()+getEnterpriseCustomer()ordinaryPersonAccount+getName()+getAccountNum()+getPwd()+getBalance()+getAccountType()+getIsUse()+getIdentity()+setIsUsed()+setPwd()+setBalance()+setAccountType()+setIdentity()OPerationRecord+setOperationRecord() : <未指定>+getTime()+getOperator()+getOperation()+getServerAccount()+setTime()+setOperator()+setOperation()+setServerAccount()+login()+logoff()+isExist()+deposit()+withdraw()+check()+checkIdentity()+idCanTransfer()+transferAccount()+regist()接口3+writeRecord()+readRecord()+changePassword()+addEnterprise()+openAccount()Account-name-identity-accountNum-pwd-balance-accountType-isUsed+getName()+getAccountNum()+getPwd()+getBalance()+getAccountType()+getIsUse()+setIsUsed()+setPwd()+setBalance()+setAccountType()BankManagemet+login()+logoff()+isExist()+deposit()+withdraw()+check()+checkIdentity()+isCanTransfer()+transferAccount()+changePassword()+addEnterprise()+openAccount()+cancelAccount()+regist()+exit()+writeRecord()+checkRecord()Exception+getMessage()IDGenerator+ordinaryPersonIDGenerator() : int+VIPPersonIDGenerator() : int+enterpriseIDGenerator() : int+systemMgrIDGenerator() : int+bankMgrIDGenerator() : int+frontOperatorIDGenerator() : int+businessMgrIDGenerator() : intVIPPersonAccount+getName()+getAccountNum()+getPwd()+getBalance()+getAccountType()+getIsUse()+getIdentity()+setIsUsed()+setPwd()+setBalance()+setAccountType()+setIdentity()SystemMain+main()OperationRecord+setOperationRecord()+setOperation()+setOperator()+setSeverAccount()+setYear()+setMonth()+setDay()+getOperation()+getOperator()+getSeverAccount()+getYear()+getMonth()+getDay()CommonGUI+showOperation()+showFunction()KB+readln_int() : int+readln_double() : double+readln_string() : string13

图 3.总体类图

4.2.4类说明

1、业务逻辑层BankManagement类

作为系统的业务逻辑层,与显示层和各类数据类对象交互。其中内部的属性定义了包括

了下表11所示的数据集用于与数据对象进行交互。

表15 数据集

前台操作员数据集 银行经理数据集 银行业务总管数据集 系统管理员数据集 普通个人用户数据集 VIP个人用户数据集 企业用户数据集 企业账户数据集 普通个人账户数据集 VIP个人账户数据集 日志数据集 ArrayList operator = new ArrayList(); ArrayList bankManager = new ArrayList(); ArrayList bussinessManager = new ArrayList(); ArrayList systemManager = new ArrayList(); ArrayList ordinaryPersons = new ArrayList(); ArrayList VIPPersons = new ArrayList(); ArrayList enterprises = new ArrayList(); ArrayList enpAccounts = new ArrayList(); ArrayList ordPersonAccounts = new ArrayList(); ArrayList VIPAccounts = new ArrayList(); ArrayListoperationRecords= ArrayList(); new 此外,BankManagerment类里包括的处理函数有

表格 14 类函数说明

功能操作 登录 注销登录 判断用户账

实现 boolean login(int type,String userName,String psd); void logoff(BankManagement bm); boolean isExist(int accountNum, int pwd ,int 14

传递参数 用户类型,用户名,密码 银行系统逻辑层类对象 客户账号,密码,

户是否存在 存款 取款 查询余额 是否符合转账条件 accountTyp); double deposit(int accountNum,int customerType,double balance); double balance) double check(int accountNum,int customerType); int isCanTransfer(String name,String identity,int pwd,int outAccountNum, int 账户类型 客户账号,客户类型,存款金额 型,取款金额 客户账号,客户类型 客户名,身份证,密码,转出账号,入账户类型,转入账户客户名 double withdraw(int accountNum, int customerType, 客户账号,客户类outAccountType,int inAccountNum,String inName) 转出账户类型,转转账 boolean transferAccount(int inAccountType,int inAccountNum, String inAccountName, double balance); 转入账户类型,转入账户号,转入账户客户名,金额 名,密码 注册用户 推出系统 开户 void regist(int type,String userName,String psd); 用户类型,用户void exit(); int openAccount(int customerType, String name, accountType); 无 客户类型,客户姓预存款,账户类型 份证,密码,账户类型 客户名,客户类新密码 客户类型,账号,客户名,身份证 账号,客户类型,密码 分,秒,雇员号,雇员用户名,服务账号,操作行为 日志类型,年,月,用户名,职位 String identity,int pwd, double depositMoney, int 名,身份证,密码,为企业账户添加用户 修改密码 void addEnterpriseCustomer(int accountNum,String 账号,客户名,身name, String identity, int pwd, int accountType); void changePassword(String name, int int newPwd); customerType, int accountNum, String identity, 型,账号,身份证,注销账户 查询身份证 写日志 double cancelAccount(int customerType,int accountNum,String name, String identity); String checkIdentity(int accountNum ,int customerType,int pwd); hour,int minute, int second, int operatorID, String operator,int serverAccount,String operation) void writeRecord(int year,int month,int day,int 年,月,日,时,读日志 ArrayList checkRecord(int String operator,int position) type,int year,int month,int day,int operatorID, 日,雇员号,雇员查看前台操作员信息 查看银行经理信息 ArrayList checkFrontOperatorInfo(int department) ArrayList checkBankMgrInfo(int department) 15

前台操作员部门 银行经理部门

查看业务总管信息 查看用户数据报告

ArrayList checkBusinessInfo(int department) 业务总管部门 ArrayList checkData(int type, int year, int 报告类型,年,月,month, int day, int operatorID,int position) 日,雇员号,职位 2、UI类CommonGUI

作为系统的显示层,用于显示各类操作和各类操作结果。通过与业务逻辑层

BankMangement相互传递数据,实现系统功能。 3、账户基类Account类

账户基类下有三个继承类,分别为普通个人账户类ordinaryPersonAccount,VIP账户类VIPAccount和企业账户类EnterpriseAccount。对应的各个类下面有相关的取属性和设置属性函数。其中Account类的属性包括账户号AccountNum,用户名name,密码pwd,身份证identity,账户类型accountType,账户余额balance,账户状态IsUsed。其中较为特别的是企业账户类,它定义了一个指向EnterpiseCustom类的列表,用于实现一个企业账户,多个操作者的功能。 4、用户基类Employees类

用户基类下有四个继承类,分别为前台操作员FrontOperator,银行经理BankMgr,银

行业务总管BusinessMgr和系统管理员SystemMgr。每个类下对应有用户名userName,密码pwd,用户角色type和用户编号 Id。每个类的操作有相关的取属性和设置属性函数。 5、客户基类Customer

客户基类下有三个继承类,分别为普通客户类OrdinaryCustomer,VIP客户类VIPCustomer和企业客户类EnterpriseCustomer。对应每个类下有公共的属性,包括姓名name,身份证号identity,账号accountNum。特别的,企业用户类EnterpriseAccount由于需要存储不同的操作人,所以需要定义密码pwd,角色role,是否有效IsUsed三个属性去分别实现进登录账户,是否能添加账户持有人和是否有使用账户权限。 6、系统入口类SystemMain

用于定义main()函数,读文件或创建文件,转入CommonGUI实现显示。 7、各类ID生产类IDGenreator

用于参生各类ID,包括各种用户的注册ID,各类账户的账户号和所有客户的客户ID。 8、处理各类输入类KB

用于处理各中类型的输入信息,其中包括read_int(),read_string(),read_double,分别用于读取Integer,String,double类型的数据。

16

9、文件序列化存取类SerializeToXML

用于序列化所有的文件成XML格式文件。其中的操作函数包括read(),write(),分别用于读文件操作和写文件操作。

10、管理日志文件类OperationRecord

用于存储给类用户的操作日志。其中所包含属性有年year,月month,日day,操作人雇员号operatorID,操作人账号operator,服务客户账号severAccount,操作行为operation。具有的操作方法如类图中的OperationRecord类所示。包括设置各种属性值和获取各种属性值。

11、用户自定义异常类

如密码输入错误异常类PwdErrorException,账户余额不足异常类BalanceLackException,越权操作异常类 OutOfLimitException,账户不存在异常类AccountNoExistException,用户不存在异常类UserNoExistException等。

4.3系统实现

4.3.1界面

图 4系统登录界面

如图4所示,系统显示目前暂时采用命令行窗口显示,在用户登录后,需选择身份后才能登录系统,否则可以选择退出系统。

17

4.3.2 功能实现

4.3.2.1 雇员编号

private int front_person_num = 10400000; private int front_enterprise_num = 20400000; private int bankMgr_person_num = 10500000; private int bankMgr_enterprise_num = 20500000; private int businessMgr_person_num = 10600000; private int businessMgr_enterprise_num = 20600000; private int systemMgr_num = 70000;

如上所示,每个雇员号长度为8位,按递增方式为新雇员分配工号。个人账户部门内,前台操作员雇员号前3位为104,银行经理雇员号前三位为105,业务总管雇员号前3位为106;在企业账户部们内,前台操作员雇员号前3位为204,银行经理雇员号前三位为205,业务总管雇员号前3位为206。另外,管理员不划分部门,编号统一从“70000”开始。 4.3.2.2 部门人员管理

由雇员编号的最高位标识雇员所在部门。其中最高位“1”代表个人账户部,为普通个人和VIP两种客户服务,另外的最高位“2”代表的是企业账户部,专门为企业账户客户服务。

4.3.2.3 账户编码

private int ordinaryPerson_Account = 1100000; private int VIPperson_Account = 8800000; private int enterprise_Account = 9900000;

如上所示,每个账户号长度为7位。由账号的前两位区分账户类型。其中普通个人账户账号前两位为“11”;VIP个人账户账号前两位为“88”;企业账户账号前两位为“99”。账号按递增方式为新注册的账户分配账户号。 4.3.2.4 查看日志

/*

**查看日志函数,传入:日志类型,年,月,日,雇员号,雇员用户名,职位这些参数,返回日志记录集 */

Public ArrayList checkRecord(int type,int year,int month,int day,int operatorID, String operator,int position) {

//type (1:日报,2:月报,3:年报)

ArrayList temp = new ArrayList(); //根据不同日志类型,不同职位进行查询

18

} }

Switch(type){ Case 1: Case 2: …

default:

SerializeToXML.write(this);//将对象序列化为XML文件 return temp;

4.3.2.5 开新账户

/*

**开新账户函数,传入:客户类型,客户姓名,身份证,密码,预存款,账户类型这些参数,返回系统为该账户生产的账号。 */

public int openAccount(int customerType, String name, String identity,

int pwd, double depositMoney, int accountType){

// customerType : 0为普通个人,1为VIP,2为企业用户 int accountNum = 0; …

accountNum = new IDGenerator().ordinaryPersonIDGenertor();//普通个人 …

accountNum = new IDGenerator().VIPPersonIDGenertor();//VIP个人 …

accountNum = new IDGenerator().enterpriseIDGenertor();//企业个人 …

SerializeToXML.write(this);//将对象序列化为XML文件 }

return accountNum;

4.3.2.6 注销账户

/*

**注销账户函数,传入:客户类型,账号,客户名,身份证这些参数,返回该账户剩余的余额 */

public double cancelAccount(int customerType, int accountNum, String name, String identity){

double balance = 0.0f;//存放返回的余额变量 // customerType : 0为普通个人,1为VIP,2为企业用户

/* 通过账户类型,账号,客户名,身份证这些信息查找到相应的账户,将账户类对象属性isUsed设为false;并将账户余额值赋给balance变量。

19

*/ …

SerializeToXML.write(this);//将对象序列化为XML文件 return balance;

}

4.3.2.7 查询余额

/*

**查询函数,传入:账号,客户类型这些参数,返回该账户剩余的余额 */

public double check(int accountNum, int customerType){ double balance = 0.0f;//存放返回的余额变量

/* 通过账号,账户类型这些信息查找到相应的账户,并将账户余额值赋给balance变量。并返回 */

balance =(ArrayList.Iterator()).getBalance();//

SerializeToXML.write(this);//将对象序列化为XML文件

return balance; }

4.3.2.8 账户取款

/*

**取款函数,传入:客户账号,客户类型,取款金额这些参数,返回该账户剩余的余额 */

public double withdraw(int accountNum, int customerType,double balance) throws BalanceLackException,VIPBalaceOutdraftException{

//抛出可能出现的自定义异常,包括余额不足异常,VIP账户透支额过高异常

double nowBalance = 0.0f;//取款后剩余余额变量

/* 通过账号,账户类型这些信息查找到相应的账户,并判断是否符合取款条件,如可以取款,将账户余额减去取款金额,得到的差值赋给nowBalance变量。并返回 */

nowBalance = (ArrayList.Iterator()).getBalance() - balance; }

SerializeToXML.write(this);//将对象序列化为XML文件 return nowBalance;

4.3.2.9 账户存款 /*

20

本文来源:https://www.bwwdw.com/article/8xpd.html

Top