Java-小练习简单银行程序
2练习1:创建一个简单的银行程序包
练习目标-Java 语言中面向对象的封装性及构造器的使用。
任务
在这个练习里,创建一个简单版本的(账户类)Account类。将这个源文件放入banking程序包中。在创建单个帐户的默认程序包中,已编写了一个测试程序TestBanking。这个测试程序初始化帐户余额,并可执行几种简单的事物处理。最后,该测试程序显示该帐户的最终余额。
1. 创建banking 包
2. 在banking 包下创建Account类。该类必须实现上述UML框图中的模型。
- 声明一个私有对象属性:balance,这个属性保留了银行帐户的当前(或即时)余额。
- 声明一个带有一个参数(init_balance)的公有构造器,这个参数为balance属性赋值。
- 声明一个公有方法getBalance,该方法用于获取经常余额。
- 声明一个公有方法deposit,该方法向当前余额增加金额。
- 声明一个公有方法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对象。
任务
- 在banking包下的创建Customer类。该类必须实现上面的UML图表中的模型。
a. 声明三个私有对象属性:firstName、lastName和account。
b. 声明一个公有构造器,这个构造器带有两个代表对象属性的参数(f和l)
c. 声明两个公有存取器来访问该对象属性,方法getFirstName和getLastName返回相应的属性。
d. 声明setAccount 方法来对account属性赋值。
e. 声明getAccount 方法以获取account属性。
- 在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类
- 修改deposit 方法返回true(意味所有存款是成功的)。
- 修改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对象的数组实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。
- 创建 Bank 类
- 为Bank类增加两个属性:customers(Customer对象的数组)和numberOfCustomers(整数,跟踪下一个customers数组索引)
- 添加公有构造器,以合适的最大尺寸(至少大于5)初始化customers数组。
- 添加addCustomer方法。该方法必须依照参数(姓,名)构造一个新的Customer对象然后把它放到customer数组中。还必须把numberofCustomers属性的值加1。
- 添加getNumOfCustomers 访问方法,它返回numberofCustomers属性值。
- 添加getCustomer方法。它返回与给出的index参数相关的客户。
- 编译并运行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实现这个集合化的关系。还要保持一个整数属性来跟踪银行当前有多少客户。
- 创建 Bank 类
- 为Bank类增加两个属性:customers(Customer对象的List)和numberOfCustomers(整数, 当前Customer对象的数量)
- 添加公有构造器,初始化customersList。
- 添加addCustomer方法。该方法必须依照参数(姓,名)构造一个新的Customer对象然后把它放到customerList中。
- 添加getNumOfCustomers 访问方法,它返回numberofCustomers属性值。
- 添加getCustomer方法。它返回与给出的index参数相关的客户。
- 编译并运行TestBanking程序。可以看到下列输出结果:
Customer 1 is Simms,Jane
Customer 2 is Bryant,Owen
Customer 3 is Soley,Tim
Customer 4 is Soley,Maria
当前客户数量 = 4
第一小问:
package com.banking;
public class Account {
//属性
private double balance;
//构造方法
Account(int balance)
{
this.balance=balance;
}
public Account() {
super();
}
//成员方法
public double getBalance()
{
return this.balance;
}
public double deposit(double amt)
{
this.balance+=amt;
return amt;
}
public double withdraw(double amt)
{
this.balance-=amt;
return amt;
}
}
测试:
package com.banking;
public class Test01 {
public static void main(String[] args) {
Account ac=new Account(500);
System.out.println("取款金额:"+ac.withdraw(150));
System.out.println("存款金额:"+ac.deposit(22.5));
System.out.println("取款金额:"+ac.withdraw(47.62));
System.out.println("剩余金额:"+ac.getBalance());
}
}
结果:

第二小问:
package com.banking;
public class Customer {
private String firstName;
private String lastName;
private Account account;
Customer(String f,String l)
{
this.firstName=f;
this.lastName=l;
}
@Override
public String toString() {
return firstName + "," + lastName ;
}
public Account getAccount() {
return account;
}
public void setAccount(Account acct) {
this.account = acct;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
测试:
package com.banking;
public class Test02 {
public static void main(String[] args) {
Customer cu=new Customer("Jane","Smith");
System.out.println("Creating the customer"+" "+cu.getFirstName()+" "+cu.getLastName());
cu.setAccount(new Account(500));
// cu.setAccount(ac);
// cu.getAccount();
System.out.println("取款金额:"+cu.getAccount().withdraw(150));
System.out.println("存款金额:"+cu.getAccount().deposit(22.5));
System.out.println("取款金额:"+cu.getAccount().withdraw(47.62));
System.out.println("剩余金额:"+cu.getAccount().getBalance());
}
}
结果:

第三小问”:
package com.banking;
public class Account {
//属性
private double balance;
//构造方法
Account(int balance)
{
this.balance=balance;
}
public Account() {
super();
}
//成员方法
public double getBalance()
{
return this.balance;
}
public boolean deposit(double amt)
{
this.balance+=amt;
System.out.print("deposit "+amt);
return true;
}
public boolean withdraw(double amt)
{
System.out.print("withdraw "+amt);
if(amt<balance){
this.balance-=amt;
return true;
}
else
{
this.balance=amt;
return false;
}
}
}
测试:
package com.banking;
public class Test02 {
public static void main(String[] args) {
Customer cu=new Customer("Jane","Smith");
System.out.println("Creating the customer"+" "+cu.getFirstName()+" "+cu.getLastName());
cu.setAccount(new Account(500));
// cu.setAccount(ac);
// cu.getAccount();
System.out.println(" 取款金额:"+cu.getAccount().withdraw(150));
System.out.println(" 存款金额:"+cu.getAccount().deposit(22.5));
System.out.println(" 取款金额:"+cu.getAccount().withdraw(47.62));
System.out.println(" 取款金额:"+cu.getAccount().withdraw(400));
System.out.println(cu.toString()+" "+"剩余金额:"+cu.getAccount().getBalance());
}
}
结果:

第四小问:
package com.banking; import java.util.ArrayList;
import java.util.List; public class Bank {
//定义属性
private List<Customer> customer;
private int numberOfCustomers; //构造器
public Bank(){
customer=new ArrayList<>(); }
//定义方法,添加数据
public void addCustomer(String f,String l){
Customer cu=new Customer(f,l);
customer.add(cu);
}
//获取数组个数
public int getNumOfCustomers(){
return customer.size();
} public Customer getCustomer(int index){
return customer.get(index);
} }
测试:
package com.banking; import java.util.Iterator;
import java.util.List; public class TestBank { public static void main(String[] args) {
Bank ba=new Bank();
ba.addCustomer("Simms","Jane");
ba.addCustomer("Bryant","Owen");
ba.addCustomer("Soley","Tim");
ba.addCustomer("Soley","Maria");
for(int i=0;i<ba.getNumOfCustomers();i++){
System.out.println("Customer "+(i+1)+" is "+ba.getCustomer(i)); }
System.out.println("当前客户数量="+ba.getNumOfCustomers());
} }
结果:

Java-小练习简单银行程序的更多相关文章
- java小知识点简单回顾
1.java的数据类型分为两种:简单类型和引用类型(数组.类以及接口).注意,java没有指针的说法,只有引用.简单类型的变量被声明时,存储空间也同时被分配:而引用类型声明变量(对象)时,仅仅为其分配 ...
- Java网络编程--简单聊天程序
背景 毕业设计前的练手,学校小比赛中的一个题目. 开发环境 Java(eclipse)+Mysql 简介 使用Java+Mysql开发以个简单的聊天工具,在本次项目中实现了: 1. 用户登录(客户端至 ...
- Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)
为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...
- 输出多行字符的一个简单JAVA小程序
public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...
- 编写一个JAVA小程序取得IP地址
在TCP/IP 互联网时,经常会需要查询自己主机的IP地址和www服务器的IP地址.虽然,我们可以使用IPCONFIG 和PING 进行IP地址查询,但是如果在应用程序或APPLET中使用此命令会破坏 ...
- 浏览器兼容java小程序配置说明
最近在使用的一个web应用系统是内嵌了java小程序,遇到了各种浏览器兼容性问题,现梳理如下: 1.通过以下链接检测当前电脑是否已经安装有java https://java.com/zh_CN/dow ...
- 框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口
框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口. 与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局. package TomAwt; im ...
- java入门---简介&简单输出小例子&开发前准备
Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.J ...
- java正则API简单解析
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 1.简介: java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. ...
随机推荐
- js时间处理函数
Date 对象的方法简介: ·Date | 返回当日的日期和时间 ·getDate | 从 Date 对象返回一个月中的某一天 (1 ~ 31) ·getDay | 从 Date 对象返回一周中 ...
- 利用JDBC连接MySQL并使用MySQL
driver为JDBC的驱动. url为数据库的地址. usrname和password分别为数据库的用户名和密码. Connection类用来连接MySQL. PreparedStatement类用 ...
- 一些比较常用的Linux命令
我有一些是我是参考别人的,忘记是谁了,在这里要感谢一下ta. #命令格式就是就是由命令+空格+一些命令用法的选项(可以选择多个用法)+空格+/+目录名或者文件名,有些是直接打命令就可以了,比如ls - ...
- 解决Android5.0以后DatePicker选择时间无效的bug。
一.在布局中加上这句话. 加上了这句话后,就相当于强制用5.0以前的外观,所以外观会有所变化: 5.0以上没有这句话的外观: 加上之后的外观: 二.可以用DatePickerDialog代替
- Python项目:扇贝网小组查卡助手
扇贝网是一个非常棒的英语学习网站,大家还可以加入一些小组,一起交流学习.共同进步.但是,小组管理起来非常辛苦,尤其是在0点前踢出不打卡的成员,因此考虑利用程序来实现小组查卡自动化. 登录 操作 扇贝网 ...
- EasyUI需注意的问题01
一.EasyUI-Datagrid分页 在创建数据表格(DataGrid)的时候,通过设置'pagination' 属性为 true,可以在数据表格的底部生成一个分页工具栏. <table id ...
- iOS进阶_地图上定位的标志——大头针
一.添加大头针 地图使用的框架是MapKit 大头针走的是MKAnnotation协议 /* 注意:因为是满足协议MKAnnotation,所以没有MKAnnotation的系统大头针类,必须自定义大 ...
- javascript练习-私有状态
在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的方法才能访问这些状态,对外只暴露一些重要的状态可以直接编写.这是就需要私有状态. function Range(fro ...
- DECLARE_GLOBAL_DATA_PTR宏定义问题
最近闲着顺便看了看6410的uboot代码,因为友善的boot对nand部分代码做了隐藏,所以干脆找了光盘里面三星原厂的uboot代码来看,因为友善的boot代码肯定也是基于厂商的代码改的,肯定可以的 ...
- android5.0 aosp编译记录(由于机器硬件原因,改为4.4.2编译通过)
编译环境必须是64位系统啊,妥妥的又装了64位的ubuntu,虚拟机推荐server版本,不带x省性能…… 接着要装openjdk 1.7,记得更新一下系统的源,下面这个不错 deb http://m ...