Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- #include <fstream>
- #include <string> //стринг са няколко символа, пример: aVeryNice$tring
- using namespace std;
- struct saledCar
- {
- string dealership; // име на автокъщата
- string make;
- int year_manifacture;
- double price;
- }; //Структурата да е задължително над функциите.
- void writeAndViewContent(saledCar sales[50], int &size); //щом е void, значи няма нужда от return
- void outputCarsByMake(saledCar sales[50], int &size);
- void outputCarsByMakeAndYear(saledCar sales[50], int &size);
- void main()
- {
- saledCar sales[50]; //съхранява информация за всички продадени коли (max 50)
- int size = 0; //размера, който ще въведе потребителя (ще има &)
- int option = 0;
- while (true)
- {
- cout << "Press 1 for entering data into both array and file and viewing the data." << endl;
- cout << "Press 2 for outputing sales data from input make." << endl;
- cout << "Press 3 for outputing cars from input year and make and sorting result decending by price." << endl;
- do //ще се изпълни поне веднъж и ще се въвежда избора(1, 2 или 3)
- {
- cout << "Your choice: ";
- cin >> option;
- } while (option < 1 || option > 3); //ако се окаже, че въведеното число е невалидно (< 1 или > 3),
- //тогава подкани потребителя да въвежда отново число, докато то не стане да е между 1 и 3.
- switch (option)
- {
- case 1:
- writeAndViewContent(sales, size); //функция за записване на данните върху масив и файл, както и извеждането им.
- break; //ако няма break няма да знае докъде да спре с изпълнението(ще изпълни и следващата функция)
- case 2:
- outputCarsByMake(sales, size);
- break;
- case 3:
- outputCarsByMakeAndYear(sales, size);
- //защо няма break? :)
- }
- }
- }
- void writeAndViewContent(saledCar sales[50], int &size) //с амперсант за да може да му променим стойността
- {
- ofstream writeOnFile; //променлива, с която ще се пише по файла
- cout << "Number of cars: ";
- cin >> size;
- //Въвеждане на данните във файла:
- writeOnFile.open("sales.txt"); //позволява да пишем по файла sales.txt
- //Oсвен това изтрива досегашното съдържание на файла, и ако не съществува такъв създава нов празен
- //В този цикъл данните от потребителя се записват във файла и в масива sales
- for (int i = 0; i < size; i++) //цикъл за въвеждане на данните в масив и файл
- {
- cout << "Enter information about car " << i + 1 << endl; //i + 1, за да не изпише за първата кола Enter information about car 0
- cout << "Dealership: "; //подкана потребителя да въведе автокъща
- cin >> sales[i].dealership; // За елемента sales[i], искам свойството dealership, да е това, което е въведено от потребителя
- writeOnFile << sales[i].dealership + " "; //записва името на автокъщата(въведена от потребителя) във файла и един интервал за прегледност
- cout << "Make: "; //Make и Year се записват по същия начин, както dealership
- cin >> sales[i].make;
- writeOnFile << sales[i].make + " ";
- cout << "Year of manifacture: ";
- cin >> sales[i].year_manifacture;
- writeOnFile << to_string(sales[i].year_manifacture) + " "; //to_string, защото това, което се пише във файла трябва да е
- //от текстов тип (какъвто е стринг), а не число. Иначе във файла може да почнат да се появяват йероглифи
- cout << "Price: ";
- cin >> sales[i].price;
- writeOnFile << to_string(sales[i].price) + " ";
- writeOnFile << "\n"; //добави нова линия във файла.
- //Идеята е информацията за една продажба да е на един ред. И следващата продажба да е на нов.
- }
- writeOnFile.close(); //Ако не напишеш close, възникват проблеми
- cout << "* * * * * * *" << endl; //просто за красота :D (разделител)
- //output array(or file) content:
- for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
- {
- //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
- cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
- }
- }
- void outputCarsByMake(saledCar sales[50], int &size)
- {
- string make; //aVeryNiceMake
- cout << "Make: ";
- cin >> make; //въведената от потребителя марка се записва в променливата make
- for (int i = 0; i < size; i++) //за всяка продажба от масива с продажби
- {
- if (sales[i].make == make)//ако колата е с марката, която потребителя иска
- {
- //принтирай ми данните за въпросната кола:
- cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << endl;
- }
- }
- //запитване за нова справка:
- string choice;
- cout << "Would you like to search for sales by make again?(y/n)";
- cin >> choice;
- if (choice == "y") //значи потребителя иска да направи пак справка
- {
- outputCarsByMake(sales, size); //изпълни функцията пак
- }
- //ако потребителя не е натиснал y, a нещо друго вместо това
- //тогава не прави нищо и ме върхи към менюто.
- }
- void outputCarsByMakeAndYear(saledCar sales[50], int &size)
- {
- string make;
- cout << "Make: ";
- cin >> make;
- int year_manifacture;
- cout << "Year of manifacture: ";
- cin >> year_manifacture;
- saledCar temp; //променлива, която е помощна при размяна на две променливи.
- //Пример: размени стойностите на а и b
- //int a = 0;
- //int b = 1;
- //размяна на стойностите на a и b:
- // int temp = a;
- // a = b;
- //b = temp;
- //стъпка 1, сортирай ми всички елементи низходящо по цена
- //bubble sort algorithm:
- for (int i = 0; i < size; i++)
- {
- for (int j = i + 1; j < size; j++)
- {
- if (sales[i].price < sales[j].price)
- {
- //swap
- temp = sales[i];
- sales[i] = sales[j];
- sales[j] = temp;
- }
- }
- }
- //принтирай ми вече сортираните продажби:
- for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
- {
- if (sales[i].make == make && sales[i].year_manifacture == year_manifacture) //ако марката и годината съвпадат с въведените от потребителя
- {
- //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
- cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement