Advertisement
LittleMax

Untitled

Jun 3rd, 2019
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.02 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. struct date {
  11.     int day;
  12.     int month;
  13.     int year;
  14.  
  15.     date() {}
  16.     date(int d, int m, int year)
  17.     {
  18.         this->day = d;
  19.         this->month = m;
  20.         this->year = year;
  21.     }
  22. };
  23.  
  24. struct Car {
  25.     string brand;
  26.     string surname;
  27.     string name;
  28.     date dt;
  29.     int power;
  30.     int mileage;
  31.  
  32.     Car(string brand, string surname, string name, int pow, int mil, date d)
  33.     {
  34.         this->brand = brand;
  35.         this->surname = surname;
  36.         this->name = name;
  37.         this->power = pow;
  38.         this->mileage = mil;
  39.         this->dt = d;
  40.     }
  41. };
  42.  
  43. struct Link {
  44.     Link* prev;
  45.     Link* next;
  46.     Car* car;
  47.  
  48.     Link(Car* car, Link* prev = NULL, Link* next = NULL)
  49.     {
  50.         this->prev = prev;
  51.         this->next = next;
  52.         this->car = car;
  53.     }
  54. };
  55.  
  56. void findMileage(Link* curr, int mil)
  57. {
  58.     while (curr->prev != NULL)
  59.     {
  60.         curr = curr->prev;
  61.     }
  62.  
  63.     vector<string> name;
  64.  
  65.     while (curr != NULL)
  66.     {
  67.         if (curr->car->mileage > mil)
  68.         {
  69.             name.push_back(curr->car->surname);
  70.         }
  71.         curr = curr->next;
  72.     }
  73.  
  74.     sort(name.begin(), name.end());
  75.  
  76.     for (auto i : name)
  77.         cout << i << "\t";
  78.     cout << endl;
  79. }
  80.  
  81. void findBrand(Link* curr, string brand)
  82. {
  83.     while (curr->prev != NULL)
  84.     {
  85.         if (curr->car->brand == brand)
  86.         {
  87.             cout << curr->car->name << "   " << curr->car->surname << endl;
  88.         }
  89.  
  90.         curr = curr->prev;
  91.     }
  92. }
  93.  
  94. void findOldCars(Link* c, int day, int month, int year)
  95. {
  96.     while (c->prev != NULL)
  97.     {
  98.         c = c->prev;
  99.     }
  100.  
  101.     vector<string> owners;
  102.     while (c != NULL)
  103.     {
  104.         if ((abs(c->car->dt.year - year) >= 1 && abs(c->car->dt.month - month) >= 6) || abs(c->car->dt.year - year) >= 2)
  105.         {
  106.             owners.push_back(c->car->surname);
  107.         }
  108.         c = c->next;
  109.     }
  110.  
  111.     for (string i : owners)
  112.         cout << i << endl;
  113. }
  114.  
  115. Link* add(Link* current)
  116. {
  117.     date dt;
  118.     string brand;
  119.     string surname;
  120.     string name;
  121.     int power = 0;
  122.     int mileage = 0;
  123.  
  124.     cout << "Enter a brand, owner's surname, owner's name, car's powers, mileage and last date of maintenance(day month year)" << endl;
  125.     cin >> brand >> surname >> name >> power >> mileage >> dt.day >> dt.month >> dt.year;
  126.  
  127.    
  128.     Link* n = new Link(new Car(brand, surname, name, power, mileage, dt), current);
  129.     current->next = n;
  130.  
  131.     return n;
  132. }
  133.  
  134. Link* addFromFile(Link* current)
  135. {
  136.     string brand;
  137.     string surname;
  138.     string name;
  139.     int power = 0;
  140.     int mileage = 0;
  141.     date dt;
  142.  
  143.     ifstream is("data.txt");
  144.     ofstream os("temp.txt");
  145.  
  146.     is >> brand >> surname >> name >> power >> mileage >> dt.day >> dt.month >> dt.year;
  147.     is.ignore();
  148.     string line;
  149.     while (getline(is, line))
  150.     {
  151.         os << line << endl;
  152.     }
  153.  
  154.     is.close();
  155.     os.close();
  156.     remove("data.txt");
  157.     rename("temp.txt", "data.txt");
  158.  
  159.     Link* n = new Link(new Car(brand, surname, name, power, mileage, dt), current);
  160.     current->next = n;
  161.  
  162.     return n;
  163. }
  164.  
  165. void save_all(Link* c)
  166. {
  167.     while (c->prev != NULL)
  168.     {
  169.         c = c->prev;
  170.     }
  171.  
  172.     ofstream of("data.txt");
  173.  
  174.     while (c != NULL)
  175.     {
  176.         of << c->car->brand << " " << c->car->surname << " " << c->car->name << " " << c->car->power << " " << c->car->mileage << " " << c->car->dt.day
  177.         << " " << c->car->dt.month << " " << c->car->dt.year << endl;
  178.         c = c->next;
  179.     }
  180.     of.close();
  181. }
  182.  
  183. void show(Link* c)
  184. {
  185.     while (c->prev != NULL)
  186.     {
  187.         c = c->prev;
  188.     }
  189.  
  190.     cout << endl << endl;
  191.     while (c != NULL)
  192.     {
  193.         cout << "Name: " << c->car->name << " " << c->car->surname << endl;
  194.         cout << "Brand: " << c->car->brand << " Mileage: " << c->car->mileage << " Power: " << c->car->power << endl;
  195.         cout << "The date of the last maintenance: " << c->car->dt.day << " " << c->car->dt.month << " " << c->car->dt.year << endl;
  196.         c = c->next;
  197.     }
  198. }
  199.  
  200. void bubbleSort(Link *start)
  201. {
  202.     int swapped, i;
  203.     Link *ptr1;
  204.     Link *lptr = NULL;
  205.  
  206.     while (start->prev != NULL)
  207.     {
  208.         start = start->prev;
  209.     }
  210.  
  211.     do
  212.     {
  213.         swapped = 0;
  214.         ptr1 = start;
  215.  
  216.         while (ptr1->next != lptr)
  217.         {
  218.             if (ptr1->car->mileage > ptr1->next->car->mileage)
  219.             {
  220.                 swap(ptr1, ptr1);
  221.                 swapped = 1;
  222.             }
  223.             ptr1 = ptr1->next;
  224.         }
  225.         lptr = ptr1;
  226.     } while (swapped);
  227. }
  228.  
  229. Link* erase(Link* p)
  230. {
  231.     if (p == nullptr) return nullptr;
  232.     if (p->next != NULL)
  233.     {
  234.         p->next->prev = p->prev;
  235.    
  236.     }
  237.     else
  238.     {
  239.         p->prev->next = NULL;
  240.     }
  241.     if (p->prev != NULL)
  242.     {
  243.         p->prev->next = p->next;
  244.         p->next->prev = p->prev;
  245.     }
  246.     else
  247.     {
  248.         p->next->prev = NULL;
  249.     }
  250.     return p->next;
  251. }
  252.  
  253. void deleteByPower(Link* c, int power)
  254. {
  255.     while (c->prev != NULL)
  256.         c = c->prev;
  257.  
  258.     while (c->next != NULL)
  259.     {
  260.         if (c->car->power < power)
  261.         {
  262.             c = erase(c);
  263.         }
  264.         else
  265.         {
  266.             c = c->next;
  267.         }
  268.     }
  269. }
  270.  
  271. int main()
  272. {
  273.     date c;
  274.     c.day = 20;
  275.     c.month = 3;
  276.     c.year = 2019;
  277.     int i = 0;
  278.     Link* cars = new Link(new Car("BMW", "Kravchuk", "Oleg", 100, 4, c));
  279.     cout << "How many people do you want to add from file?" << endl;
  280.     cin >> i;
  281.     for (int j = 0; j < i; j++)
  282.     {
  283.         cars = addFromFile(cars);
  284.     }
  285.  
  286.     //cout << "Old cars "<< endl;
  287.     //findOldCars(cars, 20, 1, 2018);
  288.     //bubbleSort(cars);
  289.     deleteByPower(cars, 311);
  290.     show(cars);
  291.  
  292.     save_all(cars);
  293.  
  294.     return 0;
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement