Answer to Question #276842 in C++ for Fall

Question #276842

Problem Statement

You are a young tech-entrepreneur who provides technology solutions to challenges faced in the education sector of your country.You decide to build a school library management system that will allow a student to get registered,request to borrow a book from the library through the system and also put in a request to return the book, and a Librarian who will be there to approve requests and accept/check in returned books and update the system.

Required

1.A Librarian should be able to do all the minimum roles stated, which are: a. Login to the system. b. Register a student user to the system i. On top of basic personal details (username and password), it is a must to have student deposit a flat fee of 1000 shillings in the student’s library account. c. Approve student’s request to borrow/rent out a book d. Accept returned book and update system.


1
Expert's answer
2021-12-07T20:57:55-0500
#include<iostream>
#include<map>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
//Student menu
void StudMenu()
{
	cout << "\tYou are in the school library management system.\n"
		<< "\tPlease, select some of the following:\n"
		<< "G - Get Registered\n"
		<< "B - Request to borrow a book\n"
		<< "R - Return a book\n"
		<< "E - Exit menu\n";
	cout << "Your choice:";
}
//Librarian menu
void LibMenu()
{
	cout << "\tYou are in the school library management system.\n"
		<< "\tPlease, select some of the following:\n"
		<< "L - Login to the system\n"
		<< "P - Process requests\n"
		<< "E - Exit menu\n";
	cout << "Your choice:";
}
//main menu
void MainMenu()
{
	cout<< "\tYou are in the school library management system.\n"
		<< "\t\tWho are you:\n";
	cout<< "1 - Student\n"
		<< "2 - Librarian\n"
		<< "3 - Exit program\n";
	cout << "Your choice:";
}


struct Student
{
	string name;
	string passw;
	int fee;
	bool operator==(Student& s)
	{
		if (name == s.name&&passw == s.passw)return true;
		else return false;
	}
};


//Student`s function to make registration requests
void ReqRegUser(vector<Student>& Users, map<pair<string, string>, string>& responses)
{
	Student st;
	string name;
	cout << "\nEnter your name:";
	cin >> st.name;
	string passw;
	cout << "\nEnter your password:";
	cin >> st.passw;
	int fee;
	cout << "\nEnter a flat fee of 1000 shillings:";
	cin >>st.fee;
	Users.push_back(st);
	//Type of response
	string resp = "Reg";
	responses.insert(pair<pair<string, string>, string>({name, passw}, resp));
	cout << "Request submitted!";
}
//Student`s function to make borrow requests
void ReqBorrowBook( map<pair<string, string>, string>& responses)
{
	string nm;
	cout << "Enter your name: ";
	cin >> nm;
	string book;
	cout << "\nEnter a book to borrow:";
	cin >> book;
	string resp = "Bor";
	responses.insert(pair<pair<string, string>, string>({ nm, book }, resp));
	cout << "Request submitted!";
	
}
//Student`s function to make return book request
void ReqReturnBook(map<pair<string, string>, string>& responses)
{
	string nm;
	cout << "Enter your name: ";
	cin >> nm;
	string book;
	cout << "\nEnter a book to return:";
	cin >> book;
	string resp = "Ret";
	responses.insert(pair<pair<string, string>, string>({ nm, book }, resp));
	cout << "Request submitted!";
}


struct Librarian
{
	string name;
	string passw;
	Librarian(string _name, string _passw) :name(_name), passw(_passw) {}
	bool operator==(Librarian& l)
	{
		if (name == l.name&&passw == l.passw)return true;
		else return false;
	}
};


bool LoginLibrarian(vector<Librarian>&Libers)
{
	string name;
	cout << "\nEnter your name:";
	cin >> name;
	string passw;
	cout << "\nEnter your password:";
	cin >> passw;
	Librarian temp(name, passw);
	for (vector<Librarian>::iterator it = Libers.begin(); it != Libers.end(); ++it)
	{
		if (*it == temp)return true;
	}
	return false;
}
void ReqProcess(map<pair<string, string>, string>& responses, vector<Student>&Users, vector<string>&books)
{


	cout << "You have this responses:\n";
	for (map<pair<string, string>, string>::iterator it = responses.begin(); it != responses.end(); ++it)
	{
		cout << it->second << " from " << it->first.first << " " << it->first.second << endl;
	}
	char ch;
	cout << "Process? [Y/N]";
	cin >> ch;
	if (ch == 'Y')
	{
		for (map<pair<string, string>, string>::iterator it = responses.begin(); it != responses.end(); ++it)
		{
			if (it->second == "Reg")
			{
				for (vector<Student>::iterator itu = Users.begin(); itu != Users.end(); ++itu)
				{
					if (itu->name == it->first.first)
					{
						if (itu->fee < 1000)
						{
							cout << "User do not have deposit a flat fee of 1000 shillings\n";
							Users.erase(itu);
						}
					}
				}
								
				responses.erase(it->first);
			}
			if (it->second == "Bor")
			{
				for (vector<Student>::iterator itu = Users.begin(); itu != Users.end(); ++itu)
				{
					if (itu->name == it->first.first)
					{
						auto p=find(books.begin(),books.end(),it->first.second);
						books.erase(p);
					}
				}
				responses.erase(it->first);
			}
			if (it->second == "Ret")
			{
				books.push_back(it->first.second);
				responses.erase(it->first);
			}
		}
	}
}
int main()
{
	//Vector of users
	vector<Student>Users;
	//vector of librarians
	vector<Librarian>Libers;
	//Make one admin librarian
	Librarian l("Jack", "12345");
	vector<string>books{"Nature","Bad Man","Peolpe"};
	map<pair<string,string>,string>responses;
	char choice;
	do
	{
		MainMenu();
		cin >> choice;
		if (choice == '1')
		{
			char ch;
			do
			{
				StudMenu();
				cin >> ch;
				switch (ch)
				{
					case 'G':
					{
						ReqRegUser(Users, responses);
						break;
					}
					case 'B':
					{
						ReqBorrowBook(responses);
						break;
					}
					case 'R':
					{
						ReqReturnBook(responses);
						break;
					}
				}
			} while (ch != 'E');
			
		}
		else if (choice == '2')
		{
			char ch;
			do
			{
				bool check=false;
				LibMenu();
				cin >> ch;
				switch (ch)
				{
					case 'L':
					{
						check= LoginLibrarian(Libers);
						break;
					}
					case 'B':
					{
						if(check)
							ReqProcess(responses,Users,books);
						else
						{
							cout << "You are not autorized to perform this operation!\n";
						}
						break;
					}
				
				}
			} while (ch != 'E');
		}
	} while (choice != '3');
}

Need a fast expert's response?

Submit order

and get a quick answer at the best price

for any assignment or question with DETAILED EXPLANATIONS!

Comments

No comments. Be the first!

Leave a comment