溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

發(fā)布時(shí)間:2022-05-27 13:50:13 來(lái)源:億速云 閱讀:129 作者:iii 欄目:開發(fā)技術(shù)

這篇“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”文章吧。

用IO流操作txt文件作為數(shù)據(jù)庫(kù)模擬實(shí)現(xiàn)一個(gè)ATM業(yè)務(wù)操作系統(tǒng)---->網(wǎng)上銀行,實(shí)現(xiàn)登錄,查詢余額,存款,取款,轉(zhuǎn)賬,開戶,銷戶等業(yè)務(wù)功能

1.用戶類----->User:

package atm;

import java.io.Serializable;

public class User implements Serializable{
    
    //建議除了私有屬性  無(wú)參數(shù)有參數(shù)構(gòu)造方法  屬性對(duì)應(yīng)的get、set方法
    //建議類實(shí)現(xiàn)一個(gè)序列化接口 添加一個(gè)序列化版本號(hào)
    private static final long serialVersionUID = 1L;
    
    //只是為了記錄數(shù)據(jù)庫(kù)中的一行信息   賬號(hào) 密碼 余額
    private String aName;
    private String aPassword;
    private Float aSalary;
    public User() {}
    public User(String aName,String aPassword,Float aSalary) {
        this.aName = aName;
        this.aPassword = aPassword;
        this.aSalary = aSalary;
    }
    public String getaName() {
        return this.aName;
    }
    public void setaName(String newName) {
        this.aName = newName;
    }
    public String getaPassword() {
        return this.aPassword;
    }
    public void setaPassword(String newPassword) {
        this.aPassword = newPassword;
    }
    public Float getSalary() {
        return this.aSalary;
    }
    public void setSalary(Float newSalary) {
        this.aSalary = newSalary;
    }
}

2.操作IO的類------>FileLoadAndCommit:

package atm;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;

//操作文件
public class FileLoadAndCommit {
    
    //文件路徑
    private String pathName = null; 
    public FileLoadAndCommit(String pathName) {
        this.pathName = pathName;
    }
    
    //讀取文件裝入集合
    public HashMap<String,User> loadFile(){
        //臨時(shí)的存儲(chǔ)空間,將文件中讀取的數(shù)據(jù)存儲(chǔ)以便于修改
        HashMap<String,User> userBox = new HashMap<String,User>();
        //IO流讀取
        FileReader fr = null;
        BufferedReader br = null;
        try {
            fr = new FileReader(new File(pathName));
            br = new BufferedReader(fr);
            String code = br.readLine();//讀取一行
            //循環(huán)遍歷所有行   按"-"拆分一行的數(shù)據(jù),作為User存入集合  
            while(code != null) {
                String[] value = code.split("-");
                User user = new User(value[0],value[1],Float.parseFloat(value[2]));
                userBox.put(user.getaName(),user);
                code = br.readLine();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                //如果流管道存在,才關(guān)閉
                if(fr != null) {
                    fr.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if(br != null) {
                    br.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return userBox;
    }
    
    //將集合更新入文件
    public void commit(HashMap<String,User> userBox) {
        //IO流寫入
        FileWriter fw = null;
        BufferedWriter bw = null;
        try {
            fw = new FileWriter(new File(pathName));
            bw = new BufferedWriter(fw);
            
            //迭代集合內(nèi)所有賬戶名    按賬戶名找到對(duì)應(yīng)的User對(duì)象
            Iterator<String> names = userBox.keySet().iterator();
            while(names.hasNext()) {
                String name = names.next();
                User user = userBox.get(name);
                
                //用StringBuilder拼接字符串
                StringBuilder sBuilder = new StringBuilder();
                sBuilder.append(user.getaName());
                sBuilder.append("-");
                sBuilder.append(user.getaPassword());
                sBuilder.append("-");
                sBuilder.append(user.getSalary());
                bw.write(sBuilder.toString());//將拼好的一行數(shù)據(jù)寫入文件
                bw.flush();//刷新
                bw.newLine();//換行
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            //必須先關(guān)閉BufferedWriter再關(guān)閉FileWrite,否賊會(huì)拋異常java.io.IOException: Stream closed
            try {
                if(bw != null) {
                    bw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                if(fw != null) {
                    fw.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

3.負(fù)責(zé)讀寫的類----->AtmDao:

package atm;

import java.util.HashMap;

//持久化,負(fù)責(zé)讀寫數(shù)據(jù),緩存
public class AtmDao {
    private FileLoadAndCommit flac = new FileLoadAndCommit("D:\\test\\ATM\\testATM.txt");
    HashMap<String,User> userBox = flac.loadFile();
    //獲取一個(gè)User對(duì)象
    public User selectOne(String aName) {
        return userBox.get(aName);
    }
    //更新文件數(shù)據(jù)
    public void update(User user) {
        userBox.put(user.getaName(),user);
        flac.commit(userBox);
    }
    //刪除文件數(shù)據(jù)
    public void delete(User user) {
        userBox.remove(user.getaName(),user);
        flac.commit(userBox);
    }
}

4.負(fù)責(zé)業(yè)務(wù)邏輯的類------>ATMService:

package atm;

import java.util.HashMap;

//負(fù)責(zé)業(yè)務(wù)邏輯    判斷 比較 計(jì)算
public class ATMService {
    //登錄
    private AtmDao dao = new AtmDao();
    public String login(String aName,String aPassword) {
        User user = dao.selectOne(aName);
        if(user!=null) {
            if(aPassword.equals(user.getaPassword())) {
                return "登錄成功"; 
            }
        }
        return "用戶名或密碼錯(cuò)誤";
    }
    //查詢余額
    public Float inquiry(String aName) {
        User user = dao.selectOne(aName);
        return user.getSalary();
    }
    //存款
    public void addMoney(String aName,Float addMoney) {
        User user = dao.selectOne(aName);//獲取該用戶對(duì)象
        user.setSalary(user.getSalary()+addMoney);//用User的set方法修改用戶金額
        dao.update(user);//更新文件數(shù)據(jù)
        System.out.println("存款成功\n");
    }
    //取款
    public void getMoney(String aName,Float getMoney) {
        User user  = dao.selectOne(aName);//獲取該用戶對(duì)象
        if(getMoney <= user.getSalary()) {//如果要取出的錢大于余額就不能取了
            user.setSalary(user.getSalary()-getMoney);
            dao.update(user);
            System.out.println("取款成功\n");
        }else {
            System.out.println("對(duì)不起,您的余額不足\n");
        }
    }
    //轉(zhuǎn)賬
    public void transferMoney(String outName,String inName,Float transferMoney) {
        User outUser = dao.selectOne(outName);//轉(zhuǎn)出用戶
        User inUser = dao.selectOne(inName);//轉(zhuǎn)入用戶
        if(inUser!=null) {//轉(zhuǎn)入用戶存在
            if(outUser!=inUser) {//轉(zhuǎn)出和轉(zhuǎn)入用戶不能是同一個(gè)用戶
                if(transferMoney <= outUser.getSalary()) {//轉(zhuǎn)出金額大于余額就不能轉(zhuǎn)了
                    outUser.setSalary(outUser.getSalary()-transferMoney);//修改轉(zhuǎn)出用戶余額
                    inUser.setSalary(inUser.getSalary()+transferMoney);//修改轉(zhuǎn)入用戶余額
                    //更新文件數(shù)據(jù)
                    dao.update(outUser);
                    dao.update(inUser);
                    System.out.println("轉(zhuǎn)賬成功\n");
                }else {
                    System.out.println("對(duì)不起"+outName+",您的余額不足\n");
                }
            }else {
                System.out.println("對(duì)不起,不能給自己轉(zhuǎn)賬,您可以試試使用存款業(yè)務(wù)\n");
            }
        }else {
            System.out.println("對(duì)不起,您輸入的用戶不存在\n");
        }
    }
    //開戶
    public User creatUser(String aName,String aPassword,Float aSalary) {
        User user = new User(aName,aPassword,aSalary);
        dao.update(user);//更新文件數(shù)據(jù)
        System.out.println("用戶"+aName+",創(chuàng)建成功");
        return user;
    }
    //銷戶
    public void deleteUser(String aName) {
        User user = dao.selectOne(aName);//獲取名為aName的用戶
        if(user != null) {//判斷該用戶是否在文件數(shù)據(jù)內(nèi)存在
            dao.delete(user);
            System.out.println("用戶"+aName+",刪除成功");
        }else {
            System.out.println("要銷毀的賬戶不存在");
        }
    }
}

5.測(cè)試類----->TestMain:

package atm;

import java.util.Scanner;

public class TestMain {
    public static void main(String[] args) {
        ATMService atmService = new ATMService();//獲取執(zhí)行業(yè)務(wù)的方法
        Scanner input = new Scanner(System.in);
        System.out.println("歡迎進(jìn)入ATM機(jī)系統(tǒng)");
        System.out.println("請(qǐng)選擇要操作的業(yè)務(wù):\n1.用戶登錄\n2.開戶\n3.按任意鍵退出");
        String choice = input.next();
        if(choice.equals("1")) {
            System.out.println("請(qǐng)輸入賬戶名");
            String name = input.next();
            System.out.println("請(qǐng)輸入密碼");
            String password = input.next();
            String afterLogin = atmService.login(name,password);//判斷輸入的賬戶名密碼是否正確
            if(afterLogin.equals("登錄成功")) {//if正確則登錄成功
                System.out.println("登錄成功!\n");
                //使用while循環(huán)反復(fù)進(jìn)行switch執(zhí)行操作業(yè)務(wù)
                while(true) {
                    System.out.println("請(qǐng)選擇服務(wù)項(xiàng)目:");
                    System.out.println("1.查詢\n2.存款\n3.取款\n4.轉(zhuǎn)賬\n5.銷戶\n(按q退出系統(tǒng))");
                    String option = input.next();
                    switch (option) {
                    case "1":
                        //查詢
                        Float money = atmService.inquiry(name);
                        System.out.println("尊敬的客戶,您的余額為"+money+"元\n");
                        break;
                    case "2":
                        //存款
                        System.out.println("請(qǐng)輸入存款金額");
                        Float addMoney = input.nextFloat();
                        atmService.addMoney(name,addMoney);
                        break;
                    case "3":
                        //取款
                        System.out.println("請(qǐng)輸入取款金額");
                        Float getMoney = input.nextFloat();
                        atmService.getMoney(name,getMoney);
                        break;
                    case "4":
                        //轉(zhuǎn)賬
                        System.out.println("請(qǐng)輸入轉(zhuǎn)賬用戶ID:");
                        String id = input.next();
                        System.out.println("請(qǐng)輸入轉(zhuǎn)賬金額:");
                        Float transferMoney = input.nextFloat();
                        atmService.transferMoney(name,id,transferMoney);
                        break;
                    case"5":
                        //銷戶
                        System.out.println("您確定要銷毀當(dāng)前賬戶嗎?賬戶內(nèi)所有余額都會(huì)消失\nYes/No\n");
                        String decision = input.next();
                        if(decision.equalsIgnoreCase("yes")) {
                            atmService.deleteUser(name);//刪除當(dāng)前user數(shù)據(jù)
                        }else if(decision.equalsIgnoreCase("no")){
                             break;
                        }
                        break;
                    case "q":
                        System.out.println("已退出ATM機(jī)系統(tǒng),感謝您的使用!!!");
                        System.exit(0);//退出程序
                        break;
                    default:
                        System.out.println("請(qǐng)輸入正確的指令\n");
                        break;
                    }
                }
            }else {
                System.out.println(afterLogin);
            }
        }else if(choice.equals("2")){
            //開戶
            System.out.println("請(qǐng)?jiān)O(shè)置您的用戶名");
            String newUserName = input.next();
            System.out.println("請(qǐng)?jiān)O(shè)置您的密碼");
            String newPassword = input.next();
            User newUser = atmService.creatUser(newUserName, newPassword, 0.0F);
            System.out.println("\n初始余額為"+newUser.getSalary()+"元");
        }else {
            System.out.println("已退出ATM機(jī)系統(tǒng),感謝您的使用!!!");
        }
    }
}

部分運(yùn)行結(jié)果:

1.賬戶登錄

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

2.查詢

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

3.存款

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

4.退出

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

作為數(shù)據(jù)庫(kù)的txt文件:

Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)

以上就是關(guān)于“Java如何實(shí)現(xiàn)ATM機(jī)操作系統(tǒng)”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI