




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 . 项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个银行账户管理系统,用户可以操作自己的银行账户. 项目实施方式:这是一个同步练习,随着CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 练习1:(面向对象基础语法) 创建entity包,编写一个账户类(Account), 属性变量: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 balance:账户余额 方法: deposit: 存款方法,参数是do
2、uble型的金额 withdraw:取款方法,参数是double型的金额 构造方法: 有参和无参,有参构造方法用于设置必要的属性 Step1:Account类 package entity; public class Account /属性变量 private long id; private String password; private String name; private String personId; private double balance; /构造方法 public Account() public Account(long id,String name,String
3、personID,String password,double balance) this.id=id; =name; this .personId=personID; this .password=password; this.balance=balance; /成员方法 /存款,参数是需要存入的金额,返回值可以是存后的金额,此时返回值类型为double,也可以无返回值,此时方法的返回值类型为void。 public double deposit(double money) balance+=money; return balance; /取款,参数是需要存入的金额,返回值
4、是boolean,是否减款成功 money) withdraw( public booleandouble9 / 1 . if(balancemoney) balance-=money; return true; else ); System.out瀮楲瑮湬尨 取款数目过大 ; return false /练习2:(封装) /将Account类作成完全封装,将各属性变量定义为private类型,增加相应的get,set方法 public long getId() return id; id) long void setId( public.id = id; this String getPas
5、sword() public password; return setPassword(String password) voidpublic .password = password; this String getName() public name; return setName(String name) public void .name = name; this String getPersonId() public personId; return setPersonId(String personId) publicvoid.personId = personId; this g
6、etBalance() public double balance; return balance) doublevoid setBalance( public.balance = balance; this 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支10000元 在entity包中为这两种用户编写相关的类。 /很明显,储蓄账户(SavingAccount)和信用账户(CreditAccount)都是账户类的子类。 9 / 2 . package entity; /信
7、用账户 public class CreditAccount extends Account /创建信用账户时我们希望可以通过输入属性变量,如id,name,personID等直接获取一个信/用账户的对象,所以,需要构建信用账户的有参构造方法,为对象进行初始化赋值。 /父类有参数的构造方法不会自动继承,在子类的构造方法中可以用super(参数)来调用父类的构造方法。 public CreditAccount(long id, String name, String personID, String password, double balance) super (id, name, perso
8、nID, password, balance); /取款,对父类方法的重写 信用账户可以透支 / money) withdraw(doublepublic boolean.getBalance()+10000) super if (money 元 /取钱透支超过10000 ; return false else /将余额中的钱减少 super.setBalance( super.getBalance()-money); ; truereturn 同样,对于储蓄账户也是一样的方法。 package entity; /储蓄账户 public class SavingAccount extends
9、Account public SavingAccount(long id, String name, String personID, String password, double balance) super (id, name, personID, password, balance); money) public boolean withdraw(double.getBalance() superif (money; return false else.getBalance()-money); super.setBalance( super ; true return 同时要求创建bi
10、z(业务)包,编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号,提示:用s1.equals(s2) 可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示9 / 3 . 信用账户 2.用户登录,参数:id,密码 返回登录账户的账号 3.用户存款,参数:id,存款数额,返回void 4.用户取款,参数:id,取款数额,返回void 5.查询余额,参数:id,返回该账户的余额 double 用户会
11、通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 package biz; import entity.Account; public class Bank /当前所有的账户对象的集合,存放在数组中.对数组声明并初始化。也可以将初始化的步骤/ /放入构造方法中。 private Account accounts=new Account20;/账户集合,Account是另外一个包里的,所以需要引包import entity.Account; private int number;/账户数目 public Bank() accounts=new Account20;/以后不
12、足时和栈一样扩容。 num=0; /第一个方法,开户,对于用户开户,如果在开户成功后返回一个返较好。并且题目也要求类型的对象就比Account/回新创建的Account对象的账号。 public Account openAccount(long id,String pass1,String pass2,String name,String personID,int type) /创建一个新帐户 ;Account acc=null /判断两次密码是否一致 if(pass1.equals(pass2)/如果返回为真,则说明密码一致 /账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账
13、户 if(type=1) acc=new CreditAccount(id,name,pass1,personID,1); /刚开卡,可以定义balance=1 else acc=new SavingAccount(id,name,pass1,personID,1); /注意:CreditAccount和SavingAccount这两个类在另外一个包里,需要导入包 return acc; else /如果两次密码不一致,则开卡不成功,返回一个null。 return null; /可以进一步优化一下代码。 / if(pass1.equals(pass2) / /引包 / if(type=1)a
14、cc=new CreditAccount(id,name,pass1,personID,1);/刚开卡,可以定义 balance=1 / else acc=new SavingAccount(id,name,pass1,personID,1); / return acc; / 中。对象。并没有将其放入帐户数组accounts到此为止,只是new出一个Account/判断存储空间是否满了,或者说判断数组是否满了 if(number=accounts.length) /扩容,新创建一个数组,容量是前一个数组的2倍 9 / 4 . Account newaccounts=new Accountacc
15、ounts.length*2; / 将以前的数据拷贝过来 ,arraycopy 方法 System. arraycopy (accounts, 0, newaccounts, 0, accounts.length); / 将 newaccounts的引用赋给 accounts accounts=newaccounts; /可以往里面放东西了 accountsnumber=acc; else/ 如果数组还有空间,可以直接往里面放元素 accountsnumber=acc; /小优化 / if(number=accounts.length) / /扩容 Account newaccounts=ne
16、w Accountaccounts.length*2; / /将以前的数据拷贝过来/ ,arraycopy 方法 System.arraycopy(accounts, 0, newaccounts, 0, accounts.length); / /将 newaccounts/ 的引用赋给accounts accounts=newaccounts; / / /可以往里面放东西了 / accountsnumber=acc; / number+; return acc; /登录,当我们真实使用取款机的时候,没有手动输入卡号这个步骤,其实卡号的信息已经在卡里了,需要接受2个参数,卡号和密码。返回一个A
17、ccount类型的对象。 如何在数组中凭借卡号找到这个Account类型的对象呢?遍历。 public Account login(long id,String password) /遍历数组 Account acu = null; for(int i=1;iaccounts.length;i+) if(accountsi.getId()=id&password.equals(accountsi.getPassword()/如果用 户名和密码都对,则找到该用户 如果从数组中找到相应的卡号和密码,则返回整个对象 / acu=accountsi; break;/如果找到这个元素,则直接break,
18、 不用再找了 acu=nullreturn acu;/是不会被执行的。如果卡号和密码是不匹配的,则if /存款,根据id存款,所以id是参数,还有个参数是金额 public void saveMoney(long id,double money) /刚才在Account中已经写好了存取款方法了,直接用Account对象调用就可以了 /但是用哪个 Account对象呢?就需要根据id来找 9 / 5 . /需要根据id,找到对应的Account对象,往其中的余额中加入money , /这时我们发现在bank这个类的很多方法中都要使用根据 id获取Account对象的方法, / 所以我们考虑单独做
19、个方法,可以让其他的方法来调用它,这样就避免了大量代码的重复 Account ac=selectAccountById(id); ac.deposit(money); /将其定义为 private,是因为这个方法只在本类中使用 private Account selectAccountById(long id) Account acu = null; for(int i=1;iaccounts.length;i+) if(accountsi.getId()=id)/根据id 找到该用户 / 如果从数组中找到相应的卡号和密码,则返回整个对象 acu=accountsi; break;/如果找到这
20、个元素,则直接 break,不用再找了 acu; return /此时将登录方法优化 public Account login(long id,String password) /第二步,优化后 Account acu = selectAccountById(id); if (acu=null) /该id对应的Account对象不存在,如你已经注销了一个卡,就找不到了 return null; else if(acu.getPassword().equals(password)/ 判断密码是否相等 return acu; elsereturn null; /进一步优化 if(acu!=null
21、&!acu.getPassword().equals(password) /如果acu不为空,并且密码不相等的时候,将acu=null ; null acu= acu; return id是参数id/取款,根据取款,所以 money) void public outputMoney(long id,doubleAccount ac=selectAccountById(id); ac.withdraw(money); double 查询余额,需要返回一个/类型的数据9 / 6 . public double selectMoney(long id) Account ac=selectAccoun
22、tById(id); return ac.getBalance(); /存款,根据id public void inputMoney(long id,double money) Account ac=selectAccountById(id); deposit(money); ac. 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 Account类中如果将id声明为static,public stat
23、ic long id; 每个账户还需要有自己的id。 所以我们将id分为2个,一个是账户自己的id,还有一个是系统分配给每个账户的id. private long id; id;/用来分配账号的 long pidpublic static2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 Account类中 将Bank类中的数组换为hashmap。 private Map accounts; public Bank() accounts=new HashMap(); n
24、umber=0; /不需要扩容了 /开户方法的id就不能由用户输入了。 public Account openAccount(String pass1,String pass2,String name,String personID,int type) /创建一个新帐户 Account acc= null; / 判断两次密码是否一致 if (pass1.equals(pass2) / 引包 if(type=1) acc=new CreditAccount(Accounts.pid+,name,pass1,personID,1); /刚开卡,可以定义balance=1 else acc=new
25、SavingAccount(Accounts.pid+,name,pass1,personID,1); /判断存储空间是否满了,或者说判断数组是否满了 accounts.put(acc.getId(), acc); number+; 9 / 7 . return acc; 如果密码不相同的话,返回空/ else; null return 私有的方法:selectAccountById就可以省略了。HashMap已经提供者各方乐了,根据键来获取值。存款,取款,查询余额等方法都要改动。 /取款,根据id取款,所以id是参数 public void outputMoney(long id,double money) Account ac=accounts.get(id); ac.withdraw(money); 类型的数据/查询余额,需要返回一个 double id) longpublic double selectMoney(Account ac=a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行招聘ai面试题目及答案
- 银行信贷考试题及答案
- 专业考试题及答案
- 舞蹈专业试题及答案
- 养猪专业试题及答案大全
- 口腔专业毕业试题及答案
- 水暖专业试题及答案
- 黑龙江省黑河市九校2025-2026学年高二上学期期初联考数学试题(含答案)
- 广东省汕头市潮阳区潮阳实验学校培优班2025-2026学年高二上学期9月月考语文试题B卷(含答案)
- 专业公文写作试题及答案
- 泛光施工招标文件
- 旅游策划实务整套课件完整版电子教案课件汇总(最新)
- 小学生汉字听写大赛题库
- DB23∕T 2661-2020 地热能供暖系统技术规程
- 人工挖孔桩施工监测监控措施
- 第一框 关爱他人
- 国家职业技能标准 (2021年版) 6-18-01-07 多工序数控机床操作调整工
- 办公楼加层改造施工组织设计(100页)
- 渗透检测培训教材(1)
- 空调专业常用英文词汇
- 洁净厂房不锈钢地面施工方案
评论
0/150
提交评论