I’m least happy with case 5 as it comprises too much code and allows duplicates. I heard about Sets but can see how it would work in this example
Here’s my complete source code:
public class MyApplication {
public static void main(String[] args) {
Control control = new Control();
control.run();
}
}
Driver/Control Class
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
}
}
Menu Class
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;
}
}
Module Class
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;
}
}
Student Class
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;
}
}
Then come back with what you have
In case 5 you set mutual references between modules and students.
You can reduce code duplication there by declaring one of the two classes as the leading one, lets say the module and inside the addStudent Method you call addModule(this)