先看一下题目描述:
ATM机功能:能让用户重复进行申请新卡、存款、取款、查看余额以及转账等操作
实现步骤:
- 建立atm包(可略)
- 编写卡类,卡类中包括卡号、金额两个属性,以及存款,取款,查看余额,转帐四个方
法。 - 编写ATM应用主函数:
3.1. 实例化一个长度为10 的数组,用来保存多张银行卡对象 (用数组保存对象,一个很好的思路,通过数组下标与卡号建立联系)
3.2. 重复以下过程,直到用户输入 0结束循环
3.3. 提示用户选择要进行的操作(1:申请新卡 2:存款 3:取款 4:查余额 5:
转账 0:结束循环)
3.4.
用户输入 1,那么实例化一张新卡,并将卡放入数组
用户输入 2,那么提示用户输入卡号和要存入的金额,然后在数组中查找到这张卡对象,并调用这张卡对象的存款方法进行存款
用户输入 3,那么提示用户输入卡号和要取出的金额,然后在数组中查找到这张卡对象,并调用这张卡对象的取款方法进行取款
用户输入 4,那么提示用户输入卡号,然后在数组中查找到这张卡对象,并调用这张卡对象的查余额方法得到余额,并输出给用户看
用户输入 5,那么提示用户输入卡号和转账目标卡的卡号以及转账金额,然后在数组中查找到这两张张卡对象,并调用信用卡类的转账函数
下面给出程序运行截图:
其中想了最久的是如何将Atm类中的卡号实例化之后如何进行对应,类似于数据库的主键,
我个人认为是因为卡号 stuNo仅仅是一个类的属性,无法像类的实例那样仅仅代表一个实例,这种利用数组将属性与实例绑定的方法实在是妙极.
下面给出代码
说实话代码封装性极差,感觉像是练习面向过程编程了,不太像面向对象进行编程.
```java
public class HomeWork {
public static void main(String[] args) {
Card[] cardSql = new Card[10];
int count = 0;//记录申请卡的次数
while (true) {
//满足题目循环进入功能选择界面的要求
System.out.println("1:申请新卡 2:存款 3:取款 4:查余额 5:转账 0:结束循环");
Scanner scanner = new Scanner(System.in);
int temp = scanner.nextInt();
if(temp == 0)//选择0 则退出循环
break;
switch (temp) {
case 1:
int cardNo = 10086 + count;//投机取巧 对id进行
cardSql[count] = new Card(cardNo, 0);//对象数组的每一个对象,这两步是联系的关键
System.out.println("你的卡号是:" + cardNo + "余额是" + 0.00);
count++;//在下一次申请时,方便卡的编号自增
break;
case 2:
try {
showCard();
int cardNo1 = scanner.nextInt();
boolean flag = true;//用于标志是否找到输入卡号
for (int i