Upload
adam-henderson
View
218
Download
0
Embed Size (px)
Citation preview
8/3/2019 Project Info 3
1/5
1
CS 1412-002 Project 2: Maximum 20 Points
Covers: Chapters 6-10 and 13
Pseudocodes Due 10/13, beginning of lecture
UML Designs Due 10/18, beginning of lecture
Source Codes Due 10/19, 3 a.m.
Background:
There is a course being taken by 128 students across 8 sections. Each section has exactly 16
students. In addition, there are 2 instructors who each oversee 4 sections.
A 100-question multiple choice test is being given across all 8 sections. Each test question has 5
possible answers. Also, to reduce cheating, there are 4 different versions of the exam which are
distributed evenly across all sections (i.e. each section has exactly 4 students taking one version
of the exam).
These exams will be graded against the keys dependent on which version of the exam was taken.
Instructions:
Construct a program containing at least the following 4 classes along with at least the following
class variables and functions (there are likely to be more than what is listed):
Class Exam
Fields
key[100][2]
numberRightOverall[100]
numberRightPerSection[2][4][100]
Methods
Exam()
examWrite()
Class Student
Fields
maxGuesses
8/3/2019 Project Info 3
2/5
2
keyNumber = studentNumber % 4
answers[100][3]
totalCorrect
grade
Methods
Student()
studentWrite()
Class Instructor
Fields these are arrays whose dimensions and sizes are determined by you
overallCorrect
overallCorrectPerSection
Methods
instructorWrite()
Class Course
Fields these are arrays whose dimensions and sizes are determined by you
numberRightOverall
numberRightVersion
Methods
Course()
courseWrite()
IMPORTANT (Why key in Exam and answers in Student are 2-dimensional arrays): The
random number generator can work so well finding a match with one student answer per
question and one key answer per question can be extremely difficult. It is likely all of the
students will flunk with no student having more than 30 correct answers if the student is
only allowed one answer per question and the key has only one answer per question.
8/3/2019 Project Info 3
3/5
3
In order to make the grade distributions more desirable and realistic, key in Exam and answers in
Student are set as 2-dimensional arrays.
To aid in loading the keys or students answers, you could use the following (this is from my
implementation of the project):
void Exam::loadKey() {for (int i = 0; i < KEYSIZE; i++) {
key[i][0] = rand() % 5;bool distinct = false;while(!distinct) {
key[i][1] = rand() % 5;if (key[i][0] != key[i][1])
distinct = true;}
}}
Also, to check for a correct answer, you could use the following code fragment (also from my
implementation of the project):
for (int i = 0; i < KEYSIZE; i++) {bool correct = false;for (int j = 0; j < maxGuesses && !correct; j++)
for (int k = 0; k < 2 && !correct; k++) {
if (answers[i][j] == key[i][k]) {numberRightOverall[i]++;numberRightPerInstructor[instructorNumber][i]++;
numberRightPerSection[instructorNumber][sectionNumber][i]++;numberCorrect++;correct = true;
}}
}
(Pardon the line that is indented differently above.)
8/3/2019 Project Info 3
4/5
4
Design Notes:
These class declarations will be in header files (one header file named for each class (example:
Exam.h)) and the class method implementations will be in C++ files (one .cpp file named for
each class (example: Exam.cpp)).
There will be a C++ source code that contains the code implementing the project that declares
arrays of the above class objects (instantiates those classes). The following object arrays are:
Exams object will be a 4-element array. Students object will be a 2 x 4 x 16 array. Instructors object will be a 2-element array.
NOTE: The object for Course will NOT be an array.
In the main source code (the file containing main()), the random number generator will be
seeded in main(). You will code srand() in main() ONCE before setting up any objects; the callsto rand() are made in the class implementation codes inside the class methods. For example, you
will use rand() in the Exam constructor to generate the answers in the key.
For these classes, each fields type is determined by you (for example: you may want key to be
of type char or some other type). This is your choice.
For studentNumber in class Student, use this formula based on the indices of the object array for
Student:
studentNumber = 64 * i + 16 * j + k
where i is the instructor number (0 or 1), j is the section number for that instructor (0-3), and k is
the student number in that section (0-15).
In addition, the *Write methods (courseWrite, instructorWrite, et al) will write information to
output files.
The constructors for Exam will randomly generate their keys for all answers before any Student
constructors are executed.
When a constructor for Student is executed, a students answers will be produced via the random
number generator.
8/3/2019 Project Info 3
5/5
5
Each students grade is as follows after rounding:
grade >= 90: A
80