java實(shí)現(xiàn)ATM機(jī)系統(tǒng)(2.0版)
java實(shí)現(xiàn)銀行ATM自助取款機(jī),實(shí)現(xiàn)功能:用戶(hù)登錄、余額查詢(xún)、存錢(qián)、取錢(qián)、轉(zhuǎn)賬、修改密碼、退出系統(tǒng)。
用java實(shí)現(xiàn)一個(gè)ATM機(jī)系統(tǒng)(2.0版)
設(shè)計(jì)思路
設(shè)計(jì)五個(gè)類(lèi)包括測(cè)試類(lèi):
1、ATM類(lèi)也是主要的類(lèi),負(fù)責(zé)實(shí)現(xiàn)用戶(hù)一系列的操作;
2、Data類(lèi),作為ATM類(lèi)的一個(gè)屬性,主要實(shí)現(xiàn)從java文件user中獲取用戶(hù)全部信息,并返回要找的用戶(hù),再將修改完之后的用戶(hù)信息寫(xiě)入文件中。
這個(gè)類(lèi)是ATM機(jī)與文件之間的橋梁;
3、Bank類(lèi),有ATM機(jī)(has-a),歡迎用戶(hù)來(lái)使用ATM機(jī);
4、User類(lèi),使用ATM機(jī)(use-a);
5、Demo類(lèi),測(cè)試類(lèi),創(chuàng)建一個(gè)環(huán)境,讓類(lèi)產(chǎn)生關(guān)系。
源碼
需要注意java文件user的位置,Data類(lèi)要進(jìn)行操作它。
package newBank;
import java.util.Scanner;
//ATM類(lèi)
public class ATM {
//有一個(gè)類(lèi)操作數(shù)據(jù)的類(lèi)
private Data data = new Data();
//ATM機(jī)里的數(shù)據(jù)
private String userName;//用戶(hù)賬號(hào)且唯一
private String userPassword;//用戶(hù)密碼
private double userMoney;//用戶(hù)賬戶(hù)里的錢(qián)
private double money;//變量,存,取,轉(zhuǎn)賬的錢(qián)
private String user;//使用該臺(tái)ATM機(jī)的用戶(hù)全部信息
//ATM界面
public void show(){
System.out.println("歡迎使用ATM機(jī)");
//使用登錄方法,輸入賬號(hào)和密碼
int number = login();
//如果登錄成功
if(number == 4)
working();//ATM機(jī)辦理業(yè)務(wù)
}
//登錄方法
private int login(){
int number = 3;//用戶(hù)輸入次數(shù)
while(number > 0) {
Scanner input = new Scanner(System.in);
System.out.println("請(qǐng)輸入賬號(hào):");
//輸入賬號(hào)
String inUserName = input.nextLine();
//輸入密碼
System.out.println("請(qǐng)輸入密碼:");
String inUserPassword = input.nextLine();
String x = data.backUser(inUserName);
//判斷賬戶(hù)是否存在
if(!x.equals("null")){
user = x;//獲取用戶(hù)所有信息
String[] str = user.split("\\*");//將用戶(hù)信息分割
userName = str[0];//用戶(hù)名
userPassword = str[1];//用戶(hù)密碼
userMoney = Double.parseDouble(str[2]);//用戶(hù)余額
//密碼正確
if(userPassword.equals(inUserPassword)){
System.out.println("登錄成功");
number = 4;//次數(shù)變?yōu)?
break;
}
}
number --;//次數(shù)減一
System.out.println("賬號(hào)或密碼輸入錯(cuò)誤。。。");
System.out.println("您還有" + number + "次機(jī)會(huì)");
}
return number;//是否登錄成功
}
//功能界面
private void functionShow(){
System.out.println("**********************");
System.out.println("\t歡迎使用ATM");
System.out.println("1,賬戶(hù)余額查詢(xún)\n2,存錢(qián)\n3,取錢(qián)\n4,轉(zhuǎn)賬\n5,修改用戶(hù)密碼\n6,退出系統(tǒng)\n");
System.out.println("**********************");
}
//用戶(hù)要進(jìn)行的操作
private void working(){
String index;//業(yè)務(wù)序號(hào)
do{
functionShow();//調(diào)用功能界面
System.out.println("請(qǐng)輸入要辦理的業(yè)務(wù)序號(hào):");
Scanner input = new Scanner(System.in);
index = input.nextLine();
switch(index){
case "1":
look();
break;
case "2":
saveMoney();
break;
case "3":
getMoney();
break;
case "4":
giveMoney();
break;
case "5":
changePassword();
break;
case "6":
System.out.println("歡迎下次光臨!");
user = changeUser(userName,userPassword,userMoney);
data.saveData(user,true);//用戶(hù)退出后保存用戶(hù)信息
break;
default:
System.out.println("您輸入有誤,請(qǐng)重新輸入。。。。");
}
}while(!index.equals("6"));
}
//是否繼續(xù)某項(xiàng)操作
private boolean isContinue(){
System.out.println("繼續(xù)辦理該項(xiàng)業(yè)務(wù):請(qǐng)輸入Y/y");
System.out.println("返回上一級(jí):請(qǐng)輸入N/n");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
if(str.equalsIgnoreCase("Y"))
return true;
else
return false;
}
//存錢(qián),取錢(qián),轉(zhuǎn)賬共用
private void howMuch(String str){
System.out.println("歡迎辦理"+ str +"業(yè)務(wù)。。。。。。");
System.out.println("請(qǐng)輸入金額(只能是整數(shù)且是100的倍數(shù),最多為10000):");
Scanner input = new Scanner(System.in);
Double money = input.nextDouble();
if(money%10 != 0) {
System.out.println("您輸入有誤!");
this.money = 0;
}
else
this.money = money;
}
//查詢(xún)實(shí)現(xiàn)
private void look(){
System.out.println("用戶(hù)余額為:" + userMoney);
try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
}
//存錢(qián)實(shí)現(xiàn)
private void saveMoney(){
howMuch("存錢(qián)");
if(money != 0) {//如果存的錢(qián)正確
userMoney = userMoney + money;//存上
System.out.println("已存入");
look();//顯示余額
}
if(isContinue())
saveMoney();
}
//判斷余額是否充足
private boolean isEnough(){
if(money <= userMoney){
userMoney = userMoney - money;
return true;
}
else{
System.out.println("您的余額不足!");
return false;
}
}
//取錢(qián)實(shí)現(xiàn)
private void getMoney(){
howMuch("取錢(qián)");
//如果取的錢(qián)正確且如果轉(zhuǎn)賬賬戶(hù)余額夠
if(money != 0 && isEnough()){
look();
System.out.println("請(qǐng)收好您的錢(qián)");
}
if(isContinue())
getMoney();
}
//轉(zhuǎn)賬實(shí)現(xiàn)
private void giveMoney(){
//只判斷用戶(hù)賬戶(hù)是否存在
Scanner input = new Scanner(System.in);
System.out.println("請(qǐng)輸入要轉(zhuǎn)賬賬號(hào):");
//輸入賬號(hào)
String inUserName = input.nextLine();
String str = data.backUser(inUserName);
//如果該賬戶(hù)存在
if(!str.equals("null")) {
String antherUser = str;//獲取被轉(zhuǎn)賬賬戶(hù)所有信息
String[] str1 = antherUser.split("\\*");//分割
Double x = Double.parseDouble(str1[2]);//獲取被轉(zhuǎn)賬賬戶(hù)余額
howMuch("轉(zhuǎn)賬");
//如果轉(zhuǎn)的錢(qián)正確且如果轉(zhuǎn)賬賬戶(hù)余額夠
if (money != 0 && isEnough()) {
x = x + money;
antherUser = changeUser(str1[0], str1[1], x);//改變被轉(zhuǎn)賬賬戶(hù)信息
data.saveData(antherUser,false);//將用戶(hù)信息傳給Data類(lèi)保存被轉(zhuǎn)賬賬戶(hù)信息
System.out.println("轉(zhuǎn)賬成功");
look();
}
}
else
System.out.println("被轉(zhuǎn)賬賬戶(hù)不存在。。。");
if(isContinue())
giveMoney();
}
//修改密碼實(shí)現(xiàn)
private void changePassword(){
System.out.println("請(qǐng)輸入新密碼:");
Scanner input = new Scanner(System.in);
userPassword = input.nextLine();
System.out.println("密碼修改成功!");
}
//辦完業(yè)務(wù)后修改用戶(hù)信息
private String changeUser(String n,String w,Double d){
String str = n + "*" + w + "*" + d;
return str;
}
}
package newBank;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
//數(shù)據(jù)類(lèi)是文件和ATM機(jī)之間操作用戶(hù)信息的橋梁
public class Data {
//Map儲(chǔ)存數(shù)據(jù)庫(kù)里所有用戶(hù)的全部信息
Map<String,String> userData = new HashMap();
//返回用戶(hù)的信息
private String user;
//創(chuàng)建數(shù)據(jù)類(lèi)加載所有用戶(hù)信息
public Data(){
getUsers();
}
private void getUsers(){
String str;
String[] string;
File file = new File("src\\newBank\\user");
FileReader fileReader = null;
BufferedReader bufferedReader = null;
try{
fileReader = new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
while((str = bufferedReader.readLine())!=null){
string = str.split("\\*",2);
userData.put(string[0],string[1]);
}
}catch(Exception e){
e.printStackTrace();
if((fileReader!=null)&&(bufferedReader!=null)){
try {
bufferedReader.close();
fileReader.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
//告訴用戶(hù)名,如果找到返回該用戶(hù)所有信息,沒(méi)找到返回null
public String backUser(String userName){
String str = "null";
if(userData.containsKey(userName))
str = userName + "*" + userData.get(userName);
user = str;
return user;
}
//修改用戶(hù)數(shù)據(jù)并儲(chǔ)存在userData圖里
public void saveData(String user,boolean aBoolean){
String[] string = user.split("\\*",2);
userData.remove(string[0]);
userData.put(string[0],string[1]);
if(aBoolean)//判斷用戶(hù)是否操作結(jié)束
changeUser();
}
//用戶(hù)操作完,將userData里所有的用戶(hù)再寫(xiě)入文件里
private void changeUser(){
String str,string="";
Set<String> keys = userData.keySet();
for(String key : keys){
str = key + "*" + userData.get(key);
string = string + str + "\n";
}
File file = new File("src\\newBank\\user");
FileWriter out = null;
try {
out = new FileWriter(file);
out.write(string);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package newBank;
//銀行類(lèi)
public class Bank {
//銀行有ATM機(jī)供給用戶(hù)使用
private ATM atm = new ATM();
//歡迎用戶(hù)使用
public void welcome(User user){
System.out.println("歡迎用戶(hù)來(lái)我行使用ATM機(jī)");
user.useATM(atm);
}
}
package newBank;
//用戶(hù)類(lèi)
public class User {
//用戶(hù)使用ATM機(jī)辦理業(yè)務(wù)
public void useATM(ATM atm){
atm.show();
}
}//java文件當(dāng)數(shù)據(jù)庫(kù) 李四*123*1000.0 張三*456*10000.0 王五*789*100000.0
package newBank;
//測(cè)試類(lèi)
public class Demo {
public static void main(String[] args){
//創(chuàng)建一個(gè)銀行
Bank bank = new Bank();
//創(chuàng)建一個(gè)用戶(hù)
User user = new User();
//銀行歡迎用戶(hù)
bank.welcome(user);
}
}以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java實(shí)現(xiàn)銀行ATM管理系統(tǒng)
- Java實(shí)現(xiàn)基礎(chǔ)銀行ATM系統(tǒng)
- Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)
- Java簡(jiǎn)單實(shí)現(xiàn)銀行ATM系統(tǒng)
- 用Java實(shí)現(xiàn)簡(jiǎn)單ATM機(jī)功能
- java GUI實(shí)現(xiàn)ATM機(jī)系統(tǒng)(3.0版)
- Java模擬實(shí)現(xiàn)ATM機(jī)
- Java項(xiàng)目實(shí)現(xiàn)模擬ATM機(jī)
- Java使用嵌套循環(huán)模擬ATM機(jī)取款業(yè)務(wù)操作示例
- Java實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)
相關(guān)文章
SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改
本文主要介紹了SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐
在 Web 開(kāi)發(fā)中, 我們經(jīng)常會(huì)需要處理各種異常,這篇文章主要介紹了詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
spring整合redis實(shí)現(xiàn)數(shù)據(jù)緩存的實(shí)例代碼
這篇文章主要介紹了spring整合redis實(shí)現(xiàn)數(shù)據(jù)緩存,需要的朋友可以參考下2018-09-09
Spring 開(kāi)發(fā)之組件賦值的實(shí)現(xiàn)方法
這篇文章主要介紹了Spring 開(kāi)發(fā)之組件賦值的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

