Compare commits

...

2 Commits

Author SHA1 Message Date
TinyAtoms
97ed3150ec can save to db 2019-06-29 22:48:49 -03:00
TinyAtoms
c058783a11 ALL objects can be saved to db now 2019-06-29 22:30:47 -03:00
8 changed files with 100 additions and 33 deletions

View File

@ -10,6 +10,7 @@ Customer::Customer(string name_, Verhicle_type verhicle_):
save_db(); save_db();
} }
Customer::Customer(int id_, string name_, string card_code_, Verhicle_type verhicle_, vector<Park_time> instances) Customer::Customer(int id_, string name_, string card_code_, Verhicle_type verhicle_, vector<Park_time> instances)
: name{name_}, : name{name_},
card_code{card_code_}, card_code{card_code_},
@ -20,19 +21,20 @@ Customer::Customer(int id_, string name_, string card_code_, Verhicle_type verhi
} }
// clock in/out methods ====================================================================================
// clock methods ====================================================================================
/* /*
creert een park_time object met start time= nu, en voegt t toe aan een vector. Create a p_time object with start=now and adds to vector
*/ */
void Customer::clock_in(int s_id) { void Customer::clock_in(int s_id) {
Park_time pt{id, s_id}; Park_time pt{id, s_id};
park_instances.push_back(pt); park_instances.push_back(pt);
} }
// edit de laatste park_time obj in de vector zodat de end_time = now. // edit last p_time object so end=now
void Customer::clock_out(int s_id) { park_instances[park_instances.size() - 1].clock_out(id, s_id); } void Customer::clock_out(int s_id) { park_instances[park_instances.size() - 1].clock_out(id, s_id); }
// report gen // report gen
void Customer::gen_monthly() { void Customer::gen_monthly() {
std::cout << "NAME: " << name << " card code: " << card_code << "\n"; std::cout << "NAME: " << name << " card code: " << card_code << "\n";
@ -44,6 +46,7 @@ void Customer::gen_monthly() {
std::cout << "-------------------------------------------------\n\n"; std::cout << "-------------------------------------------------\n\n";
} }
//================================================================================================ //================================================================================================
// functions that interact with the database // functions that interact with the database
@ -53,7 +56,7 @@ void Customer::save_db() {
statement.insert(38, std::to_string(int(verhicle))); statement.insert(38, std::to_string(int(verhicle)));
statement.insert(36, card_code); statement.insert(36, card_code);
statement.insert(32, name); statement.insert(32, name);
statement.insert(29, "null"); statement.insert(29, to_string(id));
SQLite::Transaction transaction(data::db); SQLite::Transaction transaction(data::db);
data::db.exec(statement); data::db.exec(statement);
transaction.commit(); transaction.commit();

View File

@ -1,21 +1,79 @@
#include "headers/Park_spot.h" #include "headers/Park_spot.h"
Park_spot::Park_spot(int id_){
// constructors
Park_spot::Park_spot(){
parked = nullptr; parked = nullptr;
id = id_; id = auto_increment_db() + 1;
taken = false; taken = false;
save_db();
} }
// clock in en out, calls de juist(in/out) van de customer aan de hand van internal state van taken // clock in en out, calls de juist(in/out) van de customer aan de hand van internal state van taken
void Park_spot::clock(Customer* c_customer){ void Park_spot::clock(Customer* c_customer){
if (!taken){ if (!taken){
parked = c_customer; parked = c_customer;
taken = true; taken = true;
parked->clock_in(id); parked->clock_in(id);
update_db();
} }
else{ else{
taken = false; taken = false;
parked->clock_out(id); parked->clock_out(id);
parked = nullptr; parked = nullptr;
update_db();
} }
}
// --------------------- db functs
void Park_spot::update_db() {
string statement = "UPDATE Park_spot SET taken = '', customer_id = '' where id = '';";
// 29, 48, 62
statement.insert(63, to_string(id));
if (taken){
statement.insert(49, to_string(parked->id));
statement.insert(30, "true");
}
else {
statement.insert(49, "NULL");
statement.insert(30, "false");
}
data::db.exec(statement);
}
void Park_spot::save_db() {
//(int id, bool taken, int customer_id)
string statement{"insert into Park_spot values ( , , );"};
// after ( = 28)
statement.insert(34, "NULL");
statement.insert(32, "false");
statement.insert(30, to_string(id));
SQLite::Transaction transaction(data::db);
data::db.exec(statement);
transaction.commit();
}
void Park_spot::delete_db() {
string statement = "delete from Park_spot where id= ;";
statement.insert(statement.length() - 2, std::to_string(id));
// std::cout << statement;
SQLite::Transaction transaction(data::db);
data::db.exec(statement);
transaction.commit();
}
int Park_spot::auto_increment_db() {
SQLite::Statement max_id(data::db, "select max(id) from Park_spot;");
int id = 0;
max_id.executeStep();
id = max_id.getColumn(0);
max_id.reset();
return id;
} }

View File

@ -77,7 +77,6 @@ void Park_time::update_db() {
statement.insert(53, std::to_string(id)); statement.insert(53, std::to_string(id));
statement.insert(40, to_string(duration)); statement.insert(40, to_string(duration));
statement.insert(27, to_string(start_to_int() + duration)); statement.insert(27, to_string(start_to_int() + duration));
std::cout << statement; // TODO: set some logging here
data::db.exec(statement); data::db.exec(statement);
} }

View File

@ -12,12 +12,12 @@
using std::string; using std::string;
using std::vector; using std::vector;
// enum type is basically een manier om categories te representen als een integer in the background, maar om t in code // will make it easy to represent it in the database while making it easy to use while programming
// aan te geven als de actual category.
enum class Verhicle_type { enum class Verhicle_type {
small = 1, bike = 1,
medium = 2, small_car = 2,
large = 3, suv = 3,
pickup = 4
}; };
/* /*
@ -43,15 +43,13 @@ class Customer {
void update_db(); void update_db();
void delete_db(); void delete_db();
// void gen_weekly(); TODO: this void gen_monthly(); // remove, make it a function in data
void gen_monthly();
private: private:
Verhicle_type verhicle; Verhicle_type verhicle;
vector<Park_time> park_instances; vector<Park_time> park_instances;
string gen_cardcode(); string gen_cardcode();
void save_db(); void save_db();
int auto_increment_db(); int auto_increment_db();
}; };

View File

@ -15,7 +15,11 @@ class Park_spot {
int id; int id;
bool taken; bool taken;
Customer* parked; //TODO: think about memory management Customer* parked; //TODO: think about memory management
Park_spot(int id_); Park_spot();
void clock(Customer* c_customer); void clock(Customer* c_customer);
private: private:
void save_db();
void update_db();
void delete_db();
int auto_increment_db();
}; };

View File

@ -12,26 +12,20 @@ using namespace std::chrono;
using std::string; using std::string;
using std::to_string; using std::to_string;
/* /*
db repr of Park_time
int id (not null, auto increment)
int customer_id (not null) (many to one or something like that)
int spot_id (not null, many to one or something like that)
int duration
datetime start (not null)
datetime end
Dit is gewoon een record van hoe lang, wie en waar iemand parkeert. Basically, een component van
de internal state van customer. Record of who parked at what park_spot and at what time.
*/ */
class Park_time { class Park_time {
public: public:
Park_time(int c_id, int s_id);
// Park_time(int c_id, int s_id );
int id; int id;
int customer_id; int customer_id;
int spot_id; int spot_id;
int duration; int duration;
Park_time(int c_id, int s_id);
// Park_time(int c_id, int s_id );
void clock_out(int c_id, int s_id); void clock_out(int c_id, int s_id);
friend std::ostream& operator<<(std::ostream& os, const Park_time & pt); friend std::ostream& operator<<(std::ostream& os, const Park_time & pt);

View File

@ -5,6 +5,8 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include <thread>
/* /*
Code strucure like this: Code strucure like this:
class declarations zijn in /headers/class_naam.h, en definitions van de member class declarations zijn in /headers/class_naam.h, en definitions van de member
@ -20,16 +22,25 @@ record die zegt dat een customer voor x tijd geparkeert heeft bij spot x, enz.
De client clockt in en uit bij een spot. De client clockt in en uit bij een spot.
*/ */
void Wait(int sec)
/*
a wait function where 1 sec represents 1 hour irl.
*/
{
std::this_thread::sleep_for(seconds{sec});
}
using std::cout; using std::cout;
int main() { int main() {
class Customer sagar{"nonsense", Verhicle_type::medium}; class Customer sagar{"Sagar Ramsaransing", Verhicle_type::bike};
sagar.update_db(); sagar.update_db();
Park_spot p1;
p1.clock(&sagar);
Wait(2);
p1.clock(&sagar);
Park_spot p1{1};
p1.clock(&sagar);
p1.clock(&sagar);
sagar.gen_monthly();
} }

BIN
test.db3

Binary file not shown.