This assignment helps you practice designing and using an expert system. Your task is to write rules for the Drools rules engine for a student advisor expert system. A student advisor system would guide students on class selection based on their major (and corresponding major requirements), the classes they have already taken and their grade, and their interests. For this assignment, we’ll restrict our focus to CSCI majors, the system will only need to suggest classes for the next semester, and we’ll ignore non-major classes and general education requirements.

## Template projects

These templates include all the Drools libraries (JAR files), plus example Java code and a DRL rules file.

## Knowledge base

### Facts

Every fact has a type, i.e., a class. (You can create types in your DRL file using declare MyType, but these cannot be referenced in your main Java code.) Ultimately, you’ll probably want at least these types:

• Student type: name
• Course type: course name, course number, unit count; note, prerequisites can be complex so they’re better represented as rules
• Semester type: semester name, year
• CourseOffering type: a course is offered in a particular semester
• CourseAttempt type: student attempted a course in a particular semester and earned a particular grade
• Preference type: some student has some preference, e.g., preference for security or AI or networks

### Rules

• Course prerequisites; these can be complex, e.g., prereqs for CSCI 211: “CSCI 141 and either MATH 141Q or MATH 130 or MATH 125Q”
• Major requirements; include minimum GPA requirements
• Preferences (some preferences might be inferred, some might be obtained directly from user input)
• Choices for next semester; depends on student preferences and what they have already taken

Refer to the Stetson Catalog for the requirements for a CSCI degree.

## Goal

Your advising system should ask the user for some basic facts (which courses they’ve taken, what grades they earned, etc.); it should make some inferences about preferences; and it should give a selection of courses the student should take in the next semester based on this information.

## Deliverables

Submit all your source code and DRL files.