這段時間閑的沒事接了一個課程設計,具體就是學完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/