Объектно-ориентированный зачетная система


Я после сбора мнения о сплоченности и соединения с моим приложением для улучшения программирования ОО.

Класс контрольных испытаний заполняет данные и вызывает главное меню

import java.util.HashSet;
import java.util.Set;


public class Control {

public void run() {
    // Populate Test Data
    Student jane = new Student("jane");
    Student alex = new Student("alex");
    Student mike = new Student("mike");
    Student james = new Student("james");
    Student julia = new Student("julia");

    Set<Student> students = new HashSet<Student>();
    students.add(jane);
    students.add(alex);
    students.add(mike);
    students.add(james);
    students.add(julia);

    Module ufce1 = new Module("UFCE1", "Java");
    Module ufce2 = new Module("UFCE2", "Software Design");
    Module ufce3 = new Module("UFCE3", "C#");
    Module ufce4 = new Module("UFCE4", "Client Server");
    Module ufce5 = new Module("UFCE5", "Data Structures");

    Set<Module> modules = new HashSet<Module>();
    modules.add(ufce5);
    modules.add(ufce4);
    modules.add(ufce3);
    modules.add(ufce2);
    modules.add(ufce1);

    jane.addModule(ufce1);
    jane.addModule(ufce3);
    alex.addModule(ufce1);
    alex.addModule(ufce2);

    ufce1.addStudent(jane);
    ufce3.addStudent(jane);
    ufce1.addStudent(alex);
    ufce2.addStudent(alex);

    // Call main menu 
    Menu menu = new Menu();
    menu.mainMenu(students, modules);
}
}

Класс menu - выводит меню для пользователя и звонки StudentManager или ModuleManager осуществляет в зависимости от выбора, сделанного

import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Set;


public class Menu{

public void mainMenu(Set<Student> students, Set<Module> modules) {
    System.out.println("Welcome to Student Record System!");

    while (true) {
        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");

        Scanner scan = new Scanner(System.in);

        StudentManager studentManager = new StudentManager();
        ModuleManager moduleManager = new ModuleManager(); 

        try {
            int selection = scan.nextInt();
            switch (selection) {
                case 1:
                    studentManager.listStudents(students); 
                    break;
                case 2:
                    moduleManager.listModules(modules);
                    break;
                case 3:
                    studentManager.studentModuleSearch(students, modules);
                    break;
                case 4:
                    moduleManager.SearchModulesWithEnrolledStudents(modules, students);
                    break;
                case 5:
                    studentManager.enrolStudentToModule(students, modules);
                    break;
                case 6:
                    exitRoutine();
                    break;
                default:
                    System.out.println("Invalid selected made. You must enter a number between 1 and 6.");
            }

        } catch (InputMismatchException e) {
            System.out.println("Only numeric values are accepted here.");
        } 
        catch (Exception e) {
            System.out.println("Invalid input.");
        }
    }
}

public void exitRoutine() {
    System.out.println("Goodbye!");
    System.exit(0);
}

}

Класс StudentModule - выполняет методы, касающиеся студентов

import java.util.Scanner;
import java.util.Set;

public class StudentManager {

// List all students 
public void listStudents(Set<Student> students) {
    for (Student student : students) {
        System.out.printf("%s ", student);
    }
}

// Set up scanner to allow for searching of students 
public String readStudentName() {
    System.out.print("Search for a student: ");
    final Scanner scan = new Scanner(System.in);   
    final String readStudent = scan.next().trim();
    return readStudent;
}

// Search students and return all modules they are enrolled on to 
public void studentModuleSearch(Set<Student> students, Set<Module> modules) {
    final String readStudent = readStudentName();
    final Student student = searchStudent(readStudent, students);
    if (student == null) {
        printNoStudentFound(readStudent);
        return;
    }
    for (Module module : modules) {
        if (module.getStudents().contains(student)) {
            System.out.printf("%s ", module);
        }
    }
}

// Search for match between searched string and module name
public Student searchStudent(final String searchStudent, final Set<Student> students) {
    for (final Student student : students) {
        final String studentName = student.getName();
        if (searchStudent.equalsIgnoreCase(studentName)) {
            return student;
        }
    }
    return null;
}

// Print if no modules are found under that name
private void printNoStudentFound(String searchModule) {
    System.out.println("No student found with name: " + searchModule);
}

// enrol a student onto a module by searching for the student and module prior to enrolling them
public void enrolStudentToModule(Set<Student> students, Set<Module> modules) {
    final String readStudent = readStudentName();
    final Student student = searchStudent(readStudent, students);
    if (student == null) {
        printNoStudentFound(readStudent);
        return;
    }
    ModuleManager moduleManager = new ModuleManager();
    final String searchModule = moduleManager.readModuleName();
    final Module module = moduleManager.searchModule(searchModule, modules);
    if (module == null) {
        moduleManager.printNoModuleFound(searchModule);
        return;
    }

    if (module.getStudents().contains(student)) {
        System.out.println("\n" + student + " is already enrolled on to " + module);
    } else {
        student.addModule(module);
        module.addStudent(student);
        System.out.println("\n" + student + " has been successfully enrolled on to " + module);
    }
}
}

Класс ModuleManager осуществляет - выполнение методов, связанных с модулями

import java.util.Scanner;
import java.util.Set;


public class ModuleManager {

// List all modules 
public void listModules(Set<Module> modules) {
    for (Module module : modules) {
        System.out.printf("%s ", module);
    }
}

// Set up scanner to read module names 
public String readModuleName() {
    System.out.print("Search module code: ");
    final Scanner scan = new Scanner(System.in);
    final String readModule = scan.next().trim();
    return readModule;
}

// Search modules and return all students enrolled on it 
public void SearchModulesWithEnrolledStudents(Set<Module> modules, Set<Student> students) {
    final String searchModule = readModuleName();
    final Module module = searchModule(searchModule, modules);
    if (module == null) {
        printNoModuleFound(searchModule);
        return;
    }
    for (Student student : students) {
        if (student.getModules().contains(module)) {
            System.out.printf("%s ", student);
        }
    }
}

// Search for match between searched string and module name
public Module searchModule(final String searchedModuleName, final Set<Module> modules) {
    for (final Module module : modules) {
        final String moduleName = module.getName();
        if (searchedModuleName.equalsIgnoreCase(moduleName)) {
            return module;
        }
    }
    return null;
}

// Print if no modules are found under that name
public void printNoModuleFound(String searchModule) {
    System.out.println("No module found with name: " + searchModule);
}
}

Студент класса - создание новых объектов Универсиады

import java.util.HashSet;
import java.util.Set;

public class Student {

private String name;
private Set<Module> modules = new HashSet<Module>();

public Student(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public Set<Module> getModules() {
    return modules;
}

// enrol students from test data onto a module 
public void addModule(Module module) {
    modules.add(module);
}

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

Класс модуля - создает новые объекты модуля

import java.util.HashSet;
import java.util.Set;

public class Module {

private String name, description;
private Set<Student> students = new HashSet<Student>();

public Module(String name, String description) {
    this.name = name;
    this.description = description;
}

public String getName() {
    return name;
}

public Set<Student> getStudents() {
    return students;
}

// attach modules from test data to a student 
public void addStudent(Student student) {
    students.add(student);
}


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


1696
2
задан 6 декабря 2011 в 09:12 Источник Поделиться
Комментарии
2 ответа

Что если мне нужно, чтобы процесс студентов и регистраций модуль использует текстовый файл вместо того, чтобы задавать в интерактивном режиме? Я бы отвязать ввода-вывода с логическим контроллером (StudentManager, ModuleManager осуществляет и т. д.).

1
ответ дан 6 декабря 2011 в 09:12 Источник Поделиться

Просто два быстрых указатели:

public void SearchModulesWithEnrolledStudents(Set<Module> modules, Set<Student> students)

должен быть верблюд обсаженных

public void searchModulesWithEnrolledStudents(Set<Module> modules, Set<Student> students)

и быстрый рерайт

public Module searchModule(final String searchedModuleName, final Set<Module> modules) {
for (final Module module : modules) {
final String moduleName = module.getName();
if (moduleName.equalsIgnoreCase(searchedModuleName)) {
return module;
}
}
return null;
}

так что он не рухнет на звонок с:

foo.searchModule(null, modules)

1
ответ дан 20 января 2012 в 09:01 Источник Поделиться