Java练习:ATM取款机管理系统(控制台编程)


1. 项目描述

开发一个ATM取款机管理系统,主要功能是用户输入卡号、密码,通过验证后,就可以实现存款、取款、余额查询、修改密码、查看用户信息等操作。

2. 项目解析

ATM取款机管理系统所涉及的知识有:类的定义、对象的创建和使用、面向对象编程的基本思想和系统类库的使用等。
(1)用户到银行开户,银行会分配给他一张银行卡,卡号唯一标识这张银行卡;
(2)银行还要记录用户的相关信息,如姓名、性别、年龄等;
(3)用户使用的银行卡有不同类型,如普通银行卡、信用卡、医保卡等;
(4)取款机管理系统需要给用户提示信息,用户根据提示信息进行操作。取款机需要根据用户的输入信息,启动相应的程序。用工具类把用户常用的输入操作和反馈给用户的提示信息组织到一起。

综上,可以把项目分为四个任务:第一个任务是银行卡类的实现;第二个任务是用户信息类的实现;第三个任务是不同类型银行卡类的实现;第四个任务是工具类的实现。最后通过帐户类来实现项目的全部功能。

个人增加了开户功能,全部代码如下,还有很多功能可以完善:

(1)银行卡抽象类

abstract class Card {
	int cardId;
	
	public Card() {
		super();
	}
	
	public Card(int cardId) {
		super();
		this.cardId = cardId;
	}

	public abstract String getCardId();
	public abstract void setCardId(int cardId);
	
}

(2)不同类型银行卡类

//普通银行卡类
public class CommonCard extends Card{
	
	public CommonCard() {
		super();
	}

	public CommonCard(int cardId) {
		super();
		this.cardId = cardId;
	}

	@Override
	public String getCardId() {
		return "普通银行卡卡号为:"+cardId;
	}

	@Override
	public void setCardId(int cardId) {
		this.cardId = cardId;		
	}
	
}
//信用卡类
public class CreditCard extends Card{
	
	public CreditCard() {
		super();
	}

	public CreditCard(int cardId) {
		super(cardId);
	}

	@Override
	public String getCardId() {
		return "信用卡卡号为:"+cardId;
	}

	@Override
	public void setCardId(int cardId) {
		this.cardId = cardId;
	}

}
//医保卡
public class MedicalInsuranceCard extends Card{
	
	public MedicalInsuranceCard() {
		super();
	}

	public MedicalInsuranceCard(int cardId) {
		super(cardId);
	}

	@Override
	public String getCardId() {
		return "医保卡卡号为:"+cardId;
	}

	@Override
	public void setCardId(int cardId) {
		this.cardId = cardId;
	}

}

(3)用户信息类

public class User {
	private String name;	    //姓名
	private String sex;	        //性别
	private String age;         //年龄
	private Card card;          //卡的类型
	private String password;	//密码
	private String ID;	        //身份证
	private double balance;	    //余额
	
	public User() {
		super();
	}

	public User(String name, String sex , String age, String password, String iD, double balance,Card card) {
		super();
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.password = password;
		this.ID = iD;
		this.balance = balance;
		this.card = card;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	public String getAge() {
		return age;
	}

	public void setAge(String age) {
		this.age = age;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getID() {
		return ID;
	}

	public void setID(String iD) {
		ID = iD;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}
	
	public int getCard() {
		return card.cardId;
	}
	
	public String getCardId(){
		return card.getCardId();
	}
	
}

(4)ATM类

import java.util.Scanner;

public class ATM {
	Scanner input = new Scanner(System.in);
	private User[] user=new User[100];
	User atm = new User();
	private User usr;
	private int accountId = 1;
	private Card card;
	
	public void Select() {
			
			while(true) {
				System.out.println("=======ATM管理系统=======");
				System.out.print("1.开户\n2.登录\n3.取款\n4.存款\n5.余额查询\n6.修改密码\n7.查看用户信息\n8.退出登录\n9.退出系统\n请选择需要选择的项目:");
				switch(input.nextInt()) {
					case 1:
						setAccount();	//开户
						break;
					case 2:
						usr=userLogin();	//登录
						break;
					case 3:
						drawMoney();	//取款
						break;
					case 4:
						depositMoney();	//存款
						break;
					case 5:
						showBalance();	//余额查询
						break;
					case 6:
						revisePassword();	//修改密码
						break;
					case 7:
						lookAccount();	//查看用户信息
						break;
					case 8:
						cancel();//退出登录
						break;
					case 9:
						System.out.println("=======================");
						System.out.println("欢迎下次登录该系统!");	//退出系统
						System.exit(0);
						break;
					default:
						System.out.println("=======================");
						System.out.println("输入错误!请重新输入!");
						break;
				}
			}
	}
	
	
	public void setAccount(){	//开户
		if (usr!=null) {
			System.out.println("=======================");
			System.out.println("请先退出上一个账户!");                                                                                                                                                                                              
		}
		else{
			boolean x = true;
			while(x) {
				System.out.println("=======================");
				System.out.print("1.普通银行卡\n2.信用卡\n3.医保卡\n0.返回\n请选择开户类型:");
				switch(input.nextInt()) {
					case 1:
						card = new CommonCard();
						card.setCardId(accountId);
						x=false;
						break;
					case 2:
						card = new CreditCard();
						card.setCardId(accountId);
						x=false;
						break;
					case 3:
						card = new MedicalInsuranceCard();
						card.setCardId(accountId);
						x=false;
						break;
					case 0:
						Select();
					default:
						System.out.println("=======================");
						System.out.println("输入错误!请重新输入!");
						break;
				}
			}
			
			System.out.print("请输入姓名:");
			String name=input.next();
			System.out.print("请输入性别:");
			String sex=input.next();
			System.out.print("请输入年龄:");
			String age=input.next();
			System.out.print("请输入身份证号:");
			String ID=input.next();
			System.out.print("请输入银行卡要设置的密码:");
			String password1=input.next();
			System.out.print("请再次输入密码:");
			String password2=input.next();
			if(password1.equals(password2)){
				user[accountId]=new User(name,sex,age,password1,ID,0,card);
				System.out.println("=======================");
				System.out.println("开户成功!你的卡号为:"+accountId);
				accountId++;
			}
			else {
				System.out.println("=======================");
				System.out.println("两次密码不同!请重新开始!");
			}
		}
		
	}

	public User userLogin(){	//登录
		if (usr!=null) {
			System.out.println("=======================");
			System.out.println("请先退出上一个账户!");
			return usr;                                                                                                                                                                                                                                 
		}
		else{
			System.out.print("请输入卡号:");
			int aId=input.nextInt();
			System.out.print("请输入密码:");
			String password=input.next();	
			for(int i=0;i<user.length;i++){
				if (user[i]!=null) {
					if (aId==user[i].getCard()&&password.equals(user[i].getPassword())) {
						System.out.println("=======================");
						System.out.println(user[i].getName()+",欢迎登录!");
						return user[i];
					}
				}
			}
			System.out.println("=======================");
			System.out.println("卡号或密码有误");
			return null;
		}
	}
	
	
	public void drawMoney(){	//取款
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			System.out.print("请输入取款金额:");
			double blc=input.nextDouble();
			while(blc>usr.getBalance()) {
				System.out.println("=======================");
				System.out.print("取款金额大于余额,请重新输入取款金额:");
				blc=input.nextDouble();
			}
			while(blc<=0){
				System.out.println("=======================");
				System.out.print("取款金额错误,请重新输入取款金额:");
				blc=input.nextDouble();
			} 
			usr.setBalance(usr.getBalance()-blc);
			System.out.println("=======================");
			System.out.println("取款成功!");
			System.out.println("账户余额:"+usr.getBalance());

		}
	}
	
	public void depositMoney(){	//存款
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			System.out.print("请输入存款金额:");
			double dsm=input.nextDouble();
			while(dsm<=0){
				System.out.println("=======================");
				System.out.print("输入金额错误,请重新输入:");
				dsm=input.nextDouble();
			} 
			usr.setBalance(usr.getBalance()+dsm); 
			System.out.println("=======================");
			System.out.println("存款成功!");
			System.out.println("账户余额:"+usr.getBalance());
		}
	}

	public void showBalance(){	//余额查询
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			System.out.println("=======================");
			System.out.println("账户余额:"+usr.getBalance());
		}
	}	
	
	public void revisePassword(){	//修改密码
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			System.out.print("请输入原密码:");
			String password=input.next();
			for(int i=2;i>=0;i--) {
				if(password.equals(usr.getPassword()))
					break;
				if(i==0) {
					System.out.println("三次密码输入错误!即将退出账户!");
					cancel();
					Select();
				}
				System.out.println("密码错误!你还有"+i+"次机会!");
				System.out.print("请输入原密码:");
				password=input.next();
			}
			System.out.print("验证成功,请输入新密码:");
			String password1=input.next();
			System.out.print("请再次输入密码:");
			String password2=input.next();
			while(!password1.equals(password2)) {
				System.out.println("=======================");
				System.out.print("两次密码不同,请重新输入新密码:");
				password1=input.next();
				System.out.print("请再次输入密码:");
				password2=input.next();
			}
			usr.setPassword(password1);
			System.out.println("=======================");
			System.out.println("修改成功!");
		}		
	}

	public void lookAccount() {	//查看用户信息
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			System.out.println("=======================");
			System.out.println("姓名:"+usr.getName());
			System.out.println("性别:"+usr.getSex());
			System.out.println(usr.getCardId());
			System.out.println("身份证号:"+usr.getID());
			System.out.println("余额:"+usr.getBalance());
		}
	}
	
	public void cancel() {
		if(usr==null){
			System.out.println("=======================");
			System.out.println("请先登录账户!");
		}
		else{
			usr=null;
			System.out.println("=======================");
			System.out.println("账户退出成功!");
		}	
	}
}

(5)测试类

public class TestATM {

	public static void main(String[] args) {
		ATM atm = new ATM();
		
		atm.Select();
	}

}

(6)控制台输出结果

=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:1
=======================
1.普通银行卡
2.信用卡
3.医保卡
0.返回
请选择开户类型:1
请输入姓名:jiangyilong
请输入性别:男
请输入年龄:18
请输入身份证号:123123123123
请输入银行卡要设置的密码:123
请再次输入密码:123
=======================
开户成功!你的卡号为:1
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:2
请输入卡号:1
请输入密码:123
=======================
jiangyilong,欢迎登录!
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:5
=======================
账户余额:0.0
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:4
请输入存款金额:5000
=======================
存款成功!
账户余额:5000.0
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:3
请输入取款金额:2000
=======================
取款成功!
账户余额:3000.0
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:7
=======================
姓名:jiangyilong
性别:男
普通银行卡卡号为:1
身份证号:123123123123
余额:3000.0
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:8
=======================
账户退出成功!
=======ATM管理系统=======
1.开户
2.登录
3.取款
4.存款
5.余额查询
6.修改密码
7.查看用户信息
8.退出登录
9.退出系统
请选择需要选择的项目:9
=======================
欢迎下次登录该系统!

没有用数据库,每次运行代码都需要先开户。可以取消开户功能,直接定义一或两个账户来测试ATM功能。

代码下载链接:https://download.csdn.net/download/Cristiano272/12272988

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值