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)
set(CMAKE_CXX_STANDARD 11)
@ -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;
@ -124,7 +145,7 @@ void park(Customer& c, vector<Park_spot>& spots) {
cout << "The following spots[which can fit your vehicle] are "
"available: ";
for (Park_spot i : spots) {
if (i.v_type == c.vehicle) {
if (i.v_type == c.vehicle && !(i.taken)) {
cout << i.id << ", ";
}
}
@ -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

@ -11,3 +11,4 @@ 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_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);
}

View File

@ -12,6 +12,13 @@ Or click the build icon in vscode *shrugs*
# Parkmanne
## 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.
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.