目录
一、题目要求
根据大家平时在ATM机上的操作,编写程序实现ATM机的常见功能。具体功能包括:
(1)注册功能
根据用户输入的账号密码申请一张银行卡,存储在银行卡类型的数组中(一张银行卡对应一个有效用户
(2)登录功能
登陆失败:重新登陆或注册
登陆成功:对登陆的这张银行卡可以进行以下操作:存款、取款、查余额、转账、退卡功能。
二、设计思路
根据题目要求,设置银行卡类、银行类和ATM机类三个类。
(1)银行卡类——BankCard类
属性:卡号、密码、余额
操作:获取卡号、重置卡号、获取密码、重置密码、存钱、取钱、查询余额
(2)银行类——Bank类
属性:银行卡数组、银行卡的数量、初始最大银行卡数(可以设为静态常量)
操作:查询银行卡是否存在、登录、添加银行卡、根据卡号密码返回对应银行卡、存款、取款、查余额、转账
(3)ATM机类——ATM类
属性:卡号、密码、银行、银行卡
操作:显示主界面的方法(无限循环)、注册、登录、具体的业务功能(插卡后的操作,包括查询、存取款、转账等)
三、程序代码
(1)BankCard.java文件
package package_ATM;
public class BankCard {
private int cardnum;
private int password;
private double balance;
//创建一个银行卡
public BankCard(int cardnum, int password) {
this.cardnum = cardnum;
this.password = password;
}
//获取卡号
public int GetCardnum() {
return cardnum;
}
//重置卡号
public void ResetCardnum(int cardnum) {
this.cardnum = cardnum;
}
//获取密码
public int GetPassword() {
return password;
}
//重置密码
public void ResetPassword(int password) {
this.password = password;
}
//存钱
public boolean SaveMoney(double money) {
this.balance += money;
return true;
}
//取钱
public boolean DrawMoney(double money) {
if(this.balance>=money){
this.balance -= money;
return true;
}
System.out.println("余额不足!");
return false;
}
//获取余额
public double GetBalance(){
return this.balance;
}
}
(2)Bank.java文件
package package_ATM;
public class Bank {
private BankCard[] cardlist;
private static int cardsnum = 0;
private static final int Maxcardnum = 10;
public Bank(){
cardlist = new BankCard[Maxcardnum];
System.out.println("银行开门了!");
}
//查询账号是否存在
public boolean isExist(int cardnum) {
for(int i=0;i<cardsnum;i++){
if (cardlist[i].GetCardnum() == cardnum){
return true;
}
}
return false;
}
//登录函数
public boolean Login(int cardnum,int password) {
for(int i=0;i<cardsnum;i++){
//账号与密码都对的上则登录成功
if (cardlist[i].GetCardnum() == cardnum && cardlist[i].GetPassword() == password){
return true;
}
}
return false;
}
//添加新的银行卡
public boolean AddCard(BankCard card) {
//判断数组cardlist是否已满
if(cardsnum == Maxcardnum){
System.out.println("存储空间不足!");
return false;
}
else {
//将新卡存入银行卡类型数组
cardlist[cardsnum] = card;
//银行卡数加1
cardsnum++;
return true;
}
}
//根据卡号密码返回银行卡
public BankCard GetCardByPd(int cardnum, int password){
for(int i=0;i<cardsnum;i++){
if (cardlist[i].GetBalance() == cardnum && cardlist[i].GetPassword()== password){
return cardlist[i];
}
}
System.out.println("银行卡不存在!");
return null;
}
//存款
public boolean SaveMoney(BankCard card,double money){
return card.SaveMoney(money);
}
//取款
public boolean DrawMoney(BankCard card,double money){
return card.DrawMoney(money);
}
//查余额
public double GetBalance(BankCard card){
return card.GetBalance();
}
//转账
public boolean TransferAccounts(BankCard card, int aim_cardnum, double money){
BankCard aim_card;
for(int i=0;i<cardsnum;i++) {
if(cardlist[i].GetCardnum()==aim_cardnum) {
aim_card=GetcardBynum(aim_cardnum);
if(card.DrawMoney(money)){
aim_card.SaveMoney(money);
return true;
}
else {
return false;
}
}
}
return false;
}
//根据卡号返回银行卡
public BankCard GetcardBynum(int cardnum){
for(int i=0;i<cardsnum;i++){
if (cardlist[i].GetCardnum() == cardnum){
return cardlist[i];
}
}
System.out.println("目标银行卡不存在!");
return null;
}
}
(3)ATM.java文件
package package_ATM;
import java.util.Scanner;
public class ATM {
private static boolean flag=true;
private int cardnum;
private int password;
private BankCard bankcard;
private Bank bank;
Scanner sc = new Scanner(System.in);
//创建一个ATM
public ATM() {
bank = new Bank();
System.out.println("ATM开机了!");
}
//主窗口
public void MainWindow() {
int choice;
while(flag==true) {
try {
System.out.println("请选择服务:1.注册 2.登录 3.退出");
choice = sc.nextInt();
switch(choice){
case 1:
System.out.println("请输入账号");
cardnum=sc.nextInt();
System.out.println("请输入密码");
password=sc.nextInt();
Enroll(cardnum,password);
break;
case 2:
System.out.println("请输入账号");
cardnum=sc.nextInt();
System.out.println("请输入密码");
password=sc.nextInt();
Login(cardnum,password);
break;
case 3:
flag=false;
break;
default:
break;
}
}catch(Exception e) {
System.out.println("输入不符合要求!");
sc=new Scanner(System.in);
}
}
}
//注册账号
public void Enroll(int cardnum,int password) {
//检查账号是否已经被注册
if(bank.isExist(cardnum)){
System.out.println("卡号已存在!");
}
else{
//创建新卡
bankcard = new BankCard(cardnum,password);
if(bank.AddCard(bankcard)) {
System.out.println("注册成功!");
}
else {
System.out.println("注册失败!");
}
}
}
//登录账号
public void Login(int cardnum,int password) {
//检查账号是否存在
if(bank.isExist(cardnum)) {
if(bank.Login(cardnum, password)) {
System.out.println("登录成功!");
bankcard=bank.GetcardBynum(cardnum);
function(bankcard);
}
else{
System.out.println("密码不正确");
}
}
else {
System.out.println("账号不存在!");
}
}
//ATM功能函数
public void function(BankCard bankcard) {
double money;
int aim_cardnum;
int choice;
boolean flag1 = true;
while(flag1==true) {
try {
System.out.println("请选择服务:1.查询余额 2.存款 3.取款 4.转账 5.重置卡号 6.重置密码 7.退出");
choice = sc.nextInt();
switch(choice) {
case 1:
System.out.println("本卡余额为:"+bank.GetBalance(bankcard));
break;
case 2:
System.out.println("请输入存款金额:");
money=sc.nextDouble();
if(bankcard.SaveMoney(money)) {
System.out.println("存款成功!");
System.out.println("现有余额:"+bankcard.GetBalance()+"元");
}
break;
case 3:
System.out.println("请输入取款金额:");
money=sc.nextDouble();
if(bankcard.DrawMoney(money)) {
System.out.println("取款成功!");
System.out.println("现有余额:"+bankcard.GetBalance()+"元");
}
break;
case 4:
System.out.println("请输入目标卡号:");
aim_cardnum=sc.nextInt();
System.out.println("请输入转账金额:");
money=sc.nextDouble();
if(bank.TransferAccounts(bankcard, aim_cardnum, money)) {
System.out.println("转账成功!");
System.out.println("现有余额:"+bankcard.GetBalance()+"元");
}
else {
System.out.println("转账失败!");
}
break;
case 5:
System.out.println("请输入新卡号:");
int new_cardnum;
new_cardnum=sc.nextInt();
//检查账号是否存在
if(bank.isExist(new_cardnum)) {
System.out.println("账号已存在!");
}
else {
bankcard.ResetCardnum(new_cardnum);
}
break;
case 6:
System.out.println("请输入新密码:");
int new_password;
new_password=sc.nextInt();
bankcard.ResetPassword(new_password);
break;
case 7:
flag1=false;
break;
default:
break;
}
}catch(Exception e) {
System.out.println("输入不符合要求!");
sc=new Scanner(System.in);
}
}
}
}
(4)Main.java文件
package package_ATM;
public class Main {
public static void main(String[] args) {
ATM atm=new ATM();
atm.MainWindow();
}
}