[SOLVED] SOLVED: Define and implement a **template class ListNode** in a namespace solutions

45.99 $

Programming resource
Digital learning resource
Category:
Practical programming resource
Suitable for guided study and reference
Tutor guidance available when needed

Description

Rate this product

###Task 1: Template

Define and implement a **template class ListNode** in a namespace **MYLIB** in a file ¡¤OrderedList.h¡¤, which has **a template data member** and **two pointers** that point to the previous ListNode object and next ListNode object. Define and implement necessary constructor(s) and other member functions in the file `OrderedList.h`.

Define and implement **a template class OrderedList** as a **container** in a file
`OrderedList.h` that can be used to store template data in a Doubly Linked List (DLL)
with nodes ordered by the data values from the smallest one to the biggest one.
Define two data members **head** and **tail** as pointers of **ListNode type**. They point to the
head and tail of a DLL.

Define a **nested class iterator** in the template class **OrderedList that can be used to
traversal the DLL**. It contains a data member of a ListNode pointer points to a node in
the DLL. Define **constructors**, overloading operators, such as ++ (pre-fix and post-fix
increment operator) that change an **iterator** points to the next node, * (dereference
operator) returns the data that the iterator points to, and != (not equal) to compare two
**iterators** in the class **iterator**.

Define a ***constructor, destructor** for the template class **OrderedList**.

Define a member function **begin()** for the template class **OrderedList** that returns an
iterator object points to the beginning of the DLL.

Define a member function **end()** for the template class **OrderedList** that returns an
iterator object points to the end of the DLL.

Define a member function **insert(const T &)** for the template class **OrderedList** that
take a template data as a parameter, insert a new node with the data value into the correct
location in the DLL.

Implement member functions for the template class **OrderedList** and nested class
**iterator** in the file `OrderedList.cpp`.

Define a class **Student** in a file `Student.h`, which contains student number, name and
email.

Define overloading insertion operator (<<) to print out data members of a Student object.
Define overloading extraction operator () to get input data to a Student object.
Define overloading comparison operator <= (or <) that compare two Students¡¯ objects by
their emails.

Define necessary member functions, such as constructors, etc., for the class Student.

Implement member functions, friend input operator, output operator for the class **Student**
in a file `Student.cpp`.

Download a file `task1Main.cpp` to test the DLL by different data (integers, doubles and
Student objects). You will get data from the keyboard, add them into the ordered DLL,
then print out results.

####Testing:

You can compile the task 1 by

CC ¨Co task1 task1Main.cpp Student.cpp

Then run the program like following (input data in Italics):

./task1

How many integers? *5*

Input an integer: *18*

Input an integer: *2*

Input an integer: *13*

Input an integer: *9*

Input an integer: *7*

Output integers:

2 7 9 13 18

How many doubles? *8*

Input a double: *17.5*

Input a double: *12.5*

Input a double: *11.3*

Input a double: *19.8*

Input a double: *18.4*

Input a double: *10.2*

Input a double: *21.4*

Input a double: *22.2*

Output doubles:

10.2 11.3 12.5 17.5 18.4 19.8 22.2 31.4

How many student records? *4*

Input number: *1234567*

Input name: *Cart Dong*

Input email: *[email protected]*

Input number: *1234568*

Input name: *Bob Smith*

Input email: *[email protected]*

Input number: *1234570*

Input name: *Mark Twain*

Input email: *[email protected]*

Input number: *1234571*

Input name: *Alice Montage*

Input email: *[email protected]*

Output students:
1234571, Alice Montage, [email protected]
1234568, Bob Smith, [email protected]
1234567, Cart Dong, [email protected]
1234570, Mark Twain, [email protected]

./task1 < input1.txt

**Note: Your program of task 1 should work on different testing data.**

###Task 2: file I/O and manipulations

Define a class **Account** in a file `Account.h` that contains data members **account number,
name, sex, date of birth (Date type), address and account balance**. Define
**constructor(s)**, overloading operators, include assignment operator (=), less than and
equals to operator (<=), insertion operator (<<), and extraction operator () for the class
**Account**. Define other necessary member functions.

Implement member functions and overloading operators for the class **Account** in a file
`Account.cpp`.

Define you own manipulator **Currency** that takes two integers as **width and precision**
for the output of currency in the file `Account.h`. Implement the manipulator **Currency** in
the file `Account.cpp`. The manipulator Currency will be used in the insertion operator for
Account balance. The manipulator Currency will set output currency symbol as ¡°$¡±, the
width of output currency, the precision of currency and filled by zeros (¡®0¡¯s) if the width
of currency is not long enough.

**Hint: Define fixed size char arrays instead of strings for some data members defined
in the class Account (such as name, address)**.

**Hint: Use iomanip and Currency that defined to generate formatted outputs for the
account records**.

Define a class **AccountManagement** in a file `AccountManagement.h` that contains a
data member of a container **OrderedList**, which will be used to store account records.
Define member functions:
+ loadData(const char *) will load Account record from a given text file and store
the records in the container of OrderedList.
+ displayData() will use iterator of OrderedList object to traversal the DLL and
display formatted output data of accounts.
+ saveData(const char *) will save the accounts from DLL to a given binary file.

####Testing:

Use CC to compile the source files by

CC ¨Co task2 task2main.cpp Account.cpp Date.cpp AccountManagement.cpp

and run the program by

./task2 accounts.txt accounts.dat

The output records on the screen can be found in a text file **output2.txt**.

**Note: Your solutions of task 2 should work on different testing data / files.**

###Task3: STL map and iterator

Use the source code files Date.h, Date.cpp, Account.h, and Account.cpp that used in task
2.

Define a class **AccountMap** in a file `AccountMap.h`. It contains a data member, which
is a **multimap** container that can be used to store Account records. The key of the
container is a char pointer of account¡¯s name. You will define a **comparison function
CompareCharArrays** to compare two char arrays in the file `AccountMap.h` for the
multimap object. For example:
“`cpp
multimap “`
Define a **destructor** for the class AccountMap to release dynamic memory allocated for
the container to avoid memory leaks.

Define a member function **loadData(const char *)** for the class AccountMap that load
account records from a given binary file (created in task 2), insert the records into the
multimap container.

Define a member function **displayData()** for the class AccountMap that use iterator of the
container to display all records.

Implement the member functions in a file `AccountMap.cpp`.

####Testing:

Use CC to compile the source files by

CC ¨Co task3 task3Main.cpp Account.cpp Date.cpp AccountMap.cpp

and run the program by

./task3 accounts.dat

The binary file `accounts.dat` is generated by your task 2. The outputs of this task look
like the results in a text file `output3.txt`.

**Note: Your solutions should work on different testing data / files.**

Resource details

Understand the Task Before You Use the Resource

Review the requirements, identify the programming concepts involved, study the implementation and test your understanding with your own examples and modifications.