Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstring>
- #include <fstream>
- #include <iostream>
- #include <locate>
- #include <string>
- #include <windows.h>
- using namespace std;
- #define K 50
- #define NAME "bank.dat"; //файл
- //структура
- struct person {
- char name[30];
- double BLV;
- double USD;
- double EURO;
- };
- //намиране размер на файла
- long getSizeOfFile() {
- long siz;
- fstream fp;
- // otvarqne faila za opredelqne na razmer
- fp.open(NAME, ios::in | ios::binary);
- if (!fp) {
- cout << "Грешка при отваряне на файла " << endl;
- }
- fp.seekg(01, ios::end);
- siz = fp.tellg();
- fp.close();
- return siz;
- }
- void syzdavane(struct person val[]) {
- fstream fp;
- int k;
- cout << "\nВъведете брой вложители:\n";
- cin >> k;
- fp.open(NAME, ios::binary | ios::out);
- if (!fp) {
- cout << endl << "Грешка при създаване на файл" << endl;
- exit(1);
- }
- for (int i = 0; i < k; i++) {
- fflush(stdin);
- cout << endl << "\nВъведете данни за вложител " << i + 1 << endl;
- cout << endl << "Име: ";
- cin.getline(val[i].name, 30);
- cout << endl << "BLV: ";
- cin >> val[i].BLV;
- cout << endl << "USD: ";
- cin >> val[i].USD;
- cout << endl << "EURO: ";
- cin >> val[i].EURO;
- }
- fp.write((char *)val, k * sizeof(person));
- fp.close();
- }
- // izvejdane info edin vlojitel
- void showPerson(person val) {
- cout << endl << "\t Име: " << val.name;
- cout << endl << "\t BLV: " << val.BLV;
- cout << endl << "\t USD: " << val.USD;
- cout << endl << "\t EURO: " << val.EURO << endl;
- }
- void izvejdane(struct person val[]) {
- person per; // edin vlojitel
- fstream fp;
- long size_file;
- size_file = getSizeOfFile();
- fp.open(NAME, ios::in | ios::binary);
- if (!fp) {
- cout << "Грешка при отваряне на файл " << endl;
- }
- for (int i = 0; i < size_file / sizeof(person); i++) {
- fp.read((char *)&per, sizeof(person)); // chetene danni za edin vlojitel
- val[i] = per;
- showPerson(val[i]);
- }
- fp.close();
- }
- void dopylvane() {
- person pp;
- long pos;
- fstream fp;
- fp.open(NAME, ios::out | ios::app | ios::binary);
- if (!fp) {
- cout << endl << "Грешка при прочитане на файл" << endl;
- exit(1);
- }
- pos = getSizeOfFile();
- fflush(stdin);
- cout << endl
- << "\nВъведете данни за вложител номер " << (pos / (sizeof(person))) + 1
- << endl;
- cout << endl << "Име: ";
- cin.getline(pp.name, 30);
- cout << endl << "BLV: ";
- cin >> pp.BLV;
- cout << endl << "USD: ";
- cin >> pp.USD;
- cout << endl << "EURO: ";
- cin >> pp.EURO;
- fp.write((char *)&pp, sizeof(person));
- fp.close();
- }
- // vlojitel po ime
- void getGideByLnameDateBurth(struct person val[]) {
- long size_file;
- char personName[30];
- fstream fp;
- person per; // edin vlojitel
- bool syvpadenie;
- string again;
- size_file = getSizeOfFile();
- do {
- syvpadenie = false; // nachalno systoqnie
- fp.open(NAME, ios::in | ios::binary);
- if (!fp) {
- cout << "Грешка при отваряне на файл " << endl;
- }
- cin.ignore();
- cout << "\nВъведете името на вложителя " << endl;
- cin.getline(personName, 30);
- // obhod spored broq zapisi
- for (int i = 0; i < size_file / sizeof(person); i++) {
- fp.read((char *)&per, sizeof(person)); // chetene danni edin vlojitel
- val[i] = per;
- if (strcmp(val[i].name, personName) == 0) {
- cout << "Има съвпадение" << endl;
- showPerson(val[i]);
- syvpadenie = true;
- }
- }
- if (!syvpadenie) {
- cout << "Няма съвпадение по име на вложителя " << endl;
- }
- fp.close();
- cout << "Ново търсене? Y/N \n";
- cin >> again;
- } while (again == "Y" || again == "y");
- }
- // izvejdane danni za vlojitel s suma>vyvedena
- void showPersonWithHigherBG(struct person val[]) {
- long size_file;
- double moneyBG, totalBG;
- fstream fp;
- person per; // edin vlojitel
- bool syvpadenie;
- size_file = getSizeOfFile();
- syvpadenie = false; // nachalno systoqnie
- fp.open(NAME, ios::in | ios::binary);
- if (!fp) {
- cout << "Грешка при отваряне на файл " << endl;
- }
- cin.ignore();
- cout << "\nВъведете парична сума в левове " << endl;
- cin >> moneyBG;
- // obhod spored broq zapisi
- for (int i = 0; i < size_file / sizeof(person); i++) {
- fp.read((char *)&per, sizeof(person)); // chetene edin vlojitel
- val[i] = per;
- totalBG = (val[i].USD * 1.88) + (val[i].EURO * 1.95) + (val[i].BLV);
- if (totalBG > moneyBG) {
- cout << "Съвпадение " << endl;
- showPerson(val[i]);
- syvpadenie = true;
- }
- }
- if (!syvpadenie) {
- cout << "Няма съвпадение по име на вложителя " << endl;
- }
- fp.close();
- }
- void sortAndReWriteFile(struct person val[]) {
- long size_file;
- int choiceValue;
- fstream fp;
- person per; // edin vlojitel
- bool syvpadenie;
- size_file = getSizeOfFile();
- syvpadenie = false; // nachalno systoqnie
- fp.open(NAME, ios::in | ios::binary);
- if (!fp) {
- cout << "Грешка при отваряне на файл " << endl;
- }
- cin.ignore();
- cout << "\nИзберете по коя валута да се сортира" << endl;
- cout << "1.USD" << endl;
- cout << "2.EURO" << endl;
- cout << "3.BLV" << endl;
- cin >> choiceValue;
- // obhod spored broq zapisi
- for (int i = 0; i < size_file / sizeof(person); i++) {
- fp.read((char *)&per, sizeof(person)); // edin vlojitel
- val[i] = per;
- }
- if (choiceValue == 1) {
- for (int i = 0; i < size_file / sizeof(person); i++) {
- for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
- if (val[i].USD < val[i + 1].USD) {
- per = val[i];
- val[i] = val[i + 1];
- val[i + 1] = per;
- }
- }
- }
- } else if (choiceValue == 2) {
- for (int i = 0; i < size_file / sizeof(person); i++) {
- for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
- if (val[i].EURO < val[i + 1].EURO) {
- per = val[i];
- val[i] = val[i + 1];
- val[i + 1] = per;
- }
- }
- }
- } else if (choiceValue == 3) {
- for (int i = 0; i < size_file / sizeof(person); i++) {
- for (int i = 0; i < (size_file / sizeof(person)) - 1; i++) {
- if (val[i].BLV < val[i + 1].BLV) {
- per = val[i];
- val[i] = val[i + 1];
- val[i + 1] = per;
- }
- }
- }
- }
- for (int i = 0; i < size_file / sizeof(person); i++) {
- showPerson(val[i]);
- }
- if (!syvpadenie) {
- cout << "Няма съвпадение по име на вложител " << endl;
- }
- fp.close();
- // prezapisvane na fail
- fp.open(NAME, ios::binary | ios::out);
- fp.write((char *)val, (size_file / sizeof(person)) * sizeof(person));
- fp.close();
- }
- void startScreen() {
- char info[] = {
- "\t\t\t\t **********************************\n"
- "\t\t\tПрограма за работа с файлове, масиви и структури.\n"
- "\t\t\t1.Програмата позволява създаване на файл. В него\n"
- "\t\t\tсе записват вложители в банка (Имена и парична сума).\n"
- "\t\t\tВложителят може да има има влогове в различни валути \n"
- "\t\t\t(левове, долари и евро).\n"
- "\t\t\t2.Опция за извеждане на текущи данни.\n"
- "\t\t\t3.Опция за допълване на файла.\n"
- "\t\t\t4.Може да бъде изкарана справка по име на вложител.\n"
- "\t\t\t5.Справка по обща сума.\n"
- "\t\t\t6.Пренареждане на всички записи по избор (левове, евро, долари) \n"
- "\t\t\tот най-голямо към най-малко.\n\n\n"
- "\t\t\tАвтор: Александро Георгиев СИТ 1б 61662116. 25.4.2017 \n"};
- for (int i = 0; i < strlen(info); i++) {
- cout << info[i];
- Sleep(50);
- }
- Sleep(2000);
- system("cls");
- }
- int main() {
- system("cls");
- system("mode 100, 40"); // Размер на прозореца с резултати
- system("Title Програма за моделиране на виртуална информационна система за "
- "вложители в банка ");
- SetConsoleOutputCP(1251); // За кирилица
- setlocale(LC_CTYPE, "Bulgarian");
- system("color 0e");
- startScreen();
- struct person val[K];
- int choice;
- do {
- do {
- cout << "\n\t\t\t**********Меню**********\n";
- cout << "\t\t\t1. Създаване на файл\n";
- cout << "\t\t\t2. Извеждане на данните\n";
- cout << "\t\t\t3. Допълване\n";
- cout << "\t\t\t4. Справка по име\n";
- cout << "\t\t\t5. Справка обща сума\n";
- cout << "\t\t\t6. Пренареждане\n";
- cout << "\t\t\t7. Край\n";
- cout << "\t\t\tВъведете своя избор от 1 до 7: ";
- cin >> choice;
- } while (choice7);
- switch (choice) {
- case 1:
- syzdavane(val);
- break;
- case 2:
- cout << "\n\t Данни за вложителите: " << endl;
- izvejdane(val);
- break;
- case 3:
- dopylvane();
- break;
- case 4:
- getGideByLnameDateBurth(val);
- break;
- case 5:
- showPersonWithHigherBG(val);
- break;
- case 6:
- sortAndReWriteFile(val);
- break;
- default:
- cout << "**********Край**********\n";
- }
- } while (choice != 7);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement