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

Java實現(xiàn)ATM機操作系統(tǒng)

 更新時間:2022年05月27日 11:44:37   作者:宇宙無敵大帥比Tony哥  
這篇文章主要為大家詳細介紹了Java實現(xiàn)ATM機操作系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java實現(xiàn)ATM機操作系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

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

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

package atm;

import java.io.Serializable;

public class User implements Serializable{
?? ?
?? ?//建議除了私有屬性 ?無參數(shù)有參數(shù)構(gòu)造方法 ?屬性對應的get、set方法
? ? //建議類實現(xiàn)一個序列化接口 添加一個序列化版本號
?? ?private static final long serialVersionUID = 1L;
?? ?
?? ?//只是為了記錄數(shù)據(jù)庫中的一行信息 ? 賬號 密碼 余額
?? ?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ù)據(jù)存儲以便于修改
?? ??? ?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)所有賬戶名?? ?按賬戶名找到對應的User對象
?? ??? ??? ?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,否賊會拋異常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.負責讀寫的類----->AtmDao:

package atm;

import java.util.HashMap;

//持久化,負責讀寫數(shù)據(jù),緩存
public class AtmDao {
?? ?private FileLoadAndCommit flac = new FileLoadAndCommit("D:\\test\\ATM\\testATM.txt");
?? ?HashMap<String,User> userBox = flac.loadFile();
?? ?//獲取一個User對象
?? ?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.負責業(yè)務(wù)邏輯的類------>ATMService:

package atm;

import java.util.HashMap;

//負責業(yè)務(wù)邏輯?? ?判斷 比較 計算
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 "用戶名或密碼錯誤";
?? ?}
?? ?//查詢余額
?? ?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);//獲取該用戶對象
?? ??? ?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);//獲取該用戶對象
?? ??? ?if(getMoney <= user.getSalary()) {//如果要取出的錢大于余額就不能取了
?? ??? ??? ?user.setSalary(user.getSalary()-getMoney);
?? ??? ??? ?dao.update(user);
?? ??? ??? ?System.out.println("取款成功\n");
?? ??? ?}else {
?? ??? ??? ?System.out.println("對不起,您的余額不足\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)入用戶不能是同一個用戶
?? ??? ??? ??? ?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("對不起"+outName+",您的余額不足\n");
?? ??? ??? ??? ?}
?? ??? ??? ?}else {
?? ??? ??? ??? ?System.out.println("對不起,不能給自己轉(zhuǎn)賬,您可以試試使用存款業(yè)務(wù)\n");
?? ??? ??? ?}
?? ??? ?}else {
?? ??? ??? ?System.out.println("對不起,您輸入的用戶不存在\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.測試類----->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("歡迎進入ATM機系統(tǒng)");
?? ??? ?System.out.println("請選擇要操作的業(yè)務(wù):\n1.用戶登錄\n2.開戶\n3.按任意鍵退出");
?? ??? ?String choice = input.next();
?? ??? ?if(choice.equals("1")) {
?? ??? ??? ?System.out.println("請輸入賬戶名");
?? ??? ??? ?String name = input.next();
?? ??? ??? ?System.out.println("請輸入密碼");
?? ??? ??? ?String password = input.next();
?? ??? ??? ?String afterLogin = atmService.login(name,password);//判斷輸入的賬戶名密碼是否正確
?? ??? ??? ?if(afterLogin.equals("登錄成功")) {//if正確則登錄成功
?? ??? ??? ??? ?System.out.println("登錄成功!\n");
?? ??? ??? ??? ?//使用while循環(huán)反復進行switch執(zhí)行操作業(yè)務(wù)
?? ??? ??? ??? ?while(true) {
?? ??? ??? ??? ??? ?System.out.println("請選擇服務(wù)項目:");
?? ??? ??? ??? ??? ?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("請輸入存款金額");
?? ??? ??? ??? ??? ??? ?Float addMoney = input.nextFloat();
?? ??? ??? ??? ??? ??? ?atmService.addMoney(name,addMoney);
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case "3":
?? ??? ??? ??? ??? ??? ?//取款
?? ??? ??? ??? ??? ??? ?System.out.println("請輸入取款金額");
?? ??? ??? ??? ??? ??? ?Float getMoney = input.nextFloat();
?? ??? ??? ??? ??? ??? ?atmService.getMoney(name,getMoney);
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case "4":
?? ??? ??? ??? ??? ??? ?//轉(zhuǎn)賬
?? ??? ??? ??? ??? ??? ?System.out.println("請輸入轉(zhuǎn)賬用戶ID:");
?? ??? ??? ??? ??? ??? ?String id = input.next();
?? ??? ??? ??? ??? ??? ?System.out.println("請輸入轉(zhuǎn)賬金額:");
?? ??? ??? ??? ??? ??? ?Float transferMoney = input.nextFloat();
?? ??? ??? ??? ??? ??? ?atmService.transferMoney(name,id,transferMoney);
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case"5":
?? ??? ??? ??? ??? ??? ?//銷戶
?? ??? ??? ??? ??? ??? ?System.out.println("您確定要銷毀當前賬戶嗎?賬戶內(nèi)所有余額都會消失\nYes/No\n");
?? ??? ??? ??? ??? ??? ?String decision = input.next();
?? ??? ??? ??? ??? ??? ?if(decision.equalsIgnoreCase("yes")) {
?? ??? ??? ??? ??? ??? ??? ?atmService.deleteUser(name);//刪除當前user數(shù)據(jù)
?? ??? ??? ??? ??? ??? ?}else if(decision.equalsIgnoreCase("no")){
?? ??? ??? ??? ??? ??? ??? ? break;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?case "q":
?? ??? ??? ??? ??? ??? ?System.out.println("已退出ATM機系統(tǒng),感謝您的使用!!!");
?? ??? ??? ??? ??? ??? ?System.exit(0);//退出程序
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?default:
?? ??? ??? ??? ??? ??? ?System.out.println("請輸入正確的指令\n");
?? ??? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?}
?? ??? ??? ?}else {
?? ??? ??? ??? ?System.out.println(afterLogin);
?? ??? ??? ?}
?? ??? ?}else if(choice.equals("2")){
?? ??? ??? ?//開戶
?? ??? ??? ?System.out.println("請設(shè)置您的用戶名");
?? ??? ??? ?String newUserName = input.next();
?? ??? ??? ?System.out.println("請設(shè)置您的密碼");
?? ??? ??? ?String newPassword = input.next();
?? ??? ??? ?User newUser = atmService.creatUser(newUserName, newPassword, 0.0F);
?? ??? ??? ?System.out.println("\n初始余額為"+newUser.getSalary()+"元");
?? ??? ?}else {
?? ??? ??? ?System.out.println("已退出ATM機系統(tǒng),感謝您的使用!!!");
?? ??? ?}
?? ?}
}

部分運行結(jié)果:

1.賬戶登錄

2.查詢

3.存款

4.退出

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

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

相關(guān)文章

  • 詳細聊一聊java語言中的package和import機制

    詳細聊一聊java語言中的package和import機制

    這篇文章主要給大家介紹了關(guān)于java語言中package和import機制的相關(guān)資料,Java中的package是指將相關(guān)的類組織在一起的一種機制,它可以用來避免命名沖突,也可以方便地管理和維護代碼,需要的朋友可以參考下
    2024-01-01
  • SpringBoot整合Resilience4j使用詳解

    SpringBoot整合Resilience4j使用詳解

    在Java的微服務(wù)生態(tài)中,對于服務(wù)保護組件,像springcloud的Hystrix,springcloud?alibaba的Sentinel,以及當Hystrix停更之后官方推薦使用的Resilience4j,所以本文給大家介紹了SpringBoot整合Resilience4j的流程,需要的朋友可以參考下
    2024-03-03
  • Java進階:Struts多模塊的技巧

    Java進階:Struts多模塊的技巧

    Java進階:Struts多模塊的技巧...
    2006-12-12
  • Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法

    Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法

    這篇文章主要介紹了Jdk11使用HttpClient提交Http2請求的實現(xiàn)方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • java 二分法算法的實例

    java 二分法算法的實例

    這篇文章主要介紹了java 二分法算法的實例的相關(guān)資料,希望通過本文大家能夠掌握二分法,需要的朋友可以參考下
    2017-09-09
  • Netty分布式pipeline管道創(chuàng)建方法跟蹤解析

    Netty分布式pipeline管道創(chuàng)建方法跟蹤解析

    這篇文章主要為大家介紹了Netty分布式pipeline管道創(chuàng)建方法跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • 淺談JDK7和JDK8的區(qū)別在哪

    淺談JDK7和JDK8的區(qū)別在哪

    面試總是遇到這個問題,做一個小總結(jié),文中有非常詳細的介紹,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java通過自定義類加載器實現(xiàn)類隔離

    Java通過自定義類加載器實現(xiàn)類隔離

    類隔離是一種通過類加載器實現(xiàn)加載所需類的實現(xiàn)方式,使得不同版本類間隔離,避免了使用沖突問題。本文將通過自定義的類加載器實現(xiàn)類隔離,感興趣的可以了解一下
    2022-08-08
  • 設(shè)置session有效時間的三種方式

    設(shè)置session有效時間的三種方式

    這篇文章主要介紹了設(shè)置session有效時間的三種方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Java操作數(shù)據(jù)庫連接池案例講解

    Java操作數(shù)據(jù)庫連接池案例講解

    這篇文章主要介紹了Java操作數(shù)據(jù)庫連接池案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論