Compare commits

..

1 Commits
master ... exit

Author SHA1 Message Date
5e33eaeede Label for admin exit, main interface looped 2019-07-16 18:26:49 -03:00
14 changed files with 111 additions and 172 deletions

View File

@ -1,5 +1,3 @@
cmake_minimum_required(VERSION 3.10)
project(park)
@ -29,7 +27,7 @@ add_executable(park
headers/Query.h
Interface.cpp
headers/Interface.h
)
)
@ -51,4 +49,3 @@ elseif (MSYS OR MINGW)
libsodium
)
endif()

View File

@ -2,13 +2,12 @@
// constructors
Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role_)
Customer::Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_)
: id{auto_increment_db() + 1},
name{name_},
password{hash_password(password_)},
vehicle{vehicle_},
telephone{telephone_},
role{role_} {
telephone{telephone_} {
save_db();
}
@ -55,9 +54,8 @@ int Customer::parked_at() { return park_instances[park_instances.size() - 1].spo
// functions that interact with the database
void Customer::save_db() {
string statement{"insert into Customer values (, '', '', ,'', );"};
string statement{"insert into Customer values (, '', '', ,'');"};
// after ( = 28)
statement.insert(43, to_string(role));
statement.insert(41, telephone);
statement.insert(38, to_string(int(vehicle)));
statement.insert(36, password);
@ -72,9 +70,8 @@ void Customer::save_db() {
void Customer::update_db() {
string statement =
"UPDATE Customer SET name = '', password = '', "
"vehicle = '', telephone = '', role = '' where id = '';";
statement.insert(89, to_string(id));
statement.insert(84, to_string(role));
"vehicle = '', telephone = '' where id = '';";
statement.insert(87, to_string(id));
statement.insert(73, telephone);
statement.insert(57, to_string(int(vehicle)));
statement.insert(43, password);

View File

@ -7,34 +7,41 @@
// so it skips to the next newline, in essence clearing the cin buffer
void interface(vector<Park_spot>& spots) {
/*
string introduction = "P A R K M A N N E"; //logo animation, disable during testing
text_animation(introduction, 50);
*/
cout << "\nWelcome to the parking system. Please login..";
int id;
string password;
cout << "\nEnter your id: ";
cin >> id;
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;
cin.ignore(10000, '\n');
Customer c = query_customer_with_id(id);
cout << "\nEnter your password: ";
std::getline(cin, password);
while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password:\n";
std::getline(cin, password);
switch (selector) {
case 1: {
interface_member(spots);
break;
}
if(query_role_customer(id)==1){
case 2: {
interface_admin(spots);
} else if(query_role_customer(id)==0){
interface_member(spots, c);
} else {
cout << "ERROR ROLE_INVALID..";
break;
}
}
}
void interface_member(vector<Park_spot>& spots,Customer& c) {
void interface_member(vector<Park_spot>& spots) {
__label__ exit;
int id;
string password;
cout << "\nPlease input id:";
cin >> id;
cin.ignore(10000, '\n');
Customer c = query_customer_with_id(id);
cout << "\nPlease input password:";
std::getline(cin, password);
while (!(verify_password(c.password, password))) {
cout << "ERROR: wrong password. Please retype your password or enter [exit] to exit :\n";
std::getline(cin, password);
if (password=="exit") goto exit;
}
cout << "Logged in succesfully\n";
cout << "select an option\n [1] Parking options\n[2]monthy report\n";
int option;
@ -53,9 +60,12 @@ void interface_member(vector<Park_spot>& spots,Customer& c) {
default:
break;
}
exit: ;
}
void interface_admin(vector<Park_spot>& spots) {
__label__ exit, begin;
begin: ;
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";
@ -63,9 +73,9 @@ void interface_admin(vector<Park_spot>& spots) {
cout << "[4] See weekly report of a specific parking spot\n";
cout << "[5] See current status of parking spots\n";
cout << "[6] Make new customer\n";
cout << "[7] Make new admin\n";
cout << "[8] Make new parking spot\n";
cout << "option[1-8]:";
cout << "[7] Make new parking spot\n";
cout << "[8] Exit\n";
cout << "option[1-7]:";
int option;
cin >> option;
cin.ignore(10000, '\n');
@ -79,7 +89,7 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 3: {
cout << "Which parking spot would you like a report on?\nID:";
cout << "Which parking spot would you like a report on?ID:";
int spotid;
cin >> spotid;
cin.ignore(10000, '\n');
@ -87,7 +97,7 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 4: {
cout << "Which parking spot would you like a report on?\nID:";
cout << "Which parking spot would you like a report on?ID:";
int spotid;
cin >> spotid;
cin.ignore(10000, '\n');
@ -103,16 +113,20 @@ void interface_admin(vector<Park_spot>& spots) {
break;
}
case 7: {
new_admin();
}
case 8: {
new_parkspot(spots);
break;
}
case 8: {
goto exit;
break;
}
default:
break;
}
goto begin;
exit: ;
}
// --------- individual things.
@ -159,7 +173,6 @@ void new_customer() {
string name;
string password;
string telephone;
int role = 0;
cout << "What's the name of the customer? ";
std::getline(cin, name);
cout << "What's the vehicle type? [1]twoweeler, [2] fourweeler: ";
@ -169,34 +182,17 @@ void new_customer() {
std::getline(cin, telephone);
cout << "What's the password?";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
cout << "New customer sucessfully created\n";
newcustomer.update_db();
}
void new_admin() {
int vtype = 2; //revision required!
string name;
string password;
string telephone;
int role = 1;
cout << "What's the name of the admin? ";
std::getline(cin, name);
cout << "What's the telephone number? ";
std::getline(cin, telephone);
cout << "What's the password?";
std::getline(cin, password);
Customer newcustomer{name, password, Vehicle_type(vtype), telephone, role};
Customer newcustomer{name, password, Vehicle_type(vtype), telephone};
cout << "New customer sucessfully created\n";
newcustomer.update_db();
}
void new_parkspot(vector<Park_spot>& spots) {
cout << "What type of parking spot? [1] twoweeler, [2] fourweeler: ";
cout << "What type of parking spot? [1] Twowheeler, [2] Fourwheeler: ";
int vtype;
cin >> vtype;
cin.ignore(10000, '\n');
Park_spot newspot{Vehicle_type(vtype)};
spots.push_back(newspot);
cout << "new parking spot sucessfully created.\n";
cout << "New parking spot sucessfully created.\n";
}

View File

@ -122,13 +122,3 @@ cpp/header
*/
std::this_thread::sleep_for(seconds{sec});
}
// text animtion duh
void text_animation(const string& text, unsigned int pause_time)
{
for(const char m:text) // range loop; for each character in string
{
cout << m << flush;
sleep_for(milliseconds(pause_time));
}
}

View File

@ -72,15 +72,6 @@ Customer query_customer_with_id(int id) {
}
}
int query_role_customer(int id){
SQLite::Statement query(data::db, "SELECT * FROM Customer WHERE id = ?;");
query.bind(1, id);
while(query.executeStep()){
int role = query.getColumn(5);
return role;
}
}
//------------------------------- parkspot info
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots) {
@ -163,7 +154,7 @@ void current_status_parkspots(vector<Park_spot>& spots) {
}
}
// -------------- paroking spots
// -------------- parking spots
// vector<Park_spot> populate_spots(){
// vector<Park_spot> spots;

View File

@ -40,8 +40,7 @@ class Customer {
string password;
Vehicle_type vehicle;
string telephone;
int role;
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_, int role);
Customer(string name_, string password_, Vehicle_type vehicle_, string telephone_);
Customer(int id_, string name_, string password_, Vehicle_type vehicle_,
vector<Park_time> instances, string telephone_);
void clock_in(int s_id);

View File

@ -6,9 +6,8 @@
using std::cin;
void interface(vector<Park_spot>& spots);
void interface_member(vector<Park_spot>& spots, Customer& c);
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_admin();
void new_parkspot(vector<Park_spot>& spots);

View File

@ -12,11 +12,8 @@
using namespace std::chrono;
using std::cout;
using std::flush;
using std::string;
using std::to_string;
using std::this_thread::sleep_for;
using std::chrono::milliseconds;
/*
@ -67,10 +64,7 @@ class Park_time {
int start_to_int(); // helper
};
// test function
// test funciton
void Wait(int sec);
// function that slowly outputs each character one by one
void text_animation(const string& text, unsigned int pause_time);
#endif // Park_time

View File

@ -59,7 +59,6 @@ Customer query_customer_with_id(int id);
vector<Park_spot> populate_spots();
Park_spot query_parkspot_with_id(int id, vector<Park_spot>& parkspots);
int query_role_customer(int id);
void reports_from_parkspot(int spotid, bool weekly = false);
void reports_from_allparkspots(bool weekly = false);

View File

@ -47,17 +47,7 @@ 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"
while(true) {
cin.clear();
interface(parking_spots);
cout<<"\nexit? Input 'y' or 'n'..";
char n;
cin >> n;
cin.clear();
if(n=='y'){
break;
}
}
do { interface(parking_spots);} while (true);
}
/*

View File

@ -1,5 +0,0 @@
#include <iostream>
void say_hello(){
std::cout << "Hello, from newParkManne!\n";
}

BIN
park

Binary file not shown.

View File

@ -12,14 +12,6 @@ Or click the build icon in vscode *shrugs*
# Parkmanne
## A stroll in the park
######TO-DO List:
- [x] Admin login
- [ ] Billing report menu
- [ ] Report from a specific month i.e. january
- [ ] Edit option in menu
- [ ] Option to confirm edit after input
- [ ] Divide menu in sub menus
- [ ] Analytics of customer (e.g. # customers with 2-wheeler or list of customer and telephone numbers etc.)
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.