/**
   * Assign the set of students (presumably non-incoming-freshmen, but this is not checked) students
   * passed to their dorm rooms, in a way that <i>does</i> take race into account. (compare {@link
   * #assign}.) Minorities will have a higher probability of rooming with other minorities than they
   * would otherwise have had. As a precursor (side effect) to this, any students already existing
   * in upperclass dorms will be removed.
   */
  public void assignByRace(Bag upperclassmen) {
    emptyDorms();
    boolean foundRoomie;
    for (int x = 0; x < upperclassmen.size(); x++) {
      foundRoomie = false;
      Student s = (Student) upperclassmen.get(x);
      // need to leave current room so that they can get a new room
      s.leaveRoom();
      if (s.getRace() == Student.Race.MINORITY) {
        double rollDice = Sim.instance().random.nextDouble();
        if (rollDice < Sim.PROB_DUAL_MINORITY) {
          for (int m = 0; m < upperclassmen.size(); m++) {
            Student r = (Student) upperclassmen.get(m);
            // if the potential roommate is the same gender, is a
            //  minority, and has no room
            if (r.getId() == s.getId()) {
              continue;
            }
            if (r.getRace() == Student.Race.MINORITY
                && r.getGender() == s.getGender()
                && !(r.hasRoom())
                && !(s.hasRoom())) {
              // find a room that is completely empty
              foundRoomie = true;
              for (int y = 0; y < dorms.size(); y++) {
                Dorm d = (Dorm) dorms.get(y);
                if (d.isFull()) {
                  continue;
                }
                if (d.isFemaleOnly() && s.getGender() == Student.Gender.MALE) {
                  continue;
                }
                int i = 0;
                while (i < d.getNumRooms()) {
                  if (s.hasRoom() && r.hasRoom()) {
                    break;
                  }
                  try {
                    if (d.getRoomByIndex(i).isEmpty()) {
                      try {
                        d.getRoomByIndex(i).addResidents(s, r);
                      } catch (IllegalArgumentException e) {
                        System.out.println(e);
                      }
                    }
                  } catch (IllegalArgumentException e) {
                  }
                  i++;
                }
              }
              if (!s.hasRoom()) {
                // no empty room has been found to put these
                // students in; just assign them normally
                assignStudent(s);
              }
              if (!r.hasRoom()) {
                assignStudent(r);
              }
            }
          }
          if (foundRoomie == false) {
            // no same-minority, same-sex, roomless roommate found
            assignStudent(s);
          }
        } else {
          // dice roll not under PROB_DUAL_MINORITY
          assignStudent(s);
        }

      } else {
        // not a minority, assign normally
        assignStudent(s);
      }
    }
  }
Exemplo n.º 2
0
  /**
   * Creates a small window for editing student information
   *
   * @param window Parent window
   * @param student Student to edit.
   */
  public StudentInfoEditor(StudentsListTab window, Student student) {
    this.window = window;
    this.student = student;
    this.setTitle(student.getFirstName() + " " + student.getLastName());

    this.tabs = new JTabbedPane();

    this.avoidingTable = makeTable(student);
    this.scrollbar = new JScrollPane(this.avoidingTable);

    /*
     * Separation Tab
     */
    JPanel buttonsPane = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    JButton newStudentButton = new JButton("New");
    newStudentButton.setActionCommand("New Student");
    newStudentButton.addActionListener(this);
    buttonsPane.add(newStudentButton);

    JButton delStudentButton = new JButton("Delete");
    delStudentButton.setActionCommand("Delete Student");
    delStudentButton.addActionListener(this);
    buttonsPane.add(delStudentButton);

    JPanel separationPanel = new JPanel(new BorderLayout());
    separationPanel.add(scrollbar, BorderLayout.CENTER);
    separationPanel.add(buttonsPane, BorderLayout.PAGE_END);

    /*
     * Information Editing Tab contents
     */

    /*
     * Name and student ID text fields for setting those of a student.
     */
    JPanel studentIDSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel studentIDLabel = new JLabel("Student ID: ");
    this.studentIDField = new JTextField(Integer.toString(student.getStudentID()));
    this.studentIDField.setColumns(5);
    studentIDSetter.add(studentIDLabel);
    studentIDSetter.add(studentIDField);

    JPanel firstNameSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel firstNameLabel = new JLabel("First: ");
    this.firstNameField = new JTextField(student.getFirstName());
    this.firstNameField.setColumns(8);
    firstNameSetter.add(firstNameLabel);
    firstNameSetter.add(firstNameField);

    JPanel lastNameSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel lastNameLabel = new JLabel("Last: ");
    this.lastNameField = new JTextField(student.getLastName());
    this.lastNameField.setColumns(8);
    lastNameSetter.add(lastNameLabel);
    lastNameSetter.add(lastNameField);

    /*
     * Box to force assigned seating
     */
    JPanel assignedSeatSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel assignedSeatLabel = new JLabel("Assigned Seat");
    this.assignedSeatField = new JTextField();
    for (int i = 0; i < 3; i++) {
      for (int j = 0; j < this.window.currentClass.getQuadrants().get(i).getSize(); j++) {
        Desk desk = this.window.currentClass.getQuadrants().get(i).getDesk(j);
        if (desk.isEditable() == false && desk.getOccupyingStudent().equals(student)) {
          switch (i) {
            case 0:
              this.assignedSeatField = new JTextField(Integer.toString(j + 1));
              break;
            case 1:
              this.assignedSeatField = new JTextField(Integer.toString(j + 11));
              break;
            case 2:
              this.assignedSeatField = new JTextField(Integer.toString(j + 23));
              break;
          }
        }
      }
    }
    this.assignedSeatField.setColumns(2);
    assignedSeatSetter.add(assignedSeatLabel);
    assignedSeatSetter.add(assignedSeatField);

    /*
     * Box to set the race of a student.
     */
    JPanel raceSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel raceNameLabel = new JLabel("Race: ");
    this.raceSelection =
        new JComboBox<String>(
            new String[] {
              "White", "Asian", "AfricanAmerican", "Latino", "PacificIslander", "Other"
            });
    this.raceSelection.setSelectedItem(student.getRace().toString());
    raceSetter.add(raceNameLabel);
    raceSetter.add(raceSelection);

    /*
     * Box to set the Gender of a student
     */
    JPanel genderSetter = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JLabel genderLabel = new JLabel("Gender: ");
    this.genderSelection = new JComboBox<String>(new String[] {"Male", "Female", "Other"});
    this.genderSelection.setSelectedItem(student.getGender().toString());
    genderSetter.add(genderLabel);
    genderSetter.add(genderSelection);

    /*
     * Bottom button pane with save/cancel buttons
     */
    JPanel buttonPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JButton saveChanges = new JButton("Save");
    saveChanges.addActionListener(this);
    saveChanges.setActionCommand("Save");

    JButton cancelChanges = new JButton("Cancel");
    cancelChanges.addActionListener(this);
    cancelChanges.setActionCommand("Cancel");

    buttonPane.add(saveChanges);
    buttonPane.add(cancelChanges);

    JPanel comboboxPane = new JPanel(new FlowLayout(FlowLayout.LEFT));
    comboboxPane.add(genderSetter);
    JPanel informationPanel = new JPanel();
    informationPanel.setLayout(new GridLayout(5, 2));
    informationPanel.add(studentIDSetter);
    informationPanel.add(assignedSeatSetter);
    informationPanel.add(firstNameSetter);
    informationPanel.add(lastNameSetter);
    informationPanel.add(genderSetter);
    informationPanel.add(raceSetter);
    informationPanel.add(new JPanel());
    informationPanel.add(buttonPane);

    tabs.addTab("Information", null, informationPanel);
    ;
    tabs.addTab("Separation", null, separationPanel);

    this.add(tabs, BorderLayout.CENTER);

    this.setResizable(false);
    this.setSize(400, 320);
    this.setLocationRelativeTo(null);
    this.setVisible(true);
    this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
  }