银行(1)0925

2练习1:创建一个简单的银行程序包

 

练习目标-Java 语言中面向对象的封装性及构造器的使用。

任务

在这个练习里,创建一个简单版本的(账户类)Account类。将这个源文件放入banking程序包中。在创建单个帐户的默认程序包中,已编写了一个测试程序TestBanking。这个测试程序初始化帐户余额,并可执行几种简单的事物处理。最后,该测试程序显示该帐户的最终余额。

1.  创建banking 包

2.  在banking 包下创建Account类。该类必须实现上述UML框图中的模型。

  1. 声明一个私有对象属性:balance,这个属性保留了银行帐户的当前(或即时)余额。
  2. 声明一个带有一个参数(init_balance)的公有构造器,这个参数为balance属性赋值。
  3. 声明一个公有方法getBalance,该方法用于获取经常余额。
  4. 声明一个公有方法deposit,该方法向当前余额增加金额。
  5. 声明一个公有方法withdraw从当前余额中减去金额。

3.  编译TestBanking.java文件。

4.  运行TestBanking类。可以看到下列输出结果:

Creating an account with a 500.00 balance

Withdraw 150.00

Deposit 22.50

Withdraw 47.62

The account has a balance of 324.88

练习2

 

练习目标-使用引用类型的成员变量:在本练习中,将扩展银行项目,添加一个(客户类)Customer类。Customer类将包含一个Account对象。

任务

  1. 在banking包下的创建Customer类。该类必须实现上面的UML图表中的模型。

a. 声明三个私有对象属性:firstName、lastName和account。

b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)

c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。

d. 声明setAccount 方法来对account属性赋值。

e. 声明getAccount 方法以获取account属性。

  1. 在exercise2主目录里,编译运行这个TestBanking程序。应该看到如下输出结果:

Creating the customer Jane  Smith.

Creating her account  with  a  500.00  balance.

Withdraw 150.00

Deposit 22.50

Withdraw 47.62

Customer [Smith, Jane] has a balance of 324.88

练习3:修改withdraw 方法

练习目标-使用有返回值的方法:在本练习里,将修改withdraw方法以返回一个布尔值来指示交易是否成功。

任务

1.  修改Account类

  1. 修改deposit 方法返回true(意味所有存款是成功的)。
  2. 修改withdraw方法来检查提款数目是否大于余额。如果amt小于balance,则从余额中扣除提款数目并返回true,否则余额不变返回false。

2.  在exercise2主目录编译并运行TestBanking程序,将看到下列输出;

Creating the customer Jane Smith.

Creating her account with a 500.00 balance.

Withdraw 150.00: true

Deposit 22.50: true

Withdraw 47.62: true

Withdraw 400.00: false

Customer [Smith, Jane] has a balance of 324.88

练习4:用数组表示多重性

 

练习目标-在类中使用数组作为模拟集合操作: 在本练习中,将用数组实现银行与客户间的多重关系。

任务

对银行来说,可添加Bank类。 Bank 对象跟踪自身与其客户间的关系。用Customer对象的数组实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。

  1. 创建 Bank 类
  1. 为Bank类增加两个属性:customers(Customer对象的数组)和numberOfCustomers(整数,跟踪下一个customers数组索引)
  1. 添加公有构造器,以合适的最大尺寸(至少大于5)初始化customers数组。
  1. 添加addCustomer方法。该方法必须依照参数(姓,名)构造一个新的Customer对象然后把它放到customer数组中。还必须把numberofCustomers属性的值加1。
  1. 添加getNumOfCustomers 访问方法,它返回numberofCustomers属性值。
  1. 添加getCustomer方法。它返回与给出的index参数相关的客户。
  1. 编译并运行TestBanking程序。可以看到下列输出结果:

Customer [1] is Simms,Jane

Customer [2] is Bryant,Owen

Customer [3] is Soley,Tim

Customer [4] is Soley,Maria

练习4:用List表示多重性

 

练习目标-在类中使用List作为模拟集合操作: 在本练习中,将用List实现银行与客户间的多重关系。

任务

