-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproducts.h
93 lines (66 loc) · 2.88 KB
/
products.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#ifndef PRODUCTS_H
#define PRODUCTS_H
#include <string>
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>
#include "handler.h"
#include "input_handling.h"
using namespace std;
class Product{
private:
string name;
// pe lângă nume, un produs are și un cod unic
string code;
// prețurile sunt în RON
float price;
// costul produsului pentru cafenea
// pentru chestii gen cafea, ciocolată caldă, etc. costul este unul mediu pentru produsul respectiv
float cost;
// aici împart cam toate produsele în două categorii:
// - cele pentru care e un stoc numărabil (prăjituri, biscuiți, sucuri, etc.)
// - cele care sunt făcut pe loc din ingreditente care nu pot fi clar cuantificate (cafea, ciocolată caldă, etc.)
bool is_stockable;
int stock;
public:
Product(const string &name_in, const string &code_in, const float price_in, const float cost_in, const bool is_stockable_in, const int stock_in);
Product(const string &name_in, const string &code_in, const float price_in, const float &cost_in, const bool is_stockable_in);
string get_name();
float get_price();
float get_cost();
int get_stock();
void set_stock(int new_stock);
bool can_be_purchased();
bool get_is_stockable();
void decrement_stock();
vector<string> product_to_data();
void display_information();
};
// clasă care citește și stochează datele despre produse, și care gestionează stocurile
class ProductHandler : public Handler{
private:
// acest string este complet abstractizat: chiar dacă operațiile de input/output sunt realizate în fișierul cu calea product_file_path, variabila în sine nu este vizibilă utilizatorului
string product_file_path;
vector<Product> products;
// de asemenea, această funcție este abstractizată: aceasta este o funcție intermediară folosită doar de clasa ProductHandler
// nu este vizibilă utilizatorului, oferindu-i astfel o interfață simplificată
Product parse_data_element(const vector<string> &data_el);
public:
explicit ProductHandler(const string &file_path_in);
~ProductHandler() override;
void parse_data() override;
vector<vector<string>> get_data() override;
void write_to_file() override;
// funcție de căutare după nume care retunează indexul produsului în vector
// funcția asta poate și să afișeze produsul găsit, în funcție de variabila display
int search_product(const string &name, const bool display=false);
void add_product();
void remove_product(const string &name);
Product get_product(int index);
// aici returnează prețul produsului, în scopul calculării totalului în clasa comenzii
float purchase_product(const string &name);
float search_cost(const string &name);
void reset_stock(const string &name, int stock);
};
#endif //PRODUCTS_H