Transcript Analyzer - Computer Science

Transcript Analyzer – Requirements Analysis Document
Authors:
Duc Duong
Jason Morris
Nicholas Lloyd
([email protected])
([email protected])
([email protected])
1. Introduction
1.1 Purpose of the system
A central task that a student performs when planning for their own graduation is the
analysis of their transcript records and how the courses they have taken satisfy the
graduation requirements set by their program of study in the University. By evaluating
where they are lacking with respect to graduation a student can better plan the future of
their academic career in order to graduate in a timely manner. Faculty Advisors to these
students also perform this task in order to better understand the current needs of their
advisees. However, manually checking and rechecking transcript records against written
requirements within University catalogs is a tedious and time consuming task.
Additionally, graduation requirements change within each department and program from
time to time, adding another level of complication. Some of the systems used by the
registrar require automatic evaluation of a student’s transcript for assigning warnings to
different students in danger of not graduating or losing financial aid. In these situations
the transcript needs to be evaluated through limited requirements simply to determine
how many requirements are missing or, more frequently, how many classes have been
failed (No Record, NR).
The purpose of the Transcript Analyzer is to provide both students and faculty advisors
with a tool that will automatically evaluate a student’s transcript using current or previous
graduation requirements. This evaluation should show the user what requirements have
been satisfied for the student in question, and for those requirements unsatisfied
information regarding what credits and/or courses are missing. The Transcript Analyzer
should also allow University administrators to create, review, update, and delete
graduation requirement sets for the different programs and majors.
1.2 Scope of the system
The Transcript Analyzer is a reporting tool only for performing detailed and unofficial
analyses of student transcripts against graduation requirements. They are unofficial
precisely because regardless of the accuracy of their reports, they should not supersede
the authority of the University officials directly responsible for evaluating students for
graduation. As a reporting tool on a given student’s academic progress its intended nonadministrative users include students and any faculty member who is either an advisor or
requires special access to the student’s progress information, as is the case for ROTC
officers. Administrative access to create, modify, and delete graduation requirements
within the system is intended for University personnel who are responsible for
performing the formal degree evaluations prior to a student’s graduation.
1.3 Objectives and success criteria of the project
The objectives of Transcript Analyzer are to:
 Provide advisors and students a fast, adequate, accurate, and reliable report on the
status of a student toward his/her undergraduate degree at Worcester Polytechnic
Institute based on a given transcript and a set of degree requirement rules.
 Enable the registrar office to manage the set of degree requirement rules easier
and more efficiently through a simple and friendly interface.
The success of the Transcript Analyzer project is based on the ability to minimize the
time and effort needed to manage degree requirement rules, as well as to help professors
save time on advising their students. The future system has to provide these advantages in
order to be accepted and replace the current one.
1.4 Definitions, acronyms, and abbreviations
A transcript is a listing of all the courses and projects a student has completed or failed to
complete for University credit over the period of their studies. A transcript is analyzed,
or “audited,” by applying a set of constraints represented as program graduation
requirements (and departmental requirements) to the information contained within the
transcript. If all constraints are satisfied by the courses and projects completed by the
student, as detailed in the transcript, then the student is allowed to graduate. Any
unfulfilled constraints indicate where the student is lacking in their academic career.
A program graduation requirement, which will be referred to simply as a Program,
consists of the following:
 A collection of Areas representing groups of similar requirements, such as
globally applied University requirements and Major specific requirements
 An Area representing a collection of Major specific requirements may be
associated with additional collections of requirements called Groups which
represent Concentrations within a Major area of study.
 Areas and Groups consist of Rules which are conditional (AND/OR) relationships
between courses provided by the University as well as a number indicating how
many credits (in other words how many valid courses) are required to satisfy the
Rule.
A transcript is complete if it satisfies all requirements for the student’s specific program
of study, incomplete if otherwise. When a transcript is incomplete, there is a set of
uncompleted areas, together with counts of the degree to which these individual areas
have been partially satisfied based upon credits satisfying the requirement areas.
Additional terms include:
 Course numbers – human readable unique identifiers for each course offered, they
consist of…
o 2 letter program code – for instance CS for Computer Science.
o 4 digit course number – four numbers to further specify the course, the
first of which indicates the level of difficulty (from 1 to 4) of the course.
 Course Registration Number (CRN0 – special serial numbers used internally for
the registrar that represent specific courses.
1.5 References
The current system employed by WPI for transcript analysis, among other things, is the
Banner system by Sungard (http://www.sungardhe.com/default.aspx?id=80). In
particular the transcript analysis portion is a part of the Banner Student component in the
Banner system (http://www.sungardhe.com/default.aspx?id=94). Documentation is
available online for this system and its different components.
1.6 Overview
2. Current system
The current transcript analysis (also referred to as degree audit) system used by WPI is
Sungard’s Banner system (see the References section). This system permits the
construction of rule representations of graduation requirements. Rules are constructed
using simple conditional logic (AND, OR, NOT operations) with course numbers stored
within the system. Similar rules are grouped together into collections known as groups
and areas (see the Definitions, acronyms, and abbreviations section). Groups and areas
are connected with Programs which represent the different degree programs offered by
the University. Records of previous requirement sets from older University catalogs are
updated by directly copying old records, updating the requirements that have changed,
and saving the modified copies as new records.
3. Proposed system
3.1 Overview
In order to develop an improved Transcript Analyzer tool, the new implementation must
be built upon the current Banner system. While the Banner system offers a variety of
functionality, appropriate interfaces to allow more powerful rule editing and report
presentation must be developed. Additionally, rule development in the new system must
use more advanced rule representations beyond simple conditional logic.
3.2 Functional requirements
The Transcript Analyzer supports three types of users:
 The student should be able to see analysis reports of their own transcripts as
applied to different program requirements, by year or major. Only one report may
be received at a time by the student.


The advisor should be able to see the same reports a student can see for any
student they currently advise. Advisor users include faculty as well as ROTC
officers that need to see reports on the progress of their students.
The administrator should be able to create, modify, delete, and view requirements
within the system as well as produce the same reports that the student user can to
assist in the formal degree audit process.
o New requirement sets are associated with the course catalog for a
particular academic year, identifying what University set requirements the
requirements written in the system represent.
o Certain requirement sets are identified as being “global” indicating that
they are University requirements applied to all degree programs while
other requirement sets are “local” to a particular degree program.
For the report capabilities of the Transcript Analyzer, available to all three user types, the
system must receive information regarding who the student is in order to obtain their
transcript data, and what requirement sets to apply to their transcript. The latter consists
of an academic year and a program of study (i.e. major). The analyzer then performs the
analysis by applying the rules contained within the requirement sets to the transcript
information, generating a report detailing what requirements have been satisfied and what
requirements have not been satisfied. For unsatisfied requirements the system details in
its report what rules have not been satisfied by the current transcript. These unsatisfied
requirements are displayed by area and, where applicable, group (see Transcript Analyzer
Report mockup screenshots, Figures 2 and 3 in section 3.4.2.1).
The report presented to the requesting user presents a brief summary of information
regarding the student and the specified area of study as well as overall credits completed
and total credits required at the top of the report. The rest of the report is a listing of each
requirement section, from global University requirements to more specific program
requirements, detailing what courses that have been taken satisfy which condition within
a rule of the requirement and what courses are missing for unsatisfied conditions.
Additionally each section will show the number of course credits required as well as the
number completed, thus the user will be able to see by the unsatisfied conditions what
courses they can choose from to satisfy the missing conditions.
The report system is constrained for the advisor user such that the advisor is limited to
only selecting programs of study for a given student that they are qualified to advise. The
student user, however, may select any program of study in order to simplify instances
where a student user may wish to change programs.
The administrator user is the only user capable of creating, viewing, modifying, and
deleting requirement rule sets. As such a special Rule Editor interface is available to the
administrator user where said user may choose to either view an existing requirement
rule set by choosing the desired academic given year, program of study, and associated
requirement set (see section 3.4.2.2 for details on rule editing and the Rule Editor
interface). For globally applied University requirements only the academic year is
necessary to bring up the list of all global requirement sets. For all other requirement sets
the program of study is necessary input. With a retrieved requirement set the
administrator may edit the current set, copy the set, or delete the set from the system.
Creating a new set does not require the user to request a previously constructed set; they
just use the editor interface and specify a name and academic year for their new set.
The copy function for the Rule Editor is available in order to simplify the updating of
requirements for new academic years where the requirements of the previous year differ
by a small margin. In this situation it is easier to copy the previous requirements and then
to edit the rules and the academic year for the copy in order to produce the new
requirement set.
3.3 Nonfunctional requirements
3.3.1 Usability
General usability is a high-priority attribute of the Transcript Analyzer. For all actors
who are also users of the system, particular attention will be paid to the following
features and conditions.
3.3.1.1
Assumed user expertise
Users are not assumed to be expert computer users nor even technically competent
computer users. Therefore, the application will not require special knowledge of fields
including but not limited to: programming languages, computer science theory, database
querying, database administration, or internet programming. It is expected that a user can
access and manipulate a modern web browser and manipulate common windowing GUI
elements such as text boxes, drop-down lists, radio buttons, etc. It is also assumed that
the user can navigate a standard windowing file system and be able to perform basic
operating system tasks including but not limited to opening a file, printing a file, locating
a file, and navigating to a web page.
3.3.1.2
Interface standards
The user interface shall be minimalist in design, meaning that it will use the minimum
number of graphical user interface (GUI) elements and human-computer interaction
(HCI) principles to produce a transcript analysis. The style and color scheme shall
conform to the other currently installed Banner applications so that continuity of
presentation is maintained.
The interface will be renderable and manipulable without any additional plugins,
controls, or other downloadable components (i.e., Flash, Java Applets, ActiveX controls,
etc.). The user will not be burdened with the overhead of downloading large JavaScript
libraries to the client browser, consequently client-side scripting will be used sparingly.
If client-side scripting is required, care will be taken to avoid performance degradation on
the lowest common denominator client system (see hardware standards). Any client-side
scripting that places a performance tax upon the client (i.e., AJAX, DoJo, etc.) will be
carefully scoped to minimize the effect.
The interface itself will be determined by the browser in which the application is
rendered. Obviously, there will be some variation among the supported browsers.
SunGard Higher Education has completed testing with the following browsers:
Table 1 Supported browsers in Banner 7.01
Banner Version
Internet-native Banner
7.02



Browser Comments
Microsoft Internet Explorer 6.0 (with Oracle JInitiator
1.3.1.18)
Netscape 7.0x (with Oracle JInitiator 1.3.1.18)
Macintosh client - Safari 1.2 (Sun plug-in 1.4.2) for Mac
OS X (1.4 JDK); must use Forms patch set patch2
(9.0.4.2)
Internet-native Banner
via the Luminis Portal


Microsoft Internet Explorer 6.0
Macintosh client - Safari 1.2 (Sun plug-in 1.4.2) for Mac
OS X (1.4 JDK); must use Forms patch set patch2
(9.0.4.2)
Self-Service Banner 7.0






Microsoft Internet Explorer 6.0
Netscape 7.01
Netscape 7.2
Mozilla 1.7
Microsoft Internet Explorer 5.2 for Macintosh OS X
Macintosh client - Safari 1.2 for Mac OS X
Self-Service Banner via
the Luminis Portal



Microsoft Internet Explorer 6.0
Netscape 7.2
Macintosh client - Safari 1.2 for Mac OS X
At this time, the following browsers are not supported:





1
2
Browser Java for INB
SUN Java Plugin/WebStart for INB
AOL's repackaged browser
LINUX desktop browsers
Other non-Windows browsers
See www.wvnet.edu/banner/ban7upg/Banner7FAQ05-26-06.doc
See http://www.oracle.com/technology/products/forms/htdocs/10g/clientsod_forms10g.html
3.3.1.3
Online help and documentation
The system shall feature an online, HTML-based help system in accord with existing
Banner stylistic guidelines (See Banner help documentation for an example). The online
help shall be created and compiled using a standard help authoring tool such as JavaHelp,
RoboHelp, or MS HTML Workshop. Help shall implement search by index, search by
keyword, and search by category. All help and end-user documentation shall be printable
in PDF format. The PDF format for the documentation shall allow copy and paste
functionality so that users may create their own custom annotations and sub-documents.
Online documentation in PDF form shall be available outside of the Banner context so
that end-users are not required to log into Banner in order to view them.
3.3.2 Reliability
The general ability of the system to perform its required functions under specified
conditions (during normal operation) and over a given time period is described below.
3.3.2.1
Reliability, availability, and robustness
Under normal operating conditions, the system will have a reliability, or meantime until
failure, equal to or greater than the meantime for the server hosting the system to require
rebooting. That is, the system is expected to have at least 3-sigma (99.99 %) uptime. It
is expected the system will be continuously available, except for routine maintenance
periods to be specified later. Before these maintenance periods, all system users and
administrators shall be notified, preferably by email, that the system will be unavailable
for use.
Times of peak use often coincide with times of greatest need for analysis (i.e., at the end
of Spring term/semester of any given year). During times of peak use, the system should
accommodate the theoretically largest number of concurrent users (i.e., The sum of all
possible users, administrators, advisors, etc. simultaneously trying to access the system
plus some margin of error factor).
In all cases, the system will robustly reject incorrect inputs and selections to preserve data
integrity. All user interfaces will have both client-side and server-side form validation as
well as database validation in the case of new data being added to the system (i.e. new
auditing rules.).
3.3.2.2
Fail-over restarting
If the server hosting the application requires a reboot, then the system shall send an email
notification to all affected users, administrators, etc. that the system will be restarted in an
stipulated time period. System administrators shall monitor the system for software
failures that require the application to be reloaded. If this situation occurs, the system
administrators shall issue a similar warning for a hardware reboot.
3.3.2.3
Fault tolerance
In general, the system shall have the ability to gracefully recover from non-fatal faults
(i.e., incorrect data input, wrong button presses, etc.) without causing an application
restart. In all cases, the system should restore its previous state before the error occurred
and return the user to the GUI view that was visible before the error. Users will not need
to exit the system and re-enter for any but the most unforeseen and severe errors.
3.3.2.4
Safety requirements
The system is not required to be mission-critical because the loss of life, property, or
other valuable items will not result if the system (either the software or its hardware) fails
catastrophically at any time.
3.3.2.5
Security requirements
Though the system is not mission-critical in the purest sense, it does require a secure and
encrypted login procedure and mechanism to preserve the confidentiality and privacy of
users. Only systems administrators and department administrators are allowed to edit,
update, modify, or delete auditing rules. Under no circumstances are students or advisors
to be allowed to edit, update, modify, or delete auditing rules. All auditing rules are to be
stored on a secure database server with restricted access privileges. Login shall use a
typical username and password combination identical to the current WPI Banner
requirements. Password fields on the login form shall be encrypted.
3.3.3 Performance
Web applications have more liberal performance ranges than native client (fat client)
applications. These are enumerated below.
3.3.3.1
Responsiveness
The system will respond to all requests in less than or equal to the time to execute the
most complex analysis at peak use time and at peak load. An estimate of this time is
fifteen (15) seconds. Actions that do not involve initiating an analysis and that are simply
input/output or communications with the application server should be on the order of less
than or equal to five hundred (500) milliseconds.
3.3.3.2
Time-critical tasks
A user will not be kept waiting for more than 30 seconds to complete an analysis. If the
system cannot fulfill a request in that time, the system will notify the user that that system
has become busy and will prompt the user to re-submit the request. If an audit rule
editing session is opened, it shall timeout in 30 minutes if the system does not detect any
activity. If an analysis session is opened, it shall timeout in 30 minutes if the system does
not detect any activity.
3.3.3.3
Concurrent users
The system shall accommodate a number of concurrent users equal to the current number
supported by the BANNER system.
3.3.3.4
Data store
The data store shall remain Oracle-based as per the specifications of the current
BANNER system.
3.3.3.5
Maximum latency
Latency is a function of the pooling used to connect to the database, therefore the system
will employ dynamic database connections. Complex data processing will be done on the
database server rather than in application code as much as possible to leverage existing
database optimizations.
3.3.4 Supportability
It is vital to have a system that can scale as WPI's needs evolve and grow. Therefore, it is
necessary that the system have the following capabilities.
3.3.4.1
Extensions and augmentations
The system will be able to support augmentations and extensions via some high-level
language, preferably Java, via a public API. The system administrators will work with
the system users to determine which APIs are likely to evolve rapidly and to ensure that
those are engineered in the most flexible way. A key component of this initiative is the
BANNER API itself, which has only been made public since version 7.0. The system
administrators will work closely with the BANNER vendors to ensure that system
developers have access to sufficient technical documentation and vendor expertise to
assist them in their work.
3.3.4.2
Maintaining and updating system
It is recommended that the oversight for the transcript analysis system rest with a
university-level committee, that in addition to administering and controlling the general
university graduation requirements, also administers and controls the system updates of
the various WPI departments. Furthermore, each department shall form a committee
headed by a chair whose duty it will be to collate and finalize graduation rules for that
department. The chair will then update those rules in the transcript analyzer system or
designate an agent who is more familiar with the system's user interface. The universitylevel administration will perform annual audits of the overall university rule base to
ensure data integrity as well as term-by-term partial audits and reminders to individual
departments to test and validate their own rule bases before the printing of the next
course catalog.
3.3.4.3
Portability to other platforms or hardware
It is not a requirement at this time that the system be portable to another platform or
hardware set.
3.3.5 Implementation
3.3.5.1
Hardware constraints
The general system has no hardware constraints at this time. The client-side interface
will be displayable on all modern personal computer platforms.
3.3.5.2
Maintenance constraints
There are no general maintenance constraints at this time.
3.3.5.3
Testing constraints
There are no general testing constraints at this time.
3.3.6 Interface
3.3.6.1
System integration with existing systems
The transcript analysis system is highly constrained by the existing BANNER system,
and it will be made to integrate with BANNER's existing interfaces and API. There is no
anticipation that this requirement will change in the foreseeable future.
3.3.6.2
Data imported/exported
BANNER is a closed system with regard to data input and output due to the nature of the
personal data that it holds. All import and export functionality will be securely password
protected and only administrative-level access will be granted. Non-FERPA sensitive
data will have a batch processing mechanism for upload and download to be specified at
a later date.
3.3.6.3
Supported client standards
All client standards are governed by the existing look and feel of the BANNER system.
The appearance of the system to users via the client interface should be transparent with
respect to the existing BANNER system (i.e., placement of common controls, color
scheme, etc.)
3.3.7 Operation
3.3.7.1
System management
The system shall be managed at the university level by the current managers of the
BANNER system. Individual WPI departments shall be responsible for creating,
managing, and uploading their own graduation rules to the main system.
3.3.7.2
System troubleshooting and support
The current WPI help desk shall be given instruction and documentation to provide
support for the new transcript analysis system to the WPI community. Online help will
be integrated into the system's user interface. The university shall schedule one in-house
training session per term to educate new administrators on the correct procedures for
creating, managing, and uploading rules.
3.3.8 Packaging
3.3.8.1
Installation procedure
The installation shall consist of deploying a Java *.JAR or *.WAR file containing the
transcript analysis code to the BANNER server. It is expected that BANNER
administrators are familiar with this procedure.
3.3.8.2
Installation time constraints
There are no installation time constraints at this time.
3.3.8.3
Concurrent access availability
If the system becomes unavailable due to application error, server error, or other errors
within BANNER, the system shall generate log entries that indicate the error and its root
cause. If possible, any clients that are still in communication with the system shall be
notified either through the client interface or via email that the system has become
unresponsive and that that actions are being taken to correct the problem. Consequently,
an email will be sent to the system administrators notifying them of the problem.
In general, the system shall be designed so as to accommodate the peak server load at the
peak usage time as designated elsewhere in this document (See Performance).
3.3.9 Legal
3.3.9.1
Legal access
Only authorized WPI administrators, staff, and designated faculty shall have access to the
personal data and rule administration functions of the transcript analysis system.
3.3.9.2
Licensing
Since BANNER is already a licensed application at WPI and this transcript analysis
system is proprietary sub-system, there should be no further general licensing issues.
3.3.9.3
Intellectual property
All inventions, devices, and algorithms used in transcript analysis system are property of
WPI. All intellectual property developed as a result of this project are copyrighted by
WPI.
3.3.9.4
Royalties or fees for proprietary components
Should a rule based approach be used, the de facto standard for rule engines implemented
in Java is Jess. Jess is proprietary software that is licensed by Sandia Corporation, and a
commercial license for its inclusion in the transcript analysis system would need to be
negotiated and purchased.
3.3.9.5
Family Educational Rights and Privacy Act (FERPA)
constraints
Under all circumstances, the FERPA guidelines and requirements shall be enforced by
the administrators of the transcript analysis system. No person shall have access to
confidential student information without the express permission and foreknowledge of
the university-level administration and the department-level administration involved.
The system shall provide tie-ins to the BANNER system to allow senior systems
administrators the ability to grant various levels of access rights to those requesting such
rights.
3.4 System models
3.4.1 Use Case Model
Rule Management System (RMS)
Delete Rule
Create Rule
Student
Degree Evaluation System (DES)
<<include>>
<<include>>
Registrar
Validate Rule
Retrieve Course
<<include>>
Evaluate Transcript
<<include>>
Advisor
<<include>>
<<include>>
<<include>>
Update Rule
<<include>>
Retrieve Rule
Copy Rule
<<include>>
Retrieve Transcript
<<include>>
<<include>>
View Rule
Figure 1: Use Case Diagram of the Transcript Analyzer
Use case name
Evaluate Transcript
Participating actor
Flow of events
Initiated by Advisor or Student
Step
Action
1
The Advisor (or Student) selects “Evaluate Transcript” function for a
student
The Advisor (or Student) selects a desire degree
2
DES loads the transcript and associated rules
Initiate “Retrieve Transcript”
Initiate “Retrieve Rule”
3
DES shows a report on current statues of the student toward the selected
degree
Entry
condition
Exit success
condition
The Advisor (or Student) logged in to DES
The Advisor (or Student) receives a report on the given transcript

The Advisor (or Student) receives a message indicating why DES cannot
retrieve the needed rules OR
The Advisor (or Student) receives a message indicating why DES cannot
retrieve the transcript
DES has to provide a accurate evaluation
DES has to show a missing courses or requirements
Exit failure
condition

Quality
requirements


Use case name
Retrieve Transcript
Participating actor
Flow of events
Initiated by Advisor or Student
Step
Action
1
DES receives a request to load a transcript
2
DES retrieves the transcript, changes state to ready, and waits
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
The Advisor or Student logged into DES and initiated “Evaluate Transcript”
DES changes the state to ready
DES could not retrieve the transcript
Use case name
Create Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
The Registrar activates the Create Rule function
2
RMS prepares a list of courses for the new rule and displays a rule
definition form
Initiate “Retrieve Course”
3
The Registrar defines a new rule and then submits the form
4
RMS receives form and validates the new rule.
Initiate “Validate Rule”
5
RMS saves it and sends confirmation message back to the Registrar
Step
Branch Action
5a
RMS takes the Registrar back to step 3 and shows a warning message if
the new rule conflicts with some existing rule
Extensions
Entry
condition
Exit success
condition
The Registrar logged in to RMS
The Registrar receives a confirmation message that a new rule was created

Quality
requirements
The Registrar receives a message indicating RMS cannot retrieve the list of
courses OR
 The Registrar receives a message indicating why RMS cannot save the rule
even it was valid
RMS has to present a rule definition form that allows the Registrar with no
knowledge of programming skills and rule description languages to define the rule.
Use case name
Validate Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
RMS receives a request to validate a rule
2
RMS retrieves all associated rules and compares each of them with the
input rule
Initiate “Retrieve Rule”
3
RMS prepares the validation result, changes state to ready, and waits
The Registrar logged in to RMS and initiated either “Create Rule”, “Update Rule”,
or “Copy Rule”
Exit failure
condition
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
RMS changes the state to ready
RMS could not retrieve one or some rules


RMS has to show all the detail conflicts if exist.
RMS has to find out if the input rule is implied by one or some existing rules
or reverse
Use case name
Retrieve Rule
Participating actor
Flow of events
Initiated by Registrar, Advisor, or Student
Step
Action
1
RMS receives a request to load a rule
2
RMS retrieves the rule from database, changes state to ready and waits
The Registrar logged in to RMS and initiated one of the following use-cases “View
Rule”, “Update Rule”, “Copy Rule”, or “Create Rule”
The Advisor or the Student logged in to DES and initiated use-case “Evaluate
Transcript”
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
The rule was retrieved and the state changed to ready
RMS could not retrieve the rule and changed its state to fail with an error message
Use case name
Retrieve Course
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
RMS receives a request to load a course
2
RMS retrieves the course, changes state to ready and waits
The Registrar logged in to RMS and initiated either “Create Rule” or “Update
Rule”
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
RMS changes the state to ready
RMS could not retrieve the course and changed its state to fail with an error
message
Use case name
View Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
The Registrar selects a rule to view
2
RMS gets the rule definition and describes it in a human understandable
method
Initiate “Retrieve Rule”
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
The Registrar logged in to RMS
The Registrar sees the rule described in a human understandable method

The Registrar receives a message indicating RMS cannot retrieve the rule

The rule has to be described in some meaningful sentences
Use case name
Copy Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
The Registrar activates Copy Rule function
2
RMS presents a form with a list of original rules and a list of destinations
3
The Registrar selects a set of rules and destination
4
RMS retrieves rules from the source and validates them at the new location
Initiate “Retrieve Rule” and “Validate Rule”
5
RMS saves rules to the new location
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
The Registrar logged in to RMS
The Registrar receives a confirmation message that rules were copied


The Registrar receives a message indicating that there is no rule to copy OR
The Registrar receives a message indicating why RMS cannot copy rules to
new location because of conflict with current rules there OR
 The Registrar receives a message indicating why RMS cannot copy rules even
there is no conflict
RMS has to allow the Registrar to select a set of rules by filtering them by year,
department, or major
Use case name
Update Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
The Registrar selects a rule to modify
2
RMS gets the rule, prepares a list of courses, and displays a rule definition
form with the specified rule information
Initiate “Retrieve Rule”
Initiate “Retrieve Course”
3
The Registrar modifies the rule and then submits the form
4
RMS receives form and validates the rule.
Initiate “Validate Rule”
5
RMS saves it and sends confirmation message back to the Registrar
Step
Branch Action
5a
RMS takes the Registrar back to step 3 and shows a warning message if
the modified rule conflicts with some existing rule
Extensions
Entry
condition
Exit success
condition
The Registrar logged in to RMS
The Registrar receives a confirmation message that the rule was modified

Quality
requirements
The Registrar receives a message indicating RMS cannot retrieve the list of
courses OR
 The Registrar receives a message indicating why RMS cannot retrieve the rule
OR
 The Registrar receives a message indicating why RMS cannot save the rule
even it is valid
RMS has to present a rule definition form that allows the Registrar with no
knowledge of programming skills and rule description languages to define the rule.
Use case name
Delete Rule
Participating actor
Flow of events
Initiated by Registrar
Step
Action
1
The Registrar selects a rule to delete
2
RMS asks the Registrar to confirm the deletion
3
The Registrar decides to delete
4
RMS deletes the rule and sends confirmation message back
Exit failure
condition
Entry
condition
Exit success
condition
Exit failure
condition
Quality
requirements
The Registrar logged in to RMS
The Registrar receives a confirmation message that the rule was deleted


The Registrar decides not to delete the rule in step 2 OR
The Registrar receives a message indicating why RMS cannot delete the rule
3.4.2 User interface
3.4.2.1
Transcript Analyzer Report Screen
Figure 2: Upper portion of the Transcript Analyzer Report, adapted from the
current Banner system report to be more usable.
Since the new Transcript Analyzer will be built upon the current Banner system, it is
reasonable to expect the interface components to be similar in format but improved in
content. Figure 2, displayed above, depicts a mockup of the first portion of a Transcript
Analysis Report for the new system showing basic information regarding a given
student’s activity. This information includes the student’s chosen Program, requirements
set to evaluate against (based upon catalog term), when the transcript data was last
updated, and current credit hour totals compared against required credit hour totals.
Figure 3: Areas portion of a Transcript Analyzer Report, adapted from the current
Banner system report to be more usable.
While the upper portion of a report will display basic information regarding the student,
their program, and the requirement set being applied in this analysis to their current
transcript, the power of a Transcript Analyzer Report is in the sections that follow.
Figure 3 above shows a mockup of a potential Computer Science student’s Transcript
Analysis Report. The report is broken up into a listing of the different Area requirement
sets of varying complexity. Every area section shows in its title a color coded label
indicating whether or not the requirement area has been satisfied. If the area has been
satisfied then the details for the course taken by the student that satisfies this requirement
is recorded in the table, along with a grade if the course has been completed (as opposed
to courses currently in session). Depending upon the specificity of the requirement set, a
section of each Area table, the Required Courses section, shows what courses can be
taken to satisfy this requirement. Note that the last Area displayed in the figure is only
partially satisfied, thus showing the single course of 5 total required that satisfies this
requirement area.
3.4.2.2
Rule Editor Interface
3.4.2.2.1 Using Rules, Rule Engines, and Rule Editing
In general, a rule is a compact representation of a set of logical conditions and the actions
to be performed when those conditions are met. Rules are similar to procedural IFTHEN statements, but they are never called in a procedural or algorithmic manner.
Rather, rules operate automatically and opportunistically on data as they are made
available to a rule-based program.
When, in the course of analyzing the business logic needs for a given software project, it
becomes apparent that decisions will be made by many complex modules, classes, or
other constructs using copious IF-THEN type code, the use of a rule-based approach
makes good sense. The maintainability and scalability of business logic that depends
upon such IF-THEN code is well-documented to be poor at best. In all cases, if changes
to the business logic need to be made, source code must be checked out of source control,
edited, tested, and then checked back in. This cycle is time-consuming, it requires a
programmer to edit the code, and has a high probability of introducing side effects due to
code dependencies.
For these reasons, rules are well-suited for the implementation of the general transcript
analysis functionality. Changes can be made on-the-fly as production code is running.
Rules can be edited by non-programmers. Most importantly, rules are generally
independent of one another, and with good programming practice their effects can be
localized to well-defined modules and data namespaces. Such an implementation would
most likely be enabled by an existing component technology that provides rule-based
programming support. This component or sub-system technology would then be
transparently embedded in the main transcript analyzing system. Such a sub-system
would be composed of a:



Rule engine: a software component capable of applying rules to data.
Rule base: a database of rules that represents the knowledge for analyzing a
transcript.
Rule manager: a software component that acts as the interface between the rule base
and those who create, edit, update, and delete rules.
The general problem of allowing plain-English create, edit, update, and delete
functionality for any given rule in a particular rule language is a non-trivial programming
project. Most implementations begin with some sort of restricted language – a subset of
the complete programming operations from which one can form rules in a given formal
rule language3. This restricted language is implicitly enforced by the rule manager GUI.
3
See Jess http://herzberg.ca.sandia.gov/jess/ and CLIPS http://www.ghg.net/clips/CLIPS.html
A full treatise on rules, rule-engines, and rule-based declarative programming is beyond
the scope of this document. Those who require more details are recommended to read the
references listed in the foot notes to this section. What follows is a brief description of
possible rule types, editing interfaces, and other issues encountered while analyzing a
given transcript for compliance.
3.4.2.2.2 Implementation issues
The holy grail of all rule-based implementations is that the rules will be creatable and
manageable by non-programmers. While this goal is noble and understandable, there are
significant practical problems that must be overcome to allow non-programmers to
construct rules outside of a formal rule language and in plain language. It is impractical
to attempt to expose the richness of a given computer programming language via a finite
set of grammars and productions rendered via a finite set of GUI components. In the
limit, one simply ends up creating a general integrated development environment and
unmanageable amount of complexity. However, it is reasonable to expose a subset of a
rule based language via a GUI that regulates what kinds of rules can be constructed.
In general, the more complex the rule, the more difficult it will be to map its plain
language source to its rule language equivalent. As an example, consider the following
plain language rule:
Choose any five (5) courses from {BB, BME, CE, CH,CHE ECE,ES,GE,ME,PH}
where at least three (3) are from { BB, CH,GE, PH } and two (2) are
from { BB|CH|GE|PH }
In Figure 4, observe what happens when one encodes the above plain language rule in
Jess:
(defrule SCIENCE::check-for-general-science-requirement
"General set BB, BME, CE, CH, CHE, ECE, ES, GE, ME, PH"
?ctrl<-(science-is_unsatisfied)
?bc<-(MAIN::bin-count (bin science) (count ?c))
?course1<-(MAIN::course (crn ?crn1) (department
?dept1&BB|CH|GE|PH))
?course2<-(MAIN::course (crn ?crn2&~?crn1)
(department ?dept2&BB|CH|GE|PH&:(eq ?dept1 ?dept2)))
?course3<-(MAIN::course (crn ?crn3) (department
?dept3&~?dept2&BB|CH|GE|PH))
?course4<-(MAIN::course (crn ?crn4) (department
?dept4&BB|BME|CE|CH|CHE|ECE|ES|GE|ME|PH))
?course5<-(MAIN::course (crn ?crn5&~?crn4) (department
?dept5&BB|BME|CE|CH|CHE|ECE|ES|GE|ME|PH))
=>
(modify ?bc (count 5))
(printout t "
Science units now satisfied by:" crlf)
(printout t "
" ?dept1 " " ?crn1 crlf)
(printout t "
" ?dept2 " " ?crn2 crlf)
(printout t "
" ?dept3 " " ?crn3 crlf)
(printout t "
" ?dept4 " " ?crn4 crlf)
(printout t "
" ?dept5 " " ?crn5 crlf)
(retract ?course1 ?course2 ?course3 ?course4 ?course5 ?ctrl))
Figure 4: A hypothetical Jess rule for WPI CS department science requirements.
Clearly, the logic needs to reflect constraints that are not explicitly stated in the plain
langauge rule (i.e., that although two course must come from the same department they
also must not have the same course number). It is these types of details that are hard to
abstract for the benefit of the non-programmer users. Therefore, to the extent that it is
possible, it is recommended that each department comb its existing rules and determine
as many rule meta-types as possible. This will facilitate the development of the richest
rule managing interface while capturing and cataloging rule templates for future re-use.
3.4.2.2.3 Rule meta-types
In constructing a rule editor for allowing non-programmers (i.e., system administrators,
registrar officers, department heads, etc.) to create, edit, update, and delete rules, there are
frequently occurring patterns in the rules. An exhaustive study should enumerate all the
patterns exhibited by all the current rules in the undergraduate catalog and would also
classify them. The following table summarizes the more modest taxonomy for the
Computer Science department rules as they appear in the 2006-2007 WPI catalog.
Select n courses from set of
available courses, {C} (n  1)
Quantified n courses from set of
available courses, {C}
Qualified n courses from set of
available courses, {C}
Arguably, the most frequently encountered pattern.
Select one or more of a set of available courses.
Quantifying phrases:
 At most 1 (only 1)
 At least 1 (1 or more)
 At least n (n or more)
 At most n (no more than n)
 At least n and at most m (between n and m)
 With n or more units
 With at least n units
Qualifying phrases:
 At academic level L
 At or above academic level L (not below
academic level L)
Choose one but not both options from a set of two.
The exclusive (XOR) course
selection
Other complex patterns
Complex patterns can be built from nesting of
selection patterns and the attachment of qualifying
and quantifying attributes.
Examples:
 Select [at most n (no more than n)] from {C}
 Select [at least n (n or more)] from {C} where
[at or above academic level L]
3.4.2.2.4 Interface Concepts
A convenient way to represent rules is in a hierarchical tree control as shown in Figure 5.
Clicking on entities in the tree control allows a rule creator to access more detailed
editing dialogs for setting attributes and properties. Without having detailed
requirements regarding the meta-types of rules that need to be supported, it is difficult to
envision what a fully functional rule editor interface would look like.
Project View
-
+ X
RULE BASE PROJECT
Clicking would activate a meta-properties
editor dialog. This would be dockable in the
general editing application view.
RULE MODULE 1




RULE MODULE 2
Editable fields would include:
Rule name
Rule description
Rule author
Rule creation date
RULE MODULE n
Rule 1
Rule 2
Clicking would activate editing pallet for this
type of pattern. Rule authors can drag and
drop pattern components onto the editing
dialog and fill in their attributes to complete
the pattern.
Rule n
LHS
Pattern 1
Pattern 2
Pattern n
RHS
Action 1
Clicking would activate the action
selection pallet. Rule authors would
be able to choose from a selection of
actions and set their attributes.
Available actions may include:

Scheduling a meeting

Sending a notifying email

Initiating a form request
Action 2
Action n
Figure 5: Tree view for a rule based project in the transcript analyzer.
A general application framework is readily available by leveraging Eclipse4, and a typical
rule editing GUI might look like Figure 6.
TITLEBAR
MENU BAR
TOOLBAR(S)
PROPERTIES
DIALOG
EDITING DIALOG
PROJECT
TREE
VIEW
ATTRIBUTES
DIALOG
STANDARD I/O, TESTING CONSOLE,
AND BANNER INTERFACE
Figure 6: A typical rule editing GUI in Eclipse.
4. Glossary
For definitions of common terms refer to section 1.4 of this document.
5. Appendix
What follows are rules written in the JESS language for the JESS rule engine
(http://www.jessrules.com/jess/index.shtml). These rules represent the Computer Science
Undergraduate Program’s requirements, grouped into different areas (called modules in
JESS terminology). Sample transcripts have been constructed as well. These are
presented as an example of what the new system will construct with respect to the
requirements:
;=======================================================
; ta.clp
; Transcript Analyzer
; Author : Jason Morris
; Date : 2/7/2007
; Course : CS 509 Software Systems Design
4
See http://www.eclipse.org
;=======================================================
;Transcript Analyzer works by asserting a set of course facts
;into working memory representing the individual courses taken by a student.
;These facts are a direct reflection of the student's transcript.
;
;Each required "bin" is processed by a dedicated Jess rule module. As course facts
;satisfy the audit rules, they are removed from working memory
;so that they cannot activate rules in subsequent modules. This prevents courses
;from being double counted. To efficiently use courses that might satisfy multiple
;requirements, a "utility" slot was added to store the total number of times
;that a course appeared the various bins. When multiple courses could satisfy a
;constraint, the one having the smallest utility was chosen to retain the
;most flexibility for later decisions.
;=======================================================
; WPI COURSE PREFIXES
;=======================================================
;ACC =
ACCOUNTING
;AR =
HUMANITIES AND ARTS
;AS =
AIR FORCE AEROSPACE STUDIES
;BB =
BIOLOGY AND BIOTECHNOLOGY
;BME =
BIOMEDICAL ENGINEERING
;BUS =
BUSINESS
;CE =
CIVIL AND ENVIRONMENTAL ENGINEERING
;CH =
CHEMISTRY
;CHE =
CHEMICAL ENGINEERING
;CS =
COMPUTER SCIENCE
;ECE =
ELECTRICAL AND COMPUTER ENGINEERING
;ECON =
ECONOMICS
;EN =
ENGLISH
;ES =
ENGINEERING SCIENCE INTERDISCIPLINARY
;ETR =
ENTREPRENEURSHIP
;FIN =
FINANCE
;FP =
FIRE PROTECTION ENGINEERING
;FPE =
FIRE PROTECTION ENGINEERING
;GE =
GEOSCIENCES
;GN =
GERMAN
;GOV =
POLITICAL SCIENCE, GOVERNMENT AND LAW
;HI =
HISTORY
;HU =
HUMANITIES
;ID =
INTERDISCIPLINARY
;IMGD =
INTERACTIVE MEDIA AND GAME DEVELOPMENT
;MA =
MATHEMATICAL SCIENCES
;ME =
MECHANICAL ENGINEERING
;MIS =
MANAGEMENT INFORMATION SYSTEMS
;MKT =
MARKETING
;ML
;MU
;OBC
;OIE
;PE
;PH
;PSY
;PY
;RBE
;RE
;RH
;SD
;SOC
;SP
;SS
;STS
;WR
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
MILITARY SCIENCE
MUSIC
ORGANIZATIONAL BEHAVIOR AND CHANGE
OPERATIONS AND INDUSTRIAL ENGINEERING
PHYSICAL EDUCATION
PHYSICS
PSYCHOLOGY
PHILOSOPHY
ROBOTICS ENGINEERING
RELIGION
RHETORIC
SYSTEM DYNAMICS
SOCIOLOGY
SPANISH
GENERAL SOCIAL SCIENCE
SOCIETY/TECHNOLOGY STUDIES
WRITING
;=======================================================
; INIT
;=======================================================
(clear)
;(watch all)
;=======================================================
; GLOBALS
;=======================================================
; Task priorities
(defglobal ?*print-header* = 1000)
(defglobal ?*satisfaction-check-priority* = 500)
(defglobal ?*remediation-priority* = 100)
; Unit constraints
(defglobal ?*core-min-units* = 6)
(defglobal ?*systems-min-units* = 1)
(defglobal ?*theory-languages-min-units* = 1)
(defglobal ?*design-min-units* = 1)
(defglobal ?*social-implications-min-units* = 1)
(defglobal ?*advanced-level-min-units* = 5)
(defglobal ?*MQP-min-units* = 3)
(defglobal ?*science-min-units* = 5)
(defglobal ?*mathematics-min-units* = 7)
(defglobal ?*mathematics-max-1000-units* = 4)
(defglobal ?*statistics-min-units* = 1)
(defglobal ?*probability-min-units* = 1)
; Course lists
(defglobal ?*core-courses* = (create$ 1101 1102 2011 2022 2102 2223 2303 3013 3041
3043 3133 3733)) ; must have any six
(defglobal ?*core-used* = (create$))
(defglobal ?*systems-courses* = (create$ 3013 4513 4514 4515)) ; must have at least one
(defglobal ?*systems-used* = (create$))
(defglobal ?*theory-languages-courses* = (create$ 3133 4123 4533)) ; must have at least
one
(defglobal ?*theory-languages-used* = (create$))
(defglobal ?*design-courses* = (create$ 3041 3431 3733 4233)) ; must have at least one
(defglobal ?*design-used* = (create$))
(defglobal ?*CS-social-implications-courses* = (create$ 3043)) ;\
(defglobal ?*CS-social-implications-used* = (create$))
;\
; \
(defglobal ?*STS-social-implications-courses* = (create$ 2208)) ; +--- ; must have at
least one
(defglobal ?*STS-social-implications-used* = (create$))
; /
;/
(defglobal ?*GOV-social-implications-courses* = (create$ 2314)) ;/
(defglobal ?*GOV-social-implications-used* = (create$));
(defglobal ?*advanced-systems-courses* = (create$ 3013 4513 4514 4515)) ; must have
at least one
(defglobal ?*advanced-systems-used* = (create$))
(defglobal ?*advanced-theory-languages-courses* = (create$ 3133 4123 4533)) ; must
have at least one
(defglobal ?*advanced-theory-languages-used* = (create$))
(defglobal ?*advanced-design-courses* = (create$ 3041 3431 3733 4233)) ; must have at
least one
(defglobal ?*advanced-design-used* = (create$))
(defglobal ?*CS-advanced-social-implications-courses* = (create$ 3043))
(defglobal ?*SS-advanced-social-implications-courses* = (create$ 2208 2314))
(defglobal ?*advanced-social-implications-used* = (create$))
(defglobal ?*statistics-courses* = (create$ 2611 2612))
(defglobal ?*statistics-used* = (create$))
(defglobal ?*probability-courses* = (create$ 2621 2631))
(defglobal ?*probability-used* = (create$))
;=======================================================
; MODULE MAIN
;=======================================================
;Deftemplates
(deftemplate MAIN::course
(slot department)
(slot crn)
(slot utility)
(slot units) ; assumed to be in one-thirds
(slot grade))
(deftemplate MAIN::MQP
(slot id)
(slot units) ; assumed to be in one-thirds
(slot grade)
(slot term)
(slot year))
(deftemplate MAIN::bin-count
(slot bin)
(slot count))
; Deffacts
(deffacts load-bin-counts
(MAIN::bin-count (bin advanced-design) (count 0))
(MAIN::bin-count (bin advanced-theory-languages) (count 0))
(MAIN::bin-count (bin advanced-social-implications) (count 0))
(MAIN::bin-count (bin advanced-systems) (count 0))
(MAIN::bin-count (bin core) (count 0))
(MAIN::bin-count (bin design) (count 0))
(MAIN::bin-count (bin mathematics) (count 0))
(MAIN::bin-count (bin MQP) (count 0))
(MAIN::bin-count (bin probability) (count 0))
(MAIN::bin-count (bin science) (count 0))
(MAIN::bin-count (bin social-implications) (count 0))
(MAIN::bin-count (bin statistics) (count 0))
(MAIN::bin-count (bin systems) (count 0))
(MAIN::bin-count (bin theory-languages) (count 0)))
(deffacts load-control-facts
(MAIN::systems-is-unsatisfied)
(MAIN::core-is-unsatisfied)
(MAIN::design-is-unsatisfied)
(MAIN::social-implications-is-unsatisfied)
(MAIN::theory-languages-is-unsatisfied)
(MAIN::advanced-design-is-unsatisfied)
(MAIN::advanced-systems-is-unsatisfied)
(MAIN::advanced-social-implications-is-unsatisfied)
(MAIN::advanced-theory-languages-is-unsatisfied)
(MAIN::computer-science-MQP-is-unsatisfied)
(MAIN::mathematics-is-unsatisfied)
(MAIN::statistics-is-unsatisfied)
(MAIN::probability-is-unsatisfied)
(MAIN::science-is-unsatisfied))
(deffacts load-sample-transcript-core-only-SATISFIED
(MAIN::course (department CS) (crn 1101) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 2022) (grade A) (units 1) (utility 1))
(MAIN::course (department CS) (crn 3133) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 2303) (grade A) (units 1) (utility 1))
(MAIN::course (department CS) (crn 3041) (grade C) (units 1) (utility 1))
(MAIN::course (department CS) (crn 3013) (grade B) (units 1) (utility 1)))
;(deffacts load-sample-transcript-core-only-NOT-SATISFIED
; (MAIN::course (department CS) (crn 1102) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3133) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3041) (grade C) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3013) (grade B) (units 1) (utility 1)))
;(deffacts load-sample-transcript-ALL-SATISFIED
;
; (MAIN::course (department CS) (crn 1102) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 2022) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 2102) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3041) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3043) (grade B) (units 1) (utility 1))
; (MAIN::course (department CS) (crn 3733) (grade B) (units 1) (utility 1))
;
; (MAIN::course (department CS) (crn 4514) (grade B) (units 1) (utility 1))
;
; (MAIN::course (department CS) (crn 4123) (grade B) (units 1) (utility 1))
;
; (MAIN::course (department CS) (crn 4233) (grade B) (units 1) (utility 1))
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
(MAIN::course (department GOV) (crn 2314) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 4513) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 3133) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 4331) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 4533) (grade B) (units 1) (utility 1))
(MAIN::course (department STS) (crn 2208) (grade B) (units 1) (utility 1))
(MAIN::MQP (id 1) (year 2006) (term A) (grade A) (units 1))
(MAIN::MQP (id 2) (year 2006) (term B) (grade A) (units 1))
(MAIN::MQP (id 3) (year 2006) (term B) (grade A) (units 1))
(MAIN::course (department PH) (crn 2204) (grade B) (units 1) (utility 1))
(MAIN::course (department PH) (crn 2198) (grade B) (units 1) (utility 1))
(MAIN::course (department CH) (crn 2001) (grade B) (units 1) (utility 1))
(MAIN::course (department CH) (crn 1005) (grade B) (units 1) (utility 1))
(MAIN::course (department GE) (crn 1200) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 2204) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 1100) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 1220) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 1005) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 2621) (grade B) (units 1) (utility 1))
(MAIN::course (department MA) (crn 3440) (grade B) (units 1) (utility 1))
(MAIN::course (department CS) (crn 4032) (grade B) (units 1) (utility 1))
)
; Deffunctions
(deffunction print-list (?list)
(foreach ?item ?list
(printout t " " ?item crlf)))
(deffunction print-social-implications ()
(printout t "Social implications units now satisfied by: " crlf)
(if (> (length$ ?*CS-social-implications-used*) 0) then
(printout t "CS " ?*CS-social-implications-used* crlf))
(if (> (length$ ?*STS-social-implications-used*) 0) then
(printout t "STS " ?*STS-social-implications-used* crlf))
(if (> (length$ ?*GOV-social-implications-used*) 0) then
(printout t "GOV " ?*GOV-social-implications-used* crlf)))
;=======================================================
(defmodule CORE_COURSES)
;=======================================================
(defrule CORE_COURSES::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING CORE COURSES NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule CORE_COURSES::check-for-CS-1101-or-1102
"Checks for CS 1101 or 1102 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&1101|1102))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS " ?crn "" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-2011
"Checks for CS 2011 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&2011))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 2011" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-2022
"Checks for CS 2022 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&2022))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 2022" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-2102
"Checks for CS 2102 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&2102))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 2102" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-2223
"Checks for CS 2223 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&2223))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 2223" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-2303
"Checks for CS 2303 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&2303))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 2303" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-3013
"Checks for CS 3013 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3013))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 3013" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-3041
"Checks for CS 3041 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3041))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 3041" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-3133
"Checks for CS 3133 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3133))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 3133" crlf)
(retract ?course))
(defrule CORE_COURSES::check-for-CS-3733
"Checks for CS 3733 in core requirements"
?bc<-(MAIN::bin-count (bin core) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3733))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*core-used* (insert$ ?*core-used* (+ 1 (length$ ?*core-used*)) (create$ ?crn)))
; appends this course to the used core list
(printout t " Core requirements partially satisfied by: CS 3733" crlf)
(retract ?course))
;=======================================================
(defmodule SYSTEMS)
;=======================================================
(defrule SYSTEMS::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING SYSTEMS COURSES NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule SYSTEMS::check-for-CS-3013-or-4513-or-4514-or-4515
"Checks for computer science systems requiement"
?ctrl<-(MAIN::systems-is-unsatisfied)
?bc<-(MAIN::bin-count (bin systems) (count ?c))
?course<-(MAIN::course (department CS) (crn ?crn&3013|4513|4514|4515))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*systems-used* (insert$ ?*systems-used* (+ 1 (length$ ?*systems-used*))
(create$ ?crn))) ; appends this course to the used systems list
(printout t " Systems requirements partially satisfied by: CS " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule THEORY_AND_LANGUAGE)
;=======================================================
(defrule THEORY_AND_LANGUAGE::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING THEORY AND LANGUAGE COURSES NOW..."
crlf)
(printout t "-------------------------------------------------" crlf))
(defrule THEORY_AND_LANGUAGE::check-for-CS-3133-or-4123-or-4533
"Checks for computer science theory and language requirement"
?ctrl<-(MAIN::theory-languages-is-unsatisfied)
?bc<-(MAIN::bin-count (bin theory-languages) (count ?c))
?course<-(MAIN::course (department CS) (crn ?crn&3133|4123|4533))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*theory-languages-used* (insert$ ?*theory-languages-used* (+ 1 (length$
?*theory-languages-used*)) (create$ ?crn))) ; appends this course to the used theorylanguages list
(printout t " Theory and languages requirements partially satisfied by: CS " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule DESIGN)
;=======================================================
(defrule DESIGN::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING DESIGN COURSES NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule DESIGN::check-for-CS-3041-or-3431-or-3733-or-4233
"Checks for computer science design requirement"
?ctrl<-(MAIN::design-is-unsatisfied)
?bc<-(MAIN::bin-count (bin design) (count ?c))
?course<-(MAIN::course (department CS) (crn ?crn&3133|4123|4533))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*design-used* (insert$ ?*design-used* (+ 1 (length$ ?*design-used*)) (create$
?crn))) ; appends this course to the used design list
(printout t " Design requirements partially satisfied by: CS " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule SOCIAL_IMPLICATIONS)
;=======================================================
(defrule SOCIAL_IMPLICATIONS::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING SOCIAL IMPLICATIONS COURSES NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule SOCIAL_IMPLICATIONS::check-for-CS-3043
"Checks for CS 3043 in social implications requirements"
?bc<-(MAIN::bin-count (bin social-implications) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3043))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*CS-social-implications-used*
(insert$ ?*CS-social-implications-used* (+ 1 (length$ ?*CS-social-implicationsused*)) (create$ ?crn)))
; appends this course to the CS-social-implications-used list
(printout t "SOCIAL IMPLICATIONS REQUIREMENTS PARTIALLY satisfied by:
CS 3043" crlf)
(retract ?course))
(defrule SOCIAL_IMPLICATIONS::check-for-STS-2208
"Checks for STS 2208 in social implications requirements"
?bc<-(MAIN::bin-count (bin social-implications) (count ?c))
?course <-(MAIN::course (department STS) (crn ?crn&2208))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*STS-social-implications-used*
(insert$ ?*STS-social-implications-used* (+ 1 (length$ ?*STS-social-implicationsused*)) (create$ ?crn)))
; appends this course to the used STS-social-implications-used list
(printout t "SOCIAL IMPLICATIONS REQUIREMENTS PARTIALLY SATISFIED
BY STS 2208" crlf)
(retract ?course))
(defrule SOCIAL_IMPLICATIONS::check-for-GOV-2314
"Checks for GOV 2314 in social implications requirements"
?bc<-(MAIN::bin-count (bin social-implications) (count ?c))
?course <-(MAIN::course (department GOV) (crn ?crn&2314))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*GOV-social-implications-used*
(insert$ ?*GOV-social-implications-used* (+ 1 (length$ ?*GOV-socialimplications-used*)) (create$ ?crn)))
; appends this course to the GOV-social-implications-used list
(printout t "SOCIAL IMPLICATIONS REQUIREMENTS PARTIALLY satisfied by:
CS 3043" crlf)
(retract ?course))
;=======================================================
(defmodule ADVANCED_LEVEL_COURSES)
;=======================================================
(defrule ADVANCED_LEVEL_COURSES::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING ADVANCED CS COURSES COURSES NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule ADVANCED_LEVEL_COURSES::check-for-advanced-design-requirement
"Checks for computer science advanced design requirement"
?ctrl<-(MAIN::advanced-design-is-unsatisfied)
?bc<-(MAIN::bin-count (bin advanced-design) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3041|3431|3733|4233))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*advanced-design-used*
(insert$ ?*advanced-design-used* (+ 1 (length$ ?*advanced-design-used*)) (create$
?crn)))
; appends this course to the used STS-social-implications-used list
(printout t "ADVANCED DESIGN REQUIREMENTS PARTIALLY satisfied by: CS
" ?crn crlf)
(retract ?course ?ctrl))
(defrule ADVANCED_LEVEL_COURSES::check-for-advanced-systems-requirement
"Checks for computer science advanced systems requirement"
?ctrl<-(MAIN::advanced-systems-is-unsatisfied)
?bc<-(MAIN::bin-count (bin advanced-systems) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3013|4513|4514|4515))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*advanced-systems-used*
(insert$ ?*advanced-systems-used* (+ 1 (length$ ?*advanced-systems-used*))
(create$ ?crn)))
; appends this course to the used advanced-systems list
(printout t "ADVANCED Systems requirements partially satisfied by: CS " ?crn crlf)
(retract ?course ?ctrl))
(defrule ADVANCED_LEVEL_COURSES::check-for-advanced-theory-languagesrequirement
"Checks for computer science advanced theory and languages requirement"
?ctrl<-(MAIN::advanced-theory-languages-is-unsatisfied)
?bc<-(MAIN::bin-count (bin advanced-theory-languages) (count ?c))
?course <-(MAIN::course (department CS) (crn ?crn&3133|4123|4533))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*advanced-systems-used*
(insert$ ?*advanced-theory-languages-used* (+ 1 (length$ ?*advanced-theorylanguages-used*)) (create$ ?crn)))
; appends this course to the used advanced-theory-languages list
(printout t "ADVANCED THEORY AND LANGUAGES REQUIREMENTS
PARTIALLY satisfied by: CS " ?crn crlf)
(retract ?course ?ctrl))
(defrule ADVANCED_LEVEL_COURSES::check-for-advanced-social-implicationsrequirement
"Checks for computer science advanced social implications requirement"
?ctrl<-(MAIN::advanced-social-implications-is-unsatisfied)
?bc<-(MAIN::bin-count (bin advanced-social-implications) (count ?c))
?course<-(or
(MAIN::course (department ?dept&CS) (crn ?crn&3043))
(MAIN::course (department ?dept&SS) (crn ?crn&2208|2314))); end OR
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*advanced-social-implications-used*
(insert$ ?*advanced-social-implications-used* (+ 1 (length$ ?*advanced-socialimplications-used*)) (create$ ?crn)))
; appends this course to the advanced-social-implications-used list
(printout t "ADVANCED SOCIAL IMPLICATIONS REQUIREMENTS
PARTIALLY SATISFIED BY " ?dept " " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule COMPUTER_SCIENCE_MQP)
;=======================================================
(defrule COMPUTER_SCIENCE_MQP::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING MQP UNITS NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule COMPUTER_SCIENCE_MQP::check-for-MQP-requirement
"Tally all MQP units and compare to minimum"
?bc<-(MAIN::bin-count (bin MQP) (count ?c))
?mqp <-(MAIN::MQP (id ?id)(units ?u) (year ?y) (term ?t) (grade ?g))
=>
(modify ?bc (count (+ ?c 1)))
(printout t "MQP REQUIREMENTS PARTIALLY SATISFIED BY MQP[id:" ?id "
year:" ?y " term:" ?t " grade:" ?g "]" crlf)
(retract ?mqp))
;=======================================================
(defmodule SCIENCE)
;=======================================================
(defrule SCIENCE::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING SCIENCE UNITS NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule SCIENCE::check-for-general-science-requirement
"General set BB, BME, CE, CH, CHE, ECE, ES, GE, ME, PH"
?ctrl<-(science-is_unsatisfied)
?bc<-(MAIN::bin-count (bin science) (count ?c))
?course1<-(MAIN::course (crn ?crn1) (department ?dept1&BB|CH|GE|PH))
?course2<-(MAIN::course (crn ?crn2&~?crn1) (department
?dept2&BB|CH|GE|PH&:(eq ?dept1 ?dept2)))
?course3<-(MAIN::course (crn ?crn3) (department ?dept3&~?dept2&BB|CH|GE|PH))
?course4<-(MAIN::course (crn ?crn4) (department
?dept4&BB|BME|CE|CH|CHE|ECE|ES|GE|ME|PH))
?course5<-(MAIN::course (crn ?crn5) (department
?dept5&BB|BME|CE|CH|CHE|ECE|ES|GE|ME|PH))
=>
(modify ?bc (count 5))
(printout t " Science units now satisfied by:" crlf)
(printout t " " ?dept1 " " ?crn1 crlf)
(printout t " " ?dept2 " " ?crn2 crlf)
(printout t " " ?dept3 " " ?crn3 crlf)
(printout t " " ?dept4 " " ?crn4 crlf)
(printout t " " ?dept5 " " ?crn5 crlf)
(retract ?course1 ?course2 ?course3 ?course4 ?course5 ?ctrl))
;=======================================================
(defmodule STATISTICS)
;=======================================================
(defrule STATISTICS::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING STATISTICS UNITS NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule STATISTICS::check-for-statistics-requirements
"Checks for computer science statistics requirement"
?ctrl<-(MAIN::statistics-is-unsatisfied)
?bc<-(MAIN::bin-count (bin statistics) (count ?c))
?course<-(MAIN::course (department MA) (crn ?crn&2611|2612))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*statistics-used*
(insert$ ?*statistics-used* (+ 1 (length$ ?*statistics-used*)) (create$ ?crn)))
; appends this course to statistics-used list
(printout t "STATISTICS REQUIREMENTS SATISFIED BY MA " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule PROBABILITY)
;=======================================================
(defrule PROBABILITY::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING PROBABILITY UNITS NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule PROBABILITY::check-for-probability-requirements
"Checks for computer science probability requirement"
?ctrl<-(MAIN::probability-is-unsatisfied)
?bc<-(MAIN::bin-count (bin probability) (count ?c))
?course<-(MAIN::course (department MA) (crn ?crn&2621|2631))
=>
(modify ?bc (count (+ ?c 1)))
(bind ?*probability-used*
(insert$ ?*probability-used* (+ 1 (length$ ?*probability-used*)) (create$ ?crn)))
; appends this course to the probability used list
(printout t "PROBABILITY REQUIREMENTS SATISFIED BY MA " ?crn crlf)
(retract ?course ?ctrl))
;=======================================================
(defmodule MATHEMATICS)
;=======================================================
(defrule MATHEMATICS::header
(declare (salience ?*print-header*))
=>
(printout t crlf "ANALYZING MATHEMATICS UNITS NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule check-for-math-requirement
"Checks for computer science basic mathematics requirements"
?ctrl<-(mathematics-is-unsatisfied)
?pbc<-(MAIN::bin-count (bin probability) (count ?pc))
?sbc<-(MAIN::bin-count (bin statistics) (count ?sc))
?mbc<-(MAIN::bin-count (bin mathematics) (count ?mc))
?course1 <-(MAIN::course (department ?dept1&MA) (crn ?crn1&:(> ?crn1 999))) ; \
?course2 <-(MAIN::course (department ?dept2&MA) (crn ?crn2&~?crn1&:(> ?crn2
999))) ; \_____ four must be 1000 or higher
?course3 <-(MAIN::course (department ?dept3&MA) (crn ?crn3&~?crn1&~?crn2&:(>
?crn3 999))) ; /
?course4 <-(MAIN::course (department ?dept4&MA) (crn
?crn4&~?crn1&~?crn2&~?crn3&:(> ?crn4 999))) ; /
?course5 <-(or
(MAIN::course (department ?dept5&MA) (crn ?crn5&:(> ?crn5 1999))) ; a fifth
must be MA > 2000 OR a CS from 2022|4032|4033
(MAIN::course (department ?dept5&CS) (crn ?crn5&2022|4032|4033)) ;
); end OR
=>
(modify ?mbc (count (+ ?pc ?sc 5)))
(printout t " Mathematics units now satisfied by:" crlf)
(printout t " " ?dept1 " " ?crn1 crlf)
(printout t " " ?dept2 " " ?crn2 crlf)
(printout t " " ?dept3 " " ?crn3 crlf)
(printout t " " ?dept4 " " ?crn4 crlf)
(printout t " " ?dept5 " " ?crn5 crlf)
(retract ?course1 ?course2 ?course3 ?course4 ?course5 ?ctrl))
;=======================================================
(defmodule AUDITOR)
;=======================================================
(defrule AUDITOR::header
(declare (salience ?*print-header*))
=>
(printout t crlf "PERFORMING AUDIT NOW..." crlf)
(printout t "-------------------------------------------------" crlf))
(defrule AUDITOR::all-core-units-satisfied
"Mark when core requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin core) (count ?*core-min-units*))
=>
(assert (MAIN::core-units-satisfied))
(printout t " Core units now satisfied by: CS courses: " ?*core-used* crlf))
(defrule AUDITOR::all-systems-units-satisfied
"Mark when systems requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin systems) (count ?*systems-min-units*))
=>
(assert (MAIN::systems-units-satisfied))
(printout t " Systems units now satisfied by: CS courses: " ?*systems-used* crlf))
(defrule AUDITOR::all-theory-languages-units-satisfied
"Mark when theory and languages requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin theory-languages) (count ?*theory-languages-min-units*))
=>
(assert (MAIN::theory-languages-units-satisfied))
(printout t " Theory and languages units now satisfied by: CS courses: " ?*theorylanguages-used* crlf))
(defrule AUDITOR::all-design-units-satisfied
"Mark when design requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin design) (count ?*design-min-units*))
=>
(assert (MAIN::systems-design-satisfied))
(printout t " Design units now satisfied by CS courses: " ?*design-used* crlf))
(defrule AUDITOR::all-social-implications-units-satisfied
"Mark when social implications requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin social-implications) (count ?*social-implications-min-units*))
=>
(assert (MAIN::social-implications-units-satisfied))
(print-social-implications))
(defrule AUDITOR::all-advanced-units-satisfied
"Mark when advanced CS requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin advanced-systems) (count ?c1))
(MAIN::bin-count (bin advanced-design) (count ?c2))
(MAIN::bin-count (bin advanced-social-implications) (count ?c3))
(MAIN::bin-count (bin advanced-theory-languages) (count ?c4&:(>= (+ ?c1 ?c2 ?c3
?c4) ?*advanced-level-min-units*)))
=>
(assert (MAIN::advanced-units-satisfied)))
(defrule AUDITOR::all-MQP-units-satisfied
"Mark when MQP requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin MQP) (count ?c&?*MQP-min-units*))
=>
(assert (MAIN::MQP-units-satisfied)))
(defrule AUDITOR::all-computer-science-requirements-satisfied
(MAIN::core-units-satisfied)
(MAIN::systems-units-satisfied)
(MAIN::theory-languages-units-satisfied)
(MAIN::design-units-satisfied)
(MAIN::social-implications-units-satisfied)
(MAIN::advanced-units-satisfied)
(MAIN::MQP-units-satisfied)
=>
(MAIN::computer-science-satisfied))
(defrule AUDITOR::all-science-units-satisfied
"Mark when science requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin science) (count ?*science-min-units*))
=>
(assert (MAIN::science-units-satisfied)))
(defrule AUDITOR::all-science-units-satisfied
"Mark when science requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin science) (count ?*science-min-units*))
=>
(assert (MAIN::science-units-satisfied)))
(defrule AUDITOR::all-mathematics-units-satisfied
"Mark when general mathematics requirements are met"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::bin-count (bin mathematics) (count ?c1))
(MAIN::bin-count (bin probability) (count ?c2&?*probability-min-units*))
(MAIN::bin-count (bin statistics) (count ?c3&?*statistics-min-units*&:(>= (+ ?c1 ?c2
?c3) ?*mathematics-min-units*)))
=>
(assert (MAIN::mathematics-units-satisfied)))
(defrule AUDITOR::transcript-meets-all-requirments
"Fires if student has met all graduation requirements in CS departement for 20062007"
(declare (salience ?*satisfaction-check-priority*))
(MAIN::computer-science-satisfied)
(MAIN::science-satisfied)
(MAIN::mathematics-satisfied)
=>
(printout t
"===============================================================
============" crlf)
(printout t "STUDENT HAS SUCCESSFULLY MET ALL CS DEPARTMENT
REQUIREMENTS FOR GRADUATION" crlf)
(printout t "ACCORDING TO THE 2006-2007 UNDERGRADUATE CATALOG."
crlf)
(printout t
"===============================================================
============" crlf)
)
(defrule AUDITOR::is-missing-core-requirement
(declare (salience ?*remediation-priority*))
(not (MAIN::core-units-satisfied))
(MAIN::bin-count (bin core) (count ?count))
=>
(printout t "STUDENT IS MISSING " (- ?*core-min-units* ?count) " CORE
REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS CORE COURSES: "
(complement$ ?*core-used* ?*core-courses*) crlf))
(defrule AUDITOR::is-missing-systems-requirement
(declare (salience ?*remediation-priority*))
(not (MAIN::systems-units-satisfied))
(MAIN::bin-count (bin systems) (count ?count))
=>
(printout t "STUDENT IS MISSING " (- ?*systems-min-units* ?count) " systems
REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS systems COURSES: "
(complement$ ?*systems-used* ?*systems-courses*) crlf))
(defrule AUDITOR::is-missing-design-requirement
(declare (salience ?*remediation-priority*))
(not (MAIN::design-units-satisfied))
(MAIN::bin-count (bin design) (count ?count))
=>
(printout t "STUDENT IS MISSING " (- ?*design-min-units* ?count) " design
REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS design COURSES: "
(complement$ ?*design-used* ?*design-courses*) crlf))
(defrule AUDITOR::is-missing-theory-languages-requirement
(declare (salience ?*remediation-priority*))
(not (MAIN::theory-languages-units-satisfied))
(MAIN::bin-count (bin theory-languages) (count ?count))
=>
(printout t "STUDENT IS MISSING " (- ?*theory-languages-min-units* ?count) "
theory-languages REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS theory-languages COURSES: "
(complement$ ?*theory-languages-used* ?*theory-languages-courses*) crlf))
(defrule AUDITOR::is-missing-social-implications-requirement
(declare (salience ?*remediation-priority*))
(not (MAIN::social-implications-units-satisfied))
(MAIN::bin-count (bin social-implications) (count ?count))
=>
(printout t "STUDENT IS MISSING " (- ?*social-implications-min-units* ?count) "
social-implications REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS social-implications COURSES: "
(complement$ ?*CS-social-implications-used* ?*CS-social-implications-courses*)
crlf)
(printout t " Please select from the following STS social-implications COURSES: "
(complement$ ?*STS-social-implications-used* ?*STS-social-implicationscourses*) crlf)
(printout t " Please select from the following GOV social-implications COURSES: "
(complement$ ?*GOV-social-implications-used* ?*GOV-social-implicationscourses*) crlf))
(defrule AUDITOR::is-missing-advanced-CS-requirements
(declare (salience ?*remediation-priority*))
(not (MAIN::advanced-units-satisfied))
(MAIN::bin-count (bin advanced-design) (count 1))
(MAIN::bin-count (bin advanced-theory-languages) (count 1))
(MAIN::bin-count (bin advanced-social-implications) (count 1))
(MAIN::bin-count (bin advanced-systems) (count 1))
=>
(printout t "STUDENT IS MISSING " (- ?*theory-languages-min-units* ?count) "
theory-languages REQUIREMENT(S)" crlf)
(printout t " Please select from the following CS theory-languages COURSES: "
(complement$ ?*theory-languages-used* ?*theory-languages-courses*) crlf))
; PROGRAM
(reset)
(focus
CORE_COURSES
SYSTEMS
THEORY_AND_LANGUAGE
DESIGN
SOCIAL_IMPLICATIONS
ADVANCED_LEVEL_COURSES
COMPUTER_SCIENCE_MQP
SCIENCE
MATHEMATICS
STATISTICS
PROBABILITY
AUDITOR
)
(run)