EE 355 Lab 11 - Maps 1 Introduction In this lab you will practice using associative containers (i.e. C++ maps) to track a student information database. This is a peer evaluated lab where your grade will be determined by 2 peer evaluations. Please see the guidelines for peer evaluated labs provided by the instructor. 2 What you will learn After completing this lab you should be able: Use a C++ map to store key, value pairs Use iterators to search for or iterate over all elements in a map 3 Background Information and Notes Review the lecture slides on C++ maps and iterators 4 Procedure 1. Download the class code $ wget http://ee.usc.edu/~redekopp/ee355/code/student.h 2. The student class is completed in the .h file and you do NOT need to write a student.cpp. 3. Make a test file, student_test.cpp. In main() create a map of student name to Student objects 4. In main() enter a loop that prints a menu of options and lets the user enter a command number where the commands are: 1=Add new student, 2=Remove student, 3=Add a new score to all student objects, 4=Update score i for student, s, to the provided value, 5=Calculate average, 6=Print student names and scores, 7=Exit program 5. If the user enters command 1, then query the user for a student’s first name and add them to the map 6. If the user enters command 2, then query the user for a student’s first name and remove that student object from the map if it exists 7. If the user enters command 3, add a new score of 0 to each Student’s ‘grades’ vector by iterating over all elements in the map Last Revised: 4/1/2015 1 EE 355 Lab 11 - Maps 8. If the user enters command 4, then query the user for a student’s first name, an index into the grades vector and an updated score then update the score at that index for the given student. 9. If the user enters command 5, then query the user for an index into the grades vector and calculate the class average (average over all students in the map) for that score (iterate over all elements in the map) 10. If the user enters command 6, then print each students’ name and all of his/her scores in order (iterate over each student in the map and then iterator over their score vector…you must use map and vector iterators) 11. If the user enters command 7, exit the program Student Class class Student { string name_; std::vector<int> grades_; public: Student(); Student(std::string myname) { std::string get_name() { void add_grade(int score) { void update_grade(int index, int int get_grade(int index) { std::vector<int>& get_grades() { }; name_ = myname; } return name_; } grades_.push_back(score); } score) { grades_[index] = score; } return grades_[index]; } return grades_; } Sample Input: 1 1 3 4 4 5 3 6 2 6 0 Tommy Jane Tommy 0 88 Jane 0 94 0 // should output an average of 91 Tommy // should output ‘Tommy: 88 0<ENTER>Jane: 94 0<ENTER>’ // Should remove Tommy from the map // should output ‘Jane: 94 0<ENTER>’ 5 Evaluation Criteria 1. [5 pt.] Run the program and use the sample input above and verify the output. 2. [4 pt.] Run the program again and add 2 users with 2 test scores each. Then compute the average of each test and verify it outputs the correct value. 3. [1 pt.] Verify the stutest.cpp file is indented when opened in ‘gedit’ on the Linux VM. 2 Last Revised: 4/1/2015
© Copyright 2024