传智播客旗下高端IT在线教育平台|咨询热线:010-56288220

返回顶部 返回列表
616 1

[JavaEE专区] [Java动手做项目】——01.银行业务管理软件

[复制链接]

61

主题

92

帖子

500

积分

超级版主

谷子老师

Rank: 8Rank: 8

积分
500
6161 谷子老师 发表于 2017-12-2 11:09:40
本帖最后由 18603661315 于 2017-12-2 15:39 编辑

[Java动手做项目】——01.银行业务管理软件
       Java实训.jpg

          Java动手做项目,是博学谷推出的一款注重动手实践的系列学习课程,本次带来的小案例是 银行业务管理软件,也是初级的Java小项目案例,希望小伙伴们可以自己动手敲一敲,想一想如何实现吧!



一、项目运行效果图:
下载.png


二、源代码:
  1. package experiment3;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class TestBanking {
  6.     public static void main(String[] args) {
  7.         Bank bank = new Bank();
  8.         bank.addCustomer("Simms", "Jane");
  9.         bank.addCustomer("Bryant", "Owen");
  10.         bank.addCustomer("Soley", "Tim");
  11.         bank.addCustomer("Soley", "Maria");
  12.         SavingsAccount saving = new SavingsAccount(500.00, 0.05);
  13.         CheckingAccount checking = new CheckingAccount(200.00, true, 400.00);
  14.         bank.getCustomer(1).addAccount(saving);
  15.         bank.getCustomer(1).addAccount(checking);
  16.         checking = new CheckingAccount(200.00);
  17.         bank.getCustomer(2).addAccount(checking);
  18.         saving = new SavingsAccount(1500.00, 0.05);
  19.         checking = new CheckingAccount(200.00, true, 400.00);
  20.         bank.getCustomer(3).addAccount(saving);
  21.         bank.getCustomer(3).addAccount(checking);
  22.         saving = new SavingsAccount(150.00, 0.05);
  23.         bank.getCustomer(4).addAccount(saving);
  24.         bank.getCustomer(4).addAccount(checking);
  25.         CustomerReport cr = new CustomerReport();
  26.         cr.generateReport(bank);
  27.     }
  28. }
  29. /*
  30. * Account类是抽象类,有一个balance属性,代表余额。deposit方法表示存款,amount参数是存款额。withdraw方法表示取款,
  31. * 取款额amount
  32. * 如果超出了余额就会抛出透支异常,我们需要自己定义一个OverdraftException类来表示这个异常,当抛出透支异常时,不进行取款交易,
  33. * 并报告用户此项错误。
  34. */
  35. abstract class Account {
  36.     protected double balance;// 代表余额
  37.     Account(double intBalance) {
  38.         this.balance = intBalance;
  39.     }
  40.     protected double getBalance() {
  41.         return balance;
  42.     }
  43.     protected void setBalance(double newBalance) {
  44.         this.balance = newBalance;
  45.     }
  46.     protected void deposit(double amount) {// 存款
  47.         balance += amount;
  48.     }
  49.     protected void withdraw(double amount) {// 取款
  50.         try {
  51.             if (amount <= balance) {
  52.                 balance -= amount;
  53.             } else {
  54.                 balance = amount - balance;
  55.                 throw new OverdraftException(balance);
  56.             }
  57.         } catch (OverdraftException e) {
  58.             System.out.println("余额不足,与目标金额相差" + e.getamount());
  59.         }
  60.     }
  61. }
  62. /*
  63. * Customer类有一个accounts集合,用来存储某个储户的所有Account(帐号)对象,addAccount方法用于向该集合中加帐号,
  64. * getAccount方法根据下标值取该储户的某个帐号,getNumOfAccounts方法取该储户的帐号总数,
  65. * getAccounts方法返回该储户的帐号的Iterator, 以便获得每个帐号对象。
  66. */
  67. class Customer {
  68.     protected String firstName;
  69.     protected String lastName;
  70.     List<Account> account = new ArrayList<Account>();;
  71.     Customer(String firstName, String lastName) {
  72.         this.firstName = firstName;
  73.         this.lastName = lastName;
  74.     }
  75.     protected void addAccount(Account Acct) {
  76.         account.add(Acct);
  77.     }
  78.     protected Account getAccount(int Account_index) {
  79.         // return account.get(Account_index);
  80.         List<Account> list = new ArrayList<Account>();
  81.         Iterator<Account> it = account.iterator();
  82.         while (it.hasNext()) {
  83.             Account temp = it.next();
  84.             list.add(temp);
  85.         }
  86.         return list.get(Account_index - 1);
  87.     }
  88.     protected int getNumOfAccounts() {
  89.         // return account.size();
  90.         List<Account> list = new ArrayList<Account>();
  91.         Iterator<Account> it = account.iterator();
  92.         while (it.hasNext()) {
  93.             Account temp = it.next();
  94.             list.add(temp);
  95.         }
  96.         return list.size();
  97.     }
  98.     protected Iterator getAccounts() {
  99.         // return account.iterator();
  100.         Iterator<Account> it = account.iterator();
  101.         return it;
  102.     }
  103. }
  104. /*
  105. * Bank类中有一个customers集合,用来存储所有的Customer(储户)对象,addCustomer方法用于向该集合中加储户,
  106. * getCustomer方法根据下标值取某个储户,getNumOfCustomers方法取储户总数,getCustomers方法返回储户的Iterator,
  107. * 以便获得每个储户对象。
  108. */
  109. class Bank {
  110.     List<Customer> customers = new ArrayList<Customer>();
  111.     Bank() {
  112.     }
  113.     protected void addCustomer(String firstName, String lastName) {
  114.         // addCustomer方法用于向该集合中加储户
  115.         Customer cust = new Customer(firstName, lastName);
  116.         customers.add(cust);
  117.     }
  118.     protected Customer getCustomer(int customer_index) {
  119.         // return customers.get(customer_index);
  120.         List<Customer> list = new ArrayList<Customer>();
  121.         Iterator<Customer> it = customers.iterator();
  122.         while (it.hasNext()) {
  123.             Customer temp = it.next();
  124.             list.add(temp);
  125.         }
  126.         return list.get(customer_index - 1);
  127.     }
  128.     protected int getNumOfCustomers() {
  129.         // return customers.size();
  130.         List<Customer> list = new ArrayList<Customer>();
  131.         Iterator<Customer> it = customers.iterator();
  132.         while (it.hasNext()) {
  133.             Customer temp = it.next();
  134.             list.add(temp);
  135.         }
  136.         return list.size();
  137.     }
  138.     protected Iterator getCustomers() {
  139.         // return customers.iterator();
  140.         Iterator<Customer> it = customers.iterator();
  141.         return it;
  142.     }
  143. }
  144. /* SavingsAccount类表示存款帐号,继承Account,新增一个属性interestRate, 代表利率。 */
  145. class SavingsAccount extends Account {
  146.     double interestRate;// 代表利率
  147.     SavingsAccount(double intBalance, double interestRate) {
  148.         super(intBalance);
  149.         this.interestRate = interestRate;
  150.     }
  151. }
  152. /*
  153. * CheckingAccount类表示大额存款帐号,也继承Account,它有一个叫canOverdraft的属性,是一个boolean值,
  154. * 代表该帐号能否透支(true-能,false-否);它还有一个叫maxOverdraft的属性,表示该帐号允许的最大透支额。
  155. * 这个类的withdraw(取款)方法需要考虑的因素比较多:在发生透支时,如果帐号不允许透支(canOverdraft=false),
  156. * 则抛出OverdraftException异常并退出交易;如果允许透支(canOverdraft=true),
  157. * 但透支额(amount-balance)超过最大透支额的话,也抛出OverdraftException异常并退出交易;
  158. * 只有在不发生透支或透支额小于最大透支额时交易才能正常进行。另外,在每次进行透支交易时,最大透支额(maxOverdraft)应做调整,
  159. * 以便使该帐号的最大透支额随透支次数的增加而不断减少,从而可以避免透支的滥用,阻止信用膨胀。CheckingAccount类有两个构造方法,
  160. * 只带一个参数的构造方法用来初始化balance,同时设定canOverdraft=false,maxOverdraft=0.00。
  161. */
  162. class CheckingAccount extends Account {
  163.     protected boolean canOverdraft;// 代表该帐号能否透支
  164.     protected double maxOverdraft;// 表示该帐号允许的最大透支额
  165.     CheckingAccount(double intBalance) {
  166.         super(intBalance);
  167.         canOverdraft = false;
  168.         maxOverdraft = 0.00;
  169.     }
  170.     CheckingAccount(double intBalance, boolean canOverdraft, double maxOverdraft) {
  171.         super(intBalance);
  172.         this.canOverdraft = canOverdraft;
  173.         this.maxOverdraft = maxOverdraft;
  174.     }
  175.     protected void withdraw(double intBalance) {
  176.         if (intBalance > super.balance) {
  177.             try {
  178.                 if (canOverdraft = false) {
  179.                     intBalance = intBalance - super.balance;
  180.                     throw new OverdraftException(intBalance);
  181.                 }
  182.             } catch (OverdraftException e) {
  183.                 System.out.println("余额不足,与目标金额相差" + e.getamount());
  184.             }
  185.             if (canOverdraft = true) {
  186.                 intBalance = intBalance - super.balance;
  187.                 try {
  188.                     if (intBalance > maxOverdraft) {
  189.                         throw new OverdraftException(intBalance);
  190.                     } else {
  191.                         maxOverdraft = maxOverdraft - intBalance;
  192.                     }
  193.                 } catch (OverdraftException e) {
  194.                     System.out.println(e.getamount() + "超过最大透支金额");
  195.                 }
  196.             }
  197.         }
  198.     }
  199. }
  200. /* CustomerReport类用来显示每个储户的姓名以及他所持有的帐号的类别和余额,以报表的形式输出。 */
  201. class CustomerReport {
  202.     void generateReport(Bank bank) {
  203.         System.out.println("CUSTOMERS REPORT");
  204.         System.out.println("==================");
  205.         for (Customer customer : bank.customers) {
  206.             System.out.println("储户姓名:" + customer.lastName + " " + customer.firstName);
  207.             for (Account accut : customer.account) {
  208.                 System.out.println(accut.getClass().getSimpleName() + ":当前余额是¥" + accut.getBalance());
  209.             }
  210.             System.out.println();
  211.         }
  212.     }
  213. }
  214. class OverdraftException extends Exception {
  215.     double amount;
  216.     public OverdraftException(double amount) {
  217.         this.amount = amount;
  218.     }
  219.     public double getamount() {
  220.         return amount;
  221.     }
  222. }
复制代码

回复

61

主题

92

帖子

500

积分

超级版主

谷子老师

Rank: 8Rank: 8

积分
500
 楼主| 谷子老师 发表于 2017-12-4 11:07:36
回复

您需要登录后才可以回帖 登录 | 立即注册