2016-04-05 14 views
-1

Ich bin neu in Java und Programmierung. Ich stehe auf einem Abschnitt einer mir zugewiesenen Aufgabe, in der ich ein Login für zwei verschiedene Arten von Benutzern erstellen muss, die zwei verschiedene Menüs anzeigen, abhängig davon, welches Login verwendet wird. Ich benutze Eclipse und die Konsole.Login und separate Menüs für zwei verschiedene Arten von Benutzer

Die zwei verschiedenen Benutzertypen sind Boss und Worker und sie müssen sich mit einem Benutzernamen und einem Passwort anmelden. Der Chef Menü müssen die folgenden Menüoptionen haben nach der Anmeldung:

  1. Setup-Worker Schedule
  2. Ansicht Worker Zeitplan
  3. Verschieben Worker

Der Arbeiter-Menü die folgenden Menüoptionen nach der Anmeldung haben müssen in:

  1. Zeitplan anzeigen

Ich würde wirklich jede Hilfe mit diesem, danke im Voraus schätzen.

EDIT: Okay, also ich habe jetzt den folgenden Code:

import java.util.Scanner; 

public class Depot { 
    public static void main(String[] arguments){ 

     String bossName; 
     String bossPassword; 
     String workerName; 
     String workerPassword; 

     System.out.println("Enter your name: "); 
     Scanner authenticate = new Scanner(System.in); 
     String userName = authenticate.nextLine(); 
     System.out.println("Your username is " + userName); 

     System.out.println("Enter your password: "); 
     String passWord = authenticate.nextLine(); 
     System.out.println("Your password is " + passWord); 

     if (userName.equals(bossName) && passWord.equals(bossPassword)) { 

      int selection; 

      Scanner bossMenu = new Scanner(System.in); 
      System.out.println("1. Setup Worker Schedule"); 
      System.out.println("2. View Worker Schedule"); 
      System.out.println("3. Move Worker"); 
      System.out.println("4. Quit"); 

      do { 
       selection = bossMenu.nextInt(); 

       if (selection == 1) { 
        System.out.println("1"); 
       } 
       else if (selection == 2) { 
        System.out.println("2"); 
       } 
       else if (selection == 3) { 
        System.out.println("3"); 
       } 
       else { 
        System.out.println("4"); 
       } 
      } 
       while(selection != 4); 
       bossMenu.close(); 
     } 
     else if (userName.equals(workerName) && passWord.equals(workerPassword)) { 

      int selection; 

      Scanner userMenu = new Scanner(System.in); 
      System.out.println("1. View Worker Schedule"); 
      System.out.println("2. Quit"); 

      do { 
       selection = userMenu.nextInt(); 

       if (selection == 1) { 
        System.out.println("1"); 
       } 
      } 
       while(selection != 2); 
       userMenu.close(); 
     } 
    } 
} 

jedoch die folgenden zwei Codezeilen geben mir eine Fehlermeldung:

if (userName.equals(bossName) && passWord.equals(bossPassword)) { 

und

else if (userName.equals(workerName) && passWord.equals(workerPassword)) { 

bossName, bossPassword, workerName und workerPassword wurden möglicherweise nicht initialisiert d?

+0

Sammeln Sie die Anmeldeinformationen. Trivialerweise verwenden Sie eine 'if'-Anweisung, um das Menü anzuzeigen, abhängig davon, ob der Benutzername angibt, dass die Person ein Boss oder ein Worker ist. Sie könnten auch OO verwenden und die Operationen in verschiedene Klassen aufteilen. Sie müssen Informationen darüber, wer ein Boss ist, aufbewahren, es sei denn, ein Teil des Logins wählt die Rolle aus. – KevinO

+0

Danke für die schnelle Antwort. Die Login-Informationen können mit einem Benutzernamen und einem Passwort für Boss sowie einem Benutzernamen und einem Passwort für Worker fest programmiert werden. Könntest du mir ein Beispiel zeigen, da ich nicht weiß, wo ich anfangen soll? –

Antwort

0

Zuerst die Anmeldeinformationen erhalten durch die Scanner verwenden, hier ist eine einfache Möglichkeit, ein Scanner Objekt zu konstruieren, müssen Sie die folgende Import-Anweisung am Anfang des Codes haben, bevor irgendetwas anderes:

import java.util.Scanner; 

Scanner scannerName = new Scanner(System.in); 

, dass der Scanner erzählt aus dem Eingangsstrom zu lesen, die die Tastatur wird:

um einen Scanner, gehen Sie wie folgt zu erstellen. Um Daten vom Scanner abzurufen, müssen Sie den Benutzer zuerst nach den erforderlichen Daten fragen und anschließend eine der Methoden des Typs .next ___ des Scanners verwenden, um die Eingabe abzurufen und in einer Variablen zu speichern. Ich werde Ihnen nicht sagen, welche Sie verwenden sollten, sehen Sie sich die Scanner-Seite in der Java-API an und schauen Sie, ob Sie es selbst herausfinden können.

Es sollte wie folgt aussehen:

System.out.println("Enter your name"); 
String userLoginString = scannerName.next____(); 

System.out.println("Enter your password"); 
String userPasswordString = scannerName.next____(); 

Sobald Sie die Anmeldeinformationen in String-Variablen gespeichert haben, ich werde userLoginString und userPasswordString als Beispiele verwenden, müssen Sie diese Anmeldeinformationen gegen einige gespeicherten Werte bestätigen. Erstellen Sie also String-Variablen bossName, bossPassword, workerName, workerPassword.

Sobald Sie die Anmeldeinformationen des Benutzers haben, würde ich diese Anmeldeinformationen überprüfen.Sie tun können, dass die logischen Operatoren und Methoden der String-Klasse, etwa so:

if (userLoginString.equals(bossName) && userPasswordString.equals(bossPassword)) { 
    // print the boss menu 
} 
else if (userLoginString.equals(workerName) && userPasswordString.equals(workerPassword)) { 
    // print the user menu 
} 

Die logischen & & („und“) Betreiber stellen sicher, dass das richtige Menü nur angezeigt, wenn die Benutzerdaten Übereinstimmen die gespeicherten Anmeldeinformationen. Wenn der Benutzer den richtigen Namen (Boss oder Worker), aber das falsche Passwort (oder umgekehrt) eingibt, werden die Anweisungen in den geschweiften Klammern NICHT ausgeführt.

UPDATE Hier ist eine kommentierte Version des Codes so weit mit einigen Hinweisen, wie es besser zu machen. Es wird kompilieren und ausführen gut, wenn Sie nur Werte für die String-Variablen an der Spitze liefern, aber ich habe einige weitere Vorschläge es ein wenig schöner zu machen:

import java.util.Scanner; 

public class Depot { 
    public static void main(String[] arguments){ 

     // you need to initialize these to some value or else there is 
     // nothing to compare them with. I tried some dummy values and 
     // your code worked as expected, as long as the user entered the 
     // correct values in the prompt. 
     String bossName; 
     String bossPassword; 
     String workerName; 
     String workerPassword; 

     // you can just use one Scanner for the whole program, since they are 
     // both just reading input from the standard input stream. Replace the 
     // other Scanners with "input" and close "input" at the end 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter your name: "); 
     // not needed 
     Scanner authenticate = new Scanner(System.in); 
     String userName = authenticate.nextLine(); 
     System.out.println("Your username is " + userName); 

     System.out.println("Enter your password: "); 
     String passWord = authenticate.nextLine(); 
     System.out.println("Your password is " + passWord); 

     if (userName.equals(bossName) && passWord.equals(bossPassword)) { 

      // this could be declared at the top of the program instead of 
      // redeclaring in the if...else 
      int selection; 

      Scanner bossMenu = new Scanner(System.in); 
      System.out.println("1. Setup Worker Schedule"); 
      System.out.println("2. View Worker Schedule"); 
      System.out.println("3. Move Worker"); 
      System.out.println("4. Quit"); 

      do { 
       selection = bossMenu.nextInt(); 

       if (selection == 1) { 
        System.out.println("1"); 
       } 
       else if (selection == 2) { 
        System.out.println("2"); 
       } 
       else if (selection == 3) { 
        System.out.println("3"); 
       } 
       else { 
        System.out.println("4"); 
       } 
      } while(selection != 4); // this is usually here 
       bossMenu.close(); 
     } 
     else if (userName.equals(workerName) && passWord.equals(workerPassword)) { 

      // this could be declared at the top of the program instead of 
      // redeclaring in the if...else 
      int selection; 

      // don't need this one, just use "input" Scanner 
      Scanner userMenu = new Scanner(System.in); 
      System.out.println("1. View Worker Schedule"); 
      System.out.println("2. Quit"); 

      do { 
       selection = userMenu.nextInt(); 

       if (selection == 1) { 
        System.out.println("1"); 
       } 
      } while(selection != 2); // this is usually here 

      // you would close the "input" Scanner here 
      userMenu.close(); 
     } 
    } 
} 

wieder aktualisiert !!! Eine bessere Möglichkeit, den Boss und Worker zu implementieren, wäre die Verwendung von Vererbung und Polymorphie. Beginne mit einer abstrakten Oberklasse, die gemeinsame Eigenschaften von Boss und Worker hat. Ich werde dies die Employee-Superklasse nennen. Es hat Vorname, Nachname und Passwort Instanzvariablen, und Sie sollten Getter und Setter für jedes Add:

// abstract class, CANNOT be instantiated but can be used as the supertype 
// in an ArrayList<Employee> 
public abstract class Employee { 

    private String firstName; 
    private String lastName; 
    private String password; 

    public Employee() { 
     // don't have to do anything, just need this so you can instantiate 
     // a subclass with a no-arg constructor 
    } 

    // constructor that takes only the name of the Employee 
    public Employee(String firstName, String lastName) { 
     this(firstName, lastName, null); 
    } 

    // constructor that takes name and password 
    public Employee(String firstName, String lastName, String password) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
     this.password = password; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    // and so on, for the lastName and password.... 

    // you must implement this specifically in any subclass! 
    public abstract void getMenu(); 
} 

Dann dein Boss und Worker-Klassen konnte diese Mitarbeiter-Klasse erweitert und sie würden alle die gleichen Methoden und Instanzvariablen. Sie müssen nur eine überschriebene Methode getMenu() angeben, da diese in der Klasse Employee abstrakt ist. Hier ist ein Beispiel von dem, was Ihr Boss Klasse aussehen soll, müssen Sie das getMenu() selbst und die Arbeiterklasse implementieren:

public class Boss extends Employee { 

    // notice we don't need the instance variables in the class declaration, 
    // but they are here since they are part of Employee 

    public Boss() { 
     // don't need to do anything here, just allows no-arg constructor 
     // to be called when creating a Boss 
    } 

    // just calls the superclass constructor, could do more if you want 
    public Boss(String firstName, String lastName) { 
     super(firstName, lastName); 
    } 
    // just calls the superclass constructor, could do more if you want 
    public Boss(String firstName, String lastName, String password) { 
     super(firstName, lastName, password); 
    } 

    @Override 
    public void getMenu() { 
     // put the print statment for Boss's menu here 
    } 

    // don't need to re-implement other methods, we can use them since 
    // they are part of the superclass 
} 

Sobald Sie die Mitarbeiter haben, Arbeiter und Boss Klassen, Sie sind bereit, Versuchen Sie, Ihr Programm wie bisher an Objects anstatt einfacher Variablen zu schreiben. Hier ist ein Beispiel, wie das beginnen würde:

import java.util.Scanner; 

public class EmployeeTester { 
    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     // can make workers and bosses able to be processed polymorphically 
     // by assinging their references to Employee variables, since 
     // and Employee is the supertype of each, a Worker "is an" Employee 
     // and a Boss "is an" Employee. 
     Employee worker1 = new Worker("Bob", "Worker"); 
     Employee worker2 = new Worker("Sue", "Bush", "Password1"); 
     Employee worker3 = new Worker(); 
     Employee boss1 = new Boss("Jenny", "Boss"); 
     Employee boss2 = new Boss("Bill", "OtherBoss", "Password2"); 
     Employee boss3 = new Boss(); 

     // if you're going to have a lot of workers and bosses, and you don't 
     // need named variables for each because their info will be included 
     // in their constructors, you could do this 
     Employee[] employees = {new Worker("Bob", "Bailey", "myPassword"), 
           new Worker("Sue", "Sarandon", "123Seven"), 
           new Boss("Jenny", "Strayhorn", "hardPassword"), 
           new Boss("Billy", "MeanGuy", "pifiaoanaei")}; 

     // then, you could iterate through this list to check if a password 
     // entered matches a firstName, lastName, and password combination 
     // for ANY type of employee in the array, then call the getMenu() 
     // method on that employee, like so: (This could all be in a loop 
     // if you wanted to process multiple Employees...) 

     System.out.println("Enter firstName:"); 
     // you figure out which Scanner method to use! 
     String firstName = input._____(); 

     System.out.println("Enter lastName:"); 
     String lastName = input._____(); 

     System.out.println("Enter password:"); 
     String password = input._____(); 

     // figure out what get____() method of the Employee class 
     // needs to be called in each case, and what it should be 
     // compared to with the .equals() method. 
     for (int i = 0; i < employees.length; i++) { 
      if (employees[i].get______().equals(______) && 
       employees[i].get______().equals(______) && 
       employees[i].get______().equals(______)) { 

       // if all of those conditions are true, print the menu 
       // for this employee 
       employees[i].get_____(); 

       // you could do more stuff here.... 

       // breaks out of the loop, no need to check for anymore employees 
       break; 
      } 
     } 
    } 
} 
+0

Danke für die schnelle Antwort. Ich kenne den Scanner nicht. Die Login-Informationen können mit einem Benutzernamen und einem Passwort für Boss sowie einem Benutzernamen und einem Passwort für Worker fest programmiert werden. Könntest du mir ein Beispiel zeigen, da ich nicht weiß, wo ich anfangen soll? –

+0

@ThreeLegs Ich habe den Code bearbeitet, um Ihnen ein kleines Beispiel dafür zu geben, wie ein Scanner funktioniert. Überprüfen Sie die Java-API oder machen Sie einige einfache Tutorials, um sich mit der Verwendung vertraut zu machen. Für grundlegende Benutzereingaben verwenden Sie den Scanner sehr! –

+0

Danke für die Hilfe. Ich habe meine Frage bearbeitet, um den Code, den ich bis jetzt habe, einzuschließen. Ich habe jedoch Fehler. Könntest du helfen? –

Verwandte Themen