银行自动存取一体机
关键技术解析
在JAVA语言中,允许子类继承父类的构造方法,构造方法的继承需要遵守以下规则:
1.若父类是无参的构造方法,则子类无条件的继承改构造方法。
2. 若子类无自己的构造方法,则他将继承父类的无参构造方法作为自己的构造方法;
若子类有自己的构造方法,则在创建子类对象时,它将先执行继承自父类的无参构造方法,
然后在执行自己的构造方法。
3,若父类是有参数的构造方法,子类可以在自己的构造方法中使用super关键字来调用它,
但这个调用语句必须是子类构造方法的第一个可执行语句。
EnterAmountOfMoney类的主要作用是录入数据
package Bank;
import java.io.BufferedReader;
import java.io.InputStreamReader;
//EnterAmountOfMoney类的主要作用是录入数据。
public class EnterAmountOfMoney {
public static String scan()// 可以从键盘上录入数据
{
String str = "";
try {
BufferedReader buf = new BufferedReader(new InputStreamReader(
System.in));
str = buf.readLine();
} catch (Exception e) {
}
return str;
}
public static int scanInt()// 将从键盘上录入数据转换成int型数据
{
int temp = 0;
try {
temp = Integer.parseInt(scan());
} catch (Exception e) {
System.out.println("[?á]:输入不合法,请输入整数:");
}
return temp;
}
}
Common-Card类普通用户的功能实现
package Bank;
//普通用户的功能实现
public class Common_Card {
String name; // 账户名
int ID; // 账户ID
int password; // 密码
int money; // 金额
Common_Card(String name, int ID, int password, int money) {// 构造方法
this.name = name;
this.ID = ID;
this.password = password;
this.money = money;
}
boolean CheckMoney(int m) {// 取款操作
System.out.println("正在操作,请稍候……!");
if (m < 0) {
if (saveMoney(-m)) {
return true;
}
else
return false;
} else {
if (m > money) {
System.out.println("[?á]:该账户不可透支,本次操作中断!");
return false;
}
this.money -= m;
System.out.println("[√]:操作成功");
return true;
}
}
boolean saveMoney(int m) {// 存款操作
System.out.println("正在验钞,请稍候……!");
if (m < 0) {
if (CheckMoney(-m))
return true;
else
return false;
} else {
this.money += m;
System.out.println("[√]:操作成功");
return true;
}
}
void search() { // 显示余额操作
System.out.println(name + "[ID:" + ID + "] 余额:" + money + "元");
}
boolean checkpassword() { // 检察密码操作
int i;
for (i = 0; i < 3; i++) {
if (i > 0)
System.out.println("[?á]:密码错误,请输入密码:");
int pw = EnterAmountOfMoney.scanInt();
if (pw == password)
return true;
}
if (i == 3)
System.out.println("[?á]:密码输入出错3次,操作中断!");
return false;
}
void operating(Common_Card st[]) {// 正在执行所选择的项目
while (true) {
this.printReceipt();
int cmd = EnterAmountOfMoney.scanInt();
switch (cmd) {
case 1: {
System.out.println("请输入存款数:");
int m = EnterAmountOfMoney.scanInt();
saveMoney(m);
break;
}
case 2: {
System.out.println("请输入取款数:");
int m = EnterAmountOfMoney.scanInt();
CheckMoney(m);
break;
}
case 3:
search();
break;
case 0:
Machine.end = 0;
return;
}
}
}
static void printReceipt() {// 功能提示界面
System.out.println("我爱我家自动提款机普通用户操作界面");
System.out.println("——————");
System.out.println("[存款——1]");
System.out.println("[取款——2]");
System.out.println("[余额——3]");
System.out.println("[退卡——0]");
System.out.println("——————");
}
}
Vip-Card类VIP用户功能实现。
package Bank;
//vip用户的功能实现
//vip用户继承了普通用户,普通用户所拥有的功能vip用户全部有
public class Vip_Card extends Common_Card {
Vip_Card(String name, int ID, int password, int money) {// 构造方法
super(name, ID, password, money);
}
boolean CheckMoney(int m)// 不仅具有存取款的功能还具有可以透支的功能
{
System.out.println("正在操作,请稍候……!");
if (m < 0) {
if (saveMoney(-m)) {
return true;
} else
return false;
} else {
if (m - 5000 > money) {
System.out.println("[?á]:该账户透支不可超过5000元,本次操作中断!");
return false;
}
this.money -= m;
System.out.println("[√]:操作成功!");
return true;
}
}
void TransferMoney(Common_Card st[])// 转账的功能
{
System.out.println("请输入目标帐户ID:");
int id = EnterAmountOfMoney.scanInt();
int i;
for (i = 0; i < st.length; i++) {
if (st[i].ID == id) {
System.out.println("请输入转账金额:");
int m = EnterAmountOfMoney.scanInt();
if (m < 0) {
System.out.println("请输入目标帐户密码:");
if (st[i].checkpassword() == false)
return;
}
if (this.CheckMoney(m)) {
st[i].saveMoney(m);
System.out.println("[√]:转账成功!");
} else {
System.out.println("[?á]:转账失败!");
}
break;
}
}
if (i == st.length)
System.out.println("[?á]:用户不存在!");
}
void operating(Common_Card st[])// 正在操作
{
while (true) {
this.printReceipt();
int cmd = EnterAmountOfMoney.scanInt();
switch (cmd) {
case 1: {
System.out.println("请输入存款数:");
int m = EnterAmountOfMoney.scanInt();
saveMoney(m);
break;
}
case 2: {
System.out.println("请输入取款数:");
int m = EnterAmountOfMoney.scanInt();
CheckMoney(m);
break;
}
case 3:
search();
break;
case 4:
TransferMoney(st);
break;
case 0:
Machine.end = 0;
return;
}
}
}
static void printReceipt() {// Vip用户功能提示操作界面
System.out.println("我爱我家自动提款机-Vip用户操作界面");
System.out.println("——————");
System.out.println("[存款——1]");
System.out.println("[取款——2]");
System.out.println("[余额——3]");
System.out.println("[转账——4]");
System.out.println("[退卡——0]");
System.out.println("——————");
}
}
测试类
package Bank;
public class Machine {
static int end = 1;
public static void main(String[] args) {
Common_Card st[] = new Common_Card[4];// 创建一个有4个用户的数组
// 创建2个普通用户
st[0] = new Common_Card("未知", 999, 999, 0);
st[1] = new Common_Card("聂庆亮", 200981501, 10010, 100000);
// 创建2个VIP用户
st[2] = new Vip_Card("乐乐", 200981511, 583911, 13000);
st[3] = new Vip_Card("尹继平", 200981512, 1324114, 22000);
while (true) {
if (end == 0) {// 用于退卡操作
System.out.println("谢谢您的使用,再见");
return;
}
System.out.println("请输入帐户ID:[0:退出]");
int id = EnterAmountOfMoney.scanInt(); // 获取从键盘上输入的数据
if (id == 0)
return;
int i;
for (i = 0; i < st.length; i++) {
if (st[i].ID == id) { // 如果用户帐户ID正确则输入密码
System.out.println("请输入帐户密码:");
if (st[i].checkpassword()) { // 调用Common_Card类的checkpassword进行核查
st[i].operating(st); // 如果密码输入正确则调用
break;
}
}
}
if (i == st.length) {
System.out.println("[?á]:该用户不存在!");
}
}
}
}
作者:冲天之峰 20160607