基于java面向对象的ATM管理系统

 

  这段时间闲的没事接了一个课程设计,具体就是学完java基础入门语法和面向对象(封装,继承,多态)之后需要做一个模拟ATM的管理系统,功能包括注册登陆、存取查功能。前后思考加实现用了半天时间去完善修改实现此系统,一方面是对自己以前所学知识的回顾以及综合运用,另一方面也是给新人指条路,毕竟学习确实不易,还是希望大家少走弯路。

 

  Java基础语法和面向对象的重点在此简单罗列以下,各位小伙伴查漏补缺,看自己哪块知识有漏洞去加深学习巩固下知识------》》》

  变量、运算符、循环、函数、数组、面向对象、this、super、static 、final、成员变量局部变量、构造函数、函数重载、重写/覆写、封装、继承、多态、抽象、接口。

 

  其中尤为重要的是接口,无论是以后工作还是学习最常用最重要的就是接口,做项目各成员分工之后各自实现自己的部分,最后对接一下接口就OK了,所以说接口无论是在面向对象中还是在以后的开发中都很重要。通俗来讲接口举个例子,电脑的USB接口可以对接鼠标、键盘、硬盘、数据线等等,对接的对象不同实现的功能就不同,在实际开发中每个人的功能是不一样的,实现了接口的对接即实现了此功能的植入调用。

 

好了,接下来是开始今天的项目展示和思路分析,话不多说开始!首先思路要清晰,我们需要什么,要做什么,有什么用,了解清楚才好下手。

具体分为存取成员信息变量类、登陆注册类、存查取类、菜单类以及测试类。各个功能模块实现独立分开,详细介绍如下:

Account类:用于存取用户成员变量信息

Menu类:主菜单即登陆注册菜单,以及登陆成功后的存取查操作菜单

RegisAndLogin类:包括登陆和注册方法

Operation类:登陆成功后的存取查方法

AtmTest类:功能测试类

重点:该系统最重要的是要把账户类作为参数去传递,因为要实现操作的变量信息随时能够接收到,举个例子,如果不把账户类作为参数,在注册信息成功后再去登陆是绝对不可能的,因为变量复赋值后的值是传递不过去的,其他类和方法接收不到。

1.Account.java类

成员变量私有化,其他类通过setter、getter方法获取以及存取信息(有参构造函数可以不写,我再此是为了在测试的时候不用在去注册信息,直接登录就可以了,去掉有参构造的同时在测试类中实例化账户类时调用无参构造器就可以)

package com.atm.twelve;

public class Account {
    private int username;
    private int password;
    private String name;
    private int age;
    private int money;
    
    public int getUsername() {
        return username;
    }
    public void setUsername(int username) {
        this.username = username;
    }
    public int getPassword() {
        return password;
    }
    public void setPassword(int password) {
        this.password = password;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
    public Account(){
        
    }
    public Account(int username, int password, String name, int age, int money) {
        this.username = username;
        this.password = password;
        this.name = name;
        this.age = age;
        this.money = money;
    }

}

2.Menu.java类

package com.atm.twelve;
//菜单
public class Menu {
	public void menu(){
		System.out.println("----------------------");
		System.out.println("|    欢迎进入ATM机系统        |");
		System.out.println("|    1注册                                |");
		System.out.println("|    2登录                                |");
		System.out.println("|    欢迎进入ATM机系统        |");
		System.out.println("----------------------");
		System.out.println("请输入整数序号:");
	}
	
	public void welcome(Account account){
		System.out.println("----------------------");
		System.out.println("   欢迎"+account.getName()+"进入ATM机系统");
		System.out.println("|    1查询余额                        |");
		System.out.println("|    2存款                                |");
		System.out.println("|    3取款                                |");
		System.out.println("|    4退出                                |");
		System.out.println("----------------------");
		System.out.println("请输入整数序号:");
	}

}

 

3.AtmTest.java类

package com.atm.twelve;

import java.util.Scanner;
//ATM测试类
public class AtmTest {
	public static void main(String[] args) {
		
		Menu m=new Menu();
		Scanner sc=new Scanner(System.in);
		RegisAndLogin r=new RegisAndLogin();
		Account a=new Account(17159,123456,"杨乾",20,10000);
		boolean b=false;
		Operation o=new Operation();
		//主菜单界面
		while(true){
			m.menu();
			int index=sc.nextInt();
			if(index==1){
				//注册
				b=r.regis(a, sc);
				if(b){
					System.out.println("注册成功!");
					System.out.println(a.getName()+"------初始账户余额:"+a.getMoney());
				}else{
					System.out.println("注册次数用完,请明天再来!");
				}
				
			}else if(index==2){
				//登陆
				b=r.login(a, sc);
				if(b){
					System.out.println("登陆成功,欢迎"+a.getName()+"用户!");
					break;
				}else{
					System.out.println("登陆次数用完,请明天再来!");
				}
			}
		}
		//操作界面
		if(b){
			while(true){
				m.welcome(a);
				int index=sc.nextInt();
				if(index==1){
					//查询余额
					o.findMoney(a, sc);
				}else if(index==2){
					//存款
					o.addMoney(a, sc);
				}else if(index==3){
					//取款
					o.putMoney(a, sc);
				}else{
					//退出
					break;
				}
			}
			
		}
	}

}

 

4.RegisAndLogin.java类

两个方法用boolean用来返回是否成功注册登录,以便后续的操作判断

package com.atm.twelve;

import java.util.Scanner;
//登陆、注册类
public class RegisAndLogin extends Account{
	//boolean用于判断是否注册成功
	public boolean regis(Account account,Scanner sc){
		System.out.println("请输入整数型的注册账户:");
		int uname=sc.nextInt();
		for(int i=0;i<3;i++){
			System.out.println("请输入整数型的账户密码:");
			int pword=sc.nextInt();
			System.out.println("请二次输入密码:");
			int pword2=sc.nextInt();
			if(pword==pword2){
				//成功
				account.setPassword(pword);
				break;
			}else{
				System.out.println("两次输入密码不正确!");
				if(i==2){
					return false;
				}
			}
		}
		System.out.println("请输入用户名:");
		String name=sc.next();
		System.out.println("请输入年龄:");
		int age=sc.nextInt();
		account.setMoney(10000);
		account.setUsername(uname);
		account.setName(name);
		account.setAge(age);
		return true;
				
	}
	//boolean用于判断是否登陆成功
	public boolean login(Account account,Scanner sc){
		System.out.println("请输入账户名:");
		for(int i=0;i<3;i++){
			int uname=sc.nextInt();
			if(uname==account.getUsername()){
				//账号正确
				break;
			}else{
				System.out.println("不存在此账户!请重新输入:");
				if(i==2){
					return false;
				}
			}
		}
		
		System.out.println("请输入账户密码:");
		for(int j=0;j<3;j++){
			int pword=sc.nextInt();
			if(pword==account.getPassword()){
				//密码正确
				break;
			}else{
				System.out.println("密码有误!请重新输入:");
				if(j==2){
					return false;
				}
			}
		}
		
		return true;
		
	}

}

 

5.Operation.java类

注意:
1.存款数额大于0

2.取款数额为正且不能大于所有金额

3.查询余额为初始余额加上存取的余额,因为初始余额是在注册的时候已经赋值过的

package com.atm.twelve;

import java.util.Scanner;

public class Operation {
	
	public void addMoney(Account account,Scanner sc){
		System.out.println("请输入存款数额:");
		int money=sc.nextInt();
		if(money>0){
			account.setMoney(money+account.getMoney());
			System.out.println("存款成功!");
		}else{
			System.out.println("存款数额不能为零或负!");
		}
	}
	
	public void findMoney(Account account,Scanner sc){
		System.out.println("您的余额为:"+account.getMoney());
	}
	
	public void putMoney(Account account,Scanner sc){
		System.out.println("请输入你的取款额:");
		int money=sc.nextInt();
		if(0<money&&money<account.getMoney()){
			System.out.println("取款成功!");
			account.setMoney(account.getMoney()-money);
		}else{
			System.out.println("余额不足!");
		}
	}

}

 

再来个运行效果图吧

因为有构造函数,用户信息已经有了,所以直接登陆即可

1.账号三次输入错误后,重新登陆密码三次输入错误,再成功登陆

 ----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
2
请输入账户名:
156
不存在此账户!请重新输入:
156
不存在此账户!请重新输入:
156
不存在此账户!请重新输入:
登陆次数用完,请明天再来!
----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
2
请输入账户名:
17159
请输入账户密码:
123
密码有误!请重新输入:
456
密码有误!请重新输入:
456
密码有误!请重新输入:
登陆次数用完,请明天再来!
----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
2
请输入账户名:
17159
请输入账户密码:
123456
登陆成功,欢迎杨乾用户!
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:

2.注册密码三次输入错误之后重新注册成功后登陆

 ----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
1
请输入整数型的注册账户:
17159
请输入整数型的账户密码:
123456
请二次输入密码:
456
两次输入密码不正确!
请输入整数型的账户密码:
123
请二次输入密码:
456
两次输入密码不正确!
请输入整数型的账户密码:
123
请二次输入密码:
456
两次输入密码不正确!
注册次数用完,请明天再来!
----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
1
请输入整数型的注册账户:
17159
请输入整数型的账户密码:
123456
请二次输入密码:
123456
请输入用户名:
YQ
请输入年龄:
20
注册成功!
YQ------初始账户余额:10000
----------------------
|    欢迎进入ATM机系统        |
|    1注册                                |
|    2登录                                |
|    欢迎进入ATM机系统        |
----------------------
请输入整数序号:
2
请输入账户名:
17159
请输入账户密码:
123456
登陆成功,欢迎YQ用户!
----------------------
   欢迎YQ进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:

3.登陆成功后存查取款

 登陆成功,欢迎杨乾用户!
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:
1
您的余额为:10000
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:
2
请输入存款数额:
8000
存款成功!
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:
3
请输入你的取款额:
4567
取款成功!
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:
1
您的余额为:13433
----------------------
   欢迎杨乾进入ATM机系统
|    1查询余额                        |
|    2存款                                |
|    3取款                                |
|    4退出                                |
----------------------
请输入整数序号:

 

 

 

认真看过此篇的小伙伴,如果对你有收获,请点击旁边的小手推荐一下,如果有误,欢迎指正,谢谢!

版权声明:此篇为本人原创,转载请标明出处:https://www.cnblogs.com/YQian/p/11913760.html

我的博客园地址:https://www.cnblogs.com/YQian/

 

猜你喜欢

转载自www.cnblogs.com/YQian/p/11913760.html