Java中國銀行系統ATM機自助實現登入、開戶、存款、取款、轉賬、查詢餘額、修改預留手機號、登出賬號等功能(Ziph)
@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 <= user.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卡使用者)
第五張執行結果證實了登出賬戶有效(剛才修改了密碼登入過沒有問題,登出後沒有了賬戶登入失敗)
第六張執行結果那就是開戶(輸入的數值不符合實際,主要是為了證實控制號碼的位數,請諒解!)
為了證實我自己的功能實現,只能貼了這麼多圖。看到最後的全是人才呀!哈哈。 不開玩笑了,謝謝大家!有錯誤請提出!!!請提出!
知識點持續更新…
有問題求留言回覆!
拜拜
相關文章
- win10怎麼登出賬戶登入_怎麼登出windows10賬戶登入Win10Windows
- oauth 實現手機號碼登入OAuth
- Ubuntu 開啟root賬號SSH登入Ubuntu
- Win10系統怎麼隱藏登入介面小號賬戶Win10
- web3.js 互動 geth 實現轉賬餘額查詢功能WebJS
- 賬號密碼登入介面密碼
- Web應用多賬號系統設計及微信掃碼登入實現Web
- elasticsearch加賬號密碼登入Elasticsearch密碼
- 銀行ATM取款機流程
- 查詢oracle中具有預設口令的賬戶Oracle
- 如何刪除win10本地管理員賬號 win10登出管理員賬戶Win10
- sql登入賬號密碼比對SQL密碼
- 安卓手機上設定139郵箱賬號安卓
- Git多賬號登陸Git
- 短影片多賬號管理系統,多平臺多賬號同步
- 讓Linux系統允許使用root賬號遠端登入Linux
- 微博根據手機號查詢
- Linux賬號空閒登出、sudo命令使用Linux
- 網賭提款客服說賬號異常登入不給取款怎麼處理?
- 微信小程式手機號登入微信小程式
- 查詢手機號碼是否支援攜號轉網的API介面API
- w10系統禁用賬戶後如何開機 w10電腦禁用賬戶後開機方法
- Git配置多個賬號免密登入Git
- 重置Win10系統後開機登入介面出現defaultuser0賬戶的解決方法Win10
- win10怎麼設定開機賬戶自動登入?Win10
- 加密的手機號,如何模糊查詢?加密
- 安全運維之:Linux系統賬戶和登入安全(轉)運維Linux
- 教你巧妙利用u盤儲存上網登入賬號密碼實現快速登入密碼
- win10系統登入Microsoft賬戶的方法Win10ROS
- Auth Session 退出他人正登入的賬號、passport 退出登入SessionPassport
- win10系統為什麼微軟賬號登陸一直顯示賬號密碼錯誤Win10微軟密碼
- win11跳過微軟賬號登入方法微軟
- 蘋果“手機釘子戶”出爐:iPhone 6s—蘋果企業賬號回收蘋果iPhone
- 百家號多賬號運營系統,多平臺運營自媒體賬號
- 黑莓手機將會停止售賣(蘋果開發者賬號回收)蘋果
- 蘋果手機使用技巧:App Store賬號怎麼更換?蘋果APP
- 使用remix實現給合約賬戶轉賬REM
- 蘋果(企業)開發者賬號原理、機制蘋果