Untitled
unknown
plain_text
a year ago
18 kB
6
Indexable
#include <iostream> #include <fstream> #include <cctype> #include <iomanip> #include <limits> #include <ctime> #include <string> #include <cstdlib> using namespace std; // Forward declaration for User structure struct User; // Class for bank account class bank_acc { public: int depos; char valid_id[100]; char name[100]; char gender[10]; char acctype[10]; int account_number; string email; string id_num; string bday; string transactions; public: void create_account(); void modify_email(); void show_account() const; void deposit(int); // -- void withdrawal(int); // -- void report() const; void holder_list() const; int return_accnum() const; int return_depos() const; char return_acctype() const; void prev_transaction() const; // -- void display_balance() const; //-- }; // Function declarations void save_account(); void account_details(int); void balance_transactions(int, int); void modify_acc(int); void delete_account(int); void all_account(); void deposit_withdraw(int, int); bool login(User users[], int size); void logout(User users[], int size); // User structure for login/logout system struct User { string username; string password; bool loggedIn; }; // Function to create a bank account void bank_acc::create_account() { system("cls"); srand(time(0)); int accnum = rand() % 900000000 + 100000000; account_number = accnum; cout << "Create Account" << endl; cout << "Account Number: " << account_number << endl; cout << "Enter your name: "; cin.ignore(); cin.getline(name, 100); cout << "Gender (F/M): "; cin.getline(gender, 10); cout << "Birth Date: "; getline(cin, bday); cout << "E-mail: "; getline(cin, email); cout << "Type of ID: "; cin.getline(valid_id, 100); cout << "ID number: "; getline(cin, id_num); cout << "Account Type (S/C): "; cin.getline(acctype, 10); cout << "Initial Deposit: "; cin >> depos; cin.ignore(); } // Function to display account details void bank_acc::show_account() const { cout << left; cout << setw(20) << "Account Number:" << account_number << endl; cout << setw(20) << "Name:" << name << endl; cout << setw(20) << "Account type:" << acctype << endl; cout << "\n************PERSONAL INFORMATION***************\n"; cout << setw(20) << "Gender:" << gender << endl; cout << setw(20) << "Date of Birth:" << bday << endl; cout << setw(20) << "E-mail:" << email << endl; cout << setw(20) << "Account Balance:" << depos << endl; } // Function to return account number int bank_acc::return_accnum() const { return account_number; } // Function to modify email void bank_acc::modify_email() { cout << "New Email: "; cin.ignore(); getline(cin, email); cout << "Successfully modified." << endl; } // Function for Money Deposit void bank_acc::deposit(int amount) { depos += amount; transactions += "Deposit: " + to_string(amount) + "\r\n"; cout << "Amount deposited successfully."; } // Function for Money Withdrawal void bank_acc::withdrawal(int amount) { if (amount > depos) { cout << "Insufficient balance."; } else { depos -= amount; transactions += "Withdrawal: " + to_string(amount) + "\r\n"; cout << "Amount withdrawn successfully."; } } // Function to view Previous Transactions void bank_acc::prev_transaction() const { cout << "TRANSACTION HISTORY:\n" << endl; cout << transactions << "\n" << endl; } // Function to write account details to file void write_account() { bank_acc acc; ofstream outF; outF.open("bank_acc.txt", ios::app | ios::binary); acc.create_account(); outF << acc.return_accnum() << endl; outF << acc.name << endl; outF << acc.gender << endl; outF << acc.bday << endl; outF << acc.email << endl; outF << acc.valid_id << endl; outF << acc.id_num << endl; outF << acc.acctype << endl; outF << acc.depos << endl; outF.close(); } // Function to display account details from file void account_details(int n) { bank_acc acc; bool found = false; ifstream inFile; inFile.open("bank_acc.txt"); if (!inFile) { cout << "File could not be opened!! Press any key..."; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); return; } cout << "\n****************ACCOUNT DETAILS****************\n"; while (inFile >> acc.account_number) { inFile.ignore(); inFile.getline(acc.name, 100); inFile.getline(acc.gender, 10); getline(inFile, acc.bday); getline(inFile, acc.email); inFile.getline(acc.valid_id, 100); getline(inFile, acc.id_num); inFile.getline(acc.acctype, 10); inFile >> acc.depos; inFile.ignore(); if (acc.return_accnum() == n) { acc.show_account(); found = true; } } inFile.close(); if (!found) { cout << "Account number does not exist" << endl; } cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } void delete_account(int n) { bank_acc acc; ifstream inFile; ofstream outFile; bool found = false; inFile.open("bank_acc.txt"); outFile.open("temp.txt"); if (!inFile || !outFile) { cout << "File could not be opened!! Press any key..."; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); return; } while (inFile >> acc.account_number) { inFile.ignore(); inFile.getline(acc.name, 100); inFile.getline(acc.gender, 10); getline(inFile, acc.bday); getline(inFile, acc.email); inFile.getline(acc.valid_id, 100); getline(inFile, acc.id_num); inFile.getline(acc.acctype, 10); inFile >> acc.depos; inFile.ignore(); if (acc.return_accnum() != n) { outFile << acc.return_accnum() << endl; outFile << acc.name << endl; outFile << acc.gender << endl; outFile << acc.bday << endl; outFile << acc.email << endl; outFile << acc.valid_id << endl; outFile << acc.id_num << endl; outFile << acc.acctype << endl; outFile << acc.depos << endl; } else { found = true; } } inFile.close(); outFile.close(); remove("bank_acc.txt"); rename("temp.txt", "bank_acc.txt"); if (found) { cout << "Account deleted successfully." << endl; } else { cout << "Account number does not exist." << endl; } cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } // Function to display balance details and transaction history from file void balance_transactions(int n, int option) { bank_acc acc; bool found = false; ifstream inF; inF.open("bank_acc.txt"); if (!inF) { cout << "This file does not exist. Please enter any key." << endl; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); return; } cout << "\n****************BALANCE DETAILS****************\n"; while (inF >> acc.account_number) { inF.ignore(); inF.getline(acc.name, 100); inF.getline(acc.gender, 10); getline(inF, acc.bday); getline(inF, acc.email); inF.getline(acc.valid_id, 100); getline(inF, acc.id_num); inF.getline(acc.acctype, 10); inF >> acc.depos; inF.ignore(); getline(inF, acc.transactions); if (acc.return_accnum() == n) { if (option == 1) { acc.show_account(); } else if (option == 2) { acc.prev_transaction(); } found = true; } } inF.close(); if (!found) { cout << "Account number does not exist" << endl; } cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } // Function to write deposit and withdrawal details void deposit_withdraw(int n, int option) { int amt; bool found = false; bank_acc acc; ifstream inF; ofstream outF; inF.open("bank_acc.txt"); outF.open("dep_with.txt"); if (!inF || !outF) { cout << "This file does not exist. Please enter any key." << endl; cin.ignore(numeric_limits<streamsize>::max(), '\n');; cin.get(); return; } while (inF >> acc.account_number) { inF.ignore(); inF.getline(acc.name, 100); inF.getline(acc.gender, 10); getline(inF, acc.bday); getline(inF, acc.email); inF.getline(acc.valid_id, 100); getline(inF, acc.id_num); inF.getline(acc.acctype, 10); inF >> acc.depos; inF.ignore(); getline(inF, acc.transactions); if (acc.return_accnum() == n) { if (option == 1) { cout << "Enter amount to deposit: "; cin >> amt; acc.deposit(amt); } else if (option == 2) { cout << "Enter amount to withdraw: "; cin >> amt; acc.withdrawal(amt); } found = true; } outF << acc.return_accnum() << endl; outF << acc.name << endl; outF << acc.gender << endl; outF << acc.bday << endl; outF << acc.email << endl; outF << acc.valid_id << endl; outF << acc.id_num << endl; outF << acc.acctype << endl; outF << acc.depos << endl; outF << acc.transactions << endl; } inF.close(); outF.close(); remove("bank_acc.txt"); rename("dep_with.txt", "bank_acc.txt"); if (!found) { cout << "Account number does not exist" << endl; } cin.ignore(numeric_limits<streamsize>::max(), '\n');; cin.get(); } // Function to modify account details void modify_acc(int n) { bool found = false; bank_acc acc; ifstream inF; ofstream outF; inF.open("bank_acc.txt"); outF.open("temp.txt"); if (!inF || !outF) { cout << "File could not be opened!! Press any key..."; cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); return; } while (inF >> acc.account_number) { inF.ignore(); inF.getline(acc.name, 100); inF.getline(acc.gender, 10); getline(inF, acc.bday); getline(inF, acc.email); inF.getline(acc.valid_id, 100); getline(inF, acc.id_num); inF.getline(acc.acctype, 10); inF >> acc.depos; inF.ignore(); if (acc.return_accnum() == n) { acc.show_account(); cout << "===Modify Email===" << endl; acc.modify_email(); found = true; } outF << acc.return_accnum() << endl; outF << acc.name << endl; outF << acc.gender << endl; outF << acc.bday << endl; outF << acc.email << endl; outF << acc.valid_id << endl; outF << acc.id_num << endl; outF << acc.acctype << endl; outF << acc.depos << endl; } inF.close(); outF.close(); remove("bank_acc.txt"); rename("temp.txt", "bank_acc.txt"); if (!found) { cout << "Record Not Found.." << endl; } cin.ignore(numeric_limits<streamsize>::max(), '\n'); cin.get(); } // Function for user login bool login(User users[], int size) { string inputUsername, inputPassword; cout << "===============================================\n"; cout << "***********************************************\n"; cout << " LOG IN \n"; cout << "***********************************************\n"; cout << "===============================================\n"; cout << "Enter username: "; cin >> inputUsername; cout << "Enter password: "; cin >> inputPassword; for (int i = 0; i < size; i++) { if (inputUsername == users[i].username && inputPassword == users[i].password) { users[i].loggedIn = true; cout << "\nLogin successful!\n" << endl; return true; } } cout << "\nInvalid username or password.\n" << endl; return false; } // Function for user logout void logout(User users[], int size) { char confirm; cout << "Are you sure you want to log out? (Y/N): "; cin >> confirm; cout << "\n"; if (confirm == 'y' || confirm == 'Y') { for (int i = 0; i < size; i++) { if (users[i].loggedIn) { users[i].loggedIn = false; cout << "Logout successful! Returning to homepage...\n" << endl; return; } } } else { cout << "\nLogout canceled.\n" << endl; } } int main() { int num; User users[2] = {{"teller", "tellermmm", false}, {"manager", "managermmm", false}}; // Menu options for teller and manager should be different int choice; do { bool isLoggedIn = false; for (int i = 0; i < 2; i++) { if (users[i].loggedIn) { isLoggedIn = true; break; } } if (!isLoggedIn) { cout << "===============================================\n"; cout << "***********************************************\n"; cout << " WELCOME TO THE BANK \n"; cout << "***********************************************\n"; cout << "===============================================\n"; cout << "1. Login\n"; cout << "2. Exit\n"; cout << "\n"; cout << "Enter your choice: "; cin >> choice; cout << " \n"; switch (choice) { case 1: login(users, 2); break; case 2: cout << "Exiting..." << endl; return 0; break; default: cout << "Invalid choice. Please try again." << endl; break; } } else { cout << "===============================================\n"; cout << "***********************************************\n"; cout << " MAIN MENU \n"; cout << "***********************************************\n"; cout << "===============================================\n"; cout << "1. Create Account" << endl; cout << "2. Show Account Details" << endl; cout << "3. Modify Account" << endl; cout << "4. Deposit" << endl; cout << "5. Withdraw" << endl; cout << "6. Check Balance" << endl; cout << "7. Previous Transactions" << endl; cout << "8. Logout" << endl; cout << " " << endl; cout << "Enter your choice: "; cin >> choice; cout << " " << endl; switch (choice) { case 1: write_account(); break; case 2: cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; account_details(num); break; case 3: cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; modify_acc(num); break; case 4: // Deposit cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; deposit_withdraw(num, 1); break; case 5: // Withdrawal cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; deposit_withdraw(num, 2); break; case 6: // Balance Inquiry cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; balance_transactions(num, 1); break; case 7: // Previous Transactions cout << "\n****************ACCOUNT NUMBER*****************\n"; cout << "Enter account number: "; cin >> num; balance_transactions(num, 2); break; case 8: logout(users, 2); break; default: cout << "Invalid choice. Please try again." << endl; break; } } } while (choice != 2 || choice != 8); return 0; }
Editor is loading...
Leave a Comment