##### Lab 3, homework help

Lab 3
( 80 pts, due next Sat night, midnight)
Part A: Classes/pointers(35 pts)
Write a header file, and an accompanying .cpp file for a class for a book. The book class should include:
1. (2 pts)Fields for the author’s first name, last name, an array of 10 integers for ratings (on the heap – just because…), a field for the name of the book, and a field for the year in which it was published.
2. (2 pts) Two constructors
a. The first constructor takes as input the first name, the last name, the name of the book, the year published, and then creates and initializes the array of ratings to 0
b. The second constructor that takes the first name, the last name, the name of the book, the year of publication, and an array of 10 values and initializes everything accordingly.
3. (3 pts) A destructor that does what destructors do.
4. (3 pts) A method that calculates the average rating of the book by traversing the ratings array and finding the average rating. The method should return that rating (as a double).
5. (2 pts) A method that prints out the rating, and, if the rating is 0, prints “(no ratings yet)”.
6. ( 2 pts) Write a method that prints out the book’s information, including author information, year of publication, and average rating.
7. (3 pts) Write an operator overload for the > (or <) operator for your book class. In your main: 1. (12 pts for working version) Create an array of 5 book objects (on the stack). Write a function that traverses the array of students and finds the “greatest” book object, using the overloaded operator method you wrote. Print out that book’s information using the method for printing out book information 2. (3 pts for working version) Create one book object on the heap and print out that book’s information using the method for printing out book’s information 3. (3 pts for working version) Create an array of 2 book objects on the heap, and print out their information using the method for printing out book’s information Part B: Linked Lists: For this it’s probably easiest to create a new project for the linked list files. I’m giving you the .hpp files and the main, below. I’m also giving you the output my program gave me. Your job is to fill in the code for the .cpp files for a linked list. Given the following for SNode.hpp (with the data being a string): SNode.hpp is defined as follows: #ifndef SNODE_HPP_ #define SNODE_HPP_ #include
using namespace std;

class SNode {
friend class SLL;
int rating;
string comments; // instead of int data, now the data is both the rating
// and the accompanying comments – think of when you rate
// a book or a song, and then are asked to share comments
//about the book. Both are the data in this node.
SNode *next;
public:
SNode(); // this constructor takes no input. It and asks the user to input a
// rating, then reads the rating into the rating field, and
SNode(int r, string c);
// this constructor takes as input an integer and a string, and
// initializes the rating field to the integer, and the comment
// field to the string.

~SNode();
void printNode();

};

#endif /* SNODE_HPP_ */
(4 pts) Write the accompanying SNode.cpp
——————————————————————————————————————————–
SLL.hpp is defined as follows:
#ifndef SLL_HPP_
#define SLL_HPP_

#include “SNode.hpp”
#include
#include
using namespace std;

class SLL {
SNode *first;
SNode *last;
int size;
public:
SLL();
~SLL();
void printSLL();
// (4 pts for working) write a method that prints out the linked list
void insertInOrder(int r, string c);
//(6 pts for working)
//This method creates an ordered linked list (ordered by the rating). If the
//linked list is empty, it calls addFirst with r and c. If the rating is less
//than the first node’s rating in the list, it calls addAtFirst. If the
//rating is greater than the last node’s rating, it calls the push method.
//Otherwise it creates a new node using r and c, and inserts that node in
void push(int r, string c);
// (4 pts for working)
// pushes a new node (with rating r and c comments) onto the end of the linked // list
// (remember to reset the last pointer) – I called this from the
// insertInOrder() method.
// (5 pts for working)
// adds a new node (made from r and c) to the beginning of the
// list (remember to reset the first pointer) – I called this from
// insertInOrder
//(3 pts for working)
//adds the very first node (made from r and c) to an empty list
// I called this from insertInOrder
int pop();
// (5 pts for working)
// removes the last node from the linked list, and returns the rating from the
// node removed.
double getAve();
// (4 pts for working)
// calculates the average rating (by traversing the list) and then returns
// the average rating.

};

#endif /* SLL_HPP_ */

/************MAIN FUNCTION ********************/

#include
#include “SLL.hpp”
using namespace std;

int main() {
int r[10] = {9,8,4,5,11,10,3,6,8,2};
string s[10] = {“really good!”,”loved it”,”mediocre”, “okay, not great”,”best book ever!”, “awesome!”,”boring”,”not bad”,”definitely worth reading”, “terrible!”};
SLL *list = new SLL();
for (int i = 0; i < 10; i++) { list->insertInOrder(r[i],s[i]);
list->printSLL();
}
cout << "Ave: "<< list->getAve() << endl; cout << "Popping " << list->pop() << endl; list->printSLL();
cout << "Popping " << list->pop() << endl; list->printSLL();
delete list;

return 0;
}

/*************************MY OUTPUT***************************/
(10 pts for getting same output)

Ave: 6.6
removing 11, best book ever!
deleting 11, best book ever!
Popping 11

removing 10, awesome!
deleting 10, awesome!
Popping 10

deleting 2, terrible!
deleting 3, boring
deleting 4, mediocre
deleting 5, okay, not great