任何人都可以提高我用Java编写的应用程序吗?

问题描述:

我最不满意的情况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)。 –

  1. 用枚举替换整数
  2. 将每个开关块提取到单独的名为好的方法中
  3. 将每个大小写块提取到单独的方法中。

然后回来跟你有什么

如果你5组模块和学生之间的相互引用。 您可以通过声明两个类中的一个为最前面的一个来减少代码重复,可以说模块和addStudent方法中您调用addModule(this)

+1

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

+0

@Jens如何使用枚举而不是整数改进? – rana

+0

我不确定为switch语句创建类会在物理上减少代码量,但我同意它会变得更具可读性。我想知道我是否可以完全删除switch语句?基本上,案例5允许用户将学生附加到模块上。有没有更简单的方法可以做到这一点?我还会看看上面建议的代码评论。 – newToJava