(**** * This is the model for the question database (question manager). *) module QuestionManagement; import Filtering.Filter; import Questions.Question; import TestGeneration.TestQuestion; -- export Database; object QuestionList components: QuestionList; description: (* A list of questions. *); end QuestionsList; operation SortBy inputs: Category; outputs: SortedQuestionList; description: (* When the user selects a catagory at the head of a column, the list becomes sorted by that category. *); end SortBy; operation addQuestion inputs: Database, Question; outputs: Database; description: (* Takes a question and adds it to the QuestionList (question database). *); (*** note: Add filter is done in two ways. The filters pallet allows users to drag-and-drop filters on to this database. In the database users also add filters by clicking the add button and typing a filter in manually. *) end addQuestion; operation addFilter inputs: Filter; outputs: FilteredQuestionList; description: (* This takes a filter object passed from the filter panel and applies it to the QuestionList (question database). *); end addFilter; operation addFilter inputs: FilterName, FilterKey; outputs: FilteredQuestionList, Filter; description: (* This operation takes place when the user applies a tag to the database by manually typing in a filter. The function takes a pair of strings (like tags) and returns a filtered quesiton list and the filter that was just created. *); (*** note: Other operations to this screen are done by pallets which have their own models. *) end addFilter; (* object Category end Category; object SortedQuestionList end SortedQuestionList; object Database components: questions:TestQuestion*; end Database; object FilteredQuestionList end FilteredQuestionList; object FilterName end FilterName; object FilterKey end FilterKey;*) end QuestionManagement; (***** * This is a Question data structure *) module Questions; import Courses.Course; export Question, Answer; object Answer end Answer; object Characteristics components: type:integer, difficulty:integer, time:integer, course:Course, professor: Professor; description: (* type - question type. difficulty - numerical descriptor of difficulty time - data structure (ubound, lbound, etc.) to store time characteristics course - course(s) this question applies to - list ds professor - professor who generated this question *); end Characteristics; object Tags components: TagList; description: (* a linked structure of tags which are 2 field data structures. *); end Tags; object Prompt components: Text, PromptType; description: (* This is the portion that depends on question type. This is the actual question data, like the question text, answer choices, etc. *); end Data; object PromptType description: (*Parent for various prompt types*); end Object; object MC_Prompt extends PromptType components: choices*, correctAnswer; description: (*Multiple chocie*); end MC_Prompt; object correctAnswerMC components: choice:Integer; description: (* points to correct answer choice *); end correctAnswerMC; object SA_Prompt extends PromptType components: correctAnswer; description: (*Short answer*); end SA_Prompt; object correctAnswersa components: expected:String; description: (* keywords for expected answer *); end correctAnswerSA; object MA_Prompt extends PromptType components: lchoices*, rchocies*, correctAnswer; description: (*Matching *); end MA_Prompt; object correctAnswerMA components: associationsMap: integer and integer; description: (*association for left and right choices*)i; end correctAnswerMA; object CO_Prompt extends PromptType components: exCode, correctAnswer; description: (*Code*); end CO_Prompt; object correctAnswerCO components: script:String; description: (*file for test script*); end correctAnswerCO; end Questions;