《java 银行项目分析.docx》由会员分享,可在线阅读,更多相关《java 银行项目分析.docx(14页珍藏版)》请在三一办公上搜索。
1、java 银行项目分析项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个银行账户管理系统,用户可以操作自己的银行账户. 项目实施方式:这是一个同步练习,随着CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 练习1:(面向对象基础语法) 创建entity包,编写一个账户类(Account), 属性变量: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 balance:账户余额 方法: deposit: 存款
2、方法,参数是double型的金额 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,S
3、tring personID,String password,double balance) this.id=id; this.name=name; this.personId=personID; this.password=password; this.balance=balance; /成员方法 /存款,参数是需要存入的金额,返回值可以是存后的金额,此时返回值类型为double,也可以无返回值,此时方法的返回值类型为void。 public double deposit(double money) /取款,参数是需要存入的金额,返回值是boolean,是否减款成功 public boole
4、an withdraw(double money) if(balancemoney) balance-=money; return true; balance+=money; return balance; else System.out.println(取款数目过大); return false; /练习2:(封装) /将Account类作成完全封装,将各属性变量定义为private类型,增加相应的get,set方法 public long getId public void setId(long id) public String getPassword public void setPa
5、ssword(String password) public String getName public void setName(String name) public String getPersonId public void setPersonId(String personId) public double getBalance public void setBalance(double balance) this.balance = balance; return balance; this.personId = personId; return personId; this.na
6、me = name; return name; this.password = password; return password; this.id = id; return id; 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支10000元 在entity包中为这两种用户编写相关的类。 /很明显,储蓄账户(SavingAccount)和信用账户(CreditAccount)都是账户类的子类。 package entity; /信用账户 public class Cred
7、itAccount extends Account /创建信用账户时我们希望可以通过输入属性变量,如id,name,personID等直接获取一个信/用账户的对象,所以,需要构建信用账户的有参构造方法,为对象进行初始化赋值。 /父类有参数的构造方法不会自动继承,在子类的构造方法中可以用super(参数)来调用父类的构造方法。 public CreditAccount(long id, String name, String personID, String password, double balance) super(id, name, personID, password, balance
8、); /取款,对父类方法的重写 /信用账户可以透支 public boolean withdraw(double money) if(moneysuper.getBalance+10000) /取钱透支超过10000元 return false; /将余额中的钱减少 super.setBalance(super.getBalance-money); return true; else 同样,对于储蓄账户也是一样的方法。 package entity; /储蓄账户 public class SavingAccount extends Account public SavingAccount(lo
9、ng id, String name, String personID, public boolean withdraw(double money) if(moneysuper.getBalance) return false; super.setBalance(super.getBalance-money); return true; else String password, double balance) super(id, name, personID, password, balance); 同时要求创建biz包,编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2
10、.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,账户类型,返回新创建的Account对象的账号,提示:用s1.equals(s2) 可以比较s1,s2两个字符串的值是否相等.账户类型是一个整数,为0的时候表示储蓄账户,为1的时候表示信用账户 2.用户登录,参数:id,密码 返回登录账户的账号 3.用户存款,参数:id,存款数额,返回void 4.用户取款,参数:id,取款数额,返回void 5.查询余额,参数:id,返回该账户的余额 double 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 package biz;
11、import entity.Account; public class Bank /当前所有的账户对象的集合,存放在数组中.对数组声明并初始化。也可以将初始化的步骤/ /放入构造方法中。 private Account accounts=new Account20;/账户集合,Account是另外一个包里的,所以需要引包import entity.Account; private int number;/账户数目 public Bank accounts=new Account20;/以后不足时和栈一样扩容。 num=0; /第一个方法,开户,对于用户开户,如果在开户成功后返回一个Accoun
12、t类型的对象就比/较好。并且题目也要求返回新创建的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的时候表示信用账户 if(type=1) acc=new CreditAccount(id,name,pass1,per
13、sonID,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)acc=new CreditAccount(id,name,pass1,personID,1);/刚开卡,
14、可以定义balance=1 / / / else acc=new SavingAccount(id,name,pass1,personID,1); return acc; /到此为止,只是new出一个Account对象。并没有将其放入帐户数组accounts中。 /判断存储空间是否满了,或者说判断数组是否满了 if(number=accounts.length) /扩容,新创建一个数组,容量是前一个数组的2倍 Account newaccounts=new Accountaccounts.length*2; /将以前的数据拷贝过来,arraycopy方法 System.arraycopy(ac
15、counts, 0, newaccounts, 0, accounts.length); /将newaccounts的引用赋给accounts accounts=newaccounts; /可以往里面放东西了 accountsnumber=acc; else/如果数组还有空间,可以直接往里面放元素 accountsnumber=acc; /小优化 / if(number=accounts.length) / / / / /扩容 Account newaccounts=new Accountaccounts.length*2; /将以前的数据拷贝过来,arraycopy方法 System.arr
16、aycopy(accounts, 0, newaccounts, 0, accounts.length); / / / / /将newaccounts的引用赋给accounts accounts=newaccounts; /可以往里面放东西了 accountsnumber=acc; / number+; return acc; /登录,当我们真实使用取款机的时候,没有手动输入卡号这个步骤,其实卡号的信息已经在卡里了,需要接受2个参数,卡号和密码。返回一个Account类型的对象。 如何在数组中凭借卡号找到这个Account类型的对象呢?遍历。 public Account login(long
17、 id,String password) /遍历数组 Account acu = null; for(int i=1;iaccounts.length;i+) return acu;/如果卡号和密码是不匹配的,则if是不会被执行的。acu=null if(accountsi.getId=id&password.equals(accountsi.getPassword)/如果用 /如果从数组中找到相应的卡号和密码,则返回整个对象 acu=accountsi; 户名和密码都对,则找到该用户 break;/如果找到这个元素,则直接break,不用再找了 /存款,根据id存款,所以id是参数,还有个参
18、数是金额 public void saveMoney(long id,double money) /刚才在Account中已经写好了存取款方法了,直接用Account对象调用就可以了 /但是用哪个Account对象呢?就需要根据id来找 /需要根据id,找到对应的Account对象,往其中的余额中加入money, /这时我们发现在bank这个类的很多方法中都要使用根据id获取Account对象的方法, /所以我们考虑单独做个方法,可以让其他的方法来调用它,这样就避免了大量代码的重复 Account ac=selectAccountById(id); ac.deposit(money); /将其
19、定义为private,是因为这个方法只在本类中使用 private Account selectAccountById(long id) Account acu = null; for(int i=1;iaccounts.length;i+) return acu; if(accountsi.getId=id)/根据id找到该用户 /如果从数组中找到相应的卡号和密码,则返回整个对象 acu=accountsi; break;/如果找到这个元素,则直接break,不用再找了 /此时将登录方法优化 public Account login(long id,String password) /第二步
20、,优化后 Account acu = selectAccountById(id); if(acu=null) /该id对应的Account对象不存在,如你已经注销了一个卡,就找不到了 return null; else if(acu.getPassword.equals(password)/判断密码是否相等 return acu; elsereturn null; /进一步优化 if(acu!=null&!acu.getPassword.equals(password) /如果acu不为空,并且密码不相等的时候,将acu=null acu=null; /取款,根据id取款,所以id是参数 pu
21、blic void outputMoney(long id,double money) /查询余额,需要返回一个double类型的数据 public double selectMoney(long id) Account ac=selectAccountById(id); return ac.getBalance; Account ac=selectAccountById(id); ac.withdraw(money); return acu; /存款,根据id public void inputMoney(long id,double money) Account ac=selectAcco
22、untById(id); ac. deposit(money); 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 Account类中如果将id声明为static,public static long id; 每个账户还需要有自己的id。 所以我们将id分为2个,一个是账户自己的id,还有一个是系统分配给每个账户的id. private long id; public static long pid;/
23、用来分配账号的id 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 Account类中 将Bank类中的数组换为hashmap。 private Map accounts; public Bank accounts=new HashMap; number=0; /不需要扩容了 /开户方法的id就不能由用户输入了。 public Account openAccount(String pass1,String pass2,String name,String perso
24、nID,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 SavingAccount(Accounts.pid+,name,pass1,personID,1); /如果密码不相同的话,返回空 else return null; /判断存储空间是否满了,或者说判断数组是否满了 accounts
25、.put(acc.getId, acc); number+; return acc; 私有的方法:selectAccountById就可以省略了。HashMap已经提供者各方乐了,根据键来获取值。存款,取款,查询余额等方法都要改动。 /取款,根据id取款,所以id是参数 public void outputMoney(long id,double money) /查询余额,需要返回一个double类型的数据 public double selectMoney(long id) Account ac=accounts.get(id); return ac.getBalance; Account
26、ac=accounts.get(id); ac.withdraw(money); /存款,根据id public void inputMoney(long id,double money) Account ac=accounts.get(id); ac. deposit(money); 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 Account类中 /存款 public final double deposit(double money) balance+=mo
27、ney; return balance; /取款 public abstract boolean withdraw(double money); 练习5:(接口) 将Bank类的方法抽象出来,定义一个接口,在TextView类中,应该和接口建立关联,减少界面和Bank对象的耦合度 package biz; import entity.Account; public interface BankInterface public abstract Account openAccount(long id, String pass1, String pass2,String name, String public abstract Account login(long id, String password); public abstract void saveMoney(long id, double money); public abstract void outputMoney(long id, double money); public abstract double selectMoney(long id); personID, int type);
链接地址:https://www.31ppt.com/p-3159501.html