对银行来说,可添加Bank类。 Bank 对象跟踪自身与其客户间的关系。用Customer对象的List实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。

  1. 创建 Bank 类
  1. 为Bank类增加两个属性:customers(Customer对象的List)和numberOfCustomers(整数, 当前Customer对象的数量)
  1. 添加公有构造器,初始化customersList
  1. 添加addCustomer方法。该方法必须依照参数(姓,名)构造一个新的Customer对象然后把它放到customerList中。
  1. 添加getNumOfCustomers 访问方法,它返回numberofCustomers属性值。
  1. 添加getCustomer方法。它返回与给出的index参数相关的客户。
  1. 编译并运行TestBanking程序。可以看到下列输出结果:

Customer 1 is Simms,Jane

Customer 2 is Bryant,Owen

Customer 3 is Soley,Tim

Customer 4 is Soley,Maria

当前客户数量 = 4

练习5

 

练习目标:继承、多态、方法的重写。 在本练习中,将在银行项目中创建Account的两个子类:SavingAccount 和 CheckingAccount

创建 Account类的两个子类:SavingAccount(存款账户) 和 CheckingAccount(透支账户)子类

  1. 修改Account类;将balance属性的访问方式改为protected
  2. 创建 SavingAccount 类,该类继承Account类
  3. 该类必须包含一个类型为double的interestRate(利率)属性
  4. 该类必须包括带有两个参数(balance和interest_rate)的共有构造器。该构造器必须通过调用super(balance)将balance参数传递给父类构造器。

实现CheckingAccount类

1.  CheckingAccount类必须扩展Account类

2.  该类必须包含一个类型为double的overdraftProtection(透支额度)属性。

3.  该类必须包含一个带有参数(balance)的共有构造器。该构造器必须通过调用super(balance)将balance参数传递给父类构造器。

4.  给类必须包括另一个带有两个参数(balance 和 protect)的共有构造器。该构造器必须通过调用super(balance)并设置overdragtProtection属性,将balance参数传递给父类构造器。

5.  CheckingAccount类必须覆盖withdraw方法。此方法必须执行下列检查。如果当前余额足够弥补取款amount,则正常进行。如果不够弥补但是存在透支保护,则尝试用overdraftProtection得值来弥补该差值(balance-amount).如果弥补该透支所需要的金额大于当前的保护级别。则整个交易失败,但余额未受影响。

6.  在主exercise1目录中,编译并执行TestBanking程序。输出应为:

Creating the customer Jane Smith.

Creating her Savings Account with a 500.00 balance and 3% interest.

Creating the customer Owen Bryant.

Creating his Checking Account with a 500.00 balance and no overdraft protection.

Creating the customer Tim Soley.

Creating his Checking Account with a 500.00 balance and 500.00 in overdraft prot

ection.

Creating the customer Maria Soley.

Maria shares her Checking Account with her husband Tim.

Retrieving the customer Jane Smith with her savings account.

Withdraw 150.00: true

Deposit 22.50: true

Withdraw 47.62: true

Withdraw 400.00: false

Customer [Simms, Jane] has a balance of 324.88

Retrieving the customer Owen Bryant with his checking account with no overdraft

protection.

Withdraw 150.00: true

Deposit 22.50: true

Withdraw 47.62: true

Withdraw 400.00: false

Customer [Bryant, Owen] has a balance of 324.88

Retrieving the customer Tim Soley with his checking account that has overdraft p

rotection.

Withdraw 150.00: true

Deposit 22.50: true

Withdraw 47.62: true

Withdraw 400.00: true

Customer [Soley, Tim] has a balance of 0.0

Retrieving the customer Maria Soley with her joint checking account with husband

Tim.

Deposit 150.00: true

Withdraw 750.00: false

Customer [Soley, Maria] has a balance of 150.0

练习 6.

 

练习目标-单例模式

 

修改Bank类来实现单例设计模式

1.  修改Bank类,创建名为getBanking的公有静态方法,它返回一个Bank类的实例。

2.  单个的实例应是静态属性,且为私有。同样,Bank构造器也应该是私有的

创建CustomerReport类

  1. 在前面的银行项目练习中,“客户报告”嵌入在TestBanking应用程序的main方法中。在这个练习中,改代码被放在,banking.reports包的CustomerReport类中。您的任务是修改这个类,使其使用单一银行对象。

2. 查找标注为注释块/***   ***/的代码行.修改该行以检索单例银行对象。

编译并运行TestBanking应用程序

看到下列输入结果:

CUSTOMER REPORT

=======================

Customer:simms,jane

Savings Account:current balance is $500.00

Checking Account:current balance is $200.00

Customer:Bryant,owen

Checking Account:current balance is $200.00

Customer: Soley,Tim

Savings Account:current balance is $1,500.00

Checking Account:current balance is $200.00

Customer:Soley ,Maria

Checking Account:current balance is $200.00

Savings Account:current balance is $150.00

练习7

练习目的—自定义异常:在本练习中,将建立一个OverdraftException异常,它由Account类的withdraw方法抛出。

创建OverdraftException类

1.  在banking.domain包中建立一个共有类OverdraftException. 这个类扩展Exception类。

2.  添加一个double类型的私有属性deficit.(亏损)增加一个共有访问方法getDeficit

3.  添加一个有两个参数的共有构造器。deficit参数初始化deficit属性

修改Account类

4.  重写withdraw方法使它不返回值(即void).声明方法抛出overdraftException异常

5.  修改代码抛出新异常,指明“资金不足”以及不足数额(当前余额扣除请求的数额)

修改CheckingAccount类

6.  重写withdraw方法使它不返回值(即void).声明方法抛出overdraftException异常

7.  修改代码使其在需要时抛出异常。两种情况要处理:第一是存在没有透支保护的赤字,对这个异常使用“no overdraft protection”信息。第二是overdraftProtection数额足以弥补赤字:对这个异常可使用”Insufficient”fundsfor overdragt protection”信息

编译并运行TestBanking程序

Customer [simms,Jane]has a checking balance of 200.0 with a 500.0 overdragt protection

Checking Acct[Jane Simms]: withdraw 150.00

Checking Acct[Jane Simms]: deposit 22.50

Checking Acct[Jane Simms]: withdraw 147.62

Checking Acct[Jane Simms]: withdraw 470.00

Exception: Insufficient”fundsfor overdragt protection

Deifcit:470.0

Customer [Simms,Jane]has a checking balance of 0.0

Customer [Bryant,Owen]has a checking balance of 200.0

Checking Acct[Bryant,Owen]: withdraw 100.00

Checking Acct[Bryant,Owen]: deposit25.00

Checking Acct[Bryant,Owen]: withdraw 175.00

Exception: no overdraft protection  Deficit:50.0

Customer [Bryant,Owen]has a checking balance of 125.0

第9

练习目的:在本练习中,将替换这样的数组代码:这些数组代码用于实现银行和客户间,以及客户与他们的帐户间的关系的多样性。

修改Bank类

修改Bank类,利用ArrayList实现多重的客户关系,不要忘记导入必须的java.util类

1.  将Customer属性的声明修改为list类型,不再使用numberOfCustoerms属性。

2.  修改Bank构造器,将customers属性的声明修改为list类型,不再使用numberOfcustomers属性

3.  修改addCustomer方法,使用add方法

4.  修改getCustomer方法,使用get方法

5.  修改getNumofCustomer方法,使用size方法

修改Customer类

6.  修改Customer类,使用ArrayList实现多重的账户关系。修改方法同上。

编译运行TestBanking程序

这里,不必修改CustomerReport代码,因为并没有改变Bank和Customer类的接口。编译运行TestBanking

应看到下列输出结果:

CUSTOMERS REPORT

==================

Customer:Simms,Jane

Savings Account:current balance is $500.00

Checking Account:current balance is $200.00

Customer:Bryant,Owen

Checking Accout:current balance is $200.00

Customer:Soley,Tim

Savings Account:current balance is $1,500.00

Checking Account:current balance is $200.00

Customer:Soley,Tim

Checking Account:current balance is $200.00

Savings Account :current balance is $150.00

可选:修改CustomerReport类

修改CustomerReport类,使用Iterator实现对客户的迭代

1.  在Bank类中,添加一个名为getCustomers的方法,该方法返回一个客户列表上的iterator

2.  在Customer类中,添加一个名为个体Accounts的方法,该方法返回一个帐户列表上的iterator

3.  修改CustomerReport 类,使用一对嵌套的while循环(而不是使用嵌套的for循环),在客户的iterator与帐户的iterator上进行迭代

4.  重新编译运行TestBanking程序,应看到与上面一样的输出结果

时间: 2024-10-18 21:05:24

银行(1)0925的相关文章

张书乐:BATJ联姻银行:智慧银行会来的更猛烈些吗?

