用Java实现简单的控制台版ATM系统

本文详细解析了ATM系统的项目设计,包括系统需实现的功能如查询、取款、存款等,以及系统的对象划分和类的设计,如Card类、Person类、Controller类和View类,深入探讨了每个类的属性、方法及其实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ATM系统项目

ATM系统要实现的功能

  1. 查询:账号必须存在,密码(三次机会,不对就锁卡)

  2. 取款:账号必须存在,密码(三次机会,不对就锁卡),取款金额不能大于存款

  3. 存款:账号必须存在,存款金额不能低于0

  4. 转帐:你的账户,转款账户都必须存在,密码(三次机会,不对就锁卡),转账金额不能超过余额

  5. 锁卡:账号必须存在,使用密码冻结

  6. 解卡:账号必须存在,只能使用身份证号进行解锁

  7. 补卡:使用身份证进行补卡

  8. 改密:愿密码进行改密,也可以使用身份证进行改密

  9. 退出: 保存数据

    项目分析

    可分为四个对象,第一个 银行卡对象(Card 存储银行卡信息);第二个 用户对象(Person 存储用户信息);第三个 功能对象( Controller 具体的操作功能类);视图对象( Views 显示操作界面)。从而可分为四个类

    代码

    Card类

    封装卡的属性(卡号,密码,余额,锁卡状态)

    public class Card {
       //封装卡的属性
       private String cardid;
       private String password;
       private double money;
       private boolean islock;
    
       //设置封装的各属性的set、get方法
       public String getCardid() {
    	return cardid;
       }
    
       public void setCardid(String cardid) {
    	this.cardid = cardid;
       }
    
       public String getPassword() {
    	return password;
       }
    
       public void setPassword(String password) {
    	this.password = password;
       }
    
       public double getMoney() {
    	return money;
       }
    
       public void setMoney(double money) {
    	this.money = money;
       }
    
       public boolean isIslock() {
    	return islock;
       }
    
       public void setIslock(boolean islock) {
    	this.islock = islock;
       }
       
       //重写 to String方法
       @Override
    	public String toString() {
    		return "Card [cardid=" + cardid + ", password=" + password + ", money=" + money + ", islock=" + islock + "]";
    	}
    	
    	//构造卡的无参和有参构造方法  
    	public Card() {
    		super();
    		
    	}
    		
    	public Card(String cardid, String password, double money, boolean islook) {
    		super();
    		this.cardid = cardid;
    		this.password = password;
    		this.money = money;
    		this.islock = islock;
    	}
       
    }
    
    Person类

    封装用户信息(用户名,身份证号,手机号码,卡)

    public class Person {
    	private String name;
    	private String userid;
    	private String phone;
    	private Card[] card;
    	
    	//设置封装的各属性的set、get方法
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getUserid() {
    		return userid;
    	}
    	public void setUserid(String userid) {
    		this.userid = userid;
    	}
    	public String getPhone() {
    		return phone;
    	}
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    	public Card[] getCard() {
    		return card;
    	}
    	public void setCard(Card[] card) {
    		this.card = card;
    	}
    		
    	//重写 to String方法
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", userid=" + userid + ", phone=" + phone + ", card=" + card+ "]";
    	}
    	//构造无参和有参方法  
    	public Person() {
    		super();
    	}
    	
    	public Person(String name, String userid, String phone, Card[] card) {
    		super();
    		this.name = name;
    		this.userid = userid;
    		this.phone = phone;
    		this.card = card;
    	}	
    }
    
    Controller类

    创建三个默认账户信息,并构造操作方法

    public class Controller {
         Scanner sc = new Scanner(System.in);
         Card c = new Card() ; //生成卡
         
         //创建三组信息
         Card c1 = new Card("1","666666",1000,false);  //默认账户1
         Card c2 = new Card("2","666666",1500,false);  //默认账户2
         Card c3 = new Card("3","666666",1800,false);  //默认账户3
         public void regiser(String name,String userid,String phone,Card[] card) {
        	 //将Person类的属性赋给对象p
        	 Person p = new Person(name,userid,phone,card);   	 
         }
         
         public void query(Person p) {
        	 
        	 System.out.println(p);
         }
         
         public boolean verify(String cardid,String password) {
        	 if(cardid.equals("1")&&password.equals("666666")) {  //如果输入的是账户1的账户密码,就得到账户1属性
        		 c.setMoney(c1.getMoney());
        		 c.setPassword(c1.getPassword());
        		 
        		 if(!c.isIslock()) {                             //判断账户1是否被锁
        			 return true;
        		 }else {
        			 System.out.println("抱歉,该卡已被锁");
        			 return false;
        		 }
        	 }
        	 
        	 if(cardid.equals("2")&&password.equals("666666")) { //如果输入的是账户2的账户密码,就得到账户2属性
                 c.setMoney(c2.getMoney());
                 c.setPassword(c2.getPassword());
        		 
                 //判断该卡是否被锁
        		 if(!c.isIslock()) {                             //判断账户2是否被锁
        			 return true;
        		 }
        	 }
        	 
        	 if (cardid.equals("3")&&password.equals("666666")) { //如果输入的是账户3的账户密码,就得到账户3属性
        		 c.setMoney(c3.getMoney());
        		 c.setPassword(c3.getPassword());
        		 
        		 if(!c.isIslock()) {                              //判断账户3是否被锁
        			 return true;
        		 }
        	 }
        	 
        	 return false;                         //一个账户信息都没对上,重新输入
        	 
         }
        	
         //构造查询方法
         public void query(String cardid) {
        	 
        	 if(cardid.equals("1")) {                           //查询账户1
        		 System.out.println(c.getMoney());
        	 }else if(cardid.equals("2")) {                     //查询账户2
        		 System.out.println(c.getMoney());
        	 }else if(cardid.equals("3")) {                     //查询账户3
        		 System.out.println(c.getMoney());
        	 }else {
        		 System.out.println("输入有误");
        	 }
        	 
         }
         
         //构造取钱方法
         public void putMoney() {
        	 System.out.print("请输入需要取出的金额(将金额再确认一遍):");
        	 double money = sc.nextDouble();
        	//判断钱够不够
        	 if(money<=c.getMoney()) {
        		 money = c.getMoney()-money;
        		 c.setMoney(money);                        //钱够取出并更新账户余额
        		 System.out.println("已取出"+sc.nextDouble()+"元");
        		 System.out.println("账户余额为:"+money+"元");
        	 }else {
        		 System.out.println("对不起,账户余额不足");
        	 }
         }
         
     	//构造存钱方法
     	public void addMoney() {
    
     		System.out.println("请将纸币放于存钞口(将金额再确认一遍)");
    
     		double money = sc.nextDouble();
    
     		 money = c.getMoney()+money;
    
     		c.setMoney(money);                               //存钱并更新账户余额      
     		
     		System.out.println("已存入"+sc.nextDouble()+"元");
    		System.out.println("账户余额为:"+money+"元"); 		
     		
    
     	}
         
       //构造转钱方法
         public void saveMoney() {
        	 System.out.println("请输入需要转入账户名:");
        	 String name = sc.next();
        	 System.out.print("请输入转入金额(将金额再确认一遍):");
        	 double money = sc.nextDouble();
        	 
        	 //判断钱够不够
        	 if(c.getMoney()>=money) {
        		 money = c.getMoney()-money;
        		 c.setMoney(money);                             //钱够转钱 更新账户余额
        		 System.out.println("已转出"+sc.nextDouble()+"元");
        		 System.out.println("账户余额为:"+money+"元");
        	 }else {                                            //钱不够返回
        		 System.out.println("对不起,账户余额不足");
        	 }
         }
         
         //构造锁卡方法
         public void lock() {
        	 c.setIslock(true);
        	 System.out.println("该卡已被锁");
         }
         
         //构造解卡方法
         public void unlock() {
        	 c.setIslock(false);
        	 System.out.println("该卡可正常使用");
         }
         
         //构造补卡方法
         public void newCard() {
        	 System.out.println("请输入您的姓名:");
        	 String name = sc.nextLine();
        	
        	 System.out.println("请输入您的身份证号码:");
        	 String userid = sc.nextLine(); 
        	
        	 Person p = new Person(name,userid,null,null);  
        	 
        	 
        	 System.out.println("请输入重办账户号码:");    	 
        	 String cardid = sc.nextLine();
        	 
        	 System.out.println("请输入要设置的密码(数字):");
        	 String  password = sc.nextLine();
         
        	 //限制密码位数
        	 if(password.length()==6) {
        		 System.out.println("密码设置成功");
        	 }else {
        		 System.out.println("密码限制6位,请重新选择功能");    		 
        	 }
        	 
         }   	 
    
         
         //构造改密方法
         public void changePwd() {
        	 System.out.println("请输入密码:");
        	 String password = sc.next();
        	 
        	 if(password.equals(c.getPassword())){
        		 System.out.println("请输入更改后的密码:");
        		 String newpassword = sc.next();
        		 System.out.println("再输入一次密码:");
        		 String newpassword1 = sc.next();
        		 
        	    if(newpassword.equals(newpassword1)) {
        		 System.out.println("密码修改成功!");
        		 c.setPassword(newpassword1);
        	    }else {
        		 System.out.println("两次密码输入不一致,请重新输入");
        		 changePwd();
        	    }
           }else {     
        	   System.out.println(c.getPassword());
        	   System.out.println("密码输入错误");
           }
         }
         
         //构造退出方法
         public void save() {
        	 System.exit(0);
         }
    }
    
    
    View类

    实现欢迎界面以及各操作界面

    public class View {
    	Scanner s = new Scanner(System.in);
    	private int count = 3;
    	Card c =new Card();
        Controller co = new Controller();
    	
        public static void main(String[] args) {
    		View v = new View();
    		v.show();
    	}
    	
        public void show() {
    		System.out.println("=============欢迎使用使用本行存取一体机=============");
    		System.out.println("请输入卡号:");
    		String cardid = s.nextLine();
    		
    		System.out.println("请输入密码:");
    		String  password =s.nextLine();
    		
    		//登录界面,账户密码错三次就锁卡
    		if(!co.verify(cardid, password)) {
    			count--;
    			if(count == 0) {
    				co.lock();   //调用lock
    				System.out.println("密码输入错误"+c.isIslock());
    				System.out.println("请重新输入:");
    			}
    			
    			System.out.println("你还有"+count+"次输入机会,");
    			System.out.println("输入机会用完后,将会锁卡");
    			show();
    		}
    		//如果账户密码正确就进入功能界面
    		if(co.verify(cardid, password)) {
    			while(true) {
    				System.out.println("请按相应的序号选择功能:1.取款    2.存款    3.查询余额    4.转账   5.修改密码    6.锁卡    7.解卡   8.补卡  9.退出");
    				
    				switch(s.nextInt()) {
    				case 1:   //取款
    					co.putMoney();
    				    break;
    				case 2:  //存钱
    					co.addMoney();
    					break;
    				case 3:  //查询
    					co.query(cardid);
    					break;
    				case 4:  //转钱
    					co.saveMoney();
    					break;
    				case 5:  //改密
    					co.changePwd();
    					break;
    				case 6:  //锁卡
    					co.lock();
    					break;
    				case 7:  //解卡
    					co.unlock();
    					break;
    				case 8:  //补卡
    					co.newCard();
    					break;
    				case 9:  //退出
    					System.out.println("感谢使用,欢迎下次光临");
    					co.save();
    					break;
    					
    				default:  //输入指令错误
    					System.out.println("输入有误");
    					break;
    				}
    			}
    		}
    	}
    }
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值