Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <string>
- #include <vector>
- #include <algorithm>
- using namespace std;
- struct date {
- int day;
- int month;
- int year;
- date() {}
- date(int d, int m, int year)
- {
- this->day = d;
- this->month = m;
- this->year = year;
- }
- };
- struct Car {
- string brand;
- string surname;
- string name;
- date dt;
- int power;
- int mileage;
- Car(string brand, string surname, string name, int pow, int mil, date d)
- {
- this->brand = brand;
- this->surname = surname;
- this->name = name;
- this->power = pow;
- this->mileage = mil;
- this->dt = d;
- }
- };
- struct Link {
- Link* prev;
- Link* next;
- Car* car;
- Link(Car* car, Link* prev = NULL, Link* next = NULL)
- {
- this->prev = prev;
- this->next = next;
- this->car = car;
- }
- };
- void findMileage(Link* curr, int mil)
- {
- while (curr->prev != NULL)
- {
- curr = curr->prev;
- }
- vector<string> name;
- while (curr != NULL)
- {
- if (curr->car->mileage > mil)
- {
- name.push_back(curr->car->surname);
- }
- curr = curr->next;
- }
- sort(name.begin(), name.end());
- for (auto i : name)
- cout << i << "\t";
- cout << endl;
- }
- void findBrand(Link* curr, string brand)
- {
- while (curr->prev != NULL)
- {
- if (curr->car->brand == brand)
- {
- cout << curr->car->name << " " << curr->car->surname << endl;
- }
- curr = curr->prev;
- }
- }
- void findOldCars(Link* c, int day, int month, int year)
- {
- while (c->prev != NULL)
- {
- c = c->prev;
- }
- vector<string> owners;
- while (c != NULL)
- {
- if ((abs(c->car->dt.year - year) >= 1 && abs(c->car->dt.month - month) >= 6) || abs(c->car->dt.year - year) >= 2)
- {
- owners.push_back(c->car->surname);
- }
- c = c->next;
- }
- for (string i : owners)
- cout << i << endl;
- }
- Link* add(Link* current)
- {
- date dt;
- string brand;
- string surname;
- string name;
- int power = 0;
- int mileage = 0;
- cout << "Enter a brand, owner's surname, owner's name, car's powers, mileage and last date of maintenance(day month year)" << endl;
- cin >> brand >> surname >> name >> power >> mileage >> dt.day >> dt.month >> dt.year;
- Link* n = new Link(new Car(brand, surname, name, power, mileage, dt), current);
- current->next = n;
- return n;
- }
- Link* addFromFile(Link* current)
- {
- string brand;
- string surname;
- string name;
- int power = 0;
- int mileage = 0;
- date dt;
- ifstream is("data.txt");
- ofstream os("temp.txt");
- is >> brand >> surname >> name >> power >> mileage >> dt.day >> dt.month >> dt.year;
- is.ignore();
- string line;
- while (getline(is, line))
- {
- os << line << endl;
- }
- is.close();
- os.close();
- remove("data.txt");
- rename("temp.txt", "data.txt");
- Link* n = new Link(new Car(brand, surname, name, power, mileage, dt), current);
- current->next = n;
- return n;
- }
- void save_all(Link* c)
- {
- while (c->prev != NULL)
- {
- c = c->prev;
- }
- ofstream of("data.txt");
- while (c != NULL)
- {
- of << c->car->brand << " " << c->car->surname << " " << c->car->name << " " << c->car->power << " " << c->car->mileage << " " << c->car->dt.day
- << " " << c->car->dt.month << " " << c->car->dt.year << endl;
- c = c->next;
- }
- of.close();
- }
- void show(Link* c)
- {
- while (c->prev != NULL)
- {
- c = c->prev;
- }
- cout << endl << endl;
- while (c != NULL)
- {
- cout << "Name: " << c->car->name << " " << c->car->surname << endl;
- cout << "Brand: " << c->car->brand << " Mileage: " << c->car->mileage << " Power: " << c->car->power << endl;
- cout << "The date of the last maintenance: " << c->car->dt.day << " " << c->car->dt.month << " " << c->car->dt.year << endl;
- c = c->next;
- }
- }
- void bubbleSort(Link *start)
- {
- int swapped, i;
- Link *ptr1;
- Link *lptr = NULL;
- while (start->prev != NULL)
- {
- start = start->prev;
- }
- do
- {
- swapped = 0;
- ptr1 = start;
- while (ptr1->next != lptr)
- {
- if (ptr1->car->mileage > ptr1->next->car->mileage)
- {
- swap(ptr1, ptr1);
- swapped = 1;
- }
- ptr1 = ptr1->next;
- }
- lptr = ptr1;
- } while (swapped);
- }
- Link* erase(Link* p)
- {
- if (p == nullptr) return nullptr;
- if (p->next != NULL)
- {
- p->next->prev = p->prev;
- }
- else
- {
- p->prev->next = NULL;
- }
- if (p->prev != NULL)
- {
- p->prev->next = p->next;
- p->next->prev = p->prev;
- }
- else
- {
- p->next->prev = NULL;
- }
- return p->next;
- }
- void deleteByPower(Link* c, int power)
- {
- while (c->prev != NULL)
- c = c->prev;
- while (c->next != NULL)
- {
- if (c->car->power < power)
- {
- c = erase(c);
- }
- else
- {
- c = c->next;
- }
- }
- }
- int main()
- {
- date c;
- c.day = 20;
- c.month = 3;
- c.year = 2019;
- int i = 0;
- Link* cars = new Link(new Car("BMW", "Kravchuk", "Oleg", 100, 4, c));
- cout << "How many people do you want to add from file?" << endl;
- cin >> i;
- for (int j = 0; j < i; j++)
- {
- cars = addFromFile(cars);
- }
- //cout << "Old cars "<< endl;
- //findOldCars(cars, 20, 1, 2018);
- //bubbleSort(cars);
- deleteByPower(cars, 311);
- show(cars);
- save_all(cars);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement