Skip to main content

C++ SigFigs

0 likes • Sep 7, 2022 • 0 views
C++
Loading...

More C++ Posts

Hash Table Example

0 likes • Nov 18, 2022 • 0 views
C++
using namespace std;
class Hash
{
int BUCKET; // No. of buckets
// Pointer to an array containing buckets
list<int> *table;
public:
Hash(int V); // Constructor
// inserts a key into hash table
void insertItem(int x);
// deletes a key from hash table
void deleteItem(int key);
// hash function to map values to key
int hashFunction(int x) {
return (x % BUCKET);
}
void displayHash();
};
Hash::Hash(int b)
{
this->BUCKET = b;
table = new list<int>[BUCKET];
}
void Hash::insertItem(int key)
{
int index = hashFunction(key);
table[index].push_back(key);
}
void Hash::deleteItem(int key)
{
// get the hash index of key
int index = hashFunction(key);
// find the key in (inex)th list
list <int> :: iterator i;
for (i = table[index].begin();
i != table[index].end(); i++) {
if (*i == key)
break;
}
// if key is found in hash table, remove it
if (i != table[index].end())
table[index].erase(i);
}
// function to display hash table
void Hash::displayHash() {
for (int i = 0; i < BUCKET; i++) {
cout << i;
for (auto x : table[i])
cout << " --> " << x;
cout << endl;
}
}
// Driver program
int main()
{
// array that contains keys to be mapped
int a[] = {15, 11, 27, 8, 12};
int n = sizeof(a)/sizeof(a[0]);
// insert the keys into the hash table
Hash h(7); // 7 is count of buckets in
// hash table
for (int i = 0; i < n; i++)
h.insertItem(a[i]);
// delete 12 from hash table
h.deleteItem(12);
// display the Hash table
h.displayHash();
return 0;
}

Simple Greedy sort C++

0 likes • Jun 30, 2023 • 5 views
C++
#include <iostream>
using namespace std;
int main()
{
int arr[] = {5, 1, 4, 20, 10, 2, 13, 11, 6, 21};
int greed[] = {0, 0, 0, 0};
int k = 0;
int i;
int set_index;
while (k < 4)
{
i = 0;
while (i < 10)
{
if (arr[i] > greed[k])
{
greed[k] = arr[i];
set_index = i;
}
i++;
}
arr[set_index] = 0;
k++;
}
cout << greed[0] << " " << greed[1] << " " << greed[2] << " " << greed[3] << endl;
}

C++ Range Slicer

0 likes • Oct 31, 2023 • 3 views
C++
//Leif Messinger
//Compile with C++ 20
#include <iostream>
#include <ranges>
#include <vector>
#include <functional>
#include <cctype> //toupper
#include <cxxabi.h>
template <typename T>
void printType(){
std::cout << abi::__cxa_demangle(typeid(T).name(), NULL, NULL, NULL) << std::endl;
}
template <typename T>
class Slicer{
public:
T begin_;
T end_;
T trueEnd;
Slicer(T begin, T end): begin_(begin), end_(begin), trueEnd(end){}
template<typename U>
Slicer(U&& vec) : begin_(vec.begin()), end_(vec.begin()), trueEnd(vec.end()){}
Slicer& finish(){
begin_ = end_;
end_ = trueEnd;
return (*this);
}
Slicer& to(long int index){
begin_ = end_;
if(index > 0){
end_ = (begin_ + index);
}else{
index *= -1;
end_ = (trueEnd - index);
}
return (*this);
}
Slicer& operator[](long int index){
return to(index);
}
T begin(){
return this->begin_;
}
T end(){
return this->end_;
}
Slicer& operator()(std::function<void(decltype(*begin_))> func) {
for(decltype(*begin_) thing : (*this)){
func(thing);
}
return (*this);
}
};
static_assert(std::ranges::range< Slicer<std::vector<int>::const_iterator> >);
int main(){
std::string vec = "abcdefghijklmnopqrstuvwxyz";
Slicer<std::string::const_iterator> bruh(vec);
//printType<decltype(bruh)>();
bruh.to(3)([](char yeet){
std::cout << yeet;
})
.to(-1)([](char yeet){
std::cout << char(std::toupper(yeet));
}).finish()([](char yeet){
std::cout << yeet << yeet << yeet << yeet << yeet;
});
std::cout << std::endl << std::endl;
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
Slicer<int*> arrSlicer(arr, arr + (sizeof(arr)/sizeof(int)));
std::cout << "[";
arrSlicer.to(-1)([](int yeet){
std::cout << yeet << ", ";
}).finish()([](int yeet){
std::cout << yeet << "]" << std::endl;
});
return 0;
}

UNT CSCE 1040 Goat Program

0 likes • Nov 18, 2022 • 1 view
C++
#include "goat.h" //include goat.h
void Goat::setBreed(string breed) {
this->breed = breed;
}
void Goat::setWeight(float weight) {
this->weight = weight;
}
void Goat::setName(string name) {
this->name = name;
}
void Goat::setGender(char gender) {
this->gender = gender;
}
void Goat::setSpayed(bool goatIsSpayed) {
this->goatIsSpayed = goatIsSpayed;
}
void Goat::setRegistrationID(string registrationID) {
this->registrationID = registrationID;
}
void Goat::setColor(string color) {
this->color = color;
}
void Goat::setOtherComments(string otherComments) {
this->otherComments = otherComments;
}
string Goat::getBreed() {
return breed;
}
float Goat::getWeight() {
return weight;
}
string Goat::getName() {
return name;
}
char Goat::getGender() {
return gender;
}
bool Goat::getSpayed() {
return goatIsSpayed;
}
string Goat::getRegistrationID() {
return registrationID;
}
string Goat::getColor() {
return color;
}
string Goat::getOtherComments() {
return otherComments;
}
Goat::Goat() {
breed = "";
weight = 0.0;
name = "";
gender = '\0';
goatIsSpayed = false;
registrationID = "";
color = "";
otherComments = "";
}
Goat::Goat(string goatBreed, float goatWeight, string goatName, char goatGender, bool goatSpayedStatus, string goatRegistrationID, string goatColor, string goatOtherComments) {
breed = goatBreed;
weight = goatWeight;
name = goatName;
gender = goatGender;
goatIsSpayed = goatSpayedStatus;
registrationID = goatRegistrationID;
color = goatColor;
otherComments = goatOtherComments;
}
Goat::~Goat() {
cout << "goat destroyed" << endl;
}
void Goat::printinfo() {
cout << "Breed: " << breed << endl << "weight: " << weight << endl << "Name: " << name << endl << "Gender: " << gender << endl << "is Spayed: ";
if(goatIsSpayed) { //here I do a logical test on boolean goatIsSpayed. if true cout << true else cout << false
cout << "True";
} else {
cout << "False";
}
cout << endl << "Registration ID: " << registrationID << endl << "Color Description: " << color << endl << "Other Comments: " << otherComments << endl << endl;
}

Egg Problem Template

0 likes • Jul 10, 2023 • 3 views
C++
#include <iostream>
#include <vector>
#include <limits>
#define DEBUG_TRIAL false
class Trial{
public:
const size_t HEIGHT;
std::string record;
//Breaking height is the index of the floor, so 0 is the bottom floor, height-1 is the top floor.
//Eggs is the eggs remaining.
//Start is the bottom floor.
//End is one above the top floor.
const size_t BREAKING_HEIGHT;
size_t eggs;
size_t start;
size_t end;
size_t floorsLeft(){
return (end-start);
}
size_t middle(){
return start + (floorsLeft()/2UL);
}
size_t drops = 0;
Trial(const size_t BREAKING_HEIGHT, size_t eggs, size_t start, size_t end): BREAKING_HEIGHT(BREAKING_HEIGHT), eggs(eggs), start(start), end(end), HEIGHT(end), record(end, '_'){
record[BREAKING_HEIGHT] = 'B'; //Marking the breaking point
}
bool foundAnswer(){
return ((record[0] == 'X') || (record.find("OX")!=std::string::npos));
}
//returns true if the egg broke.
//height is the index of the floor, so 0 is the bottom floor, height-1 is the top floor.
bool drop(size_t height){
#if DEBUG_TRIAL
std::cout << "Start: " << start << ". End: " << end << ". Floors Left: " << floorsLeft() << ". Middle Index: " << middle() << std::endl;
#endif
drops++;
bool cracked = height >= BREAKING_HEIGHT;
if(cracked) --eggs;
//Update the record
record[height] = (height >= BREAKING_HEIGHT)? 'X' : 'O';
#if DEBUG_TRIAL
//Print the record
std::cout << record << std::endl;
#endif
return cracked;
}
size_t nowWhat(){
if(foundAnswer()){
return drops;
}else if(eggs <= 0){ //Ran out of eggs
throw "Algorithm failed! No more eggs!";
return 1UL;
}else if(eggs > 1){
return wrecklessSearch();
}else{
return safeSearch();
}
}
size_t safeSearch(){
if(drop(start)){
--end;
}else{
++start;
}
return nowWhat();
}
size_t wrecklessSearch(){
//If the egg breaks
if(drop(middle())){
end -= (floorsLeft()/2UL);
}else{ //egg doesn't crack
start += (floorsLeft()/2UL);
}
return nowWhat();
}
//returns the amount of drops needed to find the answer
size_t search(){
return nowWhat();
}
};
//Height is the height of the building in floors.
//Breaking height is the index of the floor, so 0 is the bottom floor, height-1 is the top floor.
//Eggs is the eggs given.
//returns the amount of drops needed to find the answer
size_t search(const size_t height, const size_t BREAKING_HEIGHT, size_t eggs){
Trial trial(BREAKING_HEIGHT, eggs, 0, height);
return trial.search();
}
class TrialStats {
public:
size_t min = std::numeric_limits<size_t>::max();
size_t max = 0;
double mean = -1.0;
void printStats(){
// Print the results
std::cout << "Minimum drops: " << min << std::endl;
std::cout << "Maximum drops: " << max << std::endl;
std::cout << "Mean drops: " << mean << std::endl;
}
};
//Benchmarks all the possible breaking points of a single building height with a number of eggs.
TrialStats trial(const size_t HEIGHT, const size_t eggs){
TrialStats stats;
int totaldrops = 0;
//Test every possible breaking point
//Breaking height is the index of the floor, so 0 is the bottom floor, height-1 is the top floor.
for (int breakingHeight = 0; breakingHeight < HEIGHT; ++breakingHeight) {
size_t drops = search(HEIGHT, breakingHeight, eggs);
stats.min = std::min(stats.min, drops);
stats.max = std::max(stats.max, drops);
totaldrops += drops;
}
// Calculate the mean number of drops
stats.mean = static_cast<double>(totaldrops) / HEIGHT;
return stats;
}
//Benchmarks a single building height from 1 egg to MAX_EGGS
void testTower(const size_t height, const size_t MAX_EGGS){
//Drop every amount of eggs that you'd need.
for (int eggs = 1; eggs <= MAX_EGGS; ++eggs) {
std::cout << "Building height: " << height << ". Num eggs: " << eggs << std::endl;
TrialStats stats = trial(height, eggs);
stats.printStats();
std::cout << std::endl << std::endl;
}
}
//Benchmarks all buildings from 0 to MAX_HEIGHT
void benchmark(const size_t MAX_HEIGHT){
const size_t MAX_EGGS = 2;
//Test every building
for (size_t height = 1; height <= MAX_HEIGHT; ++height) {
testTower(height, std::min(height, MAX_EGGS));
}
}
int main() {
constexpr size_t MAX_HEIGHT = 36;
benchmark(MAX_HEIGHT);
return 0;
}

Parking Lot Simulation

0 likes • Nov 18, 2022 • 1 view
C++
#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;
}