用java實作一個ATM機系統(2.0版)
java實作銀行ATM自助取款機,實作功能:用戶登錄、余額查詢、存錢、取錢、轉賬、修改密碼、退出系統,
文章目錄
- 用java實作一個ATM機系統(2.0版)
- 設計思路
- 原始碼
設計思路
設計五個類包括測驗類:
1,ATM類也是主要的類,負責實作用戶一系列的操作;
2,Data類,作為ATM類的一個屬性,主要實作從java檔案user中獲取用戶全部資訊,并回傳要找的用戶,再將修改完之后的用戶資訊寫入檔案中,
這個類是ATM機與檔案之間的橋梁;
3,Bank類,有ATM機(has-a),歡迎用戶來使用ATM機;
4,User類,使用ATM機(use-a);
5,Demo類,測驗類,創建一個環境,讓類產生關系,
原始碼
需要注意java檔案user的位置,Data類要進行操作它,
package newBank;
import java.util.Scanner;
//ATM類
public class ATM {
//有一個類操作資料的類
private Data data = new Data();
//ATM機里的資料
private String userName;//用戶賬號且唯一
private String userPassword;//用戶密碼
private double userMoney;//用戶賬戶里的錢
private double money;//變數,存,取,轉賬的錢
private String user;//使用該臺ATM機的用戶全部資訊
//ATM界面
public void show(){
System.out.println("歡迎使用ATM機");
//使用登錄方法,輸入賬號和密碼
int number = login();
//如果登錄成功
if(number == 4)
working();//ATM機辦理業務
}
//登錄方法
private int login(){
int number = 3;//用戶輸入次數
while(number > 0) {
Scanner input = new Scanner(System.in);
System.out.println("請輸入賬號:");
//輸入賬號
String inUserName = input.nextLine();
//輸入密碼
System.out.println("請輸入密碼:");
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;//次數變為4
break;
}
}
number --;//次數減一
System.out.println("賬號或密碼輸入錯誤,,,");
System.out.println("您還有" + number + "次機會");
}
return number;//是否登錄成功
}
//功能界面
private void functionShow(){
System.out.println("**********************");
System.out.println("\t歡迎使用ATM");
System.out.println("1,賬戶余額查詢\n2,存錢\n3,取錢\n4,轉賬\n5,修改用戶密碼\n6,退出系統\n");
System.out.println("**********************");
}
//用戶要進行的操作
private void working(){
String index;//業務序號
do{
functionShow();//呼叫功能界面
System.out.println("請輸入要辦理的業務序號:");
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("您輸入有誤,請重新輸入,,,,");
}
}while(!index.equals("6"));
}
//是否繼續某項操作
private boolean isContinue(){
System.out.println("繼續辦理該項業務:請輸入Y/y");
System.out.println("回傳上一級:請輸入N/n");
Scanner input = new Scanner(System.in);
String str = input.nextLine();
if(str.equalsIgnoreCase("Y"))
return true;
else
return false;
}
//存錢,取錢,轉賬共用
private void howMuch(String str){
System.out.println("歡迎辦理"+ str +"業務,,,,,,");
System.out.println("請輸入金額(只能是整數且是100的倍數,最多為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;
}
//查詢實作
private void look(){
System.out.println("用戶余額為:" + userMoney);
try{
Thread.sleep(2000);
}catch(Exception e){
e.printStackTrace();
}
}
//存錢實作
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;
}
}
//取錢實作
private void getMoney(){
howMuch("取錢");
//如果取的錢正確且如果轉賬賬戶余額夠
if(money != 0 && isEnough()){
look();
System.out.println("請收好您的錢");
}
if(isContinue())
getMoney();
}
//轉賬實作
private void giveMoney(){
//只判斷用戶賬戶是否存在
Scanner input = new Scanner(System.in);
System.out.println("請輸入要轉賬賬號:");
//輸入賬號
String inUserName = input.nextLine();
String str = data.backUser(inUserName);
//如果該賬戶存在
if(!str.equals("null")) {
String antherUser = str;//獲取被轉賬賬戶所有資訊
String[] str1 = antherUser.split("\\*");//分割
Double x = Double.parseDouble(str1[2]);//獲取被轉賬賬戶余額
howMuch("轉賬");
//如果轉的錢正確且如果轉賬賬戶余額夠
if (money != 0 && isEnough()) {
x = x + money;
antherUser = changeUser(str1[0], str1[1], x);//改變被轉賬賬戶資訊
data.saveData(antherUser,false);//將用戶資訊傳給Data類保存被轉賬賬戶資訊
System.out.println("轉賬成功");
look();
}
}
else
System.out.println("被轉賬賬戶不存在,,,");
if(isContinue())
giveMoney();
}
//修改密碼實作
private void changePassword(){
System.out.println("請輸入新密碼:");
Scanner input = new Scanner(System.in);
userPassword = input.nextLine();
System.out.println("密碼修改成功!");
}
//辦完業務后修改用戶資訊
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;
//資料類是檔案和ATM機之間操作用戶資訊的橋梁
public class Data {
//Map儲存資料庫里所有用戶的全部資訊
Map<String,String> userData = new HashMap();
//回傳用戶的資訊
private String user;
//創建資料類加載所有用戶資訊
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;
}
//修改用戶資料并儲存在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)//判斷用戶是否操作結束
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機供給用戶使用
private ATM atm = new ATM();
//歡迎用戶使用
public void welcome(User user){
System.out.println("歡迎用戶來我行使用ATM機");
user.useATM(atm);
}
}
package newBank;
//用戶類
public class User {
//用戶使用ATM機辦理業務
public void useATM(ATM atm){
atm.show();
}
}
//java檔案當資料庫
李四*123*1000.0
張三*456*10000.0
王五*789*100000.0
package newBank;
//測驗類
public class Demo {
public static void main(String[] args){
//創建一個銀行
Bank bank = new Bank();
//創建一個用戶
User user = new User();
//銀行歡迎用戶
bank.welcome(user);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244266.html
標籤:java
上一篇:用java實作圖書管理系統。
