My code
unknown
plain_text
5 years ago
10 kB
7
Indexable
#include<iostream>
#include<string>
#include<vector>
#include<set>
using namespace std;
//abstract class Item
class Item {
public:
virtual double GetTotalPrice() = 0;
};
//Enum for discount type
enum Discount_Type { amount, percentage };
//to store all the department id to check for duplication
set<string> departmentID;
//Department class which contains id, name,room phone number and parent department
class Department {
string id;
string name;
int room;
string phoneNumber;
Department* parent;
public:
//Empty constructor
Department() {}
//parametrized constructor
Department(string id, string name, int room, string phoneNumber, Department* parent) {
//check for duplication of id
if (departmentID.count(id) > 0) {
cout << "Oject Not created Due to Department ID already exist\n ";
return;
}
else {
departmentID.insert(id);
}
this->id = id;
this->name = name;
this->room = room;
this->phoneNumber = phoneNumber;
this->parent = parent;
}
//this will return all the values of the object for printing
string toString() {
string output = "\n";
output += "\tId: " + id + "\n";
output += "\tName: " + name + "\n";
output += "\tRoom: " + to_string(room) + "\n";
output += "\tPhoneNumber: " + phoneNumber + "\n";
if (parent != NULL) {
output += "Parent Department: " + parent->toString();
}
return output;
}
};
//Product class whih Contains name, description category, department, price, discount,discount type
class Product :public Item{
protected:
string name;
string description;
string category;
Department department;
double price;
double discount;
int discount_type;
public:
//empty constructor
Product() {}
//parametrized constructor
Product(string name, string description, string category, Department department, float price, float discount, Discount_Type discount_type) {
//if price value is negative then it returns with a messsage;
if (price < 0) {
cout << "No object create due to negative value of price\n";
return;
}
//if discount value is negative then it returns with a messsage;
if (discount < 0) {
cout << "No object create due to negative value of discount\n";
return;
}
//if every thing fine then we just simply add values to the variables
this->name = name;
this->description = description;
this->category = category;
this->department = department;
this->price = price;
this->discount = discount;
this->discount_type = discount_type;
}
//this will return the total price after neglect the discount
virtual double GetTotalPrice() {
//if discount is of type amount
if (discount_type == amount) {
double finalP = price - discount;
if (finalP < 0) {
cout << "Total Price cannot be negative";
return 0;
}
else {
return finalP;
}
}
else {
//if the discount is of the type percentage
double finalP = price - (price * discount / 100);
if (finalP < 0) {
cout << "\nTotal Price cannot be negative\n";
return 0;
}
else {
return finalP;
}
}
}
//return the values of each variable to print in string form
virtual string toString() {
string output = "";
output += "Name: " + name + "\n";
output += "Description: " + description + "\n";
output += "Category: " + category + "\n";
output += "Department: " + department.toString() + "\n";
double totalPrice = this->GetTotalPrice();
output += "Total Price " + to_string(totalPrice) + "\n";
return output;
}
};
//Service class which contains duration and it import the class Product in public accessor mode
class Service : public Product {
double duration;
//Call the product i.e. super class constructor
public:
Service(string name, string description, string category, Department department, double duration, double rate, double rate_discount, Discount_Type discount_type) :Product(name, description, category, department, rate, rate_discount, discount_type) {
this->duration = duration;
}
//this will return all the variables value
virtual string toString2() {
string output = "";
output += toString();
output += "Duration: " + to_string(duration) + "\n";
return output;
}
};
void quickSort(vector<Item* >&, int, int);
int partition(vector<Item* >&, int, int);
int main() {
//create vector of all the class
vector<Department> department;
//Remove the Products and Services vectors
/*vector<Product> product;
vector<Service> service;*/
//Add a new vector called Items,
//which contains pointers to Item instances
vector<Item*> items;
// add 3 objects of departments
Department d1("ABCD-EFGH-1234", "Electronics", 260, "0888123456", NULL);
Department d2("ABCD-EFGH-8965", "Mechanical", 452, "0963258741", NULL);
Department d3("ABCD-EFGH-7412", "IT", 153, "0258777412", &d1);
//add department object to the vector
department.push_back(d1);
department.push_back(d2);
department.push_back(d3);
//Add at least 3 products and 3 services to the Items collection
//create object of products
Product *p1= new Product("PC Tools", "Tools used to design, repair or develop an PC", "Games", d3, 185.99, 30, amount);
Product *p2= new Product("Car Tools", "Tools used to repair cars i.e. open and closing", "Repair", d2, 199.99, 15, percentage);
Product *p3 = new Product("Bulb", "Led bulb operate on very low power", "Electonics", d1, 400.56, 80, amount);
//add product objects to the vector
items.push_back(p1);
items.push_back(p2);
items.push_back(p3);
//Create objects of service
Service *s1 = new Service("Repairing Cars", "Repairing of Cars and automobile", "Cars", d2, 2, 20.20, 10, percentage);
Service *s2= new Service("Web Developer", "crete any web app or android app", "IT", d3, 12, 500, 50, amount);
Service *s3 = new Service("Repairing of Electronics tools", "Repairing of CPU,montior", "Electornics", d1, 1.5, 8.50, 30, percentage);
//add service objects to vector
items.push_back(s1);
items.push_back(s2);
items.push_back(s3);
//Use a loop to calculate and display the total
//prices of all elements in the Items collection
double totalPrice = 0;
for (int i = 0; i < items.size(); i++)
{
totalPrice += items[i]->GetTotalPrice();
}
cout << "Total Price: $" << totalPrice << endl;
int p = 0;
int q = 6;
quickSort (items, p, q);
for ( int i = 0; i<6; i++ ) {
items[i]->Out();
cout << endl;
}
return 0;
}
void quickSort(vector<Item*>& items, int a, int b)
{
if (a<b)
{
int r = partition(items, a, b);
quickSort(items, a, r);
quickSort(items, r + 1, b);
}
}
int partition(vector<Item*>& items, int a, int b)
{
int x = items[a]->GetTotalPrice(), i=a;
for (int j = a + 1; j<b; j++)
{
if ( items[j]->GetTotalPrice() <= x ){
i++;
swap(items[i], items[j]);
}
}
swap(items[i], items[a]);
return i;
}
//print product vector data using for loop
//cout << "Products\n";
//cout << "================================\n";
//for (int i = 0; i < items.size(); i++) {
// if (Product* p = dynamic_cast<Product*>(items[i])) {
// cout << dynamic_cast<Product*>(items[i])->toString();
// cout << endl;
// cout << "========================================\n";
// }
//}
////print service vector using for loop
//cout << "\n\nServices\n";
//cout << "================================\n";
//for (int i = 0; i < items.size(); i++) {
// if (Service* s = dynamic_cast<Service*>(items[i])) {
// cout << dynamic_cast<Service*>(items[i])->toString2();
// cout << endl;
// cout << "========================================\n";
// }
//}
//check duplication of id
//cout << "\nCheck duplication of id \n";
//Department d4("ABCD-EFGH-7412", "IT", 153, "0258777412", &d1);
////check for negative price entered
//cout << "\n\ncheck for negative price entered \n";
//Product p4("PC Tools", "Tools used to design, repair or develop an PC", "Games", d3, -185.99, 30, amount);Editor is loading...