Hi, my current lab is based on Lab 2, I attached both lab 2 and lab 3 requirements. I attached my code from previous lab 2. Thank you so much
Lab 2 HW requirment Programming problem: Currency Simulator A. Create an abstract base class called Currency with two integer attributes, both of which are non-public (Python programmers - it is understood that there is nothing private in Python but try to not access the attributes directly from outside the classes). The int attributes will represent whole part (or currency note value) and fractional part (or currency coin value) such that 100 fractional parts equals 1 whole part. B. Create one derived class - Money - with two additional non-public string attributes which will contain the name of the currency note (Dollar) and currency coin (Cent) respectively. DO NOT add these attributes to the base Currency class. C. In your base Currency class, add public class (C++ students are allowed to use friend methods as long as a corresponding class method is defined as well) methods for the following, where appropriate: ● Default Construction (i.e. no parameters passed) ● Construction based on parameters for all attributes - create logical objects only, i.e. no negative value objects allowed ● Copy Constructor and/or Assignment, as applicable to your programming language of choice ● Destructor, as applicable to your programming language of choice ● Setters and Getters for all attributes ● Adding two objects of the same currency ● Subtracting one object from another object of the same currency - the result should be logical, i.e. negative results are not allowed ● Comparing two objects of the same currency for equality/inequality ● Comparing two objects of the same currency to identify which object is larger or smaller ● Print method to print details of a currency object ● All of the above should be instance methods and not static. ● The add and subtract as specified should manipulate the object on which they are invoked. It is allowed to have overloaded methods that create ane return new objects. D. In your derived Money class, add new methods or override inherited methods as necessary, taking care that code should not be duplicated or duplication minimized. Think modular and reusable code. E. Remember - ● Do not define methods that take any decimal values as input in either the base or derived classes. ● Only the print method(s) in the classes should print anything to console. ● Throw String (or equivalent) exceptions from within the classes to ensure that invalid objects cannot be created. F. In your main: ● Declare a primitive array of 5 Currency references (for C++ programmers, array of 5 Currency pointers). ● Ask the user for 5 decimal numbers to be input - for each of the inputs you will create one Money object to be stored in the array. ● Once the array is filled, perform the following five operations: ○ Print the contents of the array of objects created in long form, i.e. if the user entered "2.85" for the first value, it should be printed as "2 Dollar 85 Cent". ○ Add the first Money object to the second and print the resulting value in long form as above. ○ Subtract the first Money object from the third and print the resulting value in long form as above. ○ Compare the first Money object to the fourth and print whether both objects are equal or not using long form for object values. ○ Compare the first Money object to the fifth and print which object value is greater than the other object value in long form. ● All operations in the main should be performed on Currency objects demonstrating polymorphism. ● Remember to handle exceptions appropriately. ● There is no sample output - you are allowed to provide user interactivity as you see fit and programs will be graded for clarity of interaction Lab 3 HW Requirment Programming problem: Currency Simulator A. Create an abstract base class called Currency with two integer attributes, both of which are non-public (Python programmers - it is understood that there is nothing private in Python but try to not access the attributes directly from outside the classes). The int attributes will represent whole part (or currency note value) and fractional part (or currency coin value) such that 100 fractional parts equals 1 whole part. B. Create one derived class - Money - with two additional non-public string attributes which will contain the name of the currency note (Dollar) and currency coin (Cent) respectively. DO NOT add these attributes to the base Currency class. C. In your base Currency class, add public class (C++ students are allowed to use friend methods as long as a corresponding class method is defined as well) methods for the following, where appropriate: ● Default Construction (i.e. no parameters passed) ● Construction based on parameters for all attributes - create logical objects only, i.e. no negative value objects allowed ● Copy Constructor and/or Assignment, as applicable to your programming language of choice ● Destructor, as applicable to your programming language of choice ● Setters and Getters for all attributes ● Adding two objects of the same currency ● Subtracting one object from another object of the same currency - the result should be logical, i.e. negative results are not allowed ● Comparing two objects of the same currency for equality/inequality ● Comparing two objects of the same currency to identify which object is larger or smaller ● Print method to print details of a currency object ● All of the above should be instance methods and not static. ● The add and subtract as specified should manipulate the object on which they are invoked. It is allowed to have overloaded methods that create ane return new objects. D. In your derived Money class, add new methods or override inherited methods as necessary, taking care that code should not be duplicated or duplication minimized. Think modular and reusable code. E. Remember - ● Do not define methods that take any decimal values as input in either the base or derived classes. ● Only the print method(s) in the classes should print anything to console. ● Throw String (or equivalent) exceptions from within the classes to ensure that invalid objects cannot be created. F. In your main: ● Declare a primitive array of 5 Currency references (for C++ programmers, array of 5 Currency pointers). ● Ask the user for 5 decimal numbers to be input - for each of the inputs you will create one Money object to be stored in the array. ● Once the array is filled, perform the following five operations: ○ Print the contents of the array of objects created in long form, i.e. if the user entered "2.85" for the first value, it should be printed as "2 Dollar 85 Cent". ○ Add the first Money object to the second and print the resulting value in long form as above. ○ Subtract the first Money object from the third and print the resulting value in long form as above. ○ Compare the first Money object to the fourth and print whether both objects are equal or not using long form for object values. ○ Compare the first Money object to the fifth and print which object value is greater than the other object value in long form. ● All operations in the main should be performed on Currency objects demonstrating polymorphism. ● Remember to handle exceptions appropriately. ● There is no sample output - you are allowed to provide user interactivity as you see fit and programs will be graded for clarity of interaction 1.png 10.jpg 11.jpg 12.jpg 2.png 3.jpg 4.jpg 5.jpg 6.jpg 7.jpg 8.jpg 9.jpg Currency.py """ CIS 22C Summer Quarter Professor: Manish Goel Student: Tannaz Anvari ********** Lab 2 Started date: 7/08/2021 Updated dates: 07/09/2021, 07/10/2021, 07/12/2021 Final submission date: 07/13/2021 """ from abc import abstractmethod class Currency: def __init__(self, note=0, coin=0): """Constructor of the class""" if note < 0="" or="" coin="">< 0:="" raise="" typeerror("invalid="" argument!!")="" self._note="note" +="" coin="" 100="" self._coin="coin" %="" 100="" def="" getnote(self):="" """getter="" for="" note"""="" return="" self._note="" def="" getcoin(self):="" """getter="" for="" coin"""="" return="" self._coin="" def="" setnote(self,="" note):="" """setter="" for="" note"""="" if="" note="">< 0:="" raise="" typeerror("invalid="" argument!!")="" self._note="note" def="" setcoin(self,="" coin):="" """setter="" for="" coin"""="" if="" coin="">< 0:="" raise="" typeerror("invalid="" argument!!")="" self._note="" +="coin" 100="" self._coin="coin" %="" 100="" @abstractmethod="" def="" __str__(self):="" pass="" @abstractmethod="" def="" __add__(self):="" pass="" @abstractmethod="" def="" __sub__(self):="" pass="" def="" print(self):="" """method="" to="" print="" details="" of="" currency"""="" print(self.__str__())="" def="" add(self,="" o):="" """method="" to="" add="" currency"""="" res="self" +="" o="" self._note="res._note" self._coin="res._coin" def="" subtract(self,="" o):="" """method="" to="" subtract="" currency"""="" sub="self" -="" o="" self._coin="sub._coin" self._note="sub._note" @abstractmethod="" def="" __eq__(self,="" o):="" pass="" @abstractmethod="" def="" __gt__(self,="" o):="" pass="" def="" __ne__(self,="" o):="" return="" not="" (self="=" o)="" def="" __lt__(self,="" o):="" return="" not="" (self="=" o)="" and="" not="" (self=""> o) def __le__(self, o): return not self