ToDoApp - "podłączenie" uniwersalnej listy zadań do użytkownika

0

Cześć, zacząłem robić ToDoApkę. Jednakże napotkałem problem, ponieważ nie wiem jak zrobić, by każdy użytkownik po zalogowaniu się na swoje konto miał swoją listę zadań do wykonania.
Nigdy się nie bawiłem w bazy danych, dlatego to tworzenie konta i ogólnie działanie na nim jest picem na wodę.
Login i password to konta zrealizowałem za pomocą HashMapy gdzie key - to jest login, a value - to jest password. Wiem, że mógłbym mieć klase User i później po prostu User.tasks.... Ale natrudziłem się sporo z tą HashMapą i chciałbym by tak po prostu zostało.

I teraz nie mam pojęcia, jak założmy javaloginDetails.put("lala", "papa"); oraz javaloginDetails.put("lala1", "papa1"); posiadali swoje własne czynności, które albo uprzednio zakodujemy w programie albo po prostu dodajemy w programie.

Myślałem nad ArrayList, ale po prostu nie wiem jak to podłączyć.
Moje klasy wyglądaja tak:
MAIN:

public class Main {
    public static void main(String[] args) {
        ToDoEngine engine = new ToDoEngine();
        engine.startToDoApp();
    }
}

ToDoAppEngine:

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

public class ToDoEngine {


    private Scanner input = new Scanner(System.in);
    private AccountMaker accountMaker = new AccountMaker();
    private AccountLogger accountLogger = new AccountLogger(accountMaker);
    private boolean loopIsTrue = true;

    public void startToDoApp() {

        System.out.println("What do you wanna to do?");
        System.out.println("1. Add Account 2. Log into my account");

        while (loopIsTrue) {
            try {
                displayMainMenu(input.nextInt());
            } catch (InputMismatchException e) {
                System.out.println("You've inputed something wrong!");
                System.out.println("What do you wanna to do?");
                System.out.println("1. Add Account 2. Log into my account");
                input.next();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    private void displayMainMenu(int option) throws InterruptedException {
        if (option >= 1 && option <= 2) {
            switch (option) {
                case 1:
                    accountMaker.inputLoginAndPassword();
                    accountMaker.createAccount();
                    System.out.println("Now let's log into you account.");
                case 2:
                    while (loopIsTrue) {
                        accountLogger.inputLoginAndPassword();
                        if (!accountLogger.isLoginDataIncorrect()) {
                            loopIsTrue = false;
                        }
                    }
                    break;
            }
        }
    }
}

AccountMaker:

import java.util.HashMap;
import java.util.Scanner;

public class AccountMaker {

    private HashMap<String, String> loginDetails = new HashMap<>();
    private String login, password;
    private Scanner input = new Scanner(System.in);

    void inputLoginAndPassword() {
        System.out.println("Input your login");
        login = input.next();

        System.out.println("Input your password");
        password = input.next();
    }

    void createAccount() throws InterruptedException {
        loginDetails.put(login, password);
        System.out.println("Account has been created successfully");
        Thread.sleep(2000);
    }

    HashMap<String, String> getLoginDetails() {
        return loginDetails;
    }

}

AccounterLogger:

import java.util.Scanner;

public class AccountLogger {

    private AccountMaker accountMaker;
    private Scanner input = new Scanner(System.in);
    private String login, password;

    AccountLogger(AccountMaker accountMaker) {
        this.accountMaker = accountMaker;
    }

    void inputLoginAndPassword() {
        System.out.println("Input your login");
        login = input.next();

        System.out.println("Input your password");
        password = input.next();
    }

    boolean isLoginDataIncorrect() {
        if (accountMaker.getLoginDetails().containsKey(login) && accountMaker.getLoginDetails().get(login).equals(password)) {
            System.out.println("You've logged in.");
            return false;
        } else
            System.err.println("Bad login or password");
        return true;
    }
}

Dzięki za wszelkie sugestie.

///EDIT
Wpadłem na pomysł HashMapy w HashMapie, czyli HashMap<Hashmap<String,String>,ArrayList<String>> czy jest to dobry pomysł?

0

Ma ktoś jakąś radę? Bo stoję w miejscu :/.
Ten pomysł, który dodałem w EDIT jednak nie zadziała, bo nie wiedziałem, że nie można zrobić HashMap<loginDetails,tasks>
gdzie loginDetails = HashMap<String, String> , a tasks = ArrayList<String>, poniewaz przyjmuje ona tylko klasy.

0

Podejrzewam, że nikt nie chce pomóc bo Twój pomysł na realizację tego projektu jest fatalny.

jajko1233 napisał(a):

Ma ktoś jakąś radę? Bo stoję w miejscu :/.
Ten pomysł, który dodałem w EDIT jednak nie zadziała, bo nie wiedziałem, że nie można zrobić HashMap<loginDetails,tasks>
gdzie loginDetails = HashMap<String, String> , a tasks = ArrayList<String>, poniewaz przyjmuje ona tylko klasy.

Da radę tak zrobić, wystarczy sobie loginDetails = HashMap<String, String> oraz tasks = ArrayList<String> opakować w klasy, ale to i tak bez sensu.

Weź sobie jak człowiek stwórz klasę User. Uproszczona wersja:

class User {
    private String login;
    private String password;
    private List<Task> tasks;
}

W aplikacji przechowuj sobie listę Userów. W momencie kiedy ktoś założy konto, stwórz obiekt klasy User i go dodaj do tej listy. Kiedy ktoś będzie chciał się zalogować, to po prostu z tej listy wyszukaj Usera z takim loginem i sprawdź czy hasło się zgadza.

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