6 Commits

Author SHA1 Message Date
2ab5be430f added pspots and ptimes 2019-07-20 23:24:37 -03:00
ca8b361ce5 Population and minor changes 2019-07-19 22:03:59 -03:00
cd2f723a04 implementation of admin added, animation commented out for faster testing and while loop added with exit in main() 2019-07-17 22:30:47 -03:00
0c06192f81 while loop in admin and exit 2019-07-17 10:26:22 -03:00
3eb00a0da9 Merge branch 'animation'
Adding animation, 2n try
2019-07-12 11:43:00 -03:00
574092db34 Animation added 2019-07-08 20:46:19 -03:00
14 changed files with 249 additions and 103 deletions

View File

@ -1,3 +1,5 @@
cmake_minimum_required(VERSION 3.10)
project(park)
@ -49,3 +51,4 @@ elseif (MSYS OR MINGW)
libsodium
)
endif()

View File

@ -2,12 +2,13 @@
// constructors
Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_)
Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role_)
: id{auto_increment_db() + 1},
name{name_},
password{hash_password(password_)},
vehicle{vehicle_},
telephone{telephone_} {
telephone{telephone_},
role{role_} {
save_db();
}
@ -54,8 +55,9 @@ int Customer::parked_at() { return park_instances[park_instances.size() - 1].spo
// functions that interact with the database
void Customer::save_db() {
string statement{"insert into Customer values (, '', '', ,'');"};
string statement{"insert into Customer values (, '', '', ,'', );"};
// after ( = 28)
statement.insert(43, to_string(role));
statement.insert(41, telephone);
statement.insert(38, to_string(int(vehicle)));
statement.insert(36, password);
@ -70,8 +72,9 @@ void Customer::save_db() {
void Customer::update_db() {
string statement =
"UPDATE Customer SET name = '', password = '', "
"vehicle = '', telephone = '' where id = '';";
statement.insert(87, to_string(id));
"vehicle = '', telephone = '', role = '' where id = '';";
statement.insert(89, to_string(id));
statement.insert(84, to_string(role));
statement.insert(73, telephone);
statement.insert(57, to_string(int(vehicle)));
statement.insert(43, password);

View File

@ -1,66 +1,90 @@
#include "headers/Interface.h"
#include <stdlib.h>
#include <synchapi.h>
// I added it to pass spots, because the parking options need it to check where
// is free parking_spots is declared in main, and if i declare it
// liberal use of
// cin.ignore(10000, '\n');
// so it skips to the next newline, in essence clearing the cin buffer
void update_information(Customer& c);//temp declaration of independence
void interface(vector<Park_spot>& spots) {
int selector;
cout << "\nHello and welcome to the parking spot! Please select a suitable "
"option:";
cout << "\n[1]Log in as member";
cout << "\n[2]Log in as administrator";
cin >> selector;
cin.ignore(10000, '\n');
switch (selector) {
case 1: {
interface_member(spots);
break;
}
case 2: {
interface_admin(spots);
break;
}
}
}
void interface_member(vector<Park_spot>& spots) {
/*
string introduction = "P A R K M A N N E"; //logo animation, disable during testing
text_animation(introduction, 50);
*/
__label__ begin;
begin:
cout << "\nWelcome to the parking system. Please login..";
int id;
string password;
cout << "\nPlease input id:";
cout << "\nEnter your id: ";
cin >> id;
cin.ignore(10000, '\n');
Customer c = query_customer_with_id(id);
cout << "\nPlease input password:";
cout << "\nEnter your password: ";
std::getline(cin, password);
while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password:\n";
cout << "ERROR: wrong password. Please retype your password or type [exit] to exit:\n";
std::getline(cin, password);
if (password=="exit") {goto begin;}
}
if(query_role_customer(id)==1){
interface_admin(spots);
} else if(query_role_customer(id)==0){
interface_member(spots, c);
} else {
cout << "ERROR ROLE_INVALID..";
}
}
cout << "Logged in succesfully\n";
cout << "select an option\n [1] Parking options\n[2]monthy report\n";
void interface_member(vector<Park_spot>& spots,Customer& c) {
__label__ exit,begin ;
begin:
cout << "Logged in succesfully as "<<c.name<<"\n";
cout << "Please select an option\n[1] Parking options\n[2]Monthly report\n[3]Edit information\n[4]Exit\n";
int option;
cin >> option;
cin.ignore(10000, '\n');
switch (option) {
case 1: {
case 1:
park(c, spots);
break;
}
case 2: {
case 2:
cout << "Has not been implemented yet\n";
break;
}
case 3:
update_information(c);
break;
case 4:
goto exit;
break;
default:
break;
}
}
cout<<"\n[1]Return or [2]Log out?\n";
//cin.ignore(10000, '\n');
cin>>option;
if(option==1)goto begin;
exit:
cout<<"Logging out...";
Sleep(3000);//testing wait synchapi header
system ("CLS");//testing clear screen , stdlib header
}
void interface_admin(vector<Park_spot>& spots) {
__label__ begin,exit;
begin:
Sleep(1000);
system("CLS");
cout << "Welcome to the admin interface. It is not completely ready yet.\n";
cout << "[1] See monthly report of ALL parking spots\n";
cout << "[2] See weekly report of ALL parking spots\n";
@ -68,8 +92,10 @@ void interface_admin(vector<Park_spot>& spots) {
cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] See current status of parking spots\n";
cout << "[6] Make new customer\n";
cout << "[7] Make new parking spot\n";
cout << "option[1-7]:";
cout << "[7] Make new admin\n";
cout << "[8] Make new parking spot\n";
cout << "[9] Exit\n";
cout << "option[1-9]:";
int option;
cin >> option;
cin.ignore(10000, '\n');
@ -83,7 +109,7 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 3: {
cout << "Which parking spot would you like a report on?ID:";
cout << "Which parking spot would you like a report on?\nID:";
int spotid;
cin >> spotid;
cin.ignore(10000, '\n');
@ -91,7 +117,7 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 4: {
cout << "Which parking spot would you like a report on?ID:";
cout << "Which parking spot would you like a report on?\nID:";
int spotid;
cin >> spotid;
cin.ignore(10000, '\n');
@ -107,13 +133,28 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 7: {
new_admin();
}
case 8: {
new_parkspot(spots);
break;
}
case 9: {
goto exit;
break;
}
default:
break;
}
cout<<"\n[1]Return or [2]Log out?\n";
cin.ignore(10000, '\n');
cin>>option;
if(option==1)goto begin;
exit:
cout<<"Logging out...";
Sleep(3000);
system("CLS");
}
// --------- individual things.
@ -122,9 +163,9 @@ void park(Customer& c, vector<Park_spot>& spots) {
cout << "You have selected parking option";
if (!(c.parked())) {
cout << "The following spots[which can fit your vehicle] are "
"available: ";
"available: \n";
for (Park_spot i : spots) {
if (i.v_type == c.vehicle) {
if ((i.v_type == c.vehicle)&(i.taken==false)) {
cout << i.id << ", ";
}
}
@ -142,7 +183,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
} else {
cout << "You are parked at spot " << c.parked_at()
<< ", do you want to clock out?\n enter [1] for yes and [0] for no";
<< ", do you want to clock out?\n Enter [1] for yes and [0] for no:";
int answer = 0;
cin >> answer;
cin.ignore(10000, '\n');
@ -151,6 +192,8 @@ void park(Customer& c, vector<Park_spot>& spots) {
cout << "You have sucessfully clocked out.";
} else {
cout << "OK, have a nice day";
Sleep(3000);
system("CLS");
}
}
}
@ -160,22 +203,40 @@ void new_customer() {
string name;
string password;
string telephone;
int role = 0;
cout << "What's the name of the customer? ";
std::getline(cin, name);
cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: ";
cout << "What's the vehicle type? [1]Twowheeler, [2] Fourwheeler: ";
cin >> vtype;
cin.ignore(10000, '\n');
cout << "What's the telephone number? ";
std::getline(cin, telephone);
cout << "What's the password?";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone};
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "New customer sucessfully created\n";
newcustomer.update_db();
}
void new_admin() {
int vtype = 2; //revision required!
string name;
string password;
string telephone;
int role = 1;
cout << "What's the name of the admin? ";
std::getline(cin, name);
cout << "What's the telephone number? ";
std::getline(cin, telephone);
cout << "What's the password?";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "New customer sucessfully created\n";
newcustomer.update_db();
}
void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: ";
cout << "What type of parking spot? [1] Twowheeler, [2] Fourwheeler: ";
int vtype;
cin >> vtype;
cin.ignore(10000, '\n');
@ -183,3 +244,32 @@ void new_parkspot(vector<Park_spot>& spots) {
spots.push_back(newspot);
cout << "new parking spot sucessfully created.\n";
}
void update_information(Customer& c)//Do not know how to use customer::update_db()
{
string string0; int int0;
std::cout<<"\n fixme pls Input to update name or press 0 to keep name:\n";
std::getline(cin,string0);
//cin.ignore(10000, '\n');
if (string0=="0");
else c.name=string0;
//vehicle type give problem//std::cout<<"\n Input to update vehicle to [1]Two-Wheeler, [2]Four-Wheeler or press [0] to keep vehicle type:\n";
//std::cin>>int0;
//if (int0==0);
//else c.Vehicle_type(int0);
std::cout<<"\n Input to update password or press [0] to keep current password:\n";
std::getline(cin,string0);
if (string0=="0");
else c.password=string0;
//cin.ignore(10000, '\n');
std::cout<<"\n Input to update phone number or press [0] to keep current number:\n";
std::getline(cin,string0);
//cin.ignore(10000, '\n');
if (string0=="0");
else c.telephone=string0;
c.update_db();
}

View File

@ -122,3 +122,13 @@ cpp/header
*/
std::this_thread::sleep_for(seconds{sec});
}
// text animtion duh
void text_animation(const string& text, unsigned int pause_time)
{
for(const char m:text) // range loop; for each character in string
{
cout << m << flush;
sleep_for(milliseconds(pause_time));
}
}

View File

@ -72,6 +72,15 @@ Customer query_customer_with_id(int id) {
}
}
int query_role_customer(int id){
SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;");
query.bind(1, id);
while(query.executeStep()){
int role = query.getColumn(5);
return role;
}
}
//------------------------------- parkspot info
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) {

View File

@ -40,7 +40,8 @@ class Customer {
string password;
Vehicle_type vehicle;
string telephone;
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_);
int role;
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role);
Customer(int id_, string name_, string password_, Vehicle_type vehicle_,
vector<Park_time> instances, string telephone_);
void clock_in(int s_id);

View File

@ -6,8 +6,9 @@
using std::cin;
void interface(vector<Park_spot>& spots);
void interface_member(vector<Park_spot>& spots);
void interface_member(vector<Park_spot>& spots, Customer& c);
void interface_admin(vector<Park_spot>& spots);
void park(Customer& c, vector<Park_spot>& spots);
void new_customer();
void new_admin();
void new_parkspot(vector<Park_spot>& spots);

View File

@ -12,8 +12,11 @@
using namespace std::chrono;
using std::cout;
using std::flush;
using std::string;
using std::to_string;
using std::this_thread::sleep_for;
using std::chrono::milliseconds;
/*
@ -64,7 +67,10 @@ class Park_time {
int start_to_int(); // helper
};
// test funciton
// test function
void Wait(int sec);
// function that slowly outputs each character one by one
void text_animation(const string& text, unsigned int pause_time);
#endif // Park_time

View File

@ -59,6 +59,7 @@ Customer query_customer_with_id(int id);
vector<Park_spot> populate_spots();
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots);
int query_role_customer(int id);
void reports_from_parkspot(int spotid, bool weekly = false);
void reports_from_allparkspots(bool weekly = false);

View File

@ -47,8 +47,17 @@ int main() {
// state of db:
// er zijn 10 parkspots, 5 met biketype en 5 met pickup type
// er is een customer met id 1(testcustomer) met password "password"
while(true) {
cin.clear();
interface(parking_spots);
/* cout<<"\nexit? Input 'y' or 'n'..";
char n;
cin >> n;
cin.clear();
if(n=='y'){
break;
}*/
}
}
/*

5
newParkManne.cpp Normal file
View File

@ -0,0 +1,5 @@
#include <iostream>
void say_hello(){
std::cout << "Hello, from newParkManne!\n";
}

BIN
park Executable file

Binary file not shown.

View File

@ -12,6 +12,14 @@ Or click the build icon in vscode *shrugs*
# Parkmanne
## A stroll in the park
######TO-DO List:
- [x] Admin login
- [ ] Billing report menu
- [ ] Report from a specific month i.e. january
- [ ] Edit option in menu
- [ ] Option to confirm edit after input
- [ ] Divide menu in sub menus
- [ ] Analytics of customer (e.g. # customers with 2-wheeler or list of customer and telephone numbers etc.)
This is a graph of how everything is connected.
If you need to add functionality that doesn't fall in any of these, and you're unsure of what to include, you can decide something like this:

BIN
test.db3

Binary file not shown.