Compare commits

...

3 Commits

Author SHA1 Message Date
f7a2a62411 add todo, fixed small things 2019-07-10 16:38:37 -03:00
MassiveAtoms
77c34e20b2 fixed interfce.cpp/park(customer, vector<pspots>) 2019-07-10 05:48:42 -03:00
MassiveAtoms
3c7d7121e2 added admin 2019-07-09 09:17:33 -03:00
12 changed files with 132 additions and 21 deletions

36
Admin.cpp Normal file
View File

@ -0,0 +1,36 @@
#include "headers/Admin.h"
using std::to_string;
Admin::Admin(string name_, string password_)
: id{auto_increment_db() + 1}, name{name_}, password{hash_password(password_)} {
save_db();
}
Admin::Admin(int id_, string name_, string password_) : id{id_}, name{name_}, password{password_} {}
void Admin::save_db() {
string statement{"insert into Admin values (, '', '');"};
statement.insert(33, password);
statement.insert(29, name);
statement.insert(26, to_string(id));
SQLite::Transaction transaction(data::db);
data::db.exec(statement);
transaction.commit();
}
void Admin::update_db() {
string statement = "UPDATE Admin SET name = '', password = '' where id = '';";
statement.insert(54, to_string(id));
statement.insert(40, password);
statement.insert(25, name);
data::db.exec(statement);
}
int Admin::auto_increment_db() {
SQLite::Statement max_id(data::db, "select max(id) from Admin;");
int id = 0;
max_id.executeStep();
id = max_id.getColumn(0);
max_id.reset();
return id;
}

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.11) cmake_minimum_required(VERSION 3.10)
project(park) project(park)
set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD 11)
@ -23,6 +23,8 @@ add_executable(park
headers/Park_spot.h headers/Park_spot.h
Park_time.cpp Park_time.cpp
headers/Park_time.h headers/Park_time.h
Admin.cpp
headers/Admin.h
Query.cpp Query.cpp
headers/Query.h headers/Query.h
Interface.cpp Interface.cpp

View File

@ -1,5 +1,6 @@
#include "headers/Interface.h" #include "headers/Interface.h"
// I added it to pass spots, because the parking options need it to check where // 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 // is free parking_spots is declared in main, and if i declare it
// liberal use of // liberal use of
@ -61,6 +62,21 @@ void interface_member(vector<Park_spot>& spots) {
} }
void interface_admin(vector<Park_spot>& spots) { void interface_admin(vector<Park_spot>& spots) {
int id;
string password;
cout << "\nPlease input id:";
cin >> id;
cin.ignore(10000, '\n');
cin.clear();
Admin admin = query_admin_with_id(id);
cout << "\nPlease input password:";
std::getline(cin, password);
while (!(verify_password(admin.password, password))) {
cout << "ERROR: wrong password. Please retype your password:\n";
std::getline(cin, password);
}
cout << "Logged in succesfully\n";
cout << "Welcome to the admin interface. It is not completely ready yet.\n"; cout << "Welcome to the admin interface. It is not completely ready yet.\n";
cout << "[1] See monthly report of ALL parking spots\n"; cout << "[1] See monthly report of ALL parking spots\n";
cout << "[2] See weekly report of ALL parking spots\n"; cout << "[2] See weekly report of ALL parking spots\n";
@ -69,7 +85,8 @@ void interface_admin(vector<Park_spot>& spots) {
cout << "[5] See current status of parking spots\n"; cout << "[5] See current status of parking spots\n";
cout << "[6] Make new customer\n"; cout << "[6] Make new customer\n";
cout << "[7] Make new parking spot\n"; cout << "[7] Make new parking spot\n";
cout << "option[1-7]:"; cout << "[8] Make new Admin\n";
cout << "option[1-8]:";
int option; int option;
cin >> option; cin >> option;
cin.ignore(10000, '\n'); cin.ignore(10000, '\n');
@ -110,6 +127,10 @@ void interface_admin(vector<Park_spot>& spots) {
new_parkspot(spots); new_parkspot(spots);
break; break;
} }
case 8: {
new_admin();
break;
}
default: default:
break; break;
@ -124,7 +145,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
cout << "The following spots[which can fit your vehicle] are " cout << "The following spots[which can fit your vehicle] are "
"available: "; "available: ";
for (Park_spot i : spots) { for (Park_spot i : spots) {
if (i.v_type == c.vehicle) { if (i.v_type == c.vehicle && !(i.taken)) {
cout << i.id << ", "; cout << i.id << ", ";
} }
} }
@ -174,6 +195,18 @@ void new_customer() {
newcustomer.update_db(); newcustomer.update_db();
} }
void new_admin() {
string name;
string password;
cout << "What's the name of the admin? ";
std::getline(cin, name);
cout << "What's the password?";
std::getline(cin, password);
Admin newadmin{name, password};
cout << "New admin sucessfully created\n";
newadmin.update_db();
}
void new_parkspot(vector<Park_spot>& spots) { void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: "; cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: ";
int vtype; int vtype;

View File

@ -65,13 +65,26 @@ Customer query_customer_with_id(int id) {
string telephone = query.getColumn(4); string telephone = query.getColumn(4);
vector<Park_time> park_instances = query_parktimes_for_customer(id); vector<Park_time> park_instances = query_parktimes_for_customer(id);
Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone}; Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone};
// DEBUG
// cout << "{" << result.id << "," <<result.password <<"," <<
// int(vehicle) << "}\n";
return result; return result;
} }
} }
//----------------- ADMIN
Admin query_admin_with_id(int id) {
SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;");
query.bind(1, id);
while (query.executeStep()) {
string name = query.getColumn(1);
string password = query.getColumn(2);
Admin result{id, name, password};
return result;
}
}
//------------------------------- parkspot info //------------------------------- parkspot info
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) { Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) {

View File

@ -18,13 +18,14 @@ SQLite::Database start_db() {
} }
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, vehicle int, telephone text)"); "text, password text, vehicle int, telephone text);");
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 "
"int, customer_id int, vehicle_type int)"); "int, customer_id int, vehicle_type int);");
db.exec( db.exec(
"create table if not exists Park_time (id integer primary key, " "create table if not exists Park_time (id integer primary key, "
"customer_id int, spot_id int, start int, end int, duration int)"); "customer_id int, spot_id int, start int, end int, duration int);");
db.exec("create table if not exists Admin (id int primary key, name text, password text);");
return db; return db;
} }

21
headers/Admin.h Normal file
View File

@ -0,0 +1,21 @@
#ifndef ADMIN_H
#define ADMIN_H
#pragma once
#include "data.h"
class Admin {
public:
int id;
string name;
string password;
Admin(string name_, string password_);
Admin(int id_, string name_, string password);
// private:
void update_db();
void save_db();
int auto_increment_db();
};
#endif // CUSTOMER_H

View File

@ -3,7 +3,6 @@
#pragma once #pragma once
#include "Park_time.h" #include "Park_time.h"
#include "data.h"
#include <vector> #include <vector>

View File

@ -10,4 +10,5 @@ void interface_member(vector<Park_spot>& spots);
void interface_admin(vector<Park_spot>& spots); void interface_admin(vector<Park_spot>& spots);
void park(Customer& c, vector<Park_spot>& spots); void park(Customer& c, vector<Park_spot>& spots);
void new_customer(); void new_customer();
void new_parkspot(vector<Park_spot>& spots); void new_parkspot(vector<Park_spot>& spots);
void new_admin();

View File

@ -3,6 +3,7 @@
#pragma once #pragma once
#include "Park_spot.h" #include "Park_spot.h"
#include "Admin.h"
/*these are the functions that search the database and create objects from it. /*these are the functions that search the database and create objects from it.
@ -25,7 +26,7 @@ customers who have the same name.
2. I have no clue how many of you have done error handling in c++ 2. I have no clue how many of you have done error handling in c++
(try/catch/finally). (try/catch/finally).
Ya boi is nice and doesn't want to bombard you with more new concepts than needed. I dont want to bombard you with more new concepts than needed.
so now you'd do so now you'd do
vector<Customer> test = query_customer_with_name("Testman"); vector<Customer> test = query_customer_with_name("Testman");
@ -46,9 +47,6 @@ finally{
do more stuff do more stuff
} }
3. Ya boi needs to brush up on how to create custom exceptions class, and it will complicate code
furhter.
*/ */
vector<Park_time> query_parktimes_for_customer(int cid); vector<Park_time> query_parktimes_for_customer(int cid);
@ -56,12 +54,11 @@ vector<Park_time> query_parktimes_for_customer(int cid);
vector<Customer> query_customer_with_name(string name); vector<Customer> query_customer_with_name(string name);
Customer query_customer_with_id(int id); Customer query_customer_with_id(int id);
Admin query_admin_with_id(int id);
vector<Park_spot> populate_spots(); vector<Park_spot> populate_spots();
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots); Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots);
void reports_from_parkspot(int spotid, bool weekly = false); void reports_from_parkspot(int spotid, bool weekly = false);
void reports_from_allparkspots(bool weekly = false); void reports_from_allparkspots(bool weekly = false);
void current_status_parkspots(vector<Park_spot>& spots); void current_status_parkspots(vector<Park_spot>& spots);
#endif // CUSTOMER_H #endif // CUSTOMER_H

View File

@ -1,4 +1,5 @@
#include "headers/Interface.h" #include "headers/Interface.h"
#include "headers/Admin.h"
/* /*
Code structure is like this: Code structure is like this:
@ -45,9 +46,9 @@ static vector<Customer> park_customers;
int main() { int main() {
// state of db: // state of db:
// er zijn 10 parkspots, 5 met biketype en 5 met pickup type // er zijn 5 parkspots, 2 met 2weeler en 4 met 4weeler
// er is een customer met id 1(testcustomer) met password "password" // er zijn customers met password "password"
// er is een admin id=1 met password PASSWORD
interface(parking_spots); interface(parking_spots);
} }

View File

@ -12,6 +12,13 @@ Or click the build icon in vscode *shrugs*
# Parkmanne # Parkmanne
## A stroll in the park ## A stroll in the park
#TODO
1. fix password of admin(probably buffer of input cusing the problem)
2. add adress to customer
3. billing
4. delete/edit admin
This is a graph of how everything is connected. 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: 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.