Important change to Parkspot #5

Merged
MassiveAtoms merged 3 commits from interface into master 2019-07-06 16:33:18 +00:00
11 changed files with 77 additions and 27 deletions
Showing only changes of commit 70fcbc274b - Show all commits

View File

@ -25,6 +25,8 @@ add_executable(park
headers/Park_time.h headers/Park_time.h
Query.cpp Query.cpp
headers/Query.h headers/Query.h
Interface.cpp
headers/Interface.h
) )

View File

@ -1,18 +1,18 @@
#include "headers/Customer.h" #include "headers/Customer.h"
// constructors // constructors
Customer::Customer(string name_, string password_, Verhicle_type verhicle_) Customer::Customer(string name_, string password_, Vehicle_type vehicle_)
: name{name_}, verhicle{verhicle_}, password{hash_password(password_)} { : name{name_}, vehicle{vehicle_}, password{hash_password(password_)} {
id = auto_increment_db() + 1; id = auto_increment_db() + 1;
save_db(); save_db();
} }
Customer::Customer(int id_, string name_, string password_, Customer::Customer(int id_, string name_, string password_,
Verhicle_type verhicle_, vector<Park_time> instances) Vehicle_type vehicle_, vector<Park_time> instances)
:id{id_}, :id{id_},
name{name_}, name{name_},
password{password_}, password{password_},
verhicle{verhicle_}, vehicle{vehicle_},
park_instances{instances} {} park_instances{instances} {}
@ -49,7 +49,7 @@ void Customer::gen_monthly() {
void Customer::save_db() { void Customer::save_db() {
string statement{"insert into Customer values (, '', '', );"}; string statement{"insert into Customer values (, '', '', );"};
// after ( = 28) // after ( = 28)
statement.insert(38, to_string(int(verhicle))); statement.insert(38, to_string(int(vehicle)));
statement.insert(36, password); statement.insert(36, password);
statement.insert(32, name); statement.insert(32, name);
statement.insert(29, to_string(id)); statement.insert(29, to_string(id));

40
Interface.cpp Normal file
View File

@ -0,0 +1,40 @@
#include "headers/Interface.h"
void interface_member() {
int id;
string password;
cout << "\nPlease input id:";
cin >> id;
Customer c = query_customer_with_id(id);
cout << "\nPlease input password:";
cin >> password;
while (!(verify_password(c.password, password))){
cout << "ERROR: wrong password. Please retype your password \n";
cin >> password;
}
cout << "Logged in succesfully\n";
// if (verify_password(c.password, password)) {
// cout << "\nLogged in successfully.";
// } else {
// cout
// << "Error, id and password combination not found, please try again.";
// }
}
void interface_admin() {}
void interface() {
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;
switch (selector) {
case 1:
interface_member();
case 2:
interface_admin();
}
}

View File

@ -38,16 +38,16 @@ vector<Customer> query_customer_with_name(string name) {
vector<Customer> result; vector<Customer> result;
SQLite::Statement query( SQLite::Statement query(
data::db, data::db,
"SELECT id, name, password, verhicle FROM Customer WHERE name = ?;"); "SELECT id, name, password, vehicle FROM Customer WHERE name = ?;");
query.bind(1, name); query.bind(1, name);
while (query.executeStep()) { while (query.executeStep()) {
int id = query.getColumn(0); int id = query.getColumn(0);
string name_ = query.getColumn(1); string name_ = query.getColumn(1);
string password = query.getColumn(2); string password = query.getColumn(2);
int verhicle = query.getColumn(3); // cast to verhicle int vehicle = query.getColumn(3); // cast to vehicle
vector<Park_time> park_instances = query_parktimes_for_customer(id); vector<Park_time> park_instances = query_parktimes_for_customer(id);
result.push_back(Customer{ result.push_back(Customer{
id, name_, password, Verhicle_type(verhicle), park_instances}); id, name_, password, Vehicle_type(vehicle), park_instances});
} }
return result; return result;
} }
@ -65,12 +65,12 @@ Customer query_customer_with_id(int id) {
while (query.executeStep()) { while (query.executeStep()) {
string name = query.getColumn(1); string name = query.getColumn(1);
string password = query.getColumn(2); string password = query.getColumn(2);
int verhicle = query.getColumn(3); // cast to verhicle int vehicle = query.getColumn(3); // cast to vehicle
vector<Park_time> park_instances = query_parktimes_for_customer(id); vector<Park_time> park_instances = query_parktimes_for_customer(id);
Customer result{ Customer result{
id, name, password, Verhicle_type(verhicle), park_instances}; id, name, password, Vehicle_type(vehicle), park_instances};
// DEBUG // DEBUG
// cout << "{" << result.id << "," <<result.password <<"," << int(verhicle) << "}\n"; // cout << "{" << result.id << "," <<result.password <<"," << int(vehicle) << "}\n";
return result; return result;
} }
} }

View File

@ -20,7 +20,7 @@ SQLite::Database start_db() {
//sql syntax is surprisingly readable. //sql syntax is surprisingly readable.
db.exec( db.exec(
"create table if not exists Customer (id integer primary key, name " "create table if not exists Customer (id integer primary key, name "
"text, password text, verhicle int)"); "text, password text, vehicle int)");
// getting errors when using bool, so i used an int instead. // getting errors when using bool, so i used an int instead.
db.exec( db.exec(
"create table if not exists Park_spot (id integer primary key, taken " "create table if not exists Park_spot (id integer primary key, taken "

View File

@ -11,12 +11,12 @@ using std::vector;
/* /*
enum classes make it easy to represent categories. enum classes make it easy to represent categories.
So you can use something like Verhicle_type::car instead of 2. but under the So you can use something like Vehicle_type::car instead of 2. but under the
hood, it's still an int. This is here so you won't have to have global variables hood, it's still an int. This is here so you won't have to have global variables
for these categories, or worse, use magic numbers in the code. for these categories, or worse, use magic numbers in the code.
*/ */
enum class Verhicle_type { bike = 1, small_car = 2, suv = 3, pickup = 4 }; enum class Vehicle_type { bike = 1, small_car = 2, suv = 3, pickup = 4 };
/* /*
Customer constructors do the same stuff as all the other constructors. Customer constructors do the same stuff as all the other constructors.
@ -38,8 +38,8 @@ class Customer {
int id; int id;
string name; string name;
string password; string password;
Customer(string name_, string password_, Verhicle_type verhicle_); Customer(string name_, string password_, Vehicle_type vehicle_);
Customer(int id_, string name_, string password_, Verhicle_type verhicle_, Customer(int id_, string name_, string password_, Vehicle_type vehicle_,
vector<Park_time> instances); vector<Park_time> instances);
void clock_in(int s_id); void clock_in(int s_id);
void clock_out(int s_id); void clock_out(int s_id);
@ -48,7 +48,7 @@ class Customer {
void delete_db(); void delete_db();
void gen_monthly(); void gen_monthly();
Verhicle_type verhicle; Vehicle_type vehicle;
private: private:
vector<Park_time> park_instances; vector<Park_time> park_instances;

9
headers/Interface.h Normal file
View File

@ -0,0 +1,9 @@
#include "Query.h"
using std::cin;
void interface();
void interface_member();
void interface_admin();

View File

@ -18,6 +18,7 @@ class Park_spot {
int id; int id;
bool taken; bool taken;
int parked_customer; int parked_customer;
Park_spot(); Park_spot();
Park_spot(int id_, bool taken_, int parked); Park_spot(int id_, bool taken_, int parked);
void clock(Customer& c_customer); void clock(Customer& c_customer);

View File

@ -1,4 +1,4 @@
#include "headers/Query.h" #include "headers/Interface.h"
#include <thread> #include <thread>
@ -70,17 +70,15 @@ For now, it's just here in case you want an easy way to store customers.
*/ */
int main() { int main() {
Customer sagar = query_customer_with_name("stefan udit")[0]; // er is een customer met id 1(testcustomer) met password "password"
Customer sagar1 = query_customer_with_id(2);
cout << sagar.id << "," << sagar.name << "," << sagar.password << "\n"; // Customer test {
cout << sagar1.id << "," << sagar1.name << "," << sagar1.password; // "testcustomer", "password", Vehicle_type::bike
cout << parking_spots.size(); // };
interface();
for (auto i : parking_spots) {
cout << "\n" << i.id << "," << i.parked_customer;
}
populate_spots();
} }
/* /*

Binary file not shown.

BIN
test.db3

Binary file not shown.