Advertisement
Guest User

Untitled

a guest
Dec 6th, 2018
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <cstring>
  2. #include <fstream>
  3. #include <iostream>
  4. #include <locate>
  5. #include <string>
  6. #include <windows.h>
  7. using namespace std;
  8.  
  9. #define K 50
  10. #define NAME "bank.dat"; //файл
  11.  
  12. //структура
  13. struct person {
  14.   char name[30];
  15.   double BLV;
  16.   double USD;
  17.   double EURO;
  18. };
  19.  
  20. //намиране размер на файла
  21. long getSizeOfFile() {
  22.   long siz;
  23.   fstream fp;
  24.   // otvarqne faila za opredelqne na razmer
  25.   fp.open(NAME, ios::in | ios::binary);
  26.   if (!fp) {
  27.     cout << "Грешка при отваряне на файла " << endl;
  28.   }
  29.   fp.seekg(01, ios::end);
  30.   siz = fp.tellg();
  31.   fp.close();
  32.  
  33.   return siz;
  34. }
  35.  
  36. void syzdavane(struct person val[]) {
  37.   fstream fp;
  38.   int k;
  39.  
  40.   cout << "\nВъведете брой вложители:\n";
  41.   cin >> k;
  42.   fp.open(NAME, ios::binary | ios::out);
  43.   if (!fp) {
  44.     cout << endl << "Грешка при създаване на файл" << endl;
  45.     exit(1);
  46.   }
  47.   for (int i = 0; i < k; i++) {
  48.     fflush(stdin);
  49.     cout << endl << "\nВъведете данни за вложител " << i + 1 << endl;
  50.     cout << endl << "Име: ";
  51.     cin.getline(val[i].name, 30);
  52.     cout << endl << "BLV: ";
  53.     cin >> val[i].BLV;
  54.     cout << endl << "USD: ";
  55.     cin >> val[i].USD;
  56.     cout << endl << "EURO: ";
  57.     cin >> val[i].EURO;
  58.   }
  59.   fp.write((char *)val, k * sizeof(person));
  60.   fp.close();
  61. }
  62.  
  63. // izvejdane info edin vlojitel
  64. void showPerson(person val) {
  65.   cout << endl << "\t Име: " << val.name;
  66.   cout << endl << "\t BLV: " << val.BLV;
  67.   cout << endl << "\t USD: " << val.USD;
  68.   cout << endl << "\t EURO: " << val.EURO << endl;
  69. }
  70.  
  71. void izvejdane(struct person val[]) {
  72.   person per; // edin vlojitel
  73.   fstream fp;
  74.   long size_file;
  75.  
  76.   size_file = getSizeOfFile();
  77.  
  78.   fp.open(NAME, ios::in | ios::binary);
  79.   if (!fp) {
  80.     cout << "Грешка при отваряне на файл " << endl;
  81.   }
  82.  
  83.   for (int i = 0; i < size_file / sizeof(person); i++) {
  84.     fp.read((char *)&per, sizeof(person)); // chetene danni za edin vlojitel
  85.     val[i] = per;
  86.     showPerson(val[i]);
  87.   }
  88.  
  89.   fp.close();
  90. }
  91.  
  92. void dopylvane() {
  93.   person pp;
  94.   long pos;
  95.   fstream fp;
  96.  
  97.   fp.open(NAME, ios::out | ios::app | ios::binary);
  98.   if (!fp) {
  99.     cout << endl << "Грешка при прочитане на файл" << endl;
  100.     exit(1);
  101.   }
  102.  
  103.   pos = getSizeOfFile();
  104.  
  105.   fflush(stdin);
  106.   cout << endl
  107.        << "\nВъведете данни за вложител номер " << (pos / (sizeof(person))) + 1
  108.        << endl;
  109.   cout << endl << "Име: ";
  110.   cin.getline(pp.name, 30);
  111.   cout << endl << "BLV: ";
  112.   cin >> pp.BLV;
  113.   cout << endl << "USD: ";
  114.   cin >> pp.USD;
  115.   cout << endl << "EURO: ";
  116.   cin >> pp.EURO;
  117.   fp.write((char *)&pp, sizeof(person));
  118.   fp.close();
  119. }
  120.  
  121. // vlojitel po ime
  122. void getGideByLnameDateBurth(struct person val[]) {
  123.   long size_file;
  124.   char personName[30];
  125.   fstream fp;
  126.   person per; // edin vlojitel
  127.   bool syvpadenie;
  128.   string again;
  129.  
  130.   size_file = getSizeOfFile();
  131.  
  132.   do {
  133.     syvpadenie = false; // nachalno systoqnie
  134.  
  135.     fp.open(NAME, ios::in | ios::binary);
  136.     if (!fp) {
  137.       cout << "Грешка при отваряне на файл " << endl;
  138.     }
  139.  
  140.     cin.ignore();
  141.  
  142.     cout << "\nВъведете името на вложителя " << endl;
  143.     cin.getline(personName, 30);
  144.  
  145.     // obhod spored broq zapisi
  146.     for (int i = 0; i < size_file / sizeof(person); i++) {
  147.       fp.read((char *)&per, sizeof(person)); // chetene danni edin vlojitel
  148.  
  149.       val[i] = per;
  150.  
  151.       if (strcmp(val[i].name, personName) == 0) {
  152.  
  153.         cout << "Има съвпадение" << endl;
  154.         showPerson(val[i]);
  155.         syvpadenie = true;
  156.       }
  157.     }
  158.     if (!syvpadenie) {
  159.       cout << "Няма съвпадение по име на вложителя " << endl;
  160.     }
  161.     fp.close();
  162.  
  163.     cout << "Ново търсене? Y/N \n";
  164.     cin >> again;
  165.  
  166.   } while (again == "Y" || again == "y");
  167. }
  168.  
  169. // izvejdane danni za vlojitel s suma>vyvedena
  170. void showPersonWithHigherBG(struct person val[]) {
  171.   long size_file;
  172.   double moneyBG, totalBG;
  173.   fstream fp;
  174.   person per; // edin vlojitel
  175.   bool syvpadenie;
  176.  
  177.   size_file = getSizeOfFile();
  178.   syvpadenie = false; // nachalno systoqnie
  179.  
  180.   fp.open(NAME, ios::in | ios::binary);
  181.   if (!fp) {
  182.     cout << "Грешка при отваряне на файл " << endl;
  183.   }
  184.  
  185.   cin.ignore();
  186.  
  187.   cout << "\nВъведете парична сума в левове " << endl;
  188.   cin >> moneyBG;
  189.  
  190.   // obhod spored broq zapisi
  191.   for (int i = 0; i < size_file / sizeof(person); i++) {
  192.     fp.read((char *)&per, sizeof(person)); // chetene edin vlojitel
  193.  
  194.     val[i] = per;
  195.     totalBG = (val[i].USD * 1.88) + (val[i].EURO * 1.95) + (val[i].BLV);
  196.     if (totalBG > moneyBG) {
  197.  
  198.       cout << "Съвпадение " << endl;
  199.       showPerson(val[i]);
  200.       syvpadenie = true;
  201.     }
  202.   }
  203.   if (!syvpadenie) {
  204.     cout << "Няма съвпадение по име на вложителя " << endl;
  205.   }
  206.   fp.close();
  207. }
  208.  
  209. void sortAndReWriteFile(struct person val[]) {
  210.   long size_file;
  211.   int choiceValue;
  212.   fstream fp;
  213.   person per; // edin vlojitel
  214.   bool syvpadenie;
  215.  
  216.   size_file = getSizeOfFile();
  217.   syvpadenie = false; // nachalno systoqnie
  218.  
  219.   fp.open(NAME, ios::in | ios::binary);
  220.   if (!fp) {
  221.     cout << "Грешка при отваряне на файл " << endl;
  222.   }
  223.  
  224.   cin.ignore();
  225.  
  226.   cout << "\nИзберете по коя валута да се сортира" << endl;
  227.   cout << "1.USD" << endl;
  228.   cout << "2.EURO" << endl;
  229.   cout << "3.BLV" << endl;
  230.   cin >> choiceValue;
  231.  
  232.   // obhod spored broq zapisi
  233.   for (int i = 0; i < size_file / sizeof(person); i++) {
  234.     fp.read((char *)&per, sizeof(person)); // edin vlojitel
  235.     val[i] = per;
  236.   }
  237.  
  238.   if (choiceValue == 1) {
  239.     for (int i = 0; i < size_file / sizeof(person); i++) {
  240.       for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
  241.         if (val[i].USD < val[i + 1].USD) {
  242.           per = val[i];
  243.           val[i] = val[i + 1];
  244.           val[i + 1] = per;
  245.         }
  246.       }
  247.     }
  248.   } else if (choiceValue == 2) {
  249.     for (int i = 0; i < size_file / sizeof(person); i++) {
  250.       for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
  251.         if (val[i].EURO < val[i + 1].EURO) {
  252.           per = val[i];
  253.           val[i] = val[i + 1];
  254.           val[i + 1] = per;
  255.         }
  256.       }
  257.     }
  258.   } else if (choiceValue == 3) {
  259.     for (int i = 0; i < size_file / sizeof(person); i++) {
  260.       for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
  261.         if (val[i].BLV < val[i + 1].BLV) {
  262.           per = val[i];
  263.           val[i] = val[i + 1];
  264.           val[i + 1] = per;
  265.         }
  266.       }
  267.     }
  268.   }
  269.   for (int i = 0; i < size_file / sizeof(person); i++) {
  270.     showPerson(val[i]);
  271.   }
  272.  
  273.   if (!syvpadenie) {
  274.     cout << "Няма съвпадение по име на вложител " << endl;
  275.   }
  276.   fp.close();
  277.  
  278.   // prezapisvane na fail
  279.   fp.open(NAME, ios::binary | ios::out);
  280.   fp.write((char *)val, (size_file / sizeof(person)) * sizeof(person));
  281.   fp.close();
  282. }
  283.  
  284. void startScreen() {
  285.   char info[] = {
  286.       "\t\t\t\t **********************************\n"
  287.       "\t\t\tПрограма за работа с файлове, масиви и структури.\n"
  288.       "\t\t\t1.Програмата позволява създаване на файл. В него\n"
  289.       "\t\t\tсе записват вложители в банка (Имена и парична сума).\n"
  290.       "\t\t\tВложителят може да има има влогове в различни валути \n"
  291.       "\t\t\t(левове, долари и евро).\n"
  292.       "\t\t\t2.Опция за извеждане на текущи данни.\n"
  293.       "\t\t\t3.Опция за допълване на файла.\n"
  294.       "\t\t\t4.Може да бъде изкарана справка по име на вложител.\n"
  295.       "\t\t\t5.Справка по обща сума.\n"
  296.       "\t\t\t6.Пренареждане на всички записи по избор (левове, евро, долари) \n"
  297.       "\t\t\tот най-голямо към най-малко.\n\n\n"
  298.       "\t\t\tАвтор: Александро Георгиев СИТ 1б 61662116. 25.4.2017 \n"};
  299.  
  300.   for (int i = 0; i < strlen(info); i++) {
  301.     cout << info[i];
  302.     Sleep(50);
  303.   }
  304.   Sleep(2000);
  305.   system("cls");
  306. }
  307.  
  308. int main() {
  309.   system("cls");
  310.   system("mode 100, 40"); // Размер на прозореца с резултати
  311.   system("Title Програма за моделиране на виртуална информационна система за "
  312.          "вложители в банка ");
  313.   SetConsoleOutputCP(1251); // За кирилица
  314.   setlocale(LC_CTYPE, "Bulgarian");
  315.   system("color 0e");
  316.   startScreen();
  317.   struct person val[K];
  318.   int choice;
  319.   do {
  320.     do {
  321.       cout << "\n\t\t\t**********Меню**********\n";
  322.       cout << "\t\t\t1. Създаване на файл\n";
  323.       cout << "\t\t\t2. Извеждане на данните\n";
  324.       cout << "\t\t\t3. Допълване\n";
  325.       cout << "\t\t\t4. Справка по име\n";
  326.       cout << "\t\t\t5. Справка обща сума\n";
  327.       cout << "\t\t\t6. Пренареждане\n";
  328.       cout << "\t\t\t7. Край\n";
  329.       cout << "\t\t\tВъведете своя избор от 1 до 7: ";
  330.       cin >> choice;
  331.     } while (choice7);
  332.     switch (choice) {
  333.     case 1:
  334.       syzdavane(val);
  335.       break;
  336.     case 2:
  337.       cout << "\n\t Данни за вложителите: " << endl;
  338.       izvejdane(val);
  339.       break;
  340.     case 3:
  341.       dopylvane();
  342.       break;
  343.     case 4:
  344.       getGideByLnameDateBurth(val);
  345.       break;
  346.     case 5:
  347.       showPersonWithHigherBG(val);
  348.       break;
  349.     case 6:
  350.       sortAndReWriteFile(val);
  351.       break;
  352.  
  353.     default:
  354.       cout << "**********Край**********\n";
  355.     }
  356.   } while (choice != 7);
  357.  
  358.   return 0;
  359. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement