2011-12-01 11 views
-2

ケース5があまりにも多くのコードで構成され、重複が許されているので、少なくとも私はケース5に満足しています。誰でもJavaで書かれた私のアプリケーションを改善できますか?

public class MyApplication { 

public static void main(String[] args) { 
    Control control = new Control(); 
    control.run(); 
} 

}

ドライバ/コントロールクラス

import java.util.Scanner; 


public class Control { 

// Integers represented as module codes 
private static final int UFCE1 = 0; 
private static final int UFCE2 = 1; 
private static final int UFCE3 = 2; 
private static final int UFCE4 = 3; 
private static final int UFCE5 = 4; 
// Integers represented as students 
private static final int STUDENT1 = 0; 
private static final int STUDENT2 = 1; 
private static final int STUDENT3 = 2; 
private static final int STUDENT4 = 3; 
private static final int STUDENT5 = 4; 

public void run() { 

    ... 

    while (true) { 
     Menu menu = new Menu(); 
     menu.getMainMenu(); 

     try { 
      Scanner scan = new Scanner(System.in); 

      int selection = scan.nextInt(); 
      switch (selection) { 
       case 1: 
        for (Student student : students) { 
         System.out.print(student.getName() + " "); 
        } 
        break; 
       case 2: 
        for (Module module : modules) { 
         System.out.print(module.getName() + " "); 
        } 
        break; 
       case 3: 
        System.out.println("Search module code: "); 
        scan = new Scanner(System.in); 
        String searchModule = scan.nextLine().trim(); 

        for (Module module : modules) { 
         if (searchModule.equalsIgnoreCase(module.getName())) { 
          for (int s = 0; s < module.getStudents().size(); s++) { 
           System.out.print(module.getStudents().get(s) + " "); 
          } 
         } 
        } 
        break; 
       case 4: 
        System.out.println("Search students : "); 
        scan = new Scanner(System.in); 
        String searchStudent = scan.nextLine().trim(); 

        for (Student student : students) { 
         if (searchStudent.equalsIgnoreCase(student.getName())) { 
          for (int s = 0; s < student.getModules().size(); s++) { 
           System.out.print(student.getModules().get(s) + " "); 
          } 
         } 
        } 
        break; 
       case 5: 
        // Print out students 
        System.out.println("select a student: "); 
        for (int i = 0; i < students.length; i++) { 
         System.out.println(i + " " + students[i]); 
        } 

        selection = scan.nextInt(); 
        switch (selection) { 

         case STUDENT1: 
          System.out.println("select a module to enroll " + students[0].getName() + " on to:"); 
          for (int i = 0; i < modules.length; i++) { 
           System.out.println(i + " " + modules[i]); 
          } 

          selection = scan.nextInt(); 
          switch (selection) { 
           case UFCE1: 
            System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[0].getName()); 
            students[0].addModule(modules[0].getName()); 
            modules[0].addStudent(students[0].getName()); 
            break; 
           case UFCE2: 
            System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[1].getName()); 
            students[0].addModule(modules[1].getName()); 
            modules[1].addStudent(students[0].getName()); 
            break; 
           case UFCE3: 
            System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[2].getName()); 
            students[0].addModule(modules[2].getName()); 
            modules[2].addStudent(students[0].getName()); 
            break; 
           case UFCE4: 
            System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[3].getName()); 
            students[0].addModule(modules[3].getName()); 
            modules[3].addStudent(students[0].getName()); 
            break; 
           case UFCE5: 
            System.out.println("You have enrolled " + students[0].getName() + " on to " + modules[4].getName()); 
            students[0].addModule(modules[4].getName()); 
            modules[4].addStudent(students[0].getName()); 
            break; 
           default: 
            System.out.println("Invalid subject selected. Returning to main menu..."); 
          } 
          break; 

         case STUDENT2: 
          System.out.println("select a module to enroll " + students[1].getName() + " on to:"); 
          for (int i = 0; i < modules.length; i++) { 
           System.out.println(i + " " + modules[i]); 
          } 

          selection = scan.nextInt(); 
          switch (selection) { 
           case UFCE1: 
            System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[0].getName()); 
            students[1].addModule(modules[0].getName()); 
            modules[0].addStudent(students[1].getName()); 
            break; 
           case UFCE2: 
            System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[1].getName()); 
            students[1].addModule(modules[1].getName()); 
            modules[1].addStudent(students[1].getName()); 
            break; 
           case UFCE3: 
            System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[2].getName()); 
            students[1].addModule(modules[2].getName()); 
            modules[2].addStudent(students[1].getName()); 
            break; 
           case UFCE4: 
            System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[3].getName()); 
            students[1].addModule(modules[3].getName()); 
            modules[3].addStudent(students[1].getName()); 
            break; 
           case UFCE5: 
            System.out.println("You have enrolled " + students[1].getName() + " on to " + modules[4].getName()); 
            students[1].addModule(modules[4].getName()); 
            modules[4].addStudent(students[1].getName()); 
            break; 
           default: 
            System.out.println("Invalid subject selected. Returning to main menu..."); 
          } 
          break; 

         case STUDENT3: 
          System.out.println("select a module to enroll " + students[2].getName() + " on to:"); 
          for (int i = 0; i < modules.length; i++) { 
           System.out.println(i + " " + modules[i]); 
          } 

          selection = scan.nextInt(); 
          switch (selection) { 
           case UFCE1: 
            System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[0].getName()); 
            students[2].addModule(modules[0].getName()); 
            modules[0].addStudent(students[2].getName()); 
            break; 
           case UFCE2: 
            System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[1].getName()); 
            students[2].addModule(modules[1].getName()); 
            modules[1].addStudent(students[2].getName()); 
            break; 
           case UFCE3: 
            System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[2].getName()); 
            students[2].addModule(modules[2].getName()); 
            modules[2].addStudent(students[2].getName()); 
            break; 
           case UFCE4: 
            System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[3].getName()); 
            students[2].addModule(modules[3].getName()); 
            modules[3].addStudent(students[2].getName()); 
            break; 
           case UFCE5: 
            System.out.println("You have enrolled " + students[2].getName() + " on to " + modules[4].getName()); 
            students[2].addModule(modules[4].getName()); 
            modules[4].addStudent(students[2].getName()); 
            break; 
           default: 
            System.out.println("Invalid subject selected. Returning to main menu..."); 
          } 
          break; 
         case STUDENT4: 
          System.out.println("select a module to enroll " + students[3].getName() + " on to:"); 
          for (int i = 0; i < modules.length; i++) { 
           System.out.println(i + " " + modules[i]); 
          } 

          selection = scan.nextInt(); 
          switch (selection) { 
           case UFCE1: 
            System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[0].getName()); 
            students[3].addModule(modules[0].getName()); 
            modules[0].addStudent(students[3].getName()); 
            break; 
           case UFCE2: 
            System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[1].getName()); 
            students[3].addModule(modules[1].getName()); 
            modules[1].addStudent(students[3].getName()); 
            break; 
           case UFCE3: 
            System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[2].getName()); 
            students[3].addModule(modules[2].getName()); 
            modules[2].addStudent(students[3].getName()); 
            break; 
           case UFCE4: 
            System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[3].getName()); 
            students[3].addModule(modules[3].getName()); 
            modules[3].addStudent(students[3].getName()); 
            break; 
           case UFCE5: 
            System.out.println("You have enrolled " + students[3].getName() + " on to " + modules[4].getName()); 
            students[3].addModule(modules[4].getName()); 
            modules[4].addStudent(students[3].getName()); 
            break; 
           default: 
            System.out.println("Invalid subject selected. Returning to main menu..."); 
          } 
          break; 
         case STUDENT5: 
          System.out.println("select a module to enroll " + students[4].getName() + " on to:"); 
          for (int i = 0; i < modules.length; i++) { 
           System.out.println(i + " " + modules[i]); 
          } 

          selection = scan.nextInt(); 
          switch (selection) { 
           case UFCE1: 
            System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[0].getName()); 
            students[4].addModule(modules[0].getName()); 
            modules[0].addStudent(students[4].getName()); 
            break; 
           case UFCE2: 
            System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[1].getName()); 
            students[4].addModule(modules[1].getName()); 
            modules[1].addStudent(students[4].getName()); 
            break; 
           case UFCE3: 
            System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[2].getName()); 
            students[4].addModule(modules[2].getName()); 
            modules[2].addStudent(students[4].getName()); 
            break; 
           case UFCE4: 
            System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[3].getName()); 
            students[4].addModule(modules[3].getName()); 
            modules[3].addStudent(students[4].getName()); 
            break; 
           case UFCE5: 
            System.out.println("You have enrolled " + students[4].getName() + " on to " + modules[4].getName()); 
            students[4].addModule(modules[4].getName()); 
            modules[4].addStudent(students[4].getName()); 
            break; 
           default: 
            System.out.println("Invalid subject selected. Returning to main menu..."); 
          } 
          break; 
         default: 
          System.out.println("Invalid student selected. Returning to main menu..."); 
        } 
        break; 
       case 6: 
        System.out.println("Goodbye!"); 
        System.exit(0); 
        break; 
       default: 
        System.out.println("Invalid option selected. You must enter a number between 1 & 6!"); 
      } // end switch 

     } catch (Exception e) { 
      System.out.println("Invalid entry. You must enter a number between 1 & 6"); 
     } 
    } // end while 

} 

}

