文章目录
今天的内容是用Java模拟实现ATM取款系统,主要是对类和方法的使用。
前言
具体需要实现的功能:
用Java模拟简单的银行取款系统的相关功能,账户的登录与创建,实现存取款、余额查询、密码修改等相关功能
一、创建登录显示页面
登录页面需要有命令的索引便于用户操作和代码的实现,如图:
import java.util.Scanner;
public class ATM{
public static void main(String[]args){
System.out.println("***欢迎使用银行取款系统***");
System.out.println();
System.out.println("1.登录\t\t2.注册\t\t3.退出");
System.out.println();
Scanner in=new Scanner(System.in);
while(true){
int act=in.nextInt();
if(act==1){
//登录
}else if(act==2){
//注册
}else if(act==3){
System.out.println("欢迎您的使用,See You!!!");
break;
}else{
System.out.println("该指令无效,请重新输入!");
}
}
}
}
注意:这里相关功能均未实现,只是初步建立起一个大概的模版,提供一个程序运行的入口,然后分区域实现其功能。
二、创建用户信息
首先,用户需要选择登录or注册账号,Java刚入门的同学(比如我@-@)这里可以采用自定义类数组(其缺点是长度一旦确定便不能更改,管理起来比较麻烦,也可以采用Arraylist动态数组,我们这里只讲普通数组,可以类比一下C语言中的结构体数组)来储存用户的信息。
创建User类用来存储用户的各类信息
具体代码见下:
class User{
private String name;//用private修饰,进行访问控制,保护用户隐私
private String ID;
private String password;//密码
private String cell_phone_number;//电话号码
private int money;
public void print(){//查询个人资料
System.out.println("name:"+name);
System.out.println("ID:"+ID);
System.out.println("money:"+money);
System.out.println("cell_phone_number:"+cell_phone_number);
}
//构造方法,建立和修改用户信息
//建立用户信息
public User(String name,String ID,String password,String cell_phone_number,int money){
this.name=name;
this.ID=ID;
this.password=password;
this.cell_phone_number=cell_phone_number;
this.money=money;
}
//修改用户信息,修改密码,手机号,存取款
public void change_password(String password){
this.password=password;
}
public void change_cell_phone_number(String cell_phone_number){
this.cell_phone_number=cell_phone_number;
}
public void saving_money(int money){
if(money>=0){
this.money+=money;
System.out.println("操作成功!您的余额为"+this.money);
}else{
System.out.println("存款失败!!!请重试");
}
}
public void drawing_money(int money){
if(money<=this.money){
this.money-=money;
System.out.println("操作成功!您的余额为"+this.money);
}else{
System.out.println("抱歉!您的余额不足");
}
}
//查看用户信息
public String getcell_phone_number(){
return cell_phone_number;
}
public String getpassword(){
return password;
}
public String getID(){
return ID;
}
public int getmoney(){
return money;
}
}
二、创建相关指令的处理
1.创建Rigister方法,完成用户的注册
当user为null,即未被使用时,调用方法在这个未被使用的类数组上储存用户数据。
public static void Rigister(Scanner in,User[] user){
System.out.println("感谢您的信任,下面将注册您的账户");
for(int i=0;i<user.length;i++){
if(user[i]==null){
System.out.println("请输入您的姓名:");
String name=in.next();
System.out.println("请输入您的ID:");
String ID=in.next();
System.out.println("请设置您的账号密码:");
String password=in.next();
System.out.println("请输入您的电话号码:");
String cell_phone_number=in.next();
System.out.println("请输入您的存款金额:");
int money=in.nextInt();
if(money<0){
System.out.println("存款失败,系统默认为0");
money=0;
}
User user1=new User(name,ID,password,cell_phone_number,money);
user[i]=user1;
System.out.println("恭喜您!您已经成功完成注册^-^");
break;
}
}
}
2.创建Using方法处理相关指令
这其中主要是对User这一类中的方法进行,相关调用和处理。
public static void Using(Scanner in,User[] user){
System.out.println("欢迎您的登陆,请输入您的账号:");
String ID1=in.next();
int cnt=2,flag=1;
for(int i=0;i<user.length;i++){
if(user[i]==null){
break;
}
if(ID1.equals(user[i].getID())){
flag=0;
User user0=user[i];
System.out.println("请输入您的账号密码:");
String password1=in.next();
while(true){
if(password1.equals(user0.getpassword())){
int act2;
while(true){
System.out.println("登陆成功,请选择您要办理的业务:");
System.out.println("1.查询个人资料\t\t2.修改密码");
System.out.println("3.修改电话号码\t\t4.存款");
System.out.println("5.取款\t\t6.退出登陆");
act2=in.nextInt();
if(act2==1){
user0.print();
}else if(act2==2){
System.out.println("为确保您的账户安全,请再次输入您的密码:");
String password2=in.next();
if(password2.equals(user0.getpassword())){
System.out.println("请输入您的新密码:");
String password3=in.next();
user0.change_password(password3);
System.out.println("操作成功!!!");
}else{
System.out.println("密码错误请重试");
}
}else if(act2==3){
System.out.println("请输入您的新手机号码:");
String phone=in.next();
user0.change_cell_phone_number(phone);
System.out.println("操作成功!!!");
System.out.println("您的新手机号码为"+user0.getcell_phone_number());
}else if(act2==4){
System.out.println("请输入您要存款的金额:");
int mon=in.nextInt();
user0.saving_money(mon);
}else if(act2==5){
System.out.println("请输入您要取款的金额:");
int mon=in.nextInt();
user0.drawing_money(mon);
}else if(act2==6){
break;
}else{
System.out.println("无此指令,请重试!!!");
}
}
break;
}else{
System.out.println("抱歉,密码错误,您还有"+cnt+"次机会");
cnt--;
password1=in.next();//重新输入密码
}
if(cnt==0){
System.out.println("抱歉,密码多次错误,请重新再试");
break;
}
}
}
if(flag==0){
break;
}
}
if(flag==1){
System.out.println("抱歉!不存在此账号");
}
}
编写过程中有几点需要注意:
1.区分return,break,continue,System.exit(0),System.exit(1)
1.return:跳出当前方法,回到调用此方法处;
2.break:结束循环体类的循环过程;
3.comntinue:进行下一次循环,结束此次循环;
4.System.exit(0):正常退出程序;
5.System.exit(1):非正常退出程序
使用过程中注意区分,不然程序可能会运行错误或编译错误。
2.字符串的比较(判断用户的账号的密码是否正确)
1.一般用String.equals()比较字符串是否相同;
如果字符串 arr,brr相同,arr.equal(b)的结果为true;
2.“==”是比较是否引用的同一个对象,比较的是地址;
3.CompareTo是比较对应字符的大小(即ASCII码顺序)如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值。如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度。
(想要更具体的可以看字符串的使用)
3.this的使用(储存修改用户的数据)
this代表一个引用,指向当前调用该方法的当前对象,列如:
在User类中,需要改变用户的密码,但有两个password,如果不用this指明,用户的password将不会改变,password=password可视为12345=12345;
private String password;//密码为123
public void change_password(String password){//改变后为12345
this.password=password;
}
完整代码见下:
import java.util.Scanner;
public class ATM{
public static void main(String[]args){
System.out.println("***欢迎使用银行取款系统***");
System.out.println();
System.out.println("1.登录\t\t2.注册\t\t3.退出");
Scanner in=new Scanner(System.in);
User[] user=new User[1000];//采用数组的形式存放个人信息
while(true){
int act=in.nextInt();
if(act==1){
//登录
Using(in,user);
}else if(act==2){
//注册
Rigister(in,user);
}else if(act==3){
System.out.println("欢迎您的使用,See You!!!");
break;
}else{
System.out.println("该指令无效,请重新输入!");
}
System.out.println("1.登录\t\t2.注册\t\t3.退出");
}
}
public static void Rigister(Scanner in,User[] user){
System.out.println("感谢您的信任,下面将注册您的账户");
for(int i=0;i<user.length;i++){
if(user[i]==null){
System.out.println("请输入您的姓名:");
String name=in.next();
System.out.println("请输入您的ID:");
String ID=in.next();
System.out.println("请设置您的账号密码:");
String password=in.next();
System.out.println("请输入您的电话号码:");
String cell_phone_number=in.next();
System.out.println("请输入您的存款金额:");
int money=in.nextInt();
if(money<0){
System.out.println("存款失败,系统默认为0");
money=0;
}
User user1=new User(name,ID,password,cell_phone_number,money);
user[i]=user1;
System.out.println("恭喜您!您已经成功完成注册^-^");
break;
}
}
}
public static void Using(Scanner in,User[] user){
System.out.println("欢迎您的登陆,请输入您的账号:");
String ID1=in.next();
int cnt=2,flag=1;
for(int i=0;i<user.length;i++){
if(user[i]==null){
break;
}
if(ID1.equals(user[i].getID())){
flag=0;
User user0=user[i];
System.out.println("请输入您的账号密码:");
String password1=in.next();
while(true){
if(password1.equals(user0.getpassword())){
int act2;
while(true){
System.out.println("登陆成功,请选择您要办理的业务:");
System.out.println("1.查询个人资料\t\t2.修改密码");
System.out.println("3.修改电话号码\t\t4.存款");
System.out.println("5.取款\t\t6.退出登陆");
act2=in.nextInt();
if(act2==1){
user0.print();
}else if(act2==2){
System.out.println("为确保您的账户安全,请再次输入您的密码:");
String password2=in.next();
if(password2.equals(user0.getpassword())){
System.out.println("请输入您的新密码:");
String password3=in.next();
user0.change_password(password3);
System.out.println("操作成功!!!");
}else{
System.out.println("密码错误请重试");
}
}else if(act2==3){
System.out.println("请输入您的新手机号码:");
String phone=in.next();
user0.change_cell_phone_number(phone);
System.out.println("操作成功!!!");
System.out.println("您的新手机号码为"+user0.getcell_phone_number());
}else if(act2==4){
System.out.println("请输入您要存款的金额:");
int mon=in.nextInt();
user0.saving_money(mon);
}else if(act2==5){
System.out.println("请输入您要取款的金额:");
int mon=in.nextInt();
user0.drawing_money(mon);
}else if(act2==6){
break;
}else{
System.out.println("无此指令,请重试!!!");
}
}
break;
}else{
System.out.println("抱歉,密码错误,您还有"+cnt+"次机会");
cnt--;
password1=in.next();//重新输入密码
}
if(cnt==0){
System.out.println("抱歉,密码多次错误,请重新再试");
break;
}
}
}
if(flag==0){
break;
}
}
if(flag==1){
System.out.println("抱歉!不存在此账号");
}
}
}
class User{
private String name;//用private修饰,进行访问控制,保护用户隐私
private String ID;
private String password;//密码
private String cell_phone_number;//电话号码
private int money;
public void print(){//查询个人资料
System.out.println("name:"+name);
System.out.println("ID:"+ID);
System.out.println("money:"+money);
System.out.println("cell_phone_number:"+cell_phone_number);
}
//构造方法,建立和修改用户信息
//建立
public User(String name,String ID,String password,String cell_phone_number,int money){
this.name=name;
this.ID=ID;
this.password=password;
this.cell_phone_number=cell_phone_number;
this.money=money;
}
//修改用户信息,修改密码,手机号,存取款
public void change_password(String password){
this.password=password;
}
public void change_cell_phone_number(String cell_phone_number){
this.cell_phone_number=cell_phone_number;
}
public void saving_money(int money){
if(money>=0){
this.money+=money;
System.out.println("操作成功!您的余额为"+this.money);
}else{
System.out.println("存款失败!!!请重试");
}
}
public void drawing_money(int money){
if(money<=this.money){
this.money-=money;
System.out.println("操作成功!您的余额为"+this.money);
}else{
System.out.println("抱歉!您的余额不足");
}
}
//查看用户信息
public String getcell_phone_number(){
return cell_phone_number;
}
public String getpassword(){
return password;
}
public String getID(){
return ID;
}
public int getmoney(){
return money;
}
}
运行结果如下:
总结
以上就是今天要讲的内容,本文仅仅以代码的形式简单介绍了类与对象的使用,及一点字符串的处理,上述为较简单模拟银行取款系统,是为了熟练一些方法和语法的使用,还有很大的改正空间,此code仅为参考。
1.区分return,break,continue,System.exit(0),System.exit(1);
2.字符串的使用与比较;
3.关键字this的使用;
4.类数组的创建即使用;
5.利用不同类型的方法实现各类间数据的建立,传递与修改;