程序代写代做代考 Excel c++ Hive algorithm COMP 2404 – Midterm Project Due: Thursday, November 5 at 11:59 pm

COMP 2404 – Midterm Project Due: Thursday, November 5 at 11:59 pm
1. Goal
For this project, you will write a C++ program to manage a book club with books and book club members. Those members will have the ability to view different kinds of information, and to rate the books that they read. Your code will be correctly separated into object design categories, and it will meet every principle of good software engineering that we have covered in class.
The grading of projects in this course will be rubric-based. The mandatory minimum criteria for grading is that all the requirements must be implemented, they must execute correctly, and sufficient datafill must be provided. Submissions that are incomplete, or that don’t work correctly, or that don’t provide sufficient datafill will earn a grade of zero.
2. Program Requirements
You will implement a program that manages the data for a book club that has multiple books and many members of the club (the people who read the books). The users of our program will be the book club members. They will be given the option of viewing the data, and they will be allowed to enter a rating (between 1 and 10) for a particular book that they read. They will also be able to print out the best rated book, based on the average of all ratings by all members, and the most rated book, based on the number of members who rated each book.
Your program will implement the following requirements:
2.1. The program will be separated into control, view, entity, and collection objects. The classes will include, at minimum:
2.1.1. one control class that drives the control flow
2.1.2. one view class that’s responsible for most communication with the end user
2.1.3. at (a)
(b)
2.1.4. at (a)
(b)
least five (5) different entity classes
both books and club members must have a unique identifier that is automatically generated
when they are created, as we did in the coding example of section 3.1, program #6; you must use inheritance to model this commonality
all entity objects must be dynamically allocated
least two (2) different collection classes
one will be a dynamically allocated array of object pointers, as we saw in the coding example of section 1.6, program #5
the other will be a singly linked list, based on the coding example of section 3.1, program #7, but with two modifications:
(i) the list will maintain a tail, in addition to a head
(ii) every time the list is printed, after the data is shown, the head and tail data will be printed a second time, indicating which is the head and which is the tail
2.2. The main() function will contain only two lines of code: one to declare a control object, and the other to call the control object’s launch function.
2.3. A menu will be presented to the end user, who is a member of the book club. The user will select an option, and the program will perform the corresponding action. The menu will be displayed again, until the user chooses to exit. The main menu will have the following five (5) options:
2.3.1. print the data for all the members in the book club
2.3.2. print the data for all the books in the book club
2.3.3. allow the club member to rate a specific book, giving it a numeric value between 1 and 10
©2020 Christine Laurendeau COMP 2404 :: Fall 2020 :: Midterm Project 1/4

2.3.4. compute and print out the best rated book (the book with the highest average rating entered by the members who rated that book) and the most rated book (the book with the greatest number of ratings) in the book club
2.3.5. exit the program
2.4. The information stored about each club member will include their first name, last name, and a collection of the books that they have rated. This collection will be stored as a linked list, as described in instruction 2.1.4.
2.5. The information stored about each book can be found in the coding example of section 3.1, program #6.
2.6. The book club will have a name, a collection of all its books stored as a linked list (as described in instruction 2.1.4) ordered first by book author then by title, a collection of its members stored as a dynamically allocated array of pointers (described in instruction 2.1.4) ordered by id, and a collection of ratings stored as a statically allocated collection of pointers.
2.7. The ratings will be modelled by an association class, as we saw in Assignment #2. Each rating will represent the fact that a specific club member has rated a specific book, with a numeric rating between 1 and 10, where 10 is the best rating, and 1 is the worst.
2.8. You must provide initialization functions that create sufficient data to thoroughly test your program. At minimum, you must provide data that initializes:
2.8.1. ten (10) different books
2.8.2. five (5) different club members
2.8.3. twenty (20) different ratings involving; at least five (5) of the books must have multiple ratings from different club members
3. Constraints
Your program must comply with all the rules of correct software engineering that we have learned during the lectures, including but not restricted to:
3.1. The code must be written in C++98, and it must compile and execute in the default course VM. It must not require the installation of libraries or packages or any software not already provided in the VM.
3.2. Your program must follow correct encapsulation principles, including the separation of control, view, entity, and collection object functionality.
3.3. Your program must not use any classes, containers, or algorithms from the C++ standard template library (STL), unless explicitly permitted in the instructions.
3.4. Your program must follow basic OO programming conventions, including the following:
3.4.1. Do not use any global variables or any global functions other than main().
3.4.2. Do not use structs. You must use classes instead.
3.4.3. Objects must always be passed by reference, never by value.
3.4.4. Except for simple getter functions, data must be returned using output parameters, and not using the return value.
3.4.5. Existing functions must be reused everywhere possible.
3.4.6. All basic error checking must be performed.
3.4.7. All dynamically allocated memory must be explicitly deallocated.
3.5. All classes must be thoroughly documented in every class definition, as indicated in the course material, section 1.3.
©2020 Christine Laurendeau COMP 2404 :: Fall 2020 :: Midterm Project 2/4

4. Submission
4.1. You will submit in cuLearn, before the due date and time, the following:
4.1.1. A UML class diagram (as a PDF file), drawn by you using a drawing package of your choice, that
corresponds to the entire program design. 4.1.2. One tar or zip file that includes:
(a) (b) (c)
all source and header files
a Makefile
a README file that includes:
(i) a preamble (program author, purpose, list of source and header files)
(ii) compilation and launching instructions
NOTE: Do not include object files, executables, hidden files, or duplicate files or directories in your submission.
4.2. Late submissions will be subject to the late penalty described in the course outline. No exceptions will be made, including for technical and/or connectivity issues. Do not wait until the last day to submit.
4.3. Only files uploaded into cuLearn will be graded. Submissions that contain incorrect, corrupt, or missing files will receive a grade of zero. Corrections to submissions will not be accepted after the due date and time, for any reason.
5. Grading
The grading of this project will be rubric-based, and the total grade will be out of 60 marks.
5.1 Minimal criteria
In order to be graded, your program must meet the following minimum criteria:
5.1. The program must be implemented in C++98, and it must compile and execute in the default course VM.
5.2. A correct Makefile must be provided.
5.3. The program must successfully complete at least three (3) executions that meet all requirements and constraints described in sections 2 and 3.
5.4. The program must be initialized with sufficient datafill to thoroughly test the program.
Submissions that do not meet this minimum criteria will not be graded and will earn a grade of zero.
5.2 Rubric-based grading
The project will be assessed in accordance with the grading categories listed in section 5.3. Each category will be graded based on a 6-point rubric. Some categories are worth double the weight of other categories, so their value is 12 points each. These will still be assessed according to the 6-point rubric, but the values will be doubled.
The 6-point rubric is defined as follows:
• [6 points] • [5 points] • [4 points] • [3 points] • [2 points] • [1 points] • [0 points]
Excellent (100%) Good (83%) Satisfactory (67%) Adequate (50%) Inadequate (33%) Poor (17%) Missing (0%)
©2020 Christine Laurendeau
COMP 2404 :: Fall 2020 :: Midterm Project 3/4

5.3 Grading categories
The project will earn an overall grade out of 60 marks. This will be the sum of the grades earned for each of the following categories, based on the 6-point rubric described in section 5.2:
5.1. UML [6 marks]: This criteria evaluates the UML class diagram corresponding to the design and imple- mentation of your entire program. The diagram must be drawn by you, using a drawing package, and it must be submitted as a PDF file. Other formats will not be graded. Your UML class diagram must comply with the UML format and conventions covered in the course material, section 2.3.
5.2. Object categories [12 marks]: This criteria evaluates how correctly the functionality of your imple- mentation is separated into control object(s), view object(s), entity objects, and collection object(s), and how well your object design follows the correct software engineering rules of data abstraction and en- capsulation.
5.3. Function design [6 marks]: This criteria evaluates how effectively the functionality of your implemen- tation is separated into modular functions inside your objects, and how well it follows the correct software engineering rules of data abstraction and encapsulation.
5.4. Inheritance [6 marks]: This criteria evaluates the effective development and usage of inheritance in your code, specifically as it relates to the organization of the entity objects, as described in the program requirements in section 2.
5.5. Collection classes [12 marks]: This criteria evaluates the effective development and usage of the two required collection classes in your code, as described in the program requirements in section 2.
5.6. Code quality [12 marks]: This criteria evaluates the overall code quality. This includes, but is not limited to, how well your classes are implemented, how well the code is written, how well the principle of least privilege is applied, the presence of constructors and destructors where appropriate, how well the code complies with all constraints listed in section 3, etc.
5.7. Packaging [6 marks]: This criteria evaluates the packaging of the code into an archive file. This includes, but is not limited to, the correct separation of the code into header and source files, the presence of complete and correctly formatted Makefile and README files, and the absence of duplicate, additional, and/or unneeded files.
©2020 Christine Laurendeau COMP 2404 :: Fall 2020 :: Midterm Project 4/4