Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Class Definition
- class partnum {
- public: // public members and methods are listed first for ease of use. Public methods are defined later in the file
- partnum(int tparnumber, int tquantity) {
- partnumber = tparnumber;
- quantity = tquantity;
- parent = nullptr;
- left = nullptr;
- right = nullptr;
- }
- partnum(int tparnumber, int tquantity, partnum* tparent) {
- partnumber = tparnumber;
- quantity = tquantity;
- parent = tparent;
- left = nullptr;
- right = nullptr;
- }
- void addnewpart(int, int);
- void build(int, int);
- void search();
- void initdel();
- void initsave();
- void change();
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- private:
- int partnumber;
- int quantity;
- partnum* left;
- partnum* right;
- partnum* parent;
- bool search(int tpartnumber, partnum* temp) {
- if (temp->partnumber == tpartnumber) {
- cout << "partnumber: " << temp->partnumber << "\nquantity: " << temp->quantity << endl;
- return true;
- }
- else if (tpartnumber < temp->partnumber) {
- if (temp->left == nullptr)
- return false;
- else
- temp->search(tpartnumber, temp->left);
- }
- else if (tpartnumber > temp->partnumber) {
- if (temp->right == nullptr)
- return false;
- else {
- temp->search(tpartnumber, temp->right);
- }
- }
- }
- void del(partnum* temp) {
- partnum* hold = nullptr;
- while (true) {
- if (temp->left != nullptr)
- temp = temp->left;
- else {
- if (temp->right != nullptr)
- temp = temp->right;
- else {
- if (temp->parent != nullptr) {
- hold = temp;
- temp = temp->parent;
- if (temp->left == hold)
- temp->left = nullptr;
- if (temp->right == hold)
- temp->right = nullptr;
- delete hold;
- hold = nullptr;
- }
- else {
- return;
- }
- }
- }
- }
- }
- int save(partnum* temp, vector<int>& logpn, vector<int>& logqt) {
- partnum* hold = nullptr;
- vector<partnum*> track;
- bool check;
- while (true) {
- if (temp->left != nullptr && temp->ismember(track, temp->left) == false)
- temp = temp->left;
- else {
- if (temp->ismember(track, temp) == false) {
- logpn.push_back(temp->partnumber);
- logqt.push_back(temp->quantity);
- track.push_back(temp);
- }
- if (temp->right != nullptr && temp->ismember(track, temp->right) == false)
- temp = temp->right;
- else {
- if (temp->parent != nullptr) {
- temp = temp->parent;
- }
- else
- break;
- }
- }
- }
- return track.size();
- }
- bool change(int tpartnumber, int tquantity, partnum* temp) {
- while (true) {
- if (temp->partnumber == tpartnumber) {
- temp->quantity += tquantity;
- cout << " PN: tpartnumber quantity changed from " << temp->quantity - tquantity <<
- "to " << temp->quantity << endl;
- return true ;
- }
- else if (tpartnumber < temp->partnumber) {
- if (temp->left == nullptr)
- return false;
- else
- temp = temp->left;
- }
- else if (tpartnumber > temp->partnumber) {
- if (temp->right == nullptr)
- return false;
- else {
- temp = temp->right;
- }
- }
- }
- }
- bool ismember(int tpartnumber, vector<int> logpn) {
- int size = logpn.size();
- for (int i = 0; i < size; i++) {
- if (logpn[i] == tpartnumber)
- return true;
- }
- return false;
- }
- bool ismember(vector<partnum*> track, partnum* temp) {
- int size = track.size();
- for (int i = 0; i < size; i++) {
- if (track[i] == temp)
- return true;
- }
- return false;
- }
- bool ismember(int tpartnumber, partnum* temp) {
- if (temp->partnumber == tpartnumber) {
- return true;
- }
- else if (tpartnumber < temp->partnumber) {
- if (temp->left == nullptr)
- return false;
- else
- temp->ismember(tpartnumber, temp->left);
- }
- else if (tpartnumber > temp->partnumber) {
- if (temp->right == nullptr)
- return false;
- else {
- temp->ismember(tpartnumber, temp->right);
- }
- }
- }
- };
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- // Public Method Definitions
- void partnum::addnewpart(int tpartnumber, int tquantity) {
- partnum* temp = this;
- char choice;
- while (true) {
- if (temp->partnumber == tpartnumber) {
- cout << "that part is already in the database, would you like to adjust its quantity?\ny/n: ";
- cin >> choice;
- tolower(choice);
- switch (choice) {
- case 'y': {
- temp->quantity += tpartnumber;
- break;
- }
- case 'n':
- break;
- default:
- cout << "please use only \"y\" or \"n\" for yes or no." << endl;
- }
- return;
- }
- else if (tpartnumber < temp->partnumber) {
- if (temp->left == nullptr) {
- temp->left = new partnum(tpartnumber, tquantity, temp);
- return;
- }
- else if (temp->left != nullptr)
- temp = temp->left;
- }
- else if (tpartnumber > temp->partnumber) {
- if (temp->right == nullptr) {
- temp->right = new partnum(tpartnumber, tquantity, temp);
- return;
- }
- else
- temp = temp->right;
- }
- }
- }
- void partnum::search() {
- int tpartnumber;
- bool check;
- cout << "You chose to look up a part\n\nenter the part number: ";
- cin >> tpartnumber;
- check = this->search(tpartnumber, this);
- if (check == false)
- cout << "That part is not in the database." << endl;
- }
- void partnum::initdel() {
- this->del(this);
- }
- void partnum::initsave() {
- remove("partdatabase.txt");
- vector<int> logpn;
- vector<int> logqt;
- int size;
- ofstream save;
- size = this->save(this, logpn, logqt);
- save.open("partdatabase.txt");
- if (size > 1) {
- size = size / 2;
- save << logpn[size] << " " << logqt[size] << endl;
- logpn.erase(logpn.begin() + size);
- logqt.erase(logqt.begin() + size);
- size = logpn.size();
- for (int i = 0; i < size; i++)
- save << logpn[i] << " " << logqt[i] << endl;
- }
- else if (size == 1)
- save << logpn[0] << " " << logqt[0] << endl;
- else
- cout << "error saving file" << endl;
- save.close();
- }
- void partnum::change() {
- int tpartnumber, tquantity;
- bool check;
- cout << "You have chosen to change a part's quantity\n\nWhat part would you like to change: ";
- cin >> tpartnumber;
- cout << "Enter the change in quantity: ";
- cin >> tquantity;
- check = this->change(tpartnumber, tquantity, this);
- if (check == false)
- cout << "That part was not in the database." << endl;
- }
- void partnum::build(int tpartnumber, int tquantity) {
- partnum* temp = this;
- if (temp->ismember(tpartnumber, this) == true)
- return;
- while (true) {
- if (tpartnumber < temp->partnumber) {
- if (temp->left == nullptr) {
- temp->left = new partnum(tpartnumber, tquantity, temp);
- return;
- }
- else if (temp->left != nullptr)
- temp = temp->left;
- }
- else if (tpartnumber > temp->partnumber) {
- if (temp->right == nullptr) {
- temp->right = new partnum(tpartnumber, tquantity, temp);
- return;
- }
- else
- temp = temp->right;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement