Phoenix_x

Untitled

Dec 14th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.07 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string> //стринг са няколко символа, пример: aVeryNice$tring
  5. using namespace std;
  6.  
  7. struct saledCar
  8. {
  9.     string dealership; // име на автокъщата
  10.     string make;
  11.     int year_manifacture;
  12.     double price;
  13. }; //Структурата да е задължително над функциите.
  14.  
  15. void writeAndViewContent(saledCar sales[50], int &size); //щом е void, значи няма нужда от return
  16. void outputCarsByMake(saledCar sales[50], int &size);
  17. void outputCarsByMakeAndYear(saledCar sales[50], int &size);
  18.  
  19.  
  20. void main()
  21. {
  22.     saledCar sales[50]; //съхранява информация за всички продадени коли (max 50)
  23.     int size = 0; //размера, който ще въведе потребителя (ще има &)
  24.  
  25.     int option = 0;
  26.  
  27.  
  28.     while (true)
  29.     {
  30.         cout << "Press 1 for entering data into both array and file and viewing the data." << endl;
  31.         cout << "Press 2 for outputing sales data from input make." << endl;
  32.         cout << "Press 3 for outputing cars from input year and make and sorting result decending by price." << endl;
  33.  
  34.         do //ще се изпълни поне веднъж и ще се въвежда избора(1, 2 или 3)
  35.         {
  36.             cout << "Your choice: ";
  37.             cin >> option;
  38.         } while (option < 1 || option > 3); //ако се окаже, че въведеното число е невалидно (< 1 или > 3),
  39.                                             //тогава подкани потребителя да въвежда отново число, докато то не стане да е между 1 и 3.
  40.  
  41.         switch (option)
  42.         {
  43.         case 1:
  44.             writeAndViewContent(sales, size); //функция за записване на данните върху масив и файл, както и извеждането им.
  45.             break; //ако няма break няма да знае докъде да спре с изпълнението(ще изпълни и следващата функция)
  46.         case 2:
  47.             outputCarsByMake(sales, size);
  48.             break;
  49.         case 3:
  50.             outputCarsByMakeAndYear(sales, size);
  51.             //защо няма break? :)
  52.         }
  53.     }
  54. }
  55.  
  56. void writeAndViewContent(saledCar sales[50], int &size) //с амперсант за да може да му променим стойността
  57. {
  58.     ofstream writeOnFile; //променлива, с която ще се пише по файла
  59.  
  60.     cout << "Number of cars: ";
  61.     cin >> size;
  62.  
  63.     //Въвеждане на данните във файла:
  64.     writeOnFile.open("sales.txt", ios::binary); //позволява да пишем по файла sales.txt
  65.                                    //Oсвен това изтрива досегашното съдържание на файла, и ако не съществува такъв създава нов празен
  66.  
  67.  
  68.                                    //В този цикъл данните от потребителя се записват във файла и в масива sales
  69.     for (int i = 0; i < size; i++) //цикъл за въвеждане на данните в масив и файл
  70.     {
  71.         cout << "Enter information about car " << i + 1 << endl; //i + 1, за да не изпише за първата кола Enter information about car 0
  72.  
  73.         cout << "Dealership: "; //подкана потребителя да въведе автокъща
  74.         cin >> sales[i].dealership; // За елемента sales[i], искам свойството dealership, да е това, което е въведено от потребителя
  75.         writeOnFile << sales[i].dealership + " "; //записва името на автокъщата(въведена от потребителя) във файла и един интервал за прегледност
  76.  
  77.         cout << "Make: "; //Make и Year се записват по същия начин, както dealership
  78.         cin >> sales[i].make;
  79.         writeOnFile << sales[i].make + " ";
  80.  
  81.         cout << "Year of manifacture: ";
  82.         cin >> sales[i].year_manifacture;
  83.         writeOnFile << to_string(sales[i].year_manifacture) + " "; //to_string, защото това, което се пише във файла трябва да е
  84.                                                                    //от текстов тип (какъвто е стринг), а не число. Иначе във файла може да почнат да се появяват йероглифи
  85.  
  86.         cout << "Price: ";
  87.         cin >> sales[i].price;
  88.         writeOnFile << to_string(sales[i].price) + " ";
  89.  
  90.         writeOnFile << " | "; //добави | за да се разделя информацията за една продажда от тази за друга
  91.  
  92.     }
  93.     writeOnFile.close(); //Ако не напишеш close, възникват проблеми
  94.  
  95.     cout << "* * * * * * *" << endl; //(разделител)
  96.  
  97.                                      //output array(or file) content:
  98.     for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
  99.     {
  100.         //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
  101.         cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
  102.     }
  103. }
  104.  
  105. void outputCarsByMake(saledCar sales[50], int &size)
  106. {
  107.     string make; //aVeryNiceMake
  108.     cout << "Make: ";
  109.     cin >> make; //въведената от потребителя марка се записва в променливата make
  110.  
  111.     for (int i = 0; i < size; i++) //за всяка продажба от масива с продажби
  112.     {
  113.         if (sales[i].make == make)//ако колата е с марката, която потребителя иска
  114.         {
  115.             //принтирай ми данните за въпросната кола:
  116.             cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << endl;
  117.         }
  118.     }
  119.  
  120.     //запитване за нова справка:
  121.     string choice;
  122.     cout << "Would you like to search for sales by make again?(y/n)";
  123.     cin >> choice;
  124.  
  125.     if (choice == "y") //значи потребителя иска да направи пак справка
  126.     {
  127.         outputCarsByMake(sales, size); //изпълни функцията пак
  128.     }
  129.  
  130.     //ако потребителя не е натиснал y, a  нещо друго вместо това
  131.     //тогава не прави нищо и ме върхи към менюто.
  132. }
  133.  
  134. void outputCarsByMakeAndYear(saledCar sales[50], int &size)
  135. {
  136.     string make;
  137.     cout << "Make: ";
  138.     cin >> make;
  139.  
  140.     int year_manifacture;
  141.     cout << "Year of manifacture: ";
  142.     cin >> year_manifacture;
  143.  
  144.     saledCar temp; //променлива, която е помощна при размяна на две променливи.
  145.                    //Пример: размени стойностите на а и b
  146.                    //int a = 0;
  147.                    //int b = 1;
  148.  
  149.                    //размяна на стойностите на a и b:
  150.                    // int temp = a;
  151.                    // a = b;
  152.                    //b = temp;
  153.  
  154.  
  155.                    //стъпка 1, сортирай ми всички елементи низходящо по цена
  156.                    //bubble sort algorithm:
  157.     for (int i = 0; i < size; i++)
  158.     {
  159.         for (int j = i + 1; j < size; j++)
  160.         {
  161.             if (sales[i].price < sales[j].price)
  162.             {
  163.                 //swap
  164.                 temp = sales[i];
  165.                 sales[i] = sales[j];
  166.                 sales[j] = temp;
  167.             }
  168.         }
  169.     }
  170.  
  171.     //принтирай ми вече сортираните продажби:
  172.     for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
  173.     {
  174.         if (sales[i].make == make && sales[i].year_manifacture == year_manifacture) //ако марката и годината съвпадат с въведените от потребителя
  175.         {
  176.             //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
  177.             cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
  178.         }
  179.     }
  180. }
Advertisement
Add Comment
Please, Sign In to add comment