BitCoinTransaction
unknown
c_cpp
5 months ago
5.0 kB
7
Indexable
#include <iostream> #include <vector> #include <string> #include <algorithm> #include <iomanip> using namespace std; enum class TransactionStatus { PENDING, COMPLETED, CANCELED, PAUSED }; class Transaction { public: Transaction(const string &userId, double amount, int counter) : userId(userId), amount(amount), status(TransactionStatus::PENDING), timestamp(counter) { id = generateUniqueId(); } string getId() const { return id; } string getUserId() const { return userId; } double getAmount() const { return amount; } TransactionStatus getStatus() const { return status; } void setStatus(TransactionStatus newStatus) { status = newStatus; } int getTimestamp() const { return timestamp; } void display() const { if (status == TransactionStatus::CANCELED) return; cout << "Transaction{id='" << id << "', userId='" << userId << "', amount=" << amount << ", timestamp=" << timestamp << ", status='" << statusToString(status) << "'}\n"; } private: string id; string userId; double amount; TransactionStatus status; int timestamp; static string generateUniqueId() { static int counter = 0; return "tx" + to_string(++counter); } static string statusToString(TransactionStatus status) { switch (status) { case TransactionStatus::PENDING: return "PENDING"; case TransactionStatus::COMPLETED: return "COMPLETED"; case TransactionStatus::CANCELED: return "CANCELED"; case TransactionStatus::PAUSED: return "PAUSED"; default: return "UNKNOWN"; } } }; class TransactionService { public: void addTransaction(const string &userId, double amount) { counter++; // Increment the counter with each transaction transactions.push_back(Transaction(userId, amount, counter)); } void displayTransactionHistory() { sortTransactions(); for (const auto &transaction : transactions) { transaction.display(); } } bool cancelTransaction(const string &transactionId) { for (auto &transaction : transactions) { if (transaction.getId() == transactionId && transaction.getStatus() != TransactionStatus::COMPLETED) { transaction.setStatus(TransactionStatus::CANCELED); return true; } } return false; } bool pauseTransaction(const string &transactionId) { for (auto &transaction : transactions) { if (transaction.getId() == transactionId && transaction.getStatus() == TransactionStatus::PENDING) { transaction.setStatus(TransactionStatus::PAUSED); return true; } } return false; } bool cancelAllUserTransactions(const string &userId) { bool anyCancelled = false; for (auto &transaction : transactions) { if (transaction.getUserId() == userId && transaction.getStatus() != TransactionStatus::COMPLETED) { transaction.setStatus(TransactionStatus::CANCELED); anyCancelled = true; } } return anyCancelled; } private: vector<Transaction> transactions; int counter = 0; // Counter to simulate incremental timestamps void sortTransactions() { sort(transactions.begin(), transactions.end(), [](const Transaction &a, const Transaction &b) { return a.getTimestamp() > b.getTimestamp(); }); } }; int main() { TransactionService transactionService; // Adding some transactions for demonstration transactionService.addTransaction("user1", 0.05); transactionService.addTransaction("user2", 0.02); transactionService.addTransaction("user1", 0.03); transactionService.addTransaction("user3", 0.07); // Display transaction history cout << "\nTransaction History:\n"; transactionService.displayTransactionHistory(); // Cancel a specific transaction (let's assume tx1 is the ID) cout << "\nCanceling transaction with ID tx1...\n"; transactionService.cancelTransaction("tx1"); // Display transaction history again cout << "\nUpdated Transaction History:\n"; transactionService.displayTransactionHistory(); // Pause a specific transaction (let's assume tx2 is the ID) cout << "\nPausing transaction with ID tx2...\n"; transactionService.pauseTransaction("tx2"); // Display transaction history again cout << "\nUpdated Transaction History:\n"; transactionService.displayTransactionHistory(); // Cancel all transactions for a user (user1) cout << "\nCanceling all transactions for user1...\n"; transactionService.cancelAllUserTransactions("user1"); // Final display of transaction history cout << "\nFinal Transaction History:\n"; transactionService.displayTransactionHistory(); return 0; }
Editor is loading...
Leave a Comment