




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章 项目案例 银行柜员系统训练技能点本案例为银行柜员系统,模拟银行柜员的存取款、转账等操作。训练技能点如下:(1)数据类型和变量(2)Java的运算和运算符(3)Java常用类(4)Java控制台和用户的交互(5)类的设计和编写(6)对象的创建(7)数组的使用项目需求说明10.1 系统需求说明储蓄是个人理财的重要手段,是我们生活的重要组成部分。和银行柜员进行交互,从而维护我们的账户的过程,需要一个精确度高、并发性强的茁壮的银行柜员系统,来帮助我们完成基本的账户理财功能。系统的角色包括:银行柜员和储户。10.2 系统的用例图系统用例图如下图所示:图10.2.1 银行柜员系统用例图在整个系统中,银行柜员是执行操作的人,储户将自己的信息通过银行柜员写入系统,从而进行银行的各种基础交易。10.3 系统的功能模块如用例图所示,系统的功能模块如下图所示: 储户开户 储户存款 储户取款 储户转账 储户当前明细打印 储户详细信息打印 退出其中,各个功能需要完成的任务如下所示:(1) 储户开户本模块实现的功能有:分配账号、写入储户信息、开户信息回显等操作。(2) 储户存款本模块实现的功能有:根据输入的账号查找储户信息,存款操作,存款信息回显,明细账打印询问等操作。其中,操作完毕后,系统会询问是否打印账户交易的明细账,如果储户需要,系统会打印出该账户自开户日起的所有明细信息。(3) 储户取款本模块实现的功能有:根据输入的账号查找储户信息,取款操作,取款信息回显,明细账打印询问等操作。(4) 储户转账本模块实现的功能有:根据输入的账号查找欲转出的储户信息,查找欲转入的储户信息,询问是否确认转账,以及转账操作,转账信息回显,明细账打印询问等操作。(5) 储户当前明细账打印本模块实现的功能有:根据输入的账号,查询相应储户的当前账户明细账功能。(6) 储户详细信息打印本模块实现的功能有:根据输入的账号,查询相应储户的当前账户详细信息功能。(7) 退出本模块实现系统的退出功能。10.4 系统的数据要求本系统没有任何数据文件,也没有任何数据库文件。所有的信息都存储在系统运行时自动创建的长度为100的数组中。也就是说,本项目的数据只在运行时存储在内存中,可同时存储100个以内的账户信息。一旦系统退出,所有的储户信息都会丢失。虽然如此设计不符合现实生活的实际情况,但是对于现阶段银行系统主要功能的模拟已经足够。10.5 系统的软件环境本系统需要的软件环境比较简单:1、 Windows XP系统,或者Windows Server 2003系统;2、 JDK 1.6.0_24环境;3、 可以选择使用MyEclipse8.6或者单纯使用EditPlus编译和运行本项目。设计与思路分析10.6 系统的架构本项目的架构是,基于控制台输入输出的Java SE程序。本系统建议分为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.7 系统实现步骤(1) 分析系统功能,根据类图:储户类Account,设计储户类的详细信息。参考关键代码如下所示:/* *此类是银行账户类,用于记录银行的账户信息 */package com.test.bank.bean;import java.util.*;import java.text.*;public class Account private int accountId; / 储户账户号private String realName; / 储户实名private String password; / 储户账户密码private double balance; / 储户账户余额private String identityId; / 储户身份证号码private String address; / 储户联系地址private String phone; / 储户联系电话private Date openDate; / 储户开户日期private int tradeCount; / 储户当前交易记录数 (该数目 100)private TradeInfo tradeList; / 储户交易明细public Account() this.tradeCount = 0;tradeList = new TradeInfo100;public Account(int accountId, String realName, String password,double balance, String identityId, String address, String phone,Date openDate) this.tradeCount = 0;tradeList = new TradeInfo100;this.accountId = accountId;this.realName = realName;this.password = password;this.balance = balance;this.identityId = identityId;this.address = address;this.phone = phone;this.openDate = openDate;public void setAccountId(int accountId) this.accountId = accountId;public int getAccountId() return this.accountId; / 其他属性的getters和setters方法。略去./ tradeCount的set方法不再设置/ addTradeCount()方法定义为私有的,只能为添加明细的方法调用private void addTradeCount() this.tradeCount+;public int getTradeCount() return this.tradeCount;public void addTradeInfo(TradeInfo info) int tradeId;if (tradeCount = 0) tradeId = this.getAccountId() * 1000 + 1; else int old_tradeId = tradeListtradeCount - 1.getTradeId();tradeId = old_tradeId + 1;info.setTradeId(tradeId);tradeListtradeCount = info;addTradeCount();System.out.println(n* 产生了账户 + this.getAccountId() + 的第+ this.getTradeCount() + 笔交易 *n);public String toString() SimpleDateFormat sdf = new SimpleDateFormat(yyyy年MM月dd日 hh时mm分ss秒);DecimalFormat df = new DecimalFormat(¥0.00);StringBuffer stb = new StringBuffer();stb.append(账号:);stb.append(this.getAccountId();stb.append(tttt);stb.append(储户实名:);stb.append(this.getRealName();stb.append(n);stb.append(账户余额:);stb.append(df.format(this.getBalance();stb.append(nn);stb.append(储户详细信息如下:);stb.append(n);stb.append(储户身份证号码:);stb.append(this.getIdentityId();stb.append(t);stb.append(储户地址:);stb.append(this.getAddress();stb.append(n);stb.append(储户联系电话:);stb.append(this.getPhone();stb.append(ttt);stb.append(开户日期:);stb.append(sdf.format(this.getOpenDate();return new String(stb);public String tradeListString() StringBuffer stb = new StringBuffer();stb.append(本账户共进行了交易);stb.append(this.getTradeCount();stb.append(笔。);stb.append(n);stb.append(详细交易清单如下:);stb.append(n);TradeInfo infoList = this.tradeList;stb.append(交易IDt 资金流向 交易类型t交易金额 交易日期tt交易描述n);for (int i = 0; i this.getTradeCount(); i+) TradeInfo info = tradeListi;stb.append(info);stb.append(n);return new String(stb);(2) 根据类图:交易信息类TradeInfo,设计交易信息类的详细信息,以打印交易明细账。参考关键代码如下所示:/* *此类是交易明细类,用于记录每一笔银行交易的明细信息 */package com.test.bank.bean;import java.util.*;import java.text.*;public class TradeInfo / 账户交易号/ 每个账户的交易号从1累加,等于该账户的 accountId + tradeIndex;private int tradeId;private char tradeDirection;private double tradeAmount;/ 交易类型:1 开户、2 存款、3 取款、4、转账private int tradeType;private Date tradeDate;private String tradeDescription;public TradeInfo() tradeId = -1;public TradeInfo(char tradeDirection, double tradeAmount, int tradeType,Date tradeDate, String tradeDescription) this.tradeId = -1;this.tradeDirection = tradeDirection;this.tradeAmount = tradeAmount;this.tradeType = tradeType;this.tradeDate = tradeDate;this.tradeDescription = tradeDescription;public void setTradeId(int tradeId) this.tradeId = tradeId;public int getTradeId() return this.tradeId;/ tradeId自己的增加方法public void addTradeId() tradeId+; /其他属性的getters和setters方法。略去.public String toString() DecimalFormat df = new DecimalFormat(¥0.00);String str_tradeType = ;switch (this.getTradeType() case 1:str_tradeType = 开户;break;case 2:str_tradeType = 存款;break;case 3:str_tradeType = 取款;break;case 4:str_tradeType = 转账;break;default:str_tradeType = 其他交易;break;SimpleDateFormat sdf = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss);StringBuffer stb = new StringBuffer();stb.append(this.getTradeId();stb.append( );stb.append(this.getTradeDirection();stb.append(t );stb.append(str_tradeType);stb.append(tt);stb.append(df.format(this.getTradeAmount();stb.append( );stb.append(sdf.format(this.getTradeDate();stb.append(t);stb.append(this.getTradeDescription();stb.append(t);return new String(stb);(3) 根据类图:交易业务类BankMethod,设计主要的系统功能(存取款等)。参考关键代码如下所示:/* *银行系统的主要方法 *包括:开户、存款、取款、转账、和明细帐打印 *其中还有各种辅助的子方法 */package com.test.bank.method;import java.util.*;import com.test.bank.bean.*;public class BankMethod private static Scanner scanner = new Scanner(System.in);private final static int accountBase = 10000;private static int accountIndex = 0;private static Account accountArray = new Account100;/* * 开户的操作 */ 确认开户public static void openAccount() String input;do System.out.println(欢迎您的光临,您选择的是开户操作:);System.out.print(确认开户么?(y/n));input = scanner.nextLine();if (input.equalsIgnoreCase(y) openMethod();break; else if (input.equalsIgnoreCase(n) System.out.println(正在退出开户功能.);break; else System.out.println(您输入的选择有误,请反回重新输入:);continue; while (true);/ BankFace.mainEntrance();/ 开户的主流程public static void openMethod() String input;Account account = new Account();/ 设置真实姓名System.out.print(请输入您的真实姓名:);input = scanner.nextLine();account.setRealName(input);/ 设置身份证号码do System.out.print(请输入您的身份证号码:);input = scanner.nextLine();boolean flag = judgeIdentity(input);if (flag = true) account.setIdentityId(input);break; else System.out.println(请返回重新输入!);continue; while (true);/ 设置密码String password = judgePassword();if (password = null) System.out.println(对不起,因为密码输入错误超过3次,请您反回重新填单操作!);return;account.setPassword(password);/ 设置开户金额double balance = 0d;do System.out.print(请输入您的预存金额:);input = scanner.nextLine();try balance = Double.parseDouble(input); catch (NumberFormatException e) System.out.println(您输入的预存金额不为数字,请返回重新输入!);continue;break; while (true);account.setBalance(balance);/ 设置地址System.out.print(请输入您的联系地址:);input = scanner.nextLine();account.setAddress(input);/ 设置电话System.out.print(请输入您的联系电话:);input = scanner.nextLine();account.setPhone(input);/ 设置开户日期Date date = new Date();account.setOpenDate(date);/ 设置账户帐号int accountId = accountBase + accountIndex;account.setAccountId(accountId);/ 将账户加入存储数组中accountArrayaccountIndex = account;accountIndex+;/ 设置开户明细TradeInfo info = new TradeInfo();info.setTradeId(accountId * 1000 + 1);info.setTradeDirection(0);info.setTradeAmount(account.getBalance();info.setTradeType(1);info.setTradeDate(date);String description = 帐号 + accountId + 执行开户操作成功;info.setTradeDescription(description);account.addTradeInfo(info);System.out.println(开户操作成功!);System.out.println(您的开户信息如下:);System.out.println(-);System.out.println(account);System.out.println(-);System.out.println(明细帐信息如下:);System.out.println(-);System.out.println(account.tradeListString();System.out.println(-); / 判断输入身份证号码的格式正确性./ 储户密码的输入校验./* * 存取款等其他操作。 */.(4) 书写系统登录后的操作选择界面。参考关键代码如下所示:/* *这个是关于银行系统的各种界面 */package com.test.bank.method;import java.util.*;public class BankFace private static Scanner scanner = new Scanner(System.in);public static void mainEntrance() throws NumberFormatExceptionSystem.out.println(nnn); System.out.println(t*);System.out.println(t* 欢迎光临临时学生银行 *);System.out.println(t* 请选择您要进行的操作 *); System.out.println(t*);System.out.println(t* *);System.out.println(t* 1、开户 2、存款 3、取款 4、转账 *);System.out.println(t* *);System.out.println(t* 5、明细账打印 6、账户查询 7、退出 *);System.out.println(t* *); System.out.println(t*); System.out.println(t*);System.out.println(nnn);System.out.print(请选择您所需要的操作:);String input = scanner.nextLine();in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 甘肃省白银实验中学2026届化学高一上期中学业水平测试模拟试题含解析
- 供应室新入科护士课件
- 心脑血管疾病预防
- 高级文秘面试实战:输血相关面试题目及答案精 编
- 中物院面试题目及答案精 编:各类岗位的职业发展规划
- 心肺复苏课件家庭版
- 心肺复苏课件图文
- 佛山专利知识产权培训课件
- 麻醉学专业求职面试实战题库
- 低视力相关知识培训总结课件
- 河南近10年中考真题英语2014-2023年含答案
- 影视艺术欣赏课程(教案)
- 人工智能技术在司法领域的应用与法律挑战
- 消防维保方案(消防维保服务)(技术标)
- 2023智联招聘行测题库
- 隧道洞渣加工石料组织管理方案
- 音乐美学.课件
- 心肺复苏说课比赛课件模板(一等奖)
- 健康体检证明
- 北京大学信息管理系《图书馆学概论》精品课件资料
- 2021年江西外语外贸职业学院教师招聘试题及答案解析
评论
0/150
提交评论