# Grade School Given students' names along with the grade that they are in, create a roster for the school. In the end, you should be able to: - Add a student's name to the roster for a grade - "Add Jim to grade 2." - "OK." - Get a list of all students enrolled in a grade - "Which students are in grade 2?" - "We've only got Jim just now." - Get a sorted list of all students in all grades. Grades should sort as 1, 2, 3, etc., and students within a grade should be sorted alphabetically by name. - "Who all is enrolled in school right now?" - "Grade 1: Anna, Barb, and Charlie. Grade 2: Alex, Peter, and Zoe. Grade 3…" Note that all our students only have one name. (It's a small town, what do you want?) ## For bonus points Did you get the tests passing and the code clean? If you want to, these are some additional things you could try: - If you're working in a language with mutable data structures and your implementation allows outside code to mutate the school's internal DB directly, see if you can prevent this. Feel free to introduce additional tests. Then please share your thoughts in a comment on the submission. Did this experiment make the code better? Worse? Did you learn anything from it? ## Getting Started Make sure you have read [the C++ page](http://exercism.io/languages/cpp) on exercism.io. This covers the basic information on setting up the development environment expected by the exercises. ## Passing the Tests Get the first test compiling, linking and passing by following the [three rules of test-driven development](http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd). Create just enough structure by declaring namespaces, functions, classes, etc., to satisfy any compiler errors and get the test to fail. Then write just enough code to get the test to pass. Once you've done that, uncomment the next test by moving the following line past the next test. ```C++ #if defined(EXERCISM_RUN_ALL_TESTS) ``` This may result in compile errors as new constructs may be invoked that you haven't yet declared or defined. Again, fix the compile errors minimally to get a failing test, then change the code minimally to pass the test, refactor your implementation for readability and expressiveness and then go on to the next test. Try to use standard C++11 facilities in preference to writing your own low-level algorithms or facilities by hand. [CppReference](http://en.cppreference.com/) is a wiki reference to the C++ language and standard library. If you are new to C++, but have programmed in C, beware of [C traps and pitfalls](http://www.slideshare.net/LegalizeAdulthood/c-traps-and-pitfalls-for-c-programmers). ## Source A pairing session with Phil Battos at gSchool [http://gschool.it](http://gschool.it) ## Submitting Incomplete Solutions It's possible to submit an incomplete solution so you can see how others have completed the exercise.