Untitled
unknown
c_cpp
a year ago
18 kB
3
Indexable
#include <iostream> #include <string> using namespace std; class stackNode { public: string workerName; stackNode* next; }; class Stack { private: stackNode* head; public: int size; int capacity; Stack() { head = NULL; size = 0; capacity = 100; } void push(string addedWorkerName) { if (size == capacity - 1) { cout << "Product line is full, can't push" << endl; } else { stackNode* newNode = new stackNode; newNode->workerName = addedWorkerName; newNode->next = head; head = newNode; size++; } } string top() { if (head == nullptr) return "Product line is empty"; else return head->workerName; } void pop() { if (head == nullptr) cout << "Product line is empty, nothing to pop" << endl; else { stackNode* newNode = head; cout << "\n" << newNode->workerName << " has been removed." << endl; head = head->next; delete newNode; size--; } } void display() { stackNode* newNode = head; if (newNode == nullptr) cout << "There is no workers in this MODEL." << endl; while (newNode != nullptr) { cout << newNode->workerName << " "; newNode = newNode->next; } } void deleteAll() { stackNode* firstNode = head; stackNode* secondNode = head; while (firstNode != nullptr) { secondNode = firstNode; firstNode = firstNode->next; delete secondNode; } } }; class queueNode { public: string partName; int piecesNeeded; queueNode* next; }; class Queue { private: queueNode* rear; queueNode* front; public: Queue() { rear = nullptr; front = nullptr; } void enqueue(string addedPartName, int addedPiecesNeeded) { queueNode* newwNode = new queueNode; newwNode->partName = addedPartName; newwNode->piecesNeeded = addedPiecesNeeded; newwNode->next = nullptr; if (front == nullptr) { front = newwNode; rear = newwNode; } else { rear->next = newwNode; rear = newwNode; } } bool dequeue() { if (front == nullptr) return false; else { queueNode* newNode = front; front = front->next; delete newNode; } return true; } void display(queueNode* newNode) { if (front == nullptr) cout << "There is no parts." << endl; else if (newNode != nullptr) { cout << newNode->partName << " and the number of pieces is: " << newNode->piecesNeeded << endl; display(newNode->next); } } void display() { display(front); } void displayInReverse() { displayInReverse(front); } void displayInReverse(queueNode* newNode) { if (newNode == nullptr) return; else { displayInReverse(newNode->next); cout << endl << newNode->partName << " and its number is " << newNode->piecesNeeded; } } void deleteAll() { queueNode* firstNode = front; queueNode* secondNode = front; while (firstNode != nullptr) { secondNode = firstNode; firstNode = firstNode->next; delete secondNode; } } }; class listNode { public: string modelName, lineSupervisorName; Queue neededParts; Stack lineWorkers; listNode* next; }; class list { private: listNode* head; public: list() { head = nullptr; } bool insert(int index, string addedModelName, string addedLineSupervisorName, Queue addedNeededParts, Stack addedLineWorkers) { if (index < 0) return false; if (index > 0 && head == nullptr) return false; listNode* newNode = new listNode; newNode->modelName = addedModelName; newNode->lineSupervisorName = addedLineSupervisorName; newNode->neededParts = addedNeededParts; newNode->lineWorkers = addedLineWorkers; if (index == 0) { newNode->next = head; head = newNode; return true; } if (index >= 1) { int currIndex = 0; listNode* currNode = head; while (currNode->next != nullptr && currIndex < index) { currNode = currNode->next; currIndex++; } newNode->next = currNode->next; currNode->next = newNode; } return true; } void displayNode(string searchedModelName) { listNode* currNode = head; while (currNode != nullptr && currNode->modelName != searchedModelName) { currNode = currNode->next; } if (currNode != nullptr) { cout << currNode->modelName << " it's production line supervisor is " << currNode->lineSupervisorName; cout << " and it's parts: "; currNode->neededParts.display(); cout << " and the workers whos assigned to this production line are "; currNode->lineWorkers.display(); cout << endl; } else cout << "NO MODEL FOUND!" << endl; } void display() { listNode* currNode = head; while (currNode != nullptr) { cout << endl << currNode->modelName << " his supervisor is " << currNode->lineSupervisorName; cout << " and it's parts: "; currNode->neededParts.display(); cout << "and the workers whos assigned to this production line are "; currNode->lineWorkers.display(); cout << endl; currNode = currNode->next; } } void deleteNode(string deleteModelName) { if (head == nullptr) { cout << "There is no MODELS in this company." << endl; return; } listNode* firstNode = head; listNode* secondNode = nullptr; while (firstNode != nullptr && firstNode->modelName != deleteModelName) { secondNode = firstNode; firstNode = firstNode->next; } if (firstNode != nullptr) { if (secondNode != nullptr) { secondNode->next = firstNode->next; } else head = firstNode->next; firstNode->lineWorkers.deleteAll(); firstNode->neededParts.deleteAll(); cout << "Model removed."; delete firstNode; } else { cout << "\nModel not found."; } } void removeWorker(string deleteModelName) { if (head == nullptr) { cout << "\nThere is no Workers here."; return; } listNode* firstNode = head; while (firstNode->modelName != deleteModelName && firstNode != nullptr) { firstNode = firstNode->next; } if (firstNode != nullptr) { firstNode->lineWorkers.pop(); } else cout << "\nModel not found!"; } void addWorker(string addModelName, string newWorkerName) { if (head == nullptr) { cout << "\nThere is no Workers here."; return; } listNode* firstNode = head; while (firstNode->modelName != addModelName && firstNode != nullptr) { firstNode = firstNode->next; } if (firstNode != nullptr) { firstNode->lineWorkers.push(newWorkerName); } else cout << "\nModel not found!"; } }; class treeNode { public: treeNode* left; treeNode* right; string modelName, lineSupervisorName; Queue neededParts; Stack lineWorkers; treeNode() { left = right = nullptr; } treeNode(string addedModelName, string addedLineSupervisorName, Queue addedNeededParts, Stack addedLineWorkers) { modelName = addedModelName; lineSupervisorName = addedLineSupervisorName; neededParts = addedNeededParts; lineWorkers = addedLineWorkers; left = right = nullptr; } }; class bst { private: treeNode* root; public: bst() { root = nullptr; } bool insert(string addedModelName, string addedLineSupervisorName, Queue addedNeededParts, Stack addedLineWorkers) { if (root == nullptr) { root = new treeNode(addedModelName, addedLineSupervisorName, addedNeededParts, addedLineWorkers); return true; } else { treeNode* p = root; //search treeNode* q = root; //insert while (p != nullptr) { q = p; if (addedModelName < p->modelName) p = p->left; else if (addedModelName > p->modelName) p = p->right; else return false; } if (addedModelName < q->modelName) q->left = new treeNode(addedModelName, addedLineSupervisorName, addedNeededParts, addedLineWorkers); else q->right = new treeNode(addedModelName, addedLineSupervisorName, addedNeededParts, addedLineWorkers); return true; } } bool searchAndDisplay(string searchingModelName) { if (root == nullptr) { return false; } else { //search treeNode* p = root; while (p != nullptr) { if (searchingModelName < p->modelName) p = p->left; else if (searchingModelName > p->modelName) p = p->right; else { cout << p->modelName << " it's production line supervisor is " << p->lineSupervisorName; cout << " and it's parts: "; p->neededParts.display(); cout << " and the workers whos assigned to this production line are "; p->lineWorkers.display(); cout << endl; return true; } } cout << "NO MODEL FOUND!" << endl; return false; } } treeNode* deleteNode(string deletingModelName) { root = deleteNode(root, deletingModelName); return root; } treeNode* deleteNode(treeNode* root, string deletingModelName) { if (root == nullptr) return root; if (deletingModelName < root->modelName) root->left = deleteNode(root->left, deletingModelName); else if (deletingModelName > root->modelName) root->right = deleteNode(root->right, deletingModelName); else { if (root->left == nullptr && root->right == nullptr) return 0; else if (root->left == nullptr) { treeNode* temp = root->right; delete(root); return temp; } else if (root->right == nullptr) { treeNode* temp = root->left; delete(root); return temp; } treeNode* temp = minValueNode(root->right); root->modelName = temp->modelName; root->right = deleteNode(root->right, temp->modelName); } return root; } treeNode* minValueNode(treeNode* root) { while (root->left != nullptr) { root = root->left; } return root; } void displayModelParts(string modelName) { treeNode* p = root; while (p != nullptr) { if (modelName < p->modelName) p = p->left; else if (modelName > p->modelName) p = p->right; else { p->neededParts.display(); } } } void displayModelPartsInReverse(string modelName) { treeNode* p = root; while (p != nullptr && p->modelName!= modelName) { if (modelName < p->modelName) p = p->left; else if (modelName > p->modelName) p = p->right; } p->neededParts.displayInReverse(); } void displayInOrder() { displayInOrder(root); } void displayInOrder(treeNode* Newroot) { if (Newroot != nullptr) { displayInOrder(Newroot->left); cout << Newroot->modelName << " it's production line supervisor is " << Newroot->lineSupervisorName; cout << " and it's parts: "; Newroot->neededParts.display(); cout << " and the workers whos assigned to this production line are "; Newroot->lineWorkers.display(); cout << endl; displayInOrder(Newroot->right); } } void removeWorker(string deleteModelName) { if (root == nullptr) { cout << "\nThere is no Workers here."; return; } else { //search treeNode* p = root; while (p != nullptr) { if (deleteModelName < p->modelName) p = p->left; else if (deleteModelName > p->modelName) p = p->right; else { p->lineWorkers.pop(); return; } } cout << "NO MODEL FOUND!" << endl; return; } } void addWorker(string addModelName, string newWorkerName) { treeNode* firstNode = root; while (firstNode->modelName != addModelName && firstNode != nullptr) { if (addModelName < firstNode->modelName) firstNode = firstNode->left; else if (addModelName > firstNode->modelName) firstNode = firstNode->right; } if (firstNode != nullptr) { firstNode->lineWorkers.push(newWorkerName); } else cout << "\nModel not found!"; } }; int main() { bst shamCars2; Queue firstModelParts; Stack firstModelWorkers; firstModelParts.enqueue("dalob", 4); firstModelParts.enqueue("Radio", 1); firstModelParts.enqueue("Krse", 5); firstModelWorkers.push("moaz"); firstModelWorkers.push("yazan"); firstModelWorkers.push("kareem"); shamCars2.insert("SHAM1", "ZAKI", firstModelParts, firstModelWorkers); Queue secondModelParts; Stack secondModelWorkers; shamCars2.insert("SHAM2", "NEWADMIN", secondModelParts, secondModelWorkers); Queue thirdModelParts; Stack thirdModelWorkers; thirdModelParts.enqueue("Window", 4); thirdModelParts.enqueue("Drkson", 1); thirdModelParts.enqueue("Engine", 2); thirdModelWorkers.push("laith"); thirdModelWorkers.push("fadi"); thirdModelWorkers.push("rami"); shamCars2.insert("SHAM3", "SARIA", thirdModelParts, thirdModelWorkers); string deleteForModel; cout << "Enter model name you want to delete it's data: "; cin >> deleteForModel; shamCars2.deleteNode(deleteForModel); string searchForModel; cout << "Enter model name you want to display it's data: "; cin >> searchForModel; shamCars2.searchAndDisplay(searchForModel); bool editQue; cout << "Do you want to edit any model WORKERS? (1 or 0)"; cin >> editQue; if (editQue) { string modelNameForEdit; cout << "enter the model name: "; cin >> modelNameForEdit; int selectAnEdit; cout << "1 to add a worker and 2 to remove: "; cin >> selectAnEdit; while (selectAnEdit != 1 && selectAnEdit != 2) { cout << "Wrong choice! enter another value:"; cin >> selectAnEdit; } if (selectAnEdit == 1) { string addingNewWorker; cout << "Enter the worker name: "; cin >> addingNewWorker; shamCars2.addWorker(modelNameForEdit, addingNewWorker); } else shamCars2.removeWorker(modelNameForEdit); } cout << endl << "The Model in alphabetical order are: \n"; shamCars2.displayInOrder(); string inReverseParts; cout << "Enter the model name to see it's parts in reverse: "; cin >> inReverseParts; shamCars2.displayModelPartsInReverse(inReverseParts); /* ------------------------------------------------------------------------------------------------------------------- */ list shamCars; shamCars.insert(1, "SHAM1", "ZAKI", firstModelParts, firstModelWorkers); shamCars.insert(2, "SHAM2", "NEWADMIN", secondModelParts, secondModelWorkers); shamCars.insert(3, "SHAM3", "SARIA", thirdModelParts, thirdModelWorkers); cout << "Enter model name you want to display it's data: "; cin >> searchForModel; shamCars.displayNode(searchForModel); cout << "Do you want to edit any model WORKERS? (1 or 0)"; cin >> editQue; if (editQue) { string modelNameForEdit; cout << "enter the model name: "; cin >> modelNameForEdit; int selectAnEdit; cout << "1 to add a worker and 2 to remove: "; cin >> selectAnEdit; while (selectAnEdit != 1 && selectAnEdit != 2) { cout << "Wrong choice! enter another value:"; cin >> selectAnEdit; } if (selectAnEdit == 1) { string addingNewWorker; cout << "Enter the worker name: "; cin >> addingNewWorker; shamCars.addWorker(modelNameForEdit, addingNewWorker); } else shamCars.removeWorker(modelNameForEdit); } return 0; }
Editor is loading...
Leave a Comment