Advertisement
Phoenix_x

Untitled

Dec 11th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.17 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"); //позволява да пишем по файла 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 << "\n"; //добави нова линия във файла.
  91.                              //Идеята е информацията за една продажба да е на един ред. И следващата продажба да е на нов.
  92.  
  93.     }
  94.     writeOnFile.close(); //Ако не напишеш close, възникват проблеми
  95.  
  96.     cout << "* * * * * * *" << endl; //просто за красота :D (разделител)
  97.  
  98.                                      //output array(or file) content:
  99.     for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
  100.     {
  101.         //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
  102.         cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
  103.     }
  104. }
  105.  
  106. void outputCarsByMake(saledCar sales[50], int &size)
  107. {
  108.     string make; //aVeryNiceMake
  109.     cout << "Make: ";
  110.     cin >> make; //въведената от потребителя марка се записва в променливата make
  111.  
  112.     for (int i = 0; i < size; i++) //за всяка продажба от масива с продажби
  113.     {
  114.         if (sales[i].make == make)//ако колата е с марката, която потребителя иска
  115.         {
  116.             //принтирай ми данните за въпросната кола:
  117.             cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << endl;
  118.         }
  119.     }
  120.  
  121.     //запитване за нова справка:
  122.     string choice;
  123.     cout << "Would you like to search for sales by make again?(y/n)";
  124.     cin >> choice;
  125.  
  126.     if (choice == "y") //значи потребителя иска да направи пак справка
  127.     {
  128.         outputCarsByMake(sales, size); //изпълни функцията пак
  129.     }
  130.  
  131.     //ако потребителя не е натиснал y, a  нещо друго вместо това
  132.     //тогава не прави нищо и ме върхи към менюто.
  133. }
  134.  
  135. void outputCarsByMakeAndYear(saledCar sales[50], int &size)
  136. {
  137.     string make;
  138.     cout << "Make: ";
  139.     cin >> make;
  140.  
  141.     int year_manifacture;
  142.     cout << "Year of manifacture: ";
  143.     cin >> year_manifacture;
  144.  
  145.     saledCar temp; //променлива, която е помощна при размяна на две променливи.
  146.                    //Пример: размени стойностите на а и b
  147.                    //int a = 0;
  148.                    //int b = 1;
  149.  
  150.                    //размяна на стойностите на a и b:
  151.                    // int temp = a;
  152.                    // a = b;
  153.                    //b = temp;
  154.  
  155.  
  156.                    //стъпка 1, сортирай ми всички елементи низходящо по цена
  157.                    //bubble sort algorithm:
  158.     for (int i = 0; i < size; i++)
  159.     {
  160.         for (int j = i + 1; j < size; j++)
  161.         {
  162.             if (sales[i].price < sales[j].price)
  163.             {
  164.                 //swap
  165.                 temp = sales[i];
  166.                 sales[i] = sales[j];
  167.                 sales[j] = temp;
  168.             }
  169.         }
  170.     }
  171.  
  172.     //принтирай ми вече сортираните продажби:
  173.     for (int i = 0; i < size; i++) //обхожда се всяка продажба (елемент от масива)
  174.     {
  175.         if (sales[i].make == make && sales[i].year_manifacture == year_manifacture) //ако марката и годината съвпадат с въведените от потребителя
  176.         {
  177.             //принтирай ми информация относто продажбата (dealership, make, year_manifacture) разделени от интервал и добави нов ред
  178.             cout << sales[i].dealership << " " << sales[i].make << " " << sales[i].year_manifacture << " " << sales[i].price << endl;
  179.         }
  180.     }
  181. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement