Advertisement
Limited_Ice

Parts (not commented)

May 16th, 2021
989
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.20 KB | None | 0 0
  1. #pragma once
  2. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. //  Class Definition
  4.  
  5. class partnum {
  6. public: //  public members and methods are listed first for ease of use.  Public methods are defined later in the file
  7.  
  8.     partnum(int tparnumber, int tquantity) {
  9.         partnumber = tparnumber;
  10.         quantity = tquantity;
  11.         parent = nullptr;
  12.         left = nullptr;
  13.         right = nullptr;
  14.     }
  15.  
  16.     partnum(int tparnumber, int tquantity, partnum* tparent) {
  17.         partnumber = tparnumber;
  18.         quantity = tquantity;
  19.         parent = tparent;
  20.         left = nullptr;
  21.         right = nullptr;
  22.     }
  23.  
  24.     void addnewpart(int, int);
  25.     void build(int, int);
  26.     void search();
  27.     void initdel();
  28.     void initsave();
  29.     void change();
  30.    
  31. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  32. private:
  33.  
  34.     int partnumber;
  35.     int quantity;
  36.  
  37.     partnum* left;
  38.     partnum* right;
  39.     partnum* parent;
  40.  
  41.     bool search(int tpartnumber, partnum* temp) {
  42.         if (temp->partnumber == tpartnumber) {
  43.             cout << "partnumber: " << temp->partnumber << "\nquantity: " << temp->quantity << endl;
  44.             return true;
  45.         }
  46.  
  47.         else if (tpartnumber < temp->partnumber) {
  48.  
  49.             if (temp->left == nullptr)
  50.                 return false;
  51.             else
  52.                 temp->search(tpartnumber, temp->left);
  53.         }
  54.  
  55.         else if (tpartnumber > temp->partnumber) {
  56.             if (temp->right == nullptr)
  57.                 return false;
  58.             else {
  59.                 temp->search(tpartnumber, temp->right);
  60.             }
  61.         }
  62.     }
  63.  
  64.     void del(partnum* temp) {
  65.  
  66.         partnum* hold = nullptr;
  67.         while (true) {
  68.             if (temp->left != nullptr)
  69.                 temp = temp->left;
  70.             else {
  71.                 if (temp->right != nullptr)
  72.                     temp = temp->right;
  73.                 else {
  74.                     if (temp->parent != nullptr) {
  75.                         hold = temp;
  76.                         temp = temp->parent;
  77.                         if (temp->left == hold)
  78.                             temp->left = nullptr;
  79.                         if (temp->right == hold)
  80.                             temp->right = nullptr;
  81.                         delete hold;
  82.                         hold = nullptr;
  83.                     }
  84.                     else {
  85.                         return;
  86.                     }
  87.  
  88.                 }
  89.             }
  90.         }
  91.     }
  92.  
  93.     int save(partnum* temp, vector<int>& logpn, vector<int>& logqt) {
  94.         partnum* hold = nullptr;
  95.         vector<partnum*> track;
  96.         bool check;
  97.         while (true) {
  98.             if (temp->left != nullptr && temp->ismember(track, temp->left) == false)
  99.                 temp = temp->left;
  100.             else {
  101.                 if (temp->ismember(track, temp) == false) {
  102.                     logpn.push_back(temp->partnumber);
  103.                     logqt.push_back(temp->quantity);
  104.                     track.push_back(temp);
  105.                 }
  106.                 if (temp->right != nullptr && temp->ismember(track, temp->right) == false)
  107.                     temp = temp->right;
  108.                 else {
  109.                     if (temp->parent != nullptr) {
  110.                         temp = temp->parent;
  111.                     }
  112.                     else
  113.                         break;
  114.                 }
  115.             }
  116.                
  117.  
  118.         }
  119.         return track.size();
  120.     }
  121.  
  122.     bool change(int tpartnumber, int tquantity, partnum* temp) {
  123.         while (true) {
  124.             if (temp->partnumber == tpartnumber) {
  125.                 temp->quantity += tquantity;
  126.                 cout << " PN: tpartnumber quantity changed from " << temp->quantity - tquantity <<
  127.                     "to " << temp->quantity << endl;
  128.                 return true ;
  129.             }
  130.  
  131.             else if (tpartnumber < temp->partnumber) {
  132.  
  133.                 if (temp->left == nullptr)
  134.                     return false;
  135.                 else
  136.                     temp = temp->left;
  137.             }
  138.  
  139.             else if (tpartnumber > temp->partnumber) {
  140.                 if (temp->right == nullptr)
  141.                     return false;
  142.                 else {
  143.                     temp = temp->right;
  144.                 }
  145.             }
  146.         }
  147.     }
  148.  
  149.     bool ismember(int tpartnumber, vector<int> logpn) {
  150.         int size = logpn.size();
  151.        
  152.         for (int i = 0; i < size; i++) {
  153.             if (logpn[i] == tpartnumber)
  154.                 return true;
  155.         }
  156.         return false;
  157.     }
  158.  
  159.     bool ismember(vector<partnum*> track, partnum* temp) {
  160.         int size = track.size();
  161.  
  162.         for (int i = 0; i < size; i++) {
  163.             if (track[i] == temp)
  164.                 return true;
  165.         }
  166.         return false;
  167.  
  168.     }
  169.  
  170.     bool ismember(int tpartnumber, partnum* temp) {
  171.         if (temp->partnumber == tpartnumber) {
  172.             return true;
  173.         }
  174.  
  175.         else if (tpartnumber < temp->partnumber) {
  176.  
  177.             if (temp->left == nullptr)
  178.                 return false;
  179.             else
  180.                 temp->ismember(tpartnumber, temp->left);
  181.         }
  182.  
  183.         else if (tpartnumber > temp->partnumber) {
  184.             if (temp->right == nullptr)
  185.                 return false;
  186.             else {
  187.                 temp->ismember(tpartnumber, temp->right);
  188.             }
  189.         }
  190.     }
  191. };
  192.  
  193.  
  194. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  195. //  Public Method Definitions
  196.  
  197.  
  198. void partnum::addnewpart(int tpartnumber, int tquantity) {
  199.  
  200.     partnum* temp = this;
  201.     char choice;
  202.  
  203.     while (true) {
  204.         if (temp->partnumber == tpartnumber) {
  205.             cout << "that part is already in the database, would you like to adjust its quantity?\ny/n: ";
  206.             cin >> choice;
  207.             tolower(choice);
  208.             switch (choice) {
  209.             case 'y': {
  210.                 temp->quantity += tpartnumber;
  211.                 break;
  212.             }
  213.             case 'n':
  214.                 break;
  215.             default:
  216.                 cout << "please use only \"y\" or \"n\" for yes or no." << endl;
  217.             }
  218.             return;
  219.         }
  220.  
  221.         else if (tpartnumber < temp->partnumber) {
  222.             if (temp->left == nullptr) {
  223.                 temp->left = new partnum(tpartnumber, tquantity, temp);
  224.                 return;
  225.             }
  226.  
  227.             else if (temp->left != nullptr)
  228.                 temp = temp->left;
  229.         }
  230.  
  231.  
  232.         else if (tpartnumber > temp->partnumber) {
  233.             if (temp->right == nullptr) {
  234.                 temp->right = new partnum(tpartnumber, tquantity, temp);
  235.                 return;
  236.             }
  237.             else
  238.                 temp = temp->right;
  239.         }
  240.     }
  241. }
  242.  
  243. void partnum::search() {
  244.     int tpartnumber;
  245.     bool check;
  246.     cout << "You chose to look up a part\n\nenter the part number: ";
  247.     cin >> tpartnumber;
  248.     check = this->search(tpartnumber, this);
  249.     if (check == false)
  250.         cout << "That part is not in the database." << endl;
  251. }
  252.  
  253. void partnum::initdel() {
  254.     this->del(this);
  255. }
  256.  
  257. void partnum::initsave() {
  258.     remove("partdatabase.txt");
  259.     vector<int> logpn;
  260.     vector<int> logqt;
  261.     int size;
  262.     ofstream save;
  263.     size = this->save(this, logpn, logqt);
  264.     save.open("partdatabase.txt");
  265.     if (size > 1) {
  266.         size = size / 2;
  267.         save << logpn[size] << " " << logqt[size] << endl;
  268.         logpn.erase(logpn.begin() + size);
  269.         logqt.erase(logqt.begin() + size);
  270.         size = logpn.size();
  271.         for (int i = 0; i < size; i++)
  272.             save << logpn[i] << " " << logqt[i] << endl;
  273.  
  274.     }
  275.     else if (size == 1)
  276.         save << logpn[0] << " " << logqt[0] << endl;
  277.     else
  278.         cout << "error saving file" << endl;
  279.     save.close();
  280. }
  281.  
  282. void partnum::change() {
  283.     int tpartnumber, tquantity;
  284.     bool check;
  285.     cout << "You have chosen to change a part's quantity\n\nWhat part would you like to change: ";
  286.     cin >> tpartnumber;
  287.     cout << "Enter the change in quantity: ";
  288.     cin >> tquantity;
  289.     check = this->change(tpartnumber, tquantity, this);
  290.     if (check == false)
  291.         cout << "That part was not in the database." << endl;
  292.  
  293. }
  294.  
  295. void partnum::build(int tpartnumber, int tquantity) {
  296.     partnum* temp = this;
  297.  
  298.     if (temp->ismember(tpartnumber, this) == true)
  299.         return;
  300.     while (true) {
  301.         if (tpartnumber < temp->partnumber) {
  302.             if (temp->left == nullptr) {
  303.                 temp->left = new partnum(tpartnumber, tquantity, temp);
  304.                 return;
  305.             }
  306.  
  307.             else if (temp->left != nullptr)
  308.                 temp = temp->left;
  309.         }
  310.  
  311.  
  312.         else if (tpartnumber > temp->partnumber) {
  313.             if (temp->right == nullptr) {
  314.                 temp->right = new partnum(tpartnumber, tquantity, temp);
  315.                 return;
  316.             }
  317.             else
  318.                 temp = temp->right;
  319.         }
  320.     }
  321. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement