欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)ATM機(jī)系統(tǒng)(2.0版)

 更新時(shí)間:2022年05月27日 11:33:16   作者:點(diǎn)丶錯(cuò)了。。  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)ATM機(jī)系統(tǒng)2.0版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

java實(shí)現(xiàn)銀行ATM自助取款機(jī),實(shí)現(xiàn)功能:用戶登錄、余額查詢、存錢、取錢、轉(zhuǎn)賬、修改密碼、退出系統(tǒng)。

用java實(shí)現(xiàn)一個(gè)ATM機(jī)系統(tǒng)(2.0版)

設(shè)計(jì)思路

設(shè)計(jì)五個(gè)類包括測(cè)試類:

1、ATM類也是主要的類,負(fù)責(zé)實(shí)現(xiàn)用戶一系列的操作;
2、Data類,作為ATM類的一個(gè)屬性,主要實(shí)現(xiàn)從java文件user中獲取用戶全部信息,并返回要找的用戶,再將修改完之后的用戶信息寫入文件中。

這個(gè)類是ATM機(jī)與文件之間的橋梁;

3、Bank類,有ATM機(jī)(has-a),歡迎用戶來使用ATM機(jī);
4、User類,使用ATM機(jī)(use-a);
5、Demo類,測(cè)試類,創(chuàng)建一個(gè)環(huán)境,讓類產(chǎn)生關(guān)系。

源碼

需要注意java文件user的位置,Data類要進(jìn)行操作它。

package newBank;

import java.util.Scanner;

//ATM類
public class ATM {
 //有一個(gè)類操作數(shù)據(jù)的類
 private Data data = new Data();
 //ATM機(jī)里的數(shù)據(jù)
 private String userName;//用戶賬號(hào)且唯一
 private String userPassword;//用戶密碼
 private double userMoney;//用戶賬戶里的錢
 private double money;//變量,存,取,轉(zhuǎn)賬的錢
 private String user;//使用該臺(tái)ATM機(jī)的用戶全部信息

 //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;//用戶輸入次數(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);
   //判斷賬戶是否存在
   if(!x.equals("null")){
    user = x;//獲取用戶所有信息
    String[] str = user.split("\\*");//將用戶信息分割
    userName = str[0];//用戶名
    userPassword = str[1];//用戶密碼
    userMoney = Double.parseDouble(str[2]);//用戶余額
    //密碼正確
    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,賬戶余額查詢\n2,存錢\n3,取錢\n4,轉(zhuǎn)賬\n5,修改用戶密碼\n6,退出系統(tǒng)\n");
  System.out.println("**********************");
 }

 //用戶要進(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);//用戶退出后保存用戶信息
     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;
 }

 //存錢,取錢,轉(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;
 }

 //查詢實(shí)現(xiàn)
 private void look(){
  System.out.println("用戶余額為:" + userMoney);
  try{
   Thread.sleep(2000);
  }catch(Exception e){
   e.printStackTrace();
  }
 }

 //存錢實(shí)現(xiàn)
 private void saveMoney(){
  howMuch("存錢");
  if(money != 0) {//如果存的錢正確
   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;
  }
 }

 //取錢實(shí)現(xiàn)
 private void getMoney(){
  howMuch("取錢");
  //如果取的錢正確且如果轉(zhuǎn)賬賬戶余額夠
  if(money != 0 && isEnough()){
   look();
   System.out.println("請(qǐng)收好您的錢");
  }
  if(isContinue())
   getMoney();
 }

 //轉(zhuǎn)賬實(shí)現(xiàn)
 private void giveMoney(){
  //只判斷用戶賬戶是否存在
  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);
  //如果該賬戶存在
  if(!str.equals("null")) {
   String antherUser = str;//獲取被轉(zhuǎn)賬賬戶所有信息
   String[] str1 = antherUser.split("\\*");//分割
   Double x = Double.parseDouble(str1[2]);//獲取被轉(zhuǎn)賬賬戶余額
   howMuch("轉(zhuǎn)賬");
   //如果轉(zhuǎn)的錢正確且如果轉(zhuǎn)賬賬戶余額夠
   if (money != 0 && isEnough()) {
    x = x + money;
    antherUser = changeUser(str1[0], str1[1], x);//改變被轉(zhuǎn)賬賬戶信息
    data.saveData(antherUser,false);//將用戶信息傳給Data類保存被轉(zhuǎn)賬賬戶信息
    System.out.println("轉(zhuǎn)賬成功");
    look();
   }
  }
  else
   System.out.println("被轉(zhuǎn)賬賬戶不存在。。。");
  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ù)后修改用戶信息
 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ù)類是文件和ATM機(jī)之間操作用戶信息的橋梁
public class Data {
 //Map儲(chǔ)存數(shù)據(jù)庫里所有用戶的全部信息
 Map<String,String> userData = new HashMap();
 //返回用戶的信息
 private String user;

 //創(chuàng)建數(shù)據(jù)類加載所有用戶信息
 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();
    }
   }
  }
 }

 //告訴用戶名,如果找到返回該用戶所有信息,沒找到返回null
 public String backUser(String userName){
  String str = "null";
  if(userData.containsKey(userName))
   str = userName + "*" + userData.get(userName);
  user = str;
  return user;
 }
 //修改用戶數(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)//判斷用戶是否操作結(jié)束
   changeUser();
 }

 //用戶操作完,將userData里所有的用戶再寫入文件里
 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;

//銀行類
public class Bank {
 //銀行有ATM機(jī)供給用戶使用
 private ATM atm = new ATM();
 //歡迎用戶使用
 public void welcome(User user){
  System.out.println("歡迎用戶來我行使用ATM機(jī)");
  user.useATM(atm);
 }

}
package newBank;

//用戶類
public class User {
 //用戶使用ATM機(jī)辦理業(yè)務(wù)
 public void useATM(ATM atm){
  atm.show();
 }
}
//java文件當(dāng)數(shù)據(jù)庫
李四*123*1000.0
張三*456*10000.0
王五*789*100000.0
package newBank;

//測(cè)試類
public class Demo {

 public static void main(String[] args){
  //創(chuàng)建一個(gè)銀行
  Bank bank = new Bank();
  //創(chuàng)建一個(gè)用戶
  User user = new User();
  //銀行歡迎用戶
  bank.welcome(user);

 }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改

    SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改

    本文主要介紹了SpringBoot配置MyBatis-Plus實(shí)現(xiàn)增刪查改,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • java獲取文件大小的幾種方法

    java獲取文件大小的幾種方法

    這篇文章主要介紹了java獲取文件大小的幾種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • 詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐

    詳解Spring MVC/Boot 統(tǒng)一異常處理最佳實(shí)踐

    在 Web 開發(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ù)緩存的實(shí)例代碼

    這篇文章主要介紹了spring整合redis實(shí)現(xiàn)數(shù)據(jù)緩存,需要的朋友可以參考下
    2018-09-09
  • java多線程編程制作電子時(shí)鐘

    java多線程編程制作電子時(shí)鐘

    本文給大家匯總了幾個(gè)使用java多線程編程實(shí)現(xiàn)的電子時(shí)鐘的代碼,思路非常的巧妙,也都很實(shí)用,有需要的小伙伴可以參考下。
    2015-11-11
  • 聊聊java變量的初始化之后的默認(rèn)值

    聊聊java變量的初始化之后的默認(rèn)值

    這篇文章主要介紹了聊聊java變量的初始化之后的默認(rèn)值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot中的多個(gè)事務(wù)管理詳解

    SpringBoot中的多個(gè)事務(wù)管理詳解

    這篇文章主要介紹了SpringBoot中的多個(gè)事務(wù)管理詳解,事務(wù)管理是一種組織和協(xié)調(diào)各種活動(dòng)和資源的方法,以實(shí)現(xiàn)特定目標(biāo),它涉及規(guī)劃、執(zhí)行和監(jiān)控各種任務(wù),以確保項(xiàng)目或組織的順利運(yùn)行,需要的朋友可以參考下
    2023-10-10
  • Java8 接口默認(rèn)方法和靜態(tài)方法

    Java8 接口默認(rèn)方法和靜態(tài)方法

    這篇文章主要介紹了Java8 接口默認(rèn)方法和靜態(tài)方法,在默認(rèn)接口中使用關(guān)鍵字default聲明并提供具體實(shí)現(xiàn),而且該方法不需要添加public關(guān)鍵字就可以公開調(diào)用,甚至你可以在其實(shí)現(xiàn)類中覆寫,帶著對(duì)默認(rèn)接口的方法和小編一起探索下面文章內(nèi)容的靜態(tài)方法吧
    2021-10-10
  • Java微信公眾平臺(tái)之獲取地理位置

    Java微信公眾平臺(tái)之獲取地理位置

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)之獲取地理位置的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Spring 開發(fā)之組件賦值的實(shí)現(xiàn)方法

    Spring 開發(fā)之組件賦值的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring 開發(fā)之組件賦值的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論