added admin

This commit is contained in:
MassiveAtoms 2019-07-09 09:17:33 -03:00
parent 5e2b91fda6
commit 3c7d7121e2
11 changed files with 123 additions and 19 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

@ -23,6 +23,8 @@ add_executable(park
headers/Park_spot.h
Park_time.cpp
headers/Park_time.h
Admin.cpp
headers/Admin.h
Query.cpp
headers/Query.h
Interface.cpp

View File

@ -1,5 +1,6 @@
#include "headers/Interface.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
@ -61,6 +62,21 @@ void interface_member(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 << "[1] See monthly 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 << "[6] Make new customer\n";
cout << "[7] Make new parking spot\n";
cout << "option[1-7]:";
cout << "[8] Make new Admin\n";
cout << "option[1-8]:";
int option;
cin >> option;
cin.ignore(10000, '\n');
@ -110,6 +127,10 @@ void interface_admin(vector<Park_spot>& spots) {
new_parkspot(spots);
break;
}
case 8: {
new_admin();
break;
}
default:
break;
@ -174,6 +195,18 @@ void new_customer() {
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) {
cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: ";
int vtype;

View File

@ -65,13 +65,26 @@ Customer query_customer_with_id(int id) {
string telephone = query.getColumn(4);
vector<Park_time> park_instances = query_parktimes_for_customer(id);
Customer result{id, name, password, Vehicle_type(vehicle), park_instances, telephone};
// DEBUG
// cout << "{" << result.id << "," <<result.password <<"," <<
// int(vehicle) << "}\n";
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
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) {

View File

@ -18,13 +18,14 @@ SQLite::Database start_db() {
}
db.exec(
"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(
"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(
"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;
}

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
#include "Park_time.h"
#include "data.h"
#include <vector>

View File

@ -10,4 +10,5 @@ void interface_member(vector<Park_spot>& spots);
void interface_admin(vector<Park_spot>& spots);
void park(Customer& c, vector<Park_spot>& spots);
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
#include "Park_spot.h"
#include "Admin.h"
/*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++
(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
vector<Customer> test = query_customer_with_name("Testman");
@ -46,9 +47,6 @@ finally{
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);
@ -56,12 +54,11 @@ vector<Park_time> query_parktimes_for_customer(int cid);
vector<Customer> query_customer_with_name(string name);
Customer query_customer_with_id(int id);
Admin query_admin_with_id(int id);
vector<Park_spot> populate_spots();
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots);
void reports_from_parkspot(int spotid, bool weekly = false);
void reports_from_allparkspots(bool weekly = false);
void current_status_parkspots(vector<Park_spot>& spots);
#endif // CUSTOMER_H

View File

@ -1,4 +1,5 @@
#include "headers/Interface.h"
#include "headers/Admin.h"
/*
Code structure is like this:
@ -45,9 +46,9 @@ static vector<Customer> park_customers;
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"
// er zijn 5 parkspots, 2 met 2weeler en 4 met 4weeler
// er zijn customers met password "password"
// er is een admin id=1 met password PASSWORD
interface(parking_spots);
}

BIN
test.db3

Binary file not shown.