funkcja zapisująca wszystkie działania programu w dzienniku

0

Stworzyłem program bankomat tak do nauki. Udało mi się stworzyć wszystkie funkcjonalności jakie są w zadaniu oprócz jednej. Dodaj funkcję, która zapisuje wszystkie operacje bankomat w pliku dziennika. Jaką klasę użyć ? .

Bank

package atm;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Bank {
	private int atmMoney;
	private Person person;

	Bank() {

	}

	Bank(int atmMoney, Person person) {
		this.atmMoney = atmMoney;
		this.person = person;

	}

	public int getAtmMoney() {

		return atmMoney;
	}

	public int setAtmMoney(int atmMoney) {

		return this.atmMoney = atmMoney;
	}

	public void insertPin(Bank bank, Person person) {
		Scanner insertPin = new Scanner(System.in);

		if (person.getPinEnable() == true) {
			for (int i = 0; i <= 3; i++)
				if (i != 3) {
					System.out.println(" Enter pin:");

					try {

						int scPin = insertPin.nextInt();

						if (person.pin != scPin || String.valueOf(scPin).length() != 4) {
							System.out.println("Wrong Pin ");
						} else {
							System.out.println("Pin is corect");
							showMenu(bank, person);
							break;
						}

					} catch (InputMismatchException exc) {
						insertPin.nextLine();
						System.out.println("--------------------");
						System.out.println("Data in wrong format");

					}

				} else {
					person.setPinEnable(false);

					System.out.println(
							"You have entered the wrong PIN three times. Your card has been blocked. Contact with the bank\n----------------------------------------------------------------");
					firstMenu(bank, person);
				}

		} else {
			System.out.println("Your card has been blocked. Contact with the bank");
			firstMenu(bank, person);
		}
		insertPin.close();

	}

	public void contactBank(Person person) {
		System.out.println("Your card is unlocked");
		pinEnable(person);
		

	}

	public void firstMenu(Bank bank, Person person) {
		int selection;

		System.out.println(" 1 Insert card in Atm");
		System.out.println(" 2 Contact with Atm bank support");
		System.out.println(" 3 Inserted money for Atm operator");
		System.out.println(" 4 Exit");

		Scanner input = new Scanner(System.in);
		selection = input.nextInt();

		switch (selection) {

		case 1:
			person.insertCard();
			insertPin(bank, person);
			break;
		case 2:

			contactBank(person);
			firstMenu(bank, person);
			break;
		case 3:

			AtmOperator.insertMoneyAtmOperator(bank, person);
			firstMenu(bank, person);
			break;
		case 4:

			System.out.println("Goodbay");

		}
		input.close();
	}

	public void showMenu(Bank bank, Person person) {
		int selection;

		System.out.println(" 1 Display current balance");
		System.out.println(" 2 Withdraw money");
		System.out.println(" 3 Inserted money");
		System.out.println(" 4 Back to first menu");
		System.out.println(" 5 Exit");

		Scanner input = new Scanner(System.in);
		selection = input.nextInt();

		switch (selection) {

		case 1:
			displayCurrentBalance(person);
			showMenu(bank, person);
			break;
		case 2:

			withdrawMoney(bank, person);
			showMenu(bank, person);
			break;
		case 3:

			insertMoney(bank, person);
			showMenu(bank, person);
			break;
		case 4:
			firstMenu(bank, person);

			break;
		case 5:

			System.out.println("Goodbay");

		}
		input.close();
	}

	public void displayCurrentBalance(Person person) {

		System.out.println("CurrentBalance: " + person.getAccountBalance() + "\n--------------------");

	}

	public void withdrawMoney(Bank bank, Person person) {
		Scanner input = new Scanner(System.in);

		System.out.println(" Withdraw money ");
		int withdrawMoney = input.nextInt();

		if (atmMoney - withdrawMoney < 0) {
			System.out.println("Insufficient funds in ATM");
			showMenu(bank, person);
		} else {
			if (person.getAccountBalance() - withdrawMoney < 0) {
				System.out.println("Insufficient funds in your account");
			} else {
				atmMoney = atmMoney - withdrawMoney;
				person.setAccountBalance(person.getAccountBalance() - withdrawMoney);
				System.out.println("You selected " + withdrawMoney + "\n------------------");
				showMenu(bank, person);

			}
		}
		input.close();
	}

	public void insertMoney(Bank bank, Person person) {
		Scanner input = new Scanner(System.in);
		System.out.println("InsertMoney \nYou can only insert a maximum of 9999");
		try {
			int insertMoney = input.nextInt();
			if (String.valueOf(insertMoney).length() != 4) {

				atmMoney = atmMoney + insertMoney;
				person.setAccountBalance(person.getAccountBalance() + insertMoney);
				System.out.println("You input " + insertMoney + "\n------------------");
				showMenu(bank, person);
			}
		} catch (InputMismatchException exc) {
			input.nextLine();
			System.out.println("--------------------");
			System.out.println("Data in wrong format");

		}
		input.close();
	}

	public void pinEnable(Person person) {
		person.setPinEnable(true);
	}

Person

package atm;

public class Person {
	boolean pinEnable;
	int pin;
	int accountBalance;

	Person() {

	}

	Person(int pin, int accountBalance, boolean pinEnable) {
		this.pin = pin;
		this.accountBalance = accountBalance;
		this.pinEnable = pinEnable;

	}

	public void insertCard() {
		System.out.println("Card has been inserted into an ATM");

	}

	public boolean getPinEnable() {

		return pinEnable;
	}

	public boolean setPinEnable(boolean pinEnable) {
		return this.pinEnable = pinEnable;
	}

	public int getPin() {

		return pin;
	}

	public int setPin(int pin) {
		return this.pin = pin;
	}

	public int getAccountBalance() {

		return accountBalance;
	}

	public int setAccountBalance(int accountBalance) {

		return this.accountBalance = accountBalance;
	}

	public String toString() {
		return pin + " " + accountBalance;
	}

}

Main

package atm;



public class Main {
	private Person person;
	public Bank bank = new Bank(1000, person);

	public Main(Person person) {
		this.person = person;
		bank.firstMenu(bank,person);

	}

	public static void main(String[] args) {

		Person person1 = new Person(7777, 70000,true);

		Main m = new Main(person1);
		

	}

}

tui

package atm;

import java.util.Scanner;

public class tui {
static Scanner sc = new Scanner(System.in);
}

Atmoperator

package atm;

import java.util.InputMismatchException;
import java.util.Scanner;

public class AtmOperator {

	public static void insertMoneyAtmOperator(Bank bank, Person person) {
		// Scanner input = new Scanner(System.in);

		System.out.println("InsertMoney \nYou can only insert a maximum of 9999");
		try {

			int insertMoney = tui.sc.nextInt();
			// int insertMoney = input.nextInt();
			if (String.valueOf(insertMoney).length() != 4) {

				bank.setAtmMoney(bank.getAtmMoney() + insertMoney);

				System.out.println("AtmOperator insert " + insertMoney + "\n------------------");
				System.out.println("The ATM is " + bank.getAtmMoney());

			}
		} catch (

		InputMismatchException exc) {
			tui.sc.nextLine();
			System.out.println("--------------------");
			System.out.println("Data in wrong format");
			//
			// }
			tui.sc.close();
		}

	}
}
0

Jeżeli dobrze Cię zrozumiałem chodzi Ci o zapis do pliku txt.?Wtedy niezbędna jest klasa PrintWriter :)

0

Podpowiem - masz źle pomyślane operacje.

Wersja najprostsza w metodzie showMenu zamiast switch utwórz mapę, gdzie kluczem będzie Integer, a wartością Operation. Następnie:

public void showMenu(Bank bank, Person person){
	Map<Integer, Operation> oper= new HashMap<>();

	Scanner input = new Scanner(System.in);
	Integer selection = input.nextInt();

	oper.get(selection).doOperation(person);

}

gdzie Operation:

abstract class Operation extends Consumer<Person>{
	
	void doOperation(Person p){
		/// logowanie		
		accept(person);
	}

}

operacje będą reprezentowane przez podklasy Operation, które ma wszyte logowanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1