几乎一夜之间,一直有些势成水火的主流互联网金融平台,都分别和四大国有银行牵上了手. 2017年3月28日,阿里巴巴集团.蚂蚁金服集团和中国建设银行签署了三方战略合作协议:6月16日,工商银行牵手京东刘强东进行全面合作,6月20日,百度与农业银行宣布达成战略合作:6月22日,腾讯则下了个"双黄蛋",同一天与中国银行和华夏银行均签战略合作协议-- 至此,互联网(不限于金融)领域俗称的BATJ(百度.阿里.腾讯.京东)与四大国有银行工.农.中.建,均结成了互助对子. 科技金融还是金融科技,这

C#:根据银行卡卡号推断银行名称

原文:C#:根据银行卡卡号推断银行名称 原文地址:android 根据银行卡卡号判断银行 原文是 java ,现在将它翻译成 C# ,并对代码重新编排整理,不足之处请多多包涵. 根据银行卡号判断所属银行,依据是卡号的前6位数,称之为bin号. 我们把bin号转化为长整形,再把各个银行卡的bin号做成有序表.通过二分查找的方法,找到bin号在有序表的位置,然后读出银行卡的信息. 1.创建项目:BankInfoDemo(控制台应用程序) 2.新建类:BankInfo.cs 1 /// <summar

银行未通知开卡人将信用额度降为1元合理吗?

近日,乐视又成功登上了媒体头条!可惜不是因为乐视起死回生,而是多名乐视(前)员工个人的建行信用卡额度被调整至1元!乐视近年来的确陷入缺钱.欠款的漩涡之中,公司表现极其萎靡不振,但这是否意味着乐视员工也该被银行"看扁"? 我们能理解银行迫切的风控需求,也理解银行对坏账的担心,更明白银行对乐视的不看好.但拿乐视员工"开刀"的做法,是否有失公允?而从另一个角度看,为何这样的事只发生在国内极少数银行身上?为何这样的做法让人感觉怪怪的,甚至受到众多网友几乎一致性的批评? 质疑

漏洞银行 大咖连线笔记

挖洞要分析抓到的包 注意源码里面的隐藏链接 1.SQL注入 分为3种类型  cookie,注入,post注入,get注入 sql注入是owasp top 排名前3的漏洞, sql是设计逻辑上的漏洞,没有过滤表单提交或页面提交数据夹杂着SQL语句,导致数据库受到攻击,数据被窃取 预防sql注入:过滤,储蓄语句检查,白名单方式验证 2.失效的身份验证和管理 1,用户更改密码之前不是验证用户,而是验证IP 2,cookie里面带入密码和账号 3,没有会话超时认证 4,密码找回过于简单 3,xss漏洞

模拟操作银行登入页面。。。未连接数据库

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <

栈的应用之银行叫号系统模拟

#include <stdio.h> #define STACKSIZE 110 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef int Status; typedef struct { ElemType data[STACKSIZE]; int top; } SeqStack; Status StackEmpty(SeqStack s) { if(s.top==0) return FALSE; return TRUE;

Payoneer官网注册教程,免费申请美国银行账号

在我搞网赚项目的过程中,碰到境外收款付款的问题,起初我用Paypal贝宝,手续费高得惊人!相信做电商外贸的朋友深有体会.幸而发现了Paypal替代产品Payoneer,注册简单,手续费低,还有中文网站.中文客服,payoneer比起paypal优势太明显了,推荐给大家使用. 收款难题 不管你是做网赚联盟项目.做电商外贸生意.还是做个人海淘,都会碰到收款付款的难题.举例来说: Godaddy常有非常便宜的域名注册优惠,但仅限于美国银行账号持有者享受,中国用户无缘享受优惠. Paypal手续费很高,

3-9-模拟银行排队过程-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第3章  栈和队列 - 模拟银行排队过程 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.SinglyLinkedList.c.LinkQueue

2.2 为方便储户,某银行拟开发计算机储蓄系统。写出问题定义并分析此系统的可行性

为方便储户,某银行拟开发计算机储蓄系统.储户填写的存款单或取款单由业务员输入系统,如果是存款,系统记录存款人姓名.住址.存款类型.存款日期.利率等信息,并印出存款单给储户:如果是取款,系统计算利息并印出利息清单给储户. 写出问题定义并分析系统的可行性. 答:如果是存款,储户填写存款单,然后交给业务员键入系统,同时系统还要记录存款人姓名.住址(或电话号码).身份证号码.存款类型.存款日期.利率等信息,完成后由系统打印存款单给储户. 如果是取款,储户填写取款单,然后交给业务员,业务员把取款金额输入系