




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目名称:Bank Account Management System 银行账户管理系统 简称BAM项目描述:这是一个银行账户管理系统,用户可以操作自己的银行账户.项目实施方式:这是一个同步练习,随着CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求.练习1:(面向对象基础语法)创建entity包,编写一个账户类(Account),属性变量:id:账户号码 长整数password:账户密码name:真实姓名personId:身份证号码 字符串类型balance:账户余额方法:deposit: 存款方法,参数是double型的金额withdra
2、w:取款方法,参数是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 personID,String password,doub
3、le 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;/取款,参数是需要存入的金额,返回值是boolean,是否减款成功public boolean withdraw(dou
4、ble money)if(balance>money)balance-=money;return true;elseSystem.out.println("取款数目过大");return false;/练习2:(封装)/将Account类作成完全封装,将各属性变量定义为private类型,增加相应的get,set方法public long getId() return id;public void setId(long id) this.id = id;public String getPassword() return password;public void se
5、tPassword(String password) this.password = password;public String getName() return name;public void setName(String name) = name;public String getPersonId() return personId;public void setPersonId(String personId) this.personId = personId;public double getBalance() return balance;public voi
6、d setBalance(double balance) this.balance = balance;练习3:(继承,多态)银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支10000元在entity包中为这两种用户编写相关的类。/很明显,储蓄账户(SavingAccount)和信用账户(CreditAccount)都是账户类的子类。package entity;/信用账户public class CreditAccount extends Account /创建信用账户时我们希望可以通过输入属性
7、变量,如id,name,personID等直接获取一个信/用账户的对象,所以,需要构建信用账户的有参构造方法,为对象进行初始化赋值。/父类有参数的构造方法不会自动继承,在子类的构造方法中可以用super(参数)来调用父类的构造方法。 public CreditAccount(long id, String name, String personID,String password, double balance) super(id, name, personID, password, balance);/取款,对父类方法的重写/信用账户可以透支public boolean withdraw(d
8、ouble money) if(money>super.getBalance()+10000)/取钱透支超过10000元return false;else/将余额中的钱减少super.setBalance(super.getBalance()-money);return true;同样,对于储蓄账户也是一样的方法。package entity;/储蓄账户public class SavingAccount extends Account public SavingAccount(long id, String name, String personID,String password,
9、double balance) super(id, name, personID, password, balance);public boolean withdraw(double money) if(money>super.getBalance()return false;elsesuper.setBalance(super.getBalance()-money);return true;同时要求创建biz(业务)包,编写Bank类,属性:1.当前所有的账户对象的集合,存放在数组中2.当前账户数量方法:1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,账户类型,返回新
10、创建的Account对象的账号,提示:用s1.equals(s2) 可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户2.用户登录,参数:id,密码 返回登录账户的账号3.用户存款,参数:id,存款数额,返回void4.用户取款,参数:id,取款数额,返回void5.查询余额,参数:id,返回该账户的余额 double用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数package biz;import entity.Account;public class Bank /当前所有的账户对象的集合,存放在数组中
11、.对数组声明并初始化。也可以将初始化的步骤/放入构造方法中。private Account accounts=new Account20;/账户集合,Account是另外一个包里的,所以需要引包import entity.Account;private int number;/账户数目public Bank()accounts=new Account20;/以后不足时和栈一样扩容。num=0;/第一个方法,开户,对于用户开户,如果在开户成功后返回一个Account类型的对象就比/较好。并且题目也要求返回新创建的Account对象的账号。public Account openAccount(lo
12、ng id,String pass1,String pass2,String name,String personID,int type)/创建一个新帐户Account acc=null;/判断两次密码是否一致if(pass1.equals(pass2)/如果返回为真,则说明密码一致/账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户if(type=1)acc=new CreditAccount(id,name,pass1,personID,1);/刚开卡,可以定义balance=1else acc=new SavingAccount(id,name,pass1,personI
13、D,1);/注意:CreditAccount和SavingAccount这两个类在另外一个包里,需要导入包return acc;else /如果两次密码不一致,则开卡不成功,返回一个null。return null;/可以进一步优化一下代码。/if(pass1.equals(pass2)/引包/if(type=1)acc=new CreditAccount(id,name,pass1,personID,1);/刚开卡,可以定义balance=1/else acc=new SavingAccount(id,name,pass1,personID,1);/return acc;/到此为止,只是ne
14、w出一个Account对象。并没有将其放入帐户数组accounts中。/判断存储空间是否满了,或者说判断数组是否满了if(number>=accounts.length)/扩容,新创建一个数组,容量是前一个数组的2倍Account newaccounts=new Accountaccounts.length*2;/将以前的数据拷贝过来,arraycopy方法System.arraycopy(accounts, 0, newaccounts, 0, accounts.length);/将newaccounts的引用赋给accountsaccounts=newaccounts;/可以往里面放
15、东西了accountsnumber=acc;else/如果数组还有空间,可以直接往里面放元素accountsnumber=acc;/小优化/if(number>=accounts.length)/扩容/Account newaccounts=new Accountaccounts.length*2;/将以前的数据拷贝过来,arraycopy方法/System.arraycopy(accounts, 0, newaccounts, 0, accounts.length);/将newaccounts的引用赋给accounts/accounts=newaccounts;/可以往里面放东西了/a
16、ccountsnumber=acc;number+;return acc;/登录,当我们真实使用取款机的时候,没有手动输入卡号这个步骤,其实卡号的信息已经在卡里了,需要接受2个参数,卡号和密码。返回一个Account类型的对象。如何在数组中凭借卡号找到这个Account类型的对象呢?遍历。public Account login(long id,String password)/遍历数组Account acu = null;for(int i=1;i<accounts.length;i+)if(accountsi.getId()=id&&password.equals(a
17、ccountsi.getPassword()/如果用户名和密码都对,则找到该用户/如果从数组中找到相应的卡号和密码,则返回整个对象acu=accountsi;break;/如果找到这个元素,则直接break,不用再找了return acu;/如果卡号和密码是不匹配的,则if是不会被执行的。acu=null/存款,根据id存款,所以id是参数,还有个参数是金额public void saveMoney(long id,double money)/刚才在Account中已经写好了存取款方法了,直接用Account对象调用就可以了/但是用哪个Account对象呢?就需要根据id来找/需要根据id,找
18、到对应的Account对象,往其中的余额中加入money,/这时我们发现在bank这个类的很多方法中都要使用根据id获取Account对象的方法,/所以我们考虑单独做个方法,可以让其他的方法来调用它,这样就避免了大量代码的重复Account ac=selectAccountById(id);ac.deposit(money);/将其定义为private,是因为这个方法只在本类中使用private Account selectAccountById(long id)Account acu = null;for(int i=1;i<accounts.length;i+)if(accounts
19、i.getId()=id)/根据id找到该用户/如果从数组中找到相应的卡号和密码,则返回整个对象acu=accountsi;break;/如果找到这个元素,则直接break,不用再找了return acu;/此时将登录方法优化public Account login(long id,String password)/第二步,优化后Account acu = selectAccountById(id);if(acu=null)/该id对应的Account对象不存在,如你已经注销了一个卡,就找不到了return null;elseif(acu.getPassword().equals(passwo
20、rd)/判断密码是否相等return acu;elsereturn null;/进一步优化if(acu!=null&&!acu.getPassword().equals(password)/如果acu不为空,并且密码不相等的时候,将acu=nullacu=null;return acu;/取款,根据id取款,所以id是参数public void outputMoney(long id,double money)Account ac=selectAccountById(id);ac.withdraw(money);/查询余额,需要返回一个double类型的数据public dou
21、ble selectMoney(long id)Account ac=selectAccountById(id);return ac.getBalance();/存款,根据idpublic void inputMoney(long id,double money)Account ac=selectAccountById(id);ac. deposit(money);练习4:(语言高级特性,三个修饰符)1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推.提示:构造对象的时候采用static属性为i
22、d赋值Account类中如果将id声明为static,public static long id;每个账户还需要有自己的id。所以我们将id分为2个,一个是账户自己的id,还有一个是系统分配给每个账户的id.private long id;public static long pid;/用来分配账号的id2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法.存款方法改为不允许子类修改取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现Account类中将Bank类中的数组换为hashmap。private Map<Long,Account>
23、accounts;public Bank()accounts=new HashMap< Long,Account >();number=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+,na
24、me,pass1,personID,1);/刚开卡,可以定义balance=1else acc=new SavingAccount(Accounts.pid+,name,pass1,personID,1);/判断存储空间是否满了,或者说判断数组是否满了accounts.put(acc.getId(), acc);number+;return acc;/如果密码不相同的话,返回空elsereturn null;私有的方法:selectAccountById就可以省略了。HashMap已经提供者各方乐了,根据键来获取值。存款,取款,查询余额等方法都要改动。/取款,根据id取款,所以id是参数public void outputMoney(long id,double money)Account ac=accounts.get(id);ac.withdraw(money);/查询余额,需要返回一个double类型的数据public double selectMoney(long id)Accoun
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 票务代理地勤服务知识考核试卷
- 碳素材料在智能窗户中的功能实现考核试卷
- 出版业品牌建设与宣传推广考核试卷
- 数字出版物营销策略与应用考核试卷
- 矿产勘查中的勘查成果资料信息化考核试卷
- 油炸食品在快餐行业中的应用与市场竞争考核试卷
- 淡水养殖水体富营养化风险评估考核试卷
- 晋中师范高等专科学校《Python语言程序设计实验》2023-2024学年第二学期期末试卷
- 新疆塔城地区乌苏市2025年数学四年级第二学期期末联考试题含解析
- 山西医科大学晋祠学院《大学生精益创新创业实践》2023-2024学年第二学期期末试卷
- 第一课中国人民站起来了
- 眼科门诊病历
- 彝文《指路经》课件
- 高考阅读理解(main-idea)(课堂)课件
- 有限元分析研究汇报课件
- 境外货物管控应急预案方案
- 江苏省医疗服务项目价格标准
- 公司报废申请单
- 高新区市政道路可行性研究报告
- TSSITS 2002-2022 低速无人驾驶清扫车安全规范
- 个人理财分期还款计划管理表1
评论
0/150
提交评论