@Java
最全功能的银行ATM机自助(严谨)
大家好,我是Ziph!
此小项目的体会真是,为了实现功能是不择手段啊,为了实现和完善功能,码了一遍又一遍(找Bug),测试了N多次功能,测试好了发个博。OK,点个赞呗!哈哈,废话少说向下看吧!
题目:
中国银行系统ATM机自助实现登录、开户、存款、取款、转账、查询余额、修改预留手机号、注销账号等功能
此小项目主要是运用了增删改查知识、循环结构知识、数组的扩容、数组的元素移动、函数中的代参和函数与函数之间的互相调用等知识
因为是个简单的小项目没有具体划分多个包,请见谅!
大体分为三部分:User类(用户类)、TestBank(测试类)和Bank(逻辑运算核心)主体类
每个部分都标有注释,需要哪一部分直接找,不废话直接贴代码:
User类(用户类)
//类的组成:私有属性、公共访问方法、无参构造方法
//实体类:Entity,作用:存储数据
public class User {
private int cardNo; //卡号
private String identity; //身份证号码
private String userName; //姓名
private String passWord; //密码
private String phone; //预留手机号
private double balance; //余额
public User() {
}
public User(int cardNo, String identity, String userName, String passWord, String phone, double balance) {
this.cardNo = cardNo;
this.identity = identity;
this.userName = userName;
this.passWord = passWord;
this.phone = phone;
this.balance = balance;
}
public int getCardNo() {
return cardNo;
}
public void setCardNo(int cardNo) {
this.cardNo = cardNo;
}
public String getIdentity() {
return identity;
}
public void setIdentity(String identity) {
this.identity = identity;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
}
Bank(逻辑运算核心)主体类
import java.util.Arrays;
import java.util.Scanner;
//中国银行类
public class Bank {
Scanner input = new Scanner(System.in);
//保存已注册的用户数据
User[] users = new User[3];
int cardNo = 4;//卡号
int size = 3;//数组中用户下标
//初始方法(如果存在一些程序起始时必须要执行的代码,则写入初始化方法initial中)
public Bank() {
User user = new User();
user.setCardNo(1);
user.setIdentity("131000199811111234");
user.setUserName("Ziph");
user.setPassWord("12345678");
user.setPhone("12345670000");
user.setBalance(1000.00);
users[0] = user;
users[1] = new User();
users[1].setCardNo(2);
users[1].setIdentity("131000111111114567");
users[1].setUserName("小王");
users[1].setPassWord("12345678");
users[1].setPhone("12345670001");
users[1].setBalance(2000.00);
users[2] = new User(3, "131000199811115678"
, "小明", "12345678"
, "12345670002", 3000.00);
}
//登录
public void login() {
System.out.print("请输入卡号:");
int no = input.nextInt();
System.out.print("请输入密码(8~16位):");
String pwd = input.next();
User check = loginCheck(no, pwd);
if (check != null) {
this.showMenu(check);
} else {
System.out.println("用户名或密码错误!请重新输入!");
this.login();
}
}
//开户
public void register() {
System.out.print("请输入姓名:");
String userName = input.next();
String identity;
do {
System.out.print("请输入身份证号码:");
identity = input.next();
} while (identity.length() != 18);
String phone;
do {
System.out.print("请输入预存手机号码:");
phone = input.next();
} while (phone.length() != 11);
String passWord;
do {
System.out.print("请输入密码:");
passWord = input.next();
} while (passWord.length() < 8 || passWord.length() > 16);//密码8~16位
double money;
do {
System.out.print("请输入预存金额(大于等于10元):");
money = input.nextInt();
} while (money < 10);
User user = new User();
user.setCardNo(cardNo);
user.setUserName(userName);
user.setIdentity(identity);
user.setPhone(phone);
user.setPassWord(passWord);
user.setBalance(money);
System.out.println("开户成功!您的卡号为:" + cardNo);
cardNo++;
//将该对象存储到users数组中
//扩容判断
if (size > (users.length - 1)) {
User[] newUsers = Arrays.copyOf(users, size + 1);
users = newUsers;
users[size] = user;
}
size++;
}
//登录验证
public User loginCheck(int no, String pwd) {
for (int i = 0; i < size; i++) {
//验证卡号、密码
if (users[i] != null) {//非空判断
if ((no == users[i].getCardNo() && pwd.equals(users[i].getPassWord()))) {
return users[i];
}
}
}
return null;
}
//转账验证
public User transferCheck(int no) {
for (int i = 0; i < users.length; i++) {
//校验卡号
if (users[i] != null) {
if (no == users[i].getCardNo()) {
return users[i];
}
}
}
return null;
}
//欢迎页面菜单
public void welcomeMenu() {
System.out.println("-------欢迎使用中国建设银行ATM自助服务-------");
System.out.println("--- 1.登录 2.开户 0.退出 ---");
System.out.println("------------------------------------------");
System.out.print("请输入操作编码:");
int choice = input.nextInt();
switch (choice) {
case 1:
this.login();
break;
case 2:
this.register();
this.welcomeMenu();
break;
case 0:
exit();
default:
System.out.println("输入有误!请重新输入!");
}
}
//退出
public void exit() {
System.exit(0);
}
//显示菜单
public void showMenu(User user) {
int choice;
do {
System.out.println("-------------------------欢迎使用中国建设银行ATM自助服务-------------------------");
System.out.println("1.存款 2.取款 3.转账 4.查询余额 5.修改密码 6.修改预留手机号 7.注销账户 0.退出");
System.out.println("------------------------------------------------------------------------------");
System.out.print("请输入操作编码:");
choice = input.nextInt();
switch (choice) {
case 1:
this.deposit(user);
break;
case 2:
this.withdraw(user);
break;
case 3:
this.transfer(user);
break;
case 4:
this.inquire(user);
break;
case 5:
this.changePwd(user);
break;
case 6:
this.changePhone(user);
break;
case 7:
this.cancel(user);
this.welcomeMenu();
break;
case 0:
System.out.println("谢谢使用!");
//结束该方法,执行该方法以下的语句
this.welcomeMenu();
default:
System.out.println("输入有误!请重新输入!");
}
} while (true);
}
//取款
public void withdraw(User user) {
System.out.print("请输入取款金额:");
double money = input.nextDouble();
if (money < users[0].getBalance()) {
user.setBalance(user.getBalance() - money);
System.out.println("取款成功!当前余额为:" + user.getBalance() + "元!");
} else {
System.out.println("余额不足!");
}
}
//存款
public void deposit(User user) {
System.out.print("请输入存款金额:");
double money = input.nextDouble();
user.setBalance(user.getBalance() + money);
System.out.println("存款成功!");
}
//转账
public void transfer(User user) {
System.out.print("请输入卡号:");
int no = input.nextInt();
User check = transferCheck(no);
//对卡号校验
if (check != null) {
System.out.print("请输入转账金额:");
Double money = input.nextDouble();
if (user.getBalance() > money) {
user.setBalance(user.getBalance() - money);
for (int i = 0; i < size; i++) {
if (users[i].getCardNo() == no) {
users[i].setBalance(users[i].getBalance() + money);
}
}
System.out.println("转账成功!");
} else {
System.out.println("余额不足!");
}
} else {
System.out.println("输入的卡号有误!");
}
}
//查询余额
public void inquire(User user) {
System.out.println("账户余额为:" + user.getBalance() + "元!");
}
//修改密码
public void changePwd(User user) {
String newPwd1;
do {
System.out.print("请输入8~16位新密码:");
newPwd1 = input.next();
} while (newPwd1.length() < 8 || newPwd1.length() > 16);
System.out.print("请再次输入新密码:");
String newPwd2 = input.next();
if (newPwd1.equals(newPwd2)) {
user.setPassWord(newPwd2);
System.out.println("修改成功!");
} else {
System.out.println("两次密码输入不同!");
}
}
//修改预留手机号
public void changePhone(User user) {
System.out.print("请输入正确的原预留手机号:");
String oldPhone = input.next();
if (oldPhone.equals(user.getPhone())) {
String newPhone;
do {
System.out.print("请输入正确的新手机号:");
newPhone = input.next();
} while (newPhone.length() != 11);
user.setPhone(newPhone);
System.out.println("预留手机号修改成功!");
} else {
System.out.println("原预留手机号不正确!");
}
}
//注销账户
public void cancel(User user) {
int index = size + 1;
for (int i = 0; i < size; i++) {
// size不需要非空判断
// if (users[i] != null) {
if (users[i] == user) {
index = i;
break;
}
// }
}
//移动该元素之后的每个元素
for (int i = index; i < size - 1; i++) {
users[i] = users[i + 1];
}
size--;
System.out.println("注销成功!");
}
}
TestBank(测试类)
//银行案例的测试类
public class TestBank {
public static void main(String[] args) {
Bank bank = new Bank();//创建了一家中国银行网点
bank.welcomeMenu();
}
}
执行结果:
注意:第一张执行结果证明登录、取款、存款和查询余额没有问题
第二张执行结果修改密码、修改预留手机号正确
第三张执行结果证明转账功能OK(退出账户是0,我注销是为了第四张执行结果看是否还有1卡用户)
第五张执行结果证实了注销账户有效(刚才修改了密码登录过没有问题,注销后没有了账户登录失败)
第六张执行结果那就是开户(输入的数值不符合实际,主要是为了证实控制号码的位数,请谅解!)
为了证实我自己的功能实现,只能贴了这么多图。看到最后的全是人才呀!哈哈。 不开玩笑了,谢谢大家!有错误请提出!!!请提出!
知识点持续更新…
有问题求留言回复!