Java-Programm für Student Record implementieren

89375
Jamal

Gibt es eine bessere Möglichkeit, meinen Code in Java zu implementieren? Ich habe das in C ++ programmiert und arbeitete ziemlich direkt. In Java ist das jedoch anders, da ich keine Daten in den String-Array-Namen eingeben kann. Es scheint zu überspringen und den Benutzer nach dem Alter zu fragen, anstatt mit dem Namen zu beginnen.

package student;
import java.util.*;

public class Student {


public static void main(String[] args) {
   int i, q, z, c, b;
   int x=0;
   String[] name = new String[30];
   int[] age = new int[30];
   String[] course = new String[30];
   String[] year = new String[30];
   String[] section = new String[30];
   int menuChoice;

   Scanner input = new Scanner (System.in);

   start:
   do{

       System.out.println("\t\t\tStudent Record Menu");
       System.out.println("\t\t1. Add Student\t2. View Students\t3. Search Student\t4. Exit");
       System.out.println("Enter a choice: ");
       menuChoice = input.nextInt();

       if (menuChoice==1)
       {
           for (z=x; z<=29; z++)
           {
               System.out.println("Full name:");
               name [z] = input.nextLine();
               System.out.println("Age:");
               age [z] = input.nextInt();
               System.out.println("Course:");
               course [z] = input.next();
               System.out.println("Year:");
               year [z] = input.next();
               System.out.println("Section:");
               section [z] = input.next();
               x++;
               continue start;
           }
       }
               else if (menuChoice==2)
               {
                   for (i=0; i<x; i++)
                   {
                       System.out.println(name[i] + age [i] + course [i] + year [i] + section [i]);
                   }
               }

   } while (menuChoice<4);

}
}
Antworten
2
Sie müssen die Hauptmethode ein wenig vergessen und sich darauf konzentrieren, zuerst Ihre Student-Klasse zu erstellen, eine Klasse mit privaten Instanzfeldern, mit mindestens einem vielleicht zwei Konstruktoren, mit Gettern und Setters. Tun Sie dies zuerst und erstellen Sie dann eine Hauptmethode, in der Sie ein Student [] - Array erstellen und versuchen, es zu füllen. Hovercraft Full Of Eels vor 5 Jahren 3
Sie sollten besser hinzufügen, welche Logik Sie in Ihre Fragen einführen möchten, damit wir alle aufgreifen können. vor 5 Jahren 0

2 Antworten auf die Frage

0

Um mit OOP zu beginnen, sollten Sie sich die Studentenklasse als Objekt vorstellen, eine Sache wie ein Ball. Angenommen, Sie haben einen Studenten bekommen. Welche Eigenschaften könnte es haben? Zum Beispiel kann es einen Namen, ein Geschlecht, einen Major, eine Liste von Kursen usw. haben. Wofür könnten Sie es bitten? Sie könnten ihn darum bitten, Ihnen seinen Namen mitzuteilen, ob er für einen bestimmten Kurs eingeschrieben ist oder nicht, ob er einen Kurs mit einem anderen Studenten teilt oder nicht, usw. usw.

In Ihrem Beispiel scheinen die Schüler einen Namen, ein Alter, einen Kurs, ein Jahr und einen Abschnitt zu haben. Dies sind die Werte, die einen Schüler definieren. Wir können einen mehr OOP-Ansatz beginnen, indem wir eine Student-Klasse definieren, die diese Informationen über einen Schüler angemessen speichert und die Erstellung und den Zugriff auf diese Felder ermöglicht:

public class Student{
    public String name;
    public int age;
    public String course;
    public String year;
    public String section;

    /** Constructs a Student object with the given values */
    public Student(String name, int age, String course, String year, String section){
        this.name = name;
        this.age = age;
        this.course = course;
        this.year = year;
        this.section = section;
    }

}

Nun stellen Sie möglicherweise fest, dass im obigen Beispiel alles öffentlich ist. Das ist (fast sicher) falsch. Um zum Beispiel der Herstellung von Alter öffentlichen Bereich ermöglicht es jeder, einen Schüler zu gehen und sagen : „Sie jetzt 12 Jahre alt sind“. Sicher ein Fehler. Lassen Sie uns überarbeiten und nur zulassen, dass der Zugriff öffentlich ist.

public class Student{
    private String name;
    private int age;
    private String course;
    private String year;
    private String section;

    /** Constructs a Student object with the given values */
    public Student(String name, int age, String course, String year, String section){
        this.name = name;
        this.age = age;
        this.course = course;
        this.year = year;
        this.section = section;
    }

    /** Returns the name of this Student */
    public String getName(){
        return name;
    }

    /** Returns the age of this Student */
    public int getAge(){
        return age;
    }

    /** Returns the course of this Student */
    public String getCourse(){
        return course;
    }

    /** Returns the year of this Student */
    public String getYear(){
        return year;
    }

    /** Returns the section of this Student */
    public String getSection(){
        return section;
    }
}

Während ein Student für sein Alter einen intrinsischen Wert hat, kann er nicht direkt darauf zugreifen. Sie können den Schüler jedoch fragen, wie alt er ist getAge(), was Ihnen sagen wird, was Sie wissen wollten.

Lassen Sie uns zum Schluss die Hauptmethode angehen, die Sie an erster Stelle durchgeführt haben. Nun, da wir die Studentenklasse haben, können wir ein (Name, Alter, Kurs, Jahr, Abschnitt) als ein einzelnes Studentobjekt darstellen. Anstelle von 5 separaten Arrays, eines für jedes Feld, haben wir ein einzelnes Array von Students. Fügen Sie einfach diese Hauptmethode der obigen Studentenklasse hinzu:

public static void main(String[] args) {
   int x = 0;
   int menuChoice = -1;
   Student[] students = new Student[30]; //As a note, hard-coding this '30' is a bad idea.
                                         //Probably should be static, final const in class.
   Scanner input = new Scanner (System.in);
   do{
       System.out.println("\t\t\tStudent Record Menu");
       System.out.println("\t\t1. Add Student\t2. View Students\t3. Search Student\t4. Exit");
       System.out.println("Enter a choice: ");
       menuChoice = input.nextInt();

       if (menuChoice==1){
           if(x < 30) { //Able to add new student.
               System.out.println("Full name:");
               String name = input.next();     //This was your error - should be next like the others,
                                               //Not nextLine()
               System.out.println("Age:");
               int age = input.nextInt();
               System.out.println("Course:");
               String course = input.next();
               System.out.println("Year:");
               String year = input.next();
               System.out.println("Section:");
               String section = input.next();

               //Create the new student using the given inputs
               Student s = new Student(name, age, course, year, section);

               //Place in array
               students[x] = s;

               //Increment x for next student placement
               x++;
           } else {  //Not able to add new student
               System.out.println("Can't add new student, students full");
           }
       }
       else if (menuChoice==2) {
           for (int i=0; i<x; i++) {
               Student s = students[i];
               System.out.println(s.getName() + s.getAge() + s.getCourse() 
                                      + s.getYear() + s.getSection());
           }
       }
       else if(menuChoice < 1 || menuChoice > 4){
           System.out.println("Unrecognized menu choice; please re-enter");
       }
   } while (menuChoice != 4);

   //Do close your scanners when you're done with them to avoid a resource leak.
   //This is closing System.in (which is bad), but you're code is terminating anyway
   //so its ok
   input.close();
}

An einigen Stellen, an die Sie gehen könnten, wird eine Liste ( ArrayListwird verwendet) anstelle eines Arrays zur Speicherung der Schüler in der Hauptmethode verwendet, da die willkürliche Begrenzung der Schüleranzahl auf 30 dumm erscheint. Sie können den Schülern auch komplexeres Verhalten geben (zum Beispiel eine Liste von Freunden), um wirklich coole Sachen zu machen.

Willkommen bei Java und OOP! Wenn es eine Möglichkeit gibt, meine Antwort zu klären, lass es mich wissen.

Vielen Dank für die Antworten und einen kurzen Überblick über Java- und OOP-Konzepte. Ich habe eine andere Frage. Ist es möglich, die folgenden Codes in einer separaten Klassendatei (.java) abzulegen, zu kompilieren und auszuführen? Wenn ich mich nicht irre, handelt es sich um ein Paket, oder? Ich benutze NetBeans als meine IDE. vor 5 Jahren 0
Pakete sind die Organisation von .java-Dateien (und beeinflussen leicht, wer auf was zugreifen kann, aber das ist eine völlig andere Frage). Der wichtige Teil ist, dass Sie nur eine öffentliche Klasse pro Java-Datei verwenden können, deren Dateiname mit dem Klassennamen identisch ist. Für den Moment können Sie sich wahrscheinlich an das Standardpaket halten - erstellen Sie einfach Ihre .java-Dateien im src-Verzeichnis. Netbeans sollten in der Lage sein, die Hauptmethode zu ermitteln, die aufgerufen wird, wenn Sie das Projekt ausführen. vor 5 Jahren 0
Aha. Vielen Dank für die bisherigen Antworten. Gibt es eine Grenze für die Anzahl der Werte, die Sie in diese Zeile einfügen können: `public Student (Stringname, int alter, Stringkurs, Stringjahr, Stringabschnitt)` Zum Beispiel füge ich ein doppeltes Midtermgrade hinzu, ein doppeltes Finalgrade und doppelte gpa und auch ein Studentennummern-Suchsystem (zum Suchen und Anzeigen der Datensätze eines bestimmten Studenten), das ich gerade formuliere. vor 5 Jahren 0
Sollte nicht sein, nein. Wir sind jedoch ziemlich weit in die Kommentare eingegangen. Wenn Sie also weitere Fragen haben, sollten Sie sie als vollständige Fragen stellen. vor 5 Jahren 0
0
trooper

So würde ich das kodieren. Dies wurde unabhängig von Msniks Antwort umgesetzt (was übrigens großartig ist).

Der interessante Teil ist in main()und der Gebrauch von Scanner. Diese Lösung verwendet auch a ArrayListzum Speichern der Ergebnisse und eine for-each-Schleife zum Durchlaufen dieser Ergebnisse.

import java.util.*;

public class Student
{
    private String m_name;
    private int m_age;
    private String m_course;
    private String m_year;
    private String m_section;

    public Student( String name, int age, String course, String year, String section )
    {
        m_name = name;
        m_age = age;
        m_course = course;
        m_year = year;
        m_section = section;
    }

    public String getName()
    {
        return m_name;
    }

    public int getAge()
    {
        return m_age;
    }

    public String getCourse()
    {
        return m_course;
    }

    public String getYear()
    {
        return m_year;
    }

    public String getSection()
    {
        return m_section;
    }

    public String toString()
    {
        return "name: " + m_name + ", age: " + m_age + 
               ", course: " + m_course + ", year: " + m_year +
               ", section: " + m_section;
    }

    public static void main(String[] args) 
    {
       ArrayList<Student> students = new ArrayList<Student>();
       Scanner input = new Scanner(System.in);

       int menuChoice = 4;
       do {
           System.out.println("\t\t\tStudent Record Menu");
           System.out.println("\t\t1. Add Student\t2. View Students\t3. Search Student\t4. Exit");
           try {
               System.out.println("Enter a choice: ");
               menuChoice = Integer.parseInt(input.nextLine());
           } catch (NumberFormatException e) {
               continue;
           }

           if (menuChoice==1)
           {
               System.out.println("Full name:");
               String name = input.nextLine();

               int age = -1;
               do {
                   try {
                       System.out.println("Age:");
                       age = Integer.parseInt(input.nextLine());
                   } catch (NumberFormatException e) {
                       System.out.println("Enter a number!");
                       continue;
                   }
               } while (age <= 0);

               System.out.println("Course:");
               String course = input.nextLine();

               System.out.println("Year:");
               String year = input.nextLine();

               System.out.println("Section:");
               String section = input.nextLine();

               Student student = new Student(name, age, course, year, section);
               students.add(student);

           } else if (menuChoice==2) {
               System.out.println("Students:");
               for (Student student : students)
               {
                   System.out.println(student);
               }
           }
       } while (menuChoice<4);
    }
}

Wir möchten anrufen nextLine(), um eine ganze Zeile Eingabe gleichzeitig zu sammeln. Beim Aufruf next()wird das nächste Token zurückgegeben. Wenn der Benutzer eine Reihe von \ $ n \ $ -Wörtern (eine durch Leerzeichen getrennte Liste von Token) eingibt, werden die nächsten \ $ n \ $ -Aufrufe für next () verwendet.

Sie haben gesehen, dass der Name übersprungen wurde und aus einem ähnlichen Grund direkt zum Alter wurde - der Aufruf zum Erfassen der nextInt()Menüauswahl, nachdem der Benutzer die Eingabe getroffen hat, enteraber die Zeilenrückgabe selbst nicht erfasst hat - der nachfolgende Aufruf hat dies nextLine()getan (beide Anrufe auf menuchoiceund und verbraucht) dem Benutzer die Möglichkeit verweigern, einen Namen einzugeben).

Stattdessen rufen wir nextLinejedes Mal an. Für unsere Stringwerte können wir diese direkt zuweisen. Für unsere ints werden wir parseInt()zuerst konvertieren. Wir müssen ein fangen, NumberFormatExceptionfalls der Benutzer kein eingeben kann int, und in diesem Fall werden wir sie nur noch einmal auffordern.

Vielen Dank! Ich muss mich wirklich entschuldigen und Mshnik muss den Code machen. Das erklärt mir sehr viel. vor 5 Jahren 0