2011-12-01 73 views
-2

我最不滿意的情況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. 將每個開關塊提取到單獨的名爲好的方法中
  3. 將每個大小寫塊提取到單獨的方法中。

然後回來跟你有什麼

如果你5組模塊和學生之間的相互引用。 您可以通過聲明兩個類中的一個爲最前面的一個來減少代碼重複,可以說模塊和addStudent方法中您調用addModule(this)

+1

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

+0

@Jens如何使用枚舉而不是整數改進? – rana

+0

我不確定爲switch語句創建類會在物理上減少代碼量,但我同意它會變得更具可讀性。我想知道我是否可以完全刪除switch語句?基本上,案例5允許用戶將學生附加到模塊上。有沒有更簡單的方法可以做到這一點?我還會看看上面建議的代碼評論。 – newToJava

相關問題