import java.util.*;import java.io.*;public classATM {static intnumber;static int usernum = 0;static boolean isAdmin = false;public static Scanner kbd = newScanner(System.in);public static void readLength() throwsIOException {
BufferedReader file= null;try{
file= new BufferedReader(new InputStreamReader(new FileInputStream("ATMUsers")));
String line= null;int count = 0;while ((line = file.readLine()) != null) count++;
number=count;
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{if (file != null) {try{
file.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}public static void readUsers(String[][] users) throwsIOException {
BufferedReader file= null;try{
file= new BufferedReader(new InputStreamReader(new FileInputStream("ATMUsers")));
String line= null;int count = 0;while ((line = file.readLine()) != null) {
String data=line;
String[] strArray= data.split(" ");
users[0][count] = strArray[0];
users[1][count] = strArray[1];
users[2][count] = strArray[2];
count++;
}
}catch(FileNotFoundException e) {
e.printStackTrace();
}catch(IOException e) {
e.printStackTrace();
}finally{if (file != null) {try{
file.close();
}catch(IOException e) {
e.printStackTrace();
}
}
}
}public staticString checkID(String acctNum, String pwd, String[][] users) {
String result= "错误!";for(int i = 0;i < number;i++) {if (acctNum.equals("000000") && pwd.equals("000000")) {
isAdmin= true;return "0";
}if (acctNum.equals(users[0][i]) && pwd.equals(users[1][i])) {
result= users[2][i];
usernum=i;
}
}returnresult;
}public static intmenu() {intmenuChoice;do{
System.out.print("\n请选择想要执行的操作:\n"
+ "**********************"
+ "\n* 一、余额\t二、存款 *\n"
+ "* *"
+ "\n* 三、取款\t四、退出 *\n"
+ "**********************\n");
menuChoice=kbd.nextInt();if (menuChoice < 1 || menuChoice > 4){
System.out.println("错误!");
}
}while (menuChoice < 1 || menuChoice > 4);returnmenuChoice;
}public static intadminMenu() {intmenuChoice;do{
System.out.print("\n请选择想要执行的操作:\n"
+ "******************************"
+ "\n* 一、读取用户\t二、添加用户 *\n"
+ "* *"
+ "\n* 三、删除用户\t四、退出管理 *\n"
+ "******************************\n");
menuChoice=kbd.nextInt();if (menuChoice < 1 || menuChoice > 4){
System.out.println("错误!");
}
}while (menuChoice < 1 || menuChoice > 4);returnmenuChoice;
}public static void displayBalance(doublex) {
System.out.printf("\n您的余额为 $%.2f\n", x);
}public static double deposit(double x, doubley, String[][] users) {double depositAmt = y, currentBal =x;double newBalance = depositAmt +currentBal;
System.out.printf("您现在的余额为:$%.2f\n", newBalance);
users[2][usernum] = "" +newBalance;returnnewBalance;
}public static double withdraw(double x, doubley, String[][] users) {double withdrawAmt = y, currentBal =x, newBalance;
newBalance= currentBal -withdrawAmt;
users[2][usernum] = "" +newBalance;
System.out.printf("您现在的余额为:$%.2f\n",newBalance);returnnewBalance;
}public static String[][] addUser(String[][] users) throwsIOException {
System.out.print("\n请输入您想要添加的用户卡号:");
String data1=kbd.next();if(data1.length() != 10) {
System.out.print("卡号长度不符!");returnusers;
}for(int i = 0;i < number;i++) {if(data1 == users[0][i])
System.out.print("已有同名用户!");returnusers;
}
System.out.print("\n请输入密码:");
String data2=kbd.next();if(data2.length() != 6) {
System.out.print("密码长度不符!");
}
System.out.print("\n请输入初始资金:");
String data3=kbd.next();
String[][] newusers= new String[3][number + 1];for(int i = 0; i < number;i++) {
newusers[0][i] = users[0][i];
newusers[1][i] = users[1][i];
newusers[2][i] = users[2][i];
}
newusers[0][number] =data1;
newusers[1][number] =data2;
newusers[2][number] =data3;
FileWriter fileWriter= new FileWriter("ATMUsers",true);
BufferedWriter bufferWriter= newBufferedWriter(fileWriter);
bufferWriter.newLine();
bufferWriter.write(data1);
bufferWriter.write(' ');
bufferWriter.write(data2);
bufferWriter.write(' ');
bufferWriter.write(data3);
bufferWriter.close();
number++;
System.out.print("\n添加成功!");returnnewusers;
}public static void deleteUser(String[][] users) throwsIOException {
System.out.print("\n请输入您想要删除的用户卡号:");
String todelete=kbd.next();inti;boolean exist = false;for(i = 0;i < number;i++) {if(todelete.equals(users[0][i])) {
exist= true;break;
}
}if(exist != true) {
System.out.print("\n错误:用户不存在!");return;
}
System.out.print("\n确认要删除该用户吗?(键入Y以确认)");
String check=kbd.next();if(!check.equals("y") && !check.equals("Y")) {return;
}intj;for(j = i;j < number - 1;j++) {
users[0][j] = users[0][j + 1];
users[1][j] = users[1][j + 1];
users[2][j] = users[2][j + 1];
}
number--;
System.out.print("\n删除成功!");
}public static void remakeFile(String[][] users) throwsIOException {
File file= new File("ATMUsers");
file.delete();
File newfile= new File("ATMUsers");
newfile.createNewFile();
FileWriter fileWriter= new FileWriter(newfile.getName(),true);
BufferedWriter bufferWriter= newBufferedWriter(fileWriter);for(int i = 0;i < number;i++) {if(i != 0) bufferWriter.newLine();
bufferWriter.write(users[0][i]);
bufferWriter.write(' ');
bufferWriter.write(users[1][i]);
bufferWriter.write(' ');
bufferWriter.write(users[2][i]);
}
bufferWriter.close();
}public static void main(String[] args) throwsIOException {
String accNum, pass, origBal= "错误!";int count = 0, menuOption = 0;double depositAmt = 0, withdrawAmt = 0, currentBal = 0;
readLength();
String[][] users= new String[3][number];
readUsers(users);do{
System.out.print("请输入账户名:");
accNum=kbd.next();
System.out.print("请输入密码:");
pass=kbd.next();
origBal=checkID(accNum, pass,users);
count++;if (count >= 3 && origBal.equals("错误!")){
System.out.print("尝试次数已达上限!");
System.exit(0);
}if (!(origBal.equals("错误!"))){if(isAdmin == false) System.out.println("\n您的余额为 $" + Float.parseFloat(users[2][usernum]));if(isAdmin == true) System.out.println("\n您正以管理员身份登录。");
}elseSystem.out.println(origBal);
}while(origBal.equals("错误!"));
currentBal=Double.parseDouble(origBal);while (menuOption != 4 && isAdmin == true) {
menuOption=adminMenu();switch(menuOption) {case 1:for (int i = 0; i < number; i++){
System.out.println("用户" + (i + 1) + ": " + users[0][i]);
}continue;case 2:
users=addUser(users);continue;case 3:
deleteUser(users);continue;case 4:
System.out.print("\n正在退出……");
remakeFile(users);
System.exit(0);break;
}
}while (menuOption != 4 && isAdmin == false) {
menuOption=menu();switch(menuOption)
{case 1:
displayBalance(currentBal);continue;case 2:
System.out.print("\n请输入您想要存储的数额:$ ");
depositAmt=kbd.nextDouble();if(depositAmt < 0.0) {
System.out.print("\n不得进行负存款!");continue;
}
currentBal=deposit(depositAmt, currentBal,users);continue;case 3:
System.out.print("\n请输入您想要提取的数额:$ ");
withdrawAmt=kbd.nextDouble();while(withdrawAmt > 100.0 || withdrawAmt >currentBal) {
System.out.print("错误:一次取款太多!" + "\n请输入较小的数额:$");
withdrawAmt=kbd.nextDouble();
}
currentBal=withdraw(currentBal, withdrawAmt,users);continue;case 4:
System.out.print("\n正在退出……");
remakeFile(users);
System.exit(0);break;
}
}
}
}