Skip to main content
Loading...

More C++ Posts

#include<iostream>
#include<fstream>
#include<vector>
#include<stdio.h> 
#include<time.h>
#include<stdlib.h>
using namespace std;

//data storage for parking lot info, admin, managers, users, and tickets
struct Parking_Lot_info{
	int total_Space;
	int regular;
	int motorcycle;
	int disability;
};
struct Admin{
	string name;
	string id;
	string password;
};
struct Manager{
	string name;
	string id;
	string password;
}; 
struct User{
	string id;
	string name;
	string password;
	string makeModel1;
	string makeModel2;
	string year;
	string plate;
};
struct Ticket{
	string ticket_Number;
	string ticket_Amount;
	string ticket_Issued;
	string ticket_Status;
	string reason; 
	string plate;
}; 


//prototypes
vector<Admin>admin_Vector;
vector<Admin>::iterator admin_it;
vector<Manager>manager_Vector;
vector<Manager>::iterator manager_it;
vector<User>user_Vector;
vector<User>::iterator user_it;
vector<Ticket>ticket_Vector;
vector<Ticket>::iterator ticket_it;
void Initial_Admin_Vector(char admin_People_File_Name[]);
void Initial_Manager_Vector(char management_People_File_Name[]);
void Initial_User_Vector(char user_People_File_Name[]);
void Initial_Ticket_Vector();
void Login_System();
void Checking_Id_Password();
void Admin_Menu();
void Management_Menu();
void User_Menu();
void Add_Admin();
void Remove_Admin();
void Display_All_Admin();
void Search_Admin();
void Change_Password_Admin();
void Add_Manager();
void Remove_Manager();
void Display_All_Manager();
void Search_Manager();
void Add_User();
void Display_All_User();
void Remove_User();
void Search_User();
void Change_Password_User();
void Change_Vehicle_Info();
void Display_All_Vehicle();
void Add_Ticket();
void Display_All_Ticket();
void Search_Ticket();
void Remove_Ticket();
void User_Display_Ticket();
void Pay_Ticket();
void Change_Password_Manager();
void Store_Admin_Data(char admin_People_File_Name[]);
void Store_Manager_Data(char manager_People_File_Name[]);
void Store_User_Data(char user_People_File_Name[]);
void Store_Ticket_Data();

void Initial_Admin_Vector(char admin_People_File_Name[]){
	ifstream in;
	Admin a;
	in.open(admin_People_File_Name);
	while(getline(in,a.name,',')){
		getline(in,a.id,',');
		getline(in,a.password);
		admin_Vector.push_back(a);
	}
	in.close();
}

void Initial_Manager_Vector(char management_People_File_Name[]){
	ifstream in;
	Manager m;
	in.open(management_People_File_Name);
	while(getline(in,m.name,',')){
		getline(in,m.id,',');
		getline(in,m.password);
		manager_Vector.push_back(m);
	}
	in.close();
}
void Initial_User_Vector(char user_People_File_Name[]){
	ifstream in;
	User u;
	in.open(user_People_File_Name);
	while(getline(in,u.name,',')){
		getline(in,u.id,',');
		getline(in,u.password,',');
		getline(in,u.makeModel1,',');
		getline(in,u.makeModel2,',');
		getline(in,u.year,',');
		getline(in,u.plate);
		user_Vector.push_back(u);
	}
	in.close();
}
void Initial_Ticket_Vector(){
	ifstream in;
	Ticket t;
	in.open("ticket.csv");
	while(getline(in,t.ticket_Number,',')){
		getline(in,t.ticket_Amount,',');
		getline(in,t.ticket_Issued,',');
		getline(in,t.ticket_Status,',');
		getline(in,t.reason,',');
		getline(in,t.plate);
		ticket_Vector.push_back(t);
	}
	in.close();
}



void Login_System(){
	int first_Option;
	bool flag = true;
	do{
		cout << "Type in 1 to Log in to the system." << endl;
		cout << "Type in 2 to register to the system." << endl;
		cout << "Type in 3 to exit the system." << endl;
		cout << "Option: ";
		cin >> first_Option;
		switch(first_Option){
		case 1:
			Checking_Id_Password();
			flag = false;
			break;
		case 2:
			Add_User();
			break;
		case 3:
			flag = false;
			break;		
		}
	}while(flag);
}
void Checking_Id_Password(){
	string Id1;
	string Password1;
	bool flag = true;
	do{
		cout << "Enter id: ";
		cin >> Id1;
		cout << "Enter password: ";
		cin >> Password1;
		for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
			if(Id1 == admin_it->id && Password1 == admin_it->password){
				cout << endl;
				Admin_Menu();
				flag = false;
				break;
			}
		}
		for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
			if(Id1 == manager_it->id && Password1 == manager_it->password){
				cout << endl;
				Management_Menu();
				flag = false;
				break;
			}
		}
		for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
			if(Id1 == user_it->id && Password1 == user_it->password){
				cout << endl;
				User_Menu();
				flag = false;
				break;
			}
		}
		if(flag){
			cout << "ID or Password is wrong. Enter your credentials again."<<endl<<endl;
		}
	}while(flag);
}

void Admin_Menu(){
	int Admin_Option;
	bool flag = true;
	do{
		cout << "Select the following option for a particular task." << endl;
		cout << "Select 1 to add new administrative employee." << endl;
		cout << "Select 2 to remove an administrative employee." << endl;
		cout << "Select 3 to view all administrative employee information." << endl;
		cout << "Select 4 to search information of a specific administrative employee." << endl;
		cout << "Select 5 to change password." << endl;
		cout << "Select 6 to add new management employee." << endl;
		cout << "Select 7 to remove a management employee." << endl;
		cout << "Select 8 to view all management employee information." << endl;
		cout << "Select 9 to search information of a specific management employee." << endl;
		cout << "Select 10 to remove an user." << endl;
		cout << "Select 11 to view all user information." << endl;
		cout << "Select 12 to search information of a specific user." << endl;
		cout << "Select 15 to Log out." << endl;
		cout << "Option: ";
		cin >> Admin_Option;
		switch(Admin_Option){   //switch to manage the option selection
			case 1:
				Add_Admin();
				break;
			case 2:
				Remove_Admin();
				break;
			case 3:
				Display_All_Admin();
				break;
			case 4:
				Search_Admin();
				break;
			case 5:
				Change_Password_Admin();
				break;
			case 6:
				Add_Manager();
				break;
			case 7:
				Remove_Manager();
				break;
			case 8:
				Display_All_Manager();
				break;
			case 9:
				Search_Manager();
				break;
			case 10:
				Remove_User();
				break;
			case 11:
				Display_All_User();
				break;
			case 12:
				Search_User();
				break; 
			case 15:
				flag = false;
				cout << endl;
				Login_System();
				break;
		}
	}while(flag);
}
void Management_Menu(){
	int Manager_Option;
	bool flag = true;
	do{
		cout << "Select the following option for a particular task." << endl;
		cout << "Select 1 to remove an user." << endl;
		cout << "Select 2 to view all user information." << endl;
		cout << "Select 3 to search information of a specific user." << endl;
		cout << "Select 4 to issue a ticket." << endl;
		cout << "Select 5 to view all the ticket information." << endl;
		cout << "Select 6 to view a specific ticket information in details." << endl;
		cout << "Select 7 to remove a specific ticket information." << endl;
		cout << "Select 8 to change password." << endl;
		cout << "Select 9 to Log out." << endl;
		cout << "Option: ";
		cin >> Manager_Option;
		switch(Manager_Option){ //ditto
			case 1:
				Remove_User();
				break;
			case 2:
				Display_All_User();
				break;
			case 3:
				Search_User();
				break;
			case 4:
				Add_Ticket();
				break;
			case 5:
				Display_All_Ticket();
				break;
			case 6:
				Search_Ticket();
				break;
			case 7:
				Remove_Ticket();
				break;
			case 8:
				Change_Password_Manager();
				break;
			case 9:
				flag = false;
				cout << endl;
				Login_System();
				break;
		}
	}while(flag);
}
void User_Menu(){
	int User_Option;
	bool flag = true;
	do{
		cout << "Select the following option for a particular task." << endl;
		cout << "Select 1 to change password." << endl;
		cout << "Select 2 to change vehicle information." << endl;
		cout << "Select 3 to view vehicle information." << endl;
		cout << "Select 4 to view all ticket information." << endl;
		cout << "Select 5 to pay a ticket amount." << endl;
		cout << "Select 8 to Log out." << endl;
		cout << "Option: ";
		cin >> User_Option;
		switch(User_Option){
			case 1:
				Change_Password_User();
				break;
			case 2:
				Change_Vehicle_Info();
				break;
			case 3:
				Display_All_Vehicle();
				break;
			case 4:
				User_Display_Ticket();
				break;
			case 5:
				Pay_Ticket();
				break;
			case 8:
				flag = false;
				cout << endl;
				Login_System();
				break;	
		}
	}while(flag);
}
void Add_Admin(){
	string add_name;
	string add_id;
	string add_password;
	Admin a;
	srand((unsigned)time(NULL));
	bool flag = true;
	char temp1[100];
	int temp2;	
	
	cout << "Enter administrative employee name: ";
	cin.ignore();
	getline(cin,add_name);
	cout << "Auto generated id for this administrative employee account is: ";
	do{
		temp2 = rand()%400 + 101;
		sprintf(temp1, "%d", temp2);
		add_id = temp1;
		for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
			if(add_id == admin_it->id){
				break;
			}
		}
		if(admin_it == admin_Vector.end()){
			flag = false;
		}
	}while(flag);
	cout << add_id << endl;
	cout << "Set a password for this administrative employee account: ";
	getline(cin,add_password);
	cout << "administrative employee entry is complete." << endl << endl;
	
	a.name = add_name;
	a.id = add_id;
	a.password = add_password;
	admin_Vector.push_back(a); 
}
void Remove_Admin(){
	bool flag = true;
	string remove_id;
	cout << "Enter the administrative employee's Id: ";
	cin >> remove_id;
	for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
		if(admin_it->id == remove_id){
			admin_Vector.erase(admin_it);
			cout << "Administrative employee is removed." <<endl <<endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Fail to remove the administrative employee's information!" << endl <<endl;
	}
}
void Display_All_Admin(){
	cout << "All Administrative Employee Information" << endl;
	cout << "---------------------------------------" << endl;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;
	for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
		cout << admin_it->name << "\t" << "\t" << "\t";
		cout << admin_it->id << endl;
	}
	cout <<endl << endl;
}
void Search_Admin(){
	bool flag = true;
	string search_id;
	cout << "Enter the administrative employee's id: ";
	cin >> search_id;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;		
	for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
		if(admin_it->id == search_id){
			cout << admin_it->name << "\t" << "\t" << "\t";
			cout << admin_it->id << endl << endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Can't find this administrative employee's information!" << endl << endl;
	}
	cout <<endl << endl;
}
void Change_Password_Admin(){
	string new_password;
	cout << "Enter a new password: ";
	cin >> new_password;
	admin_it->password = new_password;
	cout << "You have changed your password successfully!" <<endl;
	cout << endl;
}
void Add_Manager(){
	string add_name;
	string add_id;
	string add_password;
	Manager m;
	srand((unsigned)time(NULL));
	bool flag = true;
	char temp1[100];
	int temp2;	
	
	cout << "Enter management employee name: ";
	cin.ignore();
	getline(cin,add_name);
	cout << "Auto generated id for this management employee account is: ";
	do{
		temp2 = rand()%500 + 501;
		sprintf(temp1, "%d", temp2);
		//itoa(temp2,temp1,10);
		add_id = temp1;
		for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
			if(add_id == manager_it->id){
				break;
			}
		}
		if(manager_it == manager_Vector.end()){
			flag = false;
		}
	}while(flag);
	cout << add_id << endl;
	cout << "Set a password for this management employee account: ";
	getline(cin,add_password);
	cout << "Management employee entry is complete." << endl << endl;
	
	m.name = add_name;
	m.id = add_id;
	m.password = add_password;
	manager_Vector.push_back(m); 
}
void Remove_Manager(){
	bool flag = true;
	string remove_id;
	cout << "Enter the management employee's id: ";
	cin >> remove_id;
	for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
		if(manager_it->id == remove_id){
			manager_Vector.erase(manager_it);
			cout << "Management employee is removed." <<endl <<endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Fail to remove the management employee's information!" << endl <<endl;
	}
}
void Display_All_Manager(){
	cout << "------All Employee Information-----" << endl;
	cout << "-----------------------------------" << endl;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;
	for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
		cout << manager_it->name << "\t" << "\t" << "\t";
		cout << manager_it->id << endl;
	}
	cout <<endl << endl;
}
void Search_Manager(){
	bool flag = true;
	string search_id;
	cout << "Enter the management employee's id: ";
	cin >> search_id;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;		
	for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
		if(manager_it->id == search_id){
			cout << manager_it->name << "\t" << "\t" << "\t";
			cout << manager_it->id << endl << endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Can't find this management employee's information!" << endl << endl;
	}
	cout << endl << endl;
}
void Add_User(){
	string add_name;
	string add_id;
	string add_password;
	string add_makeModel1;
	string add_makeModel2;
	string add_year;
	string add_plate;
	User u;
	bool flag = true;
	
	cout << "Enter name: ";
	cin.ignore();
	getline(cin,add_name);
	do{
		cout << "Enter id: ";	
		//cin.ignore();
		getline(cin,add_id);
		for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
			if(add_id == user_it->id){
				cout << "This id is already in use! Please Enter again!" << endl;
				break;
			}
		}
		if(user_it == user_Vector.end()){
			flag = false;
		}
	}while(flag); 
	cout << "Enter password: ";
	//cin.ignore();
	getline(cin,add_password);
	cout << "Now enter your vehicle information..." << endl;
	cout << "Enter vehicle make: ";
	//cin.ignore();
	getline(cin,add_makeModel1);
	cout << "Enter vehicle model: ";
	//cin.ignore();
	getline(cin,add_makeModel2);
	cout << "Enter vehicle year: ";
	//cin.ignore();
	getline(cin,add_year);
	cout << "Enter vehicle plate number: ";
	//cin.ignore();
	getline(cin,add_plate);
	cout << "Registration is complete" << endl << endl;
	
	u.name = add_name;
	u.id = add_id;
	u.password = add_password;
	u.makeModel1 = add_makeModel1;
	u.makeModel2 = add_makeModel2;
	u.year = add_year;
	u.plate = add_plate;
	user_Vector.push_back(u); 	
}
void Remove_User(){
	bool flag = true;
	string remove_id;
	cout << "Enter the user's id: ";
	cin >> remove_id;
	for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
		if(user_it->id == remove_id){
			user_Vector.erase(user_it);
			cout << "User is removed." <<endl <<endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Fail to remove the user's information!" << endl <<endl;
	}
}
void Display_All_User(){
	cout << "-----------------------------------------------------All User Information-------------------------------------------------------" << endl;
	cout << "--------------------------------------------------------------------------------------------------------------------------------" << endl;
	cout << "	Name                          ID               Make               Model                 Year           Plate Number" << endl;
	cout << "--------------------------------------------------------------------------------------------------------------------------------" << endl;
	for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
		cout << user_it->name << "\t" << "\t" << "\t";
		cout << user_it->id << "\t" << "\t";
		cout << user_it->makeModel1 << "\t"<< "\t";
		cout << user_it->makeModel2 << "\t" << "\t"<< "\t";
		cout << user_it->year << "\t" << "\t";
		cout << user_it->plate << endl;
	}
	cout <<endl << endl;
}
void Search_User(){
	bool flag = true;
	string search_id;
	cout << "Enter the user's id: ";
	cin >> search_id;
	cout << "	Name                          ID               Make               Model                 Year           Plate Number" << endl;
	cout << "--------------------------------------------------------------------------------------------------------------------------------" << endl;		
	for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
		if(user_it->id == search_id){
			cout << user_it->name << "\t" << "\t" << "\t";
			cout << user_it->id << "\t" << "\t";
			cout << user_it->makeModel1 << "\t"<< "\t";
			cout << user_it->makeModel2 << "\t" << "\t"<< "\t";
			cout << user_it->year << "\t" << "\t";
			cout << user_it->plate << endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Can't find this user's information!" << endl << endl;
	}
	cout << endl << endl;
}
void Change_Password_User(){
	string new_password;
	cout << "Enter a new password: ";
	cin >> new_password;
	user_it->password = new_password;
	cout << "You have changed your password successfully!" <<endl;
	cout << endl;
}
void Change_Vehicle_Info(){
	string new_MakeModel1;
	string new_MakeModel2;
	string new_Year;
	string new_Plate;
	cout << "Enter the new vehicle make: ";
	cin.ignore();
	getline(cin,new_MakeModel1);
	cout << "Enter the new vehicle model: ";
	//cin.ignore();
	getline(cin,new_MakeModel2);
	cout << "Enter the new vehicle year: ";
	//cin.ignore();
	getline(cin,new_Year);
	cout << "Enter the new vehicle plate number: ";
	//cin.ignore();
	getline(cin,new_Plate);
	user_it->makeModel1 = new_MakeModel1;
	user_it->makeModel2 = new_MakeModel2;
	user_it->year = new_Year;
	user_it->plate = new_Plate;
	cout << "You have changed your vehicle information successfully!" <<endl << endl;
}
void Display_All_Vehicle(){
	cout << endl;
	cout << "Vehicle make: " << user_it->makeModel1 << endl;
	cout << "Vehicle model: " << user_it->makeModel2 << endl;
	cout << "Vehicle year: " << user_it->year << endl;
	cout << "Vehicle plate number: " << user_it->plate << endl << endl;
}
void Add_Ticket(){
	string add_ticket_number;
	string add_ticket_amount;
	string add_Reason;
	string add_plate;
	Ticket t;
	srand((unsigned)time(NULL));
	bool flag = true;
	char temp1[100];
	int temp2;	
	string ticketIssued;
	string ticketStat;
	
	cout << "Auto generated ticket number is: ";
	do{
		temp2 = rand()%49000 + 1001;
		sprintf(temp1, "%d", temp2);
		//itoa(temp2,temp1,10);
		add_ticket_number = temp1;
		for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
			if(add_ticket_number == ticket_it->ticket_Number){
				break;
			}
		}
		if(ticket_it == ticket_Vector.end()){
			flag = false;
		}
	}while(flag);
	cout << add_ticket_number << endl;
	cout << "Enter ticket amount: ";
	cin.ignore();
	getline(cin,add_ticket_amount);
	cout << "Reason of ticket: ";
	getline(cin,add_Reason);
	cout << "Enter vehicle plate number: ";
	getline(cin,add_plate);
	cout << "Ticket has been recorded successfully."<<endl<<endl;
	ticketIssued = manager_it->id;
	ticketStat = "Unpaid";
	
	t.ticket_Number = add_ticket_number;
	t.ticket_Amount = add_ticket_amount;
	t.ticket_Issued = ticketIssued;
	t.ticket_Status = ticketStat;
	t.reason = add_Reason;
	t.plate = add_plate;
	ticket_Vector.push_back(t);
}
void Display_All_Ticket(){
	cout << "Ticket number     Ticket amount     Issued by     Ticket Status     Reason" << endl;
	cout << "--------------------------------------------------------------------------" << endl;
	for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
		cout << "\t" << ticket_it->ticket_Number << "\t" << "\t";
		cout << "$" << ticket_it->ticket_Amount << "\t" << "\t";
		cout << ticket_it->ticket_Issued << "\t"<< "\t";
		cout << ticket_it->ticket_Status << "\t"<< "\t";
		cout << ticket_it->reason << endl;
	}
	cout <<endl << endl;
}
void Search_Ticket(){
	bool flag = true;
	string search_number;
	cout << "Enter the ticket number: ";
	cin.ignore();
	getline(cin,search_number);
	cout << "Ticket number     Ticket amount     Issued by     Ticket Status     Reason" << endl;
	cout << "--------------------------------------------------------------------------" << endl;
	for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
		if(ticket_it->ticket_Number == search_number){
			cout << "\t" << ticket_it->ticket_Number << "\t" << "\t";
			cout << "$" << ticket_it->ticket_Amount << "\t" << "\t";
			cout << ticket_it->ticket_Issued << "\t"<< "\t";
			cout << ticket_it->ticket_Status << "\t"<< "\t";
			cout << ticket_it->reason << endl;
		}
	}
	cout <<endl << endl;
}
void Remove_Ticket(){
	bool flag = true;
	string remove_number;
	cout << "Enter the ticket number: ";
	cin.ignore();
	getline(cin,remove_number);
	for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
		if(ticket_it->ticket_Number == remove_number){
			ticket_Vector.erase(ticket_it);
			cout << endl;
			cout << "Ticket is removed." <<endl <<endl;
			flag = false;
			break;
		}
	}
	if(flag){
		cout << "Fail to remove the ticket!" << endl <<endl;
	}
}
void Change_Password_Manager(){
	string new_password;
	cout << "Enter a new password: ";
	cin >> new_password;
	manager_it->password = new_password;
	cout << "You have changed your password successfully!" <<endl;
	cout << endl;
}
void User_Display_Ticket(){
	cout << "Ticket number     Ticket amount     Issued by     Ticket Status     Reason" << endl;
	cout << "--------------------------------------------------------------------------" << endl;
	for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
		if(user_it->plate == ticket_it->plate){
			cout << "\t" << ticket_it->ticket_Number << "\t" << "\t";
			cout << "$" << ticket_it->ticket_Amount << "\t" << "\t";
			cout << ticket_it->ticket_Issued << "\t"<< "\t";
			cout << ticket_it->ticket_Status << "\t"<< "\t";
			cout << ticket_it->reason << endl;
			break;
		}
	}
	cout <<endl << endl;
}
void Pay_Ticket(){
	string YorN;
	cout << "Do you want to pay $" << ticket_it->ticket_Amount << " right now? (Type in Yes or No):";
	cin >> YorN;
	if(YorN == "Yes" || YorN == "YES" || YorN == "yes"){
		for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
			if(user_it->plate == ticket_it->plate){
				ticket_it->ticket_Amount = "0";
				ticket_it->ticket_Status = "Paid";
				cout << "The ticket amount is paid off." << endl << endl;
				break;
			}
		}
	}
	else if(YorN == "No" || YorN == "NO" || YorN == "no"){
		cout << endl << endl;
	}
		
}
void Store_Admin_Data(char admin_People_File_Name[]){  //Store all the changes to the admin's data in to the file.
	ofstream out;
	out.open(admin_People_File_Name);
	for(admin_it = admin_Vector.begin(); admin_it != admin_Vector.end(); admin_it++){
		out << admin_it->name << ",";
		out << admin_it->id << ",";
		out << admin_it->password << endl;
	}
	out.close();
}
void Store_Manager_Data(char management_People_File_Name[]){  //Store all the changes to the manager's data in to the file.
	ofstream out;
	out.open(management_People_File_Name);
	for(manager_it = manager_Vector.begin(); manager_it != manager_Vector.end(); manager_it++){
		out << manager_it->name << ",";
		out << manager_it->id << ",";
		out << manager_it->password << endl;
	}
	out.close();
}
void Store_User_Data(char user_People_File_Name[]){  //Store all the changes to the user's data in to the file.
	ofstream out;
	out.open(user_People_File_Name);
	for(user_it = user_Vector.begin(); user_it != user_Vector.end(); user_it++){
		out << user_it->name << ",";
		out << user_it->id << ",";
		out << user_it->password << ",";
		out << user_it->makeModel1 << ",";
		out << user_it->makeModel2 << ",";
		out << user_it->year << ",";
		out << user_it->plate << endl;
	}
	out.close();
}
void Store_Ticket_Data(){  //Store all the changes to the ticket's data in to the file.
	ofstream out;
	out.open("ticket.csv");
	for(ticket_it = ticket_Vector.begin(); ticket_it != ticket_Vector.end(); ticket_it++){
		out << ticket_it->ticket_Number << ",";
		out << ticket_it->ticket_Amount << ",";
		out << ticket_it->ticket_Issued << ",";
		out << ticket_it->ticket_Status << ",";
		out << ticket_it->reason << ",";
		out << ticket_it->plate << endl;
	}
	out.close();
}

int main(){
    
    //char array to store the user input for the file search
	char input_File_Name[100]; 
	char admin_People_File_Name[100];
	char management_People_File_Name[100];
	char user_People_File_Name[100];
	
	ifstream in; 
	Parking_Lot_info *pli; //Structure pointer
	int pln; //Parking lot number
	int max_Space = 8; // Max number of parking space in a row
	int t = 0; //Determine when it needs to switch to the next row
	
	//relevant strings for admin, management, and users
	string admin_Name, admin_Id, admin_Password;
	string management_Name, management_Id, management_Password;
	string user_Name, user_Id, user_Password;
	
	string user_Make_Model1, user_Make_Model2, user_Year, user_Plate_Number;

    //get filename
	cout << "Enter file name: "; 
	cin.getline(input_File_Name,100);
	in.open(input_File_Name);
	if(!in){
		cout << "Can't open the file!" << endl; //error check
		return 0;
	}

	in >> pln;
	pli = new Parking_Lot_info[pln];
	
	//read data in for parking lot
	for(int i=0; i<pln; i++){
		in >> pli[i].regular;
		in >> pli[i].motorcycle;
		in >> pli[i].disability;
		pli[i].total_Space = pli[i].regular + pli[i].motorcycle + pli[i].disability;
		//display the initial read in data for parking lot
		cout << "Parking lot number: " << i+1 << endl;
		cout << "Number of parking space: " << pli[i].total_Space << endl;
		cout << "Number of regular parking space: " << pli[i].regular << endl;
		cout << "Number of motorcycle parking space: " << pli[i].motorcycle << endl;
		cout << "Number of disability parking space: " << pli[i].disability << endl;			
		cout << "Parking space layout is shown below." << endl;
		cout << "---------------------------------" << endl;
		cout << "|";
		t = 0; //Reset t to 0;
		for(int j=0; j <pli[i].motorcycle; j++){
			t++;
			cout << " M " << "|";
			if(t%max_Space == 0){
				cout << endl;
				cout << "---------------------------------" << endl;
			}
		}
		for(int k=0; k <pli[i].disability; k++){
			t++;	
			cout << " D " << "|";		
			if(t%max_Space == 0){
				cout << endl;
				cout << "---------------------------------" << endl;
			}
		}	
		for(int l=0; l <pli[i].regular; l++){
			t++;	
			cout << " R " << "|";		
			if(t%max_Space == 0){
				cout << endl;
				cout << "---------------------------------" << endl;
			}
		}
		cout << endl;
		cout << "---------------------------------" << endl;
		cout << endl;
	} 		
    //read in admin, management, and user data
	in >> admin_People_File_Name;
	in >> management_People_File_Name;
	in >> user_People_File_Name;
	in.close();
	
	//display initial administrative employee info
	in.open(admin_People_File_Name);
	cout << "All Administrative Employee Information" << endl;
	cout << "---------------------------------------" << endl;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;
	while(getline(in,admin_Name,',')){
		cout << admin_Name << "\t" << "\t" << "\t";
		getline(in,admin_Id,',');
		cout << admin_Id << endl;
		getline(in,admin_Password);
	}
	cout << endl;
	in.close();
	//display all employee information
	in.open(management_People_File_Name);
	cout << "------All Employee Information-----" << endl;
	cout << "-----------------------------------" << endl;
	cout << "             Name                ID" << endl;
	cout << "-----------------------------------" << endl;
	while(getline(in,management_Name,',')){
		cout << management_Name << "\t" << "\t" << "\t";
		getline(in,management_Id,',');
		cout << management_Id << endl;
		getline(in,management_Password);
	}
	cout << endl;
	in.close();
	
	//display all user information
	in.open(user_People_File_Name);
	cout << "-----------------------------------------------------All User Information-------------------------------------------------------" << endl;
	cout << "--------------------------------------------------------------------------------------------------------------------------------" << endl;
	cout << "	Name                          ID               Make               Model                 Year           Plate Number" << endl;
	cout << "--------------------------------------------------------------------------------------------------------------------------------" << endl;
	while(getline(in,user_Name,',')){
		cout << user_Name << "\t" << "\t" << "\t";
		getline(in,user_Id,',');
		cout << user_Id << "\t" << "\t";
		getline(in,user_Password,',');
		getline(in,user_Make_Model1,',');
		cout << user_Make_Model1 << "\t"<< "\t";
		getline(in,user_Make_Model2,',');
		cout << user_Make_Model2 << "\t" << "\t"<< "\t";
		getline(in,user_Year,',');
		cout << user_Year << "\t" << "\t";
		getline(in,user_Plate_Number);
		cout << user_Plate_Number << endl;
	}
	cout << endl;
	in.close();
	
	
	Initial_Admin_Vector(admin_People_File_Name);
	Initial_Manager_Vector(management_People_File_Name);
	Initial_User_Vector(user_People_File_Name);
	Initial_Ticket_Vector();
	Login_System();
	
	//store NEW admin, manager, user, and ticket data
	Store_Admin_Data(admin_People_File_Name);
	Store_Manager_Data(management_People_File_Name);
	Store_User_Data(user_People_File_Name);
	Store_Ticket_Data();
	
	return 0;
}
//===============Header File==================
#include <iostream>
#include <sstream> //stringbuf
#include <utility> //exchange

//Couple rules:
//Characters given through the getter functions have to be removed from the buffer.
    //This is so that bufferEmpty() == buffer.in_avail() > 0 basically always.
    //skipWhitespace doesn't remove the text from the buffer, but it does return the number of characters.
//nextWord will trim whitespace before the word
//nextInt will trim non-numbers before the number
//hasNextInt and hasNextWord will trim the whitespace. If you think you need it, you should get nextWhitespace before doing any of those.
//Whitespace after a word or an int is left on the buffer.
//nextWhitespace will (get and) remove whitespace until the end of the line, including the newline character, but stops before the next line.
    //nextWhitespace won't read the next line when called before the end of the line, and it won't prompt the user for the next line if interactive.
        //If nextWhitespace is called after reading the end of the line, then it will read a new line into the buffer, which will prompt the user.
    //It acts like nextLine, but if there's something non-whitespace on the current line it stops there.
class Scanner {
    public:
        std::stringbuf buffer;
        std::istream& input;
        
        Scanner(std::istream& in = std::cin) : buffer(), input(in) {}
        
    //Buffer debugging
        bool fillBuffer();
    
        bool bufferEmpty();
        void printBufferEmpty();
        std::string getBuffer();
        size_t bufferLength();
        void printBufferStats();
    
    //Int
        bool hasNextInt();
        int nextInt();
    
    //Word
        bool hasNextWord();
        std::string nextWord();
    
    //Line
        bool hasNextLine();
    
    //Whitespace
        size_t skipWhitespace();    //Prob should be private, but I don't believe in that private shit.
        bool hasNextWhitespace();
        std::string nextWhitespace();
        std::string nextWhitespaceAll();
        std::string nextLine();
};

//===============Source File==================
bool Scanner::fillBuffer() {    //Returns if it had to get the next line from the input.
    const bool badInput = input.eof() || input.bad();
    const bool shouldFillBuffer = bufferEmpty() && !badInput;
    if (shouldFillBuffer) {
        std::string line;
        if (std::getline(input, line)) {
            buffer.str(buffer.str() + line + "\n");
        }
    }
    return shouldFillBuffer;
}

bool Scanner::bufferEmpty(){
    return buffer.str() == "";
}
void Scanner::printBufferEmpty(){
    std::cout << "The buffer is " << (bufferEmpty()? "" : "not") << " empty." << std::endl;
}

std::string Scanner::getBuffer(){
    return buffer.str();
}
size_t Scanner::bufferLength(){
    return buffer.str().length();
}
void Scanner::printBufferStats(){
    if(bufferEmpty()){
        std::cout << "The buffer is \"\"" << std::endl;
        return;
    }
    std::cout << "The length of the buffer is " << bufferLength() << std::endl;
    if(buffer.sgetc() == '\r'){
        std::cout << "The buffer is \\r\\n" << std::endl;
    }else if(buffer.sgetc() == '\n'){
        std::cout << "The buffer is \\n" << std::endl;
    }
}

bool Scanner::hasNextInt() {
    return hasNextWord() && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-');
}

int Scanner::nextInt() {
    if (!hasNextInt()) {   //Will fill the buffer if not filled. Will also trim whitespace.
        return 0;
    }
    
    std::string num;
    size_t charactersRead = 0;
    while (buffer.in_avail() > 0 && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-')) {
        num += buffer.sbumpc();
        ++charactersRead;
    }
    buffer.str(buffer.str().erase(0, charactersRead));
    return std::stoi(num);
}

bool Scanner::hasNextWord() {
    nextWhitespaceAll();
    return buffer.in_avail() > 0;
}

std::string Scanner::nextWord() {
    if (!hasNextWord()) {   //Will fill the buffer if not filled. Will also trim whitespace.
        return "";
    }
    
    std::string word;
    size_t charactersRead = 0;
    while (buffer.in_avail() > 0 && !std::isspace(buffer.sgetc())) {
        word += buffer.sbumpc();
        ++charactersRead;
    }
    buffer.str(buffer.str().erase(0, charactersRead));
    return word;
}

bool Scanner::hasNextLine() {
    return (!bufferEmpty()) || fillBuffer();
}

size_t Scanner::skipWhitespace() {   //Returns characters read
    size_t charactersRead = 0;
    while (buffer.in_avail() > 0 && std::isspace(buffer.sgetc())) {
        buffer.sbumpc();
        ++charactersRead;
    }
    return charactersRead;
}
bool Scanner::hasNextWhitespace(){
    fillBuffer();
    return buffer.in_avail() > 0 && std::isspace(buffer.sgetc());
}
std::string Scanner::nextWhitespace() {
    if (!hasNextWhitespace()) {   //Will fill the buffer if not filled
        return "";
    }
    const size_t charactersRead = skipWhitespace();
    std::string whitespace = buffer.str().substr(charactersRead);
    buffer.str(buffer.str().erase(0, charactersRead));
    return whitespace;
}
std::string Scanner::nextWhitespaceAll(){
    std::string whitespace;
    while(hasNextWhitespace()){
        std::string gottenWhiteSpace = nextWhitespace();
        whitespace += gottenWhiteSpace;
    }
    return whitespace;
}
std::string Scanner::nextLine(){
    if (!hasNextLine()) {
        return "";
    }
    
    fillBuffer();
    //Swap out the old buffer with an empty buffer, and get the old buffer as a variable.
    std::string line = std::exchange(buffer, std::stringbuf()).str();
    
    //Remove the newline.
    if(line[line.length() - 1] == '\n' || line[line.length() - 1] == '\r' ) line.pop_back();
    if(line[line.length() - 1] == '\r' || line[line.length() - 1] == '\n' ) line.pop_back();
    return line;
}


//=================Word and Int test=================
while(bruh.hasNextInt() || bruh.hasNextWord()){
    std::cout << "started loop" << std::endl;
    if(bruh.hasNextInt()){
        std::cout << "Int: " << bruh.nextInt() << " " << std::endl;
    }else{
        std::cout << "Word: " << bruh.nextWord() << " " << std::endl;
    }
    bruh.nextWhitespace();
}
//===================Line test======================
for(int count = 1; bruh.hasNextLine(); ++count){
    std::string line = bruh.nextLine();
    std::cout << "Line " << count << ": " << line << std::endl;
}