:私は設定について聞いたが、この例では、それがどのように動作するか

を見ることができますここに私の完全なソースコードです

メニュークラス

public class Menu { 
private String Menu; 

public String getMainMenu() { 
    System.out.println("\n\nSelect an option:"); 
     System.out.println(
       "1 List all student names" 
       + "\n2 List all module details" 
       + "\n3 List all students on a module" 
       + "\n4 List all modules attached to a student" 
       + "\n5 Attach a valid student to a valid module" 
       + "\n6 Exit\n"); 
    return Menu; 
} 

}

モジュールクラス

import java.util.ArrayList; 


public class Module { 
private String name; 
private ArrayList<String> students; 

public Module(String name) { 
    this.name = name; 
    students = new ArrayList<String>(); 
} 

public String getName() { 
    return name; 
} 

public ArrayList<String> getStudents() { 
    return students; 
} 

public void addStudent(String student){ 
    students.add(student); 
} 

@Override 
public String toString() { 
    return name; 
} 

}

学生クラス

import java.util.ArrayList; 

public class Student { 
private String name; 
private ArrayList<String> modules; 

public Student(String name) { 
    this.name = name; 
    modules = new ArrayList<String>(); 
} 

public String getName() { 
    return name; 
} 

public ArrayList<String> getModules() { 
    return modules; 
} 

public void addModule(String module){ 
    modules.add(module); 
} 

@Override 
public String toString() { 
    return name; 
} 

}

+7

http://codereview.stackexchangeに移動する必要があります。 com/ –

+1

特定の質問がありますか?私は多くの人がそれをすべて読んでくれるのか疑問だ。 – Max

+0

[codereview](http://codereview.stackexchange.com)にお立ち寄りください。 –

答えて

2
  1. あなたの整数を列挙型に置き換えてください
  2. すべてのスイッチブロックを別のwellという名前のメソッドに抽出してください。
  3. すべてのケースブロックを個別のメソッドにも抽出します。その後

あなたは、モジュールと学生間の相互参照を設定する場合には5

を持っているもので戻ってきます。 2つのクラスのうちの1つを先頭に宣言することで、コードの重複を減らすことができます。addModule(this)を呼び出すaddStudentメソッドとモジュールを使用できます。

+1

+1 ..........;) –

+0

@Jensどのように整数の代わりにenumsを使用して改善していますか? – rana

+0

私は、switch文のクラスを作成することによって物理的にコード量が減少するとは確信していませんが、より読みやすくなることに同意します。私はスイッチのステートメントを完全に削除することができますか?基本的に、ケース5では、ユーザーがモジュールに学生を添付することができます。私はこれを行うより簡単な方法はありますか?上記で提案したコードレビューも見ていきます。 – newToJava

関連する問題