DSA
LAB TASK NO:9
IT DEPARTMENT (CYBER SECURITY)
PAK AUSTRIA FACHHOCHSCHULE APPLIED SCIENCE AND
TECHNOLOGY
SUBMITTED TO:
MISS ZUBARIA
SUBMITTED BY:
QANDEEL SHAHZAD
REGISTRATION NO#
B23F0001CYS009
TOPIC:
LAB 9
SUBMISSION DATE:
20/11/2024
CODE:
#include <iostream>
#include <queue>
#include <stack>
#include <string>
using namespace std;
class CustomerSupportCenter {
private:
struct Request {
int requestId;
string userName;
string issueDescription;
bool isPriority; // true if priority request, false if general request
};
queue<Request> generalSupportQueue; // FIFO for general requests
stack<Request> prioritySupportStack; // LIFO for priority requests
Request processedRequests[100]; // Array to store processed requests (fixed
size)
int processedCount = 0; // Count of processed requests
int generalToPriorityRatio = 3; // Default ratio
public:
void enqueueGeneralRequest(int requestId, const string& userName, const
string& issueDescription) {
generalSupportQueue.push({requestId, userName, issueDescription,
false});
}
void pushPriorityRequest(int requestId, const string& userName, const string&
issueDescription) {
prioritySupportStack.push({requestId, userName, issueDescription, true});
}
void setProcessingRatio(int ratio) {
generalToPriorityRatio = ratio;
}
void processRequests() {
while (!generalSupportQueue.empty() || !prioritySupportStack.empty()) {
// Process general requests based on the ratio
for (int i = 0; i < generalToPriorityRatio && !
generalSupportQueue.empty(); ++i) {
processedRequests[processedCount++] =
generalSupportQueue.front();
generalSupportQueue.pop();
}
// Process one priority request if available
if (!prioritySupportStack.empty()) {
processedRequests[processedCount++] = prioritySupportStack.top();
prioritySupportStack.pop();
}
}
}
void displayProcessedRequests() const {
cout << "Processed Requests:\n";
for (int i = 0; i < processedCount; ++i) {
const auto& request = processedRequests[i];
cout << (request.isPriority ? "Priority" : "General") << " Request ID: "
<< request.requestId << ", User: " << request.userName
<< ", Issue: " << request.issueDescription << "\n";
}
}
void displayRemainingRequests() const {
cout << "Remaining Requests:\n";
// Display remaining general requests
queue<Request> tempQueue = generalSupportQueue; // Copy for display
while (!tempQueue.empty()) {
const auto& request = tempQueue.front();
cout << "General Request ID: " << request.requestId << ", User: "
<< request.userName << ", Issue: " << request.issueDescription <<
"\n";
tempQueue.pop();
}
// Display remaining priority requests
stack<Request> tempStack = prioritySupportStack; // Copy for display
while (!tempStack.empty()) {
const auto& request = tempStack.top();
cout << "Priority Request ID: " << request.requestId << ", User: "
<< request.userName << ", Issue: " << request.issueDescription <<
"\n";
tempStack.pop();
}
}
};
int main() {
CustomerSupportCenter supportCenter;
// Adding some requests
supportCenter.enqueueGeneralRequest(1, "Izza", "Account issue");
supportCenter.enqueueGeneralRequest(2, "Zohaib", "Payment query");
supportCenter.enqueueGeneralRequest(3, "Zimal", "Shipping info");
supportCenter.pushPriorityRequest(101, "Ali", "Security concern");
supportCenter.pushPriorityRequest(102, "Sara", "Payment failure");
// Set processing ratio
supportCenter.setProcessingRatio(3);
// Process requests
supportCenter.processRequests();
// Display processed and remaining requests
supportCenter.displayProcessedRequests();
supportCenter.displayRemainingRequests();
return 0;
}
OUTPUT: