2020. május 22., péntek

Jelszavak tárolása tömbben



import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

/**
 *  JFrame ActionListener interfész
 * (--> public void actionPerformed() {.....} ).
 */
public class Users extends JFrame implements ActionListener {

    /**
     * Ez egy osztály a felhasználóknak. 2 attribútuma van: a név és a jelszó.
     * Ezekhez megírtam a megfelelő get/set metódusokat, a konstruktorban meg
     * kell adni ezt a két adatot. Irtam egy elszóváltoztató metódust is, hogy
     * ne legyen olyan ronda a kód odalent.
     */
    class User {
        private String name;
        private String pwd;

        public User(String name, String pwd) {
            this.name = name;
            this.pwd  = pwd;
        }

        public String getName() {
            return name;
        }

        public String getPwd() {
            return pwd;
        }

        /**
         * Itt ellenőrzöm azt is, hogy a régi pwd jó-e, azaz szabad-e a
         * jelszót megváltoztatni.
         */
        public void setNewPwd(String oldPwd, String newPwd) {
            if (oldPwd.equals(pwd) ) {

                pwd = newPwd;

                JOptionPane.showMessageDialog( // Ezekkel tudok figyelmeztető ablakot
                    null,                       // "fellőni".
                    "A jelszó megváltozott!",
                    "Figyelem:",
                    JOptionPane.ERROR_MESSAGE
                );

            } else {
                JOptionPane.showMessageDialog(
                    null,
                    "A jelszó nem helyes!",
                    "Figyelem:",
                    JOptionPane.ERROR_MESSAGE
                );
            }
        }// setNewPwd

        /**
         * Csak a debugginghoz, a kilépéskor kiírja az összes usert.
         */
        public String toString() {
            return "Név: " + name + '\t' + "Jelszó: " + pwd;
        }

    }// User

    /**
     * Hogy ne kelljen a java.util csomagot használni --- MAX 10 EMBER LEHET !!!
     * Megjegyzem, hogy nincs ellátva megfelelő ellenőrzésekkel.
     */
    User[] users = new User[10];

    /* A konstruktor --- hogy kikerüljem a sok static változót */
    public Users() {

        for (int i=0; i<users.length; i++) { // kinyomom az egész tömböt nullra
            users[i] = null;                 // Ez amúgy default, de biztos, ami
        }                                     // biztos...

        getContentPane().add(mainPanel); // 7 sorba benyomom az összes GUI alkatrészt
        mainPanel.setLayout(new GridLayout(7,0) );
        mainPanel.add(nameTextField);
        mainPanel.add(pwdTextField);
        mainPanel.add(newPwdTextField);
        mainPanel.add(newButton);
        mainPanel.add(changePwdButton);
        mainPanel.add(deleteButton);
        mainPanel.add(exitButton);
        pack(); // beállítja az ideális méretet

        newButton.addActionListener(this); //a gombokra felakasztom ezt a figyelőt.
        changePwdButton.addActionListener(this);
        deleteButton.addActionListener(this);
        exitButton.addActionListener(this);

        // Ha bezárjuk az ablakot, akkor kilépünk.
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent we) {
                System.exit(0);
            }
        });

    }

    /**
     * MINDEN java progiban ez a fő metódus (kivéve persze az appleteket).
     */
    public static void main(String args[]) {
        new Users().show();
    }

    /**
     * A TextAreák takarítása.
     */
    private void reset() {
        nameTextField.setText("");
        pwdTextField.setText("");
        newPwdTextField.setText("");
    }

    /**
     * Az eseménykezelés az alapján, hogy mely gombból generálódott az esemény.
     * Randa, de ez a legegyszerűbb megoldás.
     */
    public void actionPerformed(ActionEvent ae) {
        if (newButton == ae.getSource() ) {
            String name = nameTextField.getText();
            String pwd  = pwdTextField.getText();

            for (int i=0; i<users.length; i++) {
                if (null == users[i]) {
                    users[i] = new User(name, pwd); // Amint üres helyet találunk, kilépünk
                    break;                            // a ciklusból.
                }
            }

            JOptionPane.showMessageDialog( // A szokásos figyelmeztetés
                null,
                "Új felhasználó létrehozva!",
                "Figyelem:",
                JOptionPane.ERROR_MESSAGE
            );

            reset(); // Törlés.

        } else if (changePwdButton == ae.getSource() ) {
            String name = nameTextField.getText();
            String oldPwd  = pwdTextField.getText();
            String newPwd = newPwdTextField.getText();

            for (int i=0; i<users.length; i++) {
                if (users[i].getName().equals(name) ) {
                    users[i].setNewPwd(oldPwd, newPwd); // Pwd változtatása, ld. a classnál
                    return;
                }
            }
            reset();

        } else if (deleteButton == ae.getSource() ) {// Ehez kell a pwd is!!!
            String name = nameTextField.getText();
            String pwd  = pwdTextField.getText();

            for (int i=0; i<users.length; i++) { // az emberke keresése
                if (users[i].getName().equals(name) ) { // ha megvan...
                    if (users[i].getPwd().equals(pwd) ) { // akkor ellenőrizzük a pwd
                        users[i] = null;                  // helyességét is
                        JOptionPane.showMessageDialog(
                            null,
                            "Felhasználó törölve!",
                            "Figyelem:",
                            JOptionPane.ERROR_MESSAGE
                        );
                    } else {
                        JOptionPane.showMessageDialog(
                            null,
                            "Nem megfelelő a jelszó!",
                            "Figyelem:",
                            JOptionPane.ERROR_MESSAGE
                        );
                    }
                    return;
                }
            }
            reset();
        } else if (exitButton == ae.getSource() ) {
            for (int i=0; i<users.length; i++) {
                System.out.println(users[i]); // Kilépéskor kiírjuk az összes nevet, pwd-t.
            }
            System.exit(0);
        }
    }

    /**
     * A GUI komponensei
     *   Remélem áttekinthető lett, nem akartam JPasswordFieldet használni, mert akkor
     *   oda kellett volna rakni egy JLabelt is melléjük, akkor ezeket már külön JPanelre,
     *   aminek a Layoutját be kellett volna lőni mondjuk BorderLayoutra, ami viszont már
     *   egy "csöppet" bonyolultabb, mint egy GridLayout...
     */
    JPanel mainPanel = new JPanel();
    JTextField nameTextField = new JTextField("Név");
    JTextField pwdTextField = new JTextField("Jelszó");
    JTextField newPwdTextField = new JTextField("Új jelszó");
    JButton newButton = new JButton("Új felhasználó");
    JButton changePwdButton = new JButton("Jelszó megváltoztatása");
    JButton deleteButton = new JButton("Felhasználó törlése");
    JButton exitButton = new JButton("Kilépés");

}

// Egyelőre ennyi. :-). Commentek nélkül kb. 100 sor.

Nincsenek megjegyzések:

Megjegyzés küldése