The user can communicate via a command line. The user will parse and interpret commands from input line. The format is the following.
Databases and database tables will be saved to text files. All the files will be written with lower case letters. There's a databases.dat file, which contains the names of the databases in that folder. Every database has a file. The names of these files have to be <databaseName>.dat, so you can't make a database with the name 'databases'. Every line has to contain one existing tablename. Database table files have the following filename format: <database>_<tablename>.dat.
line number:
1. <number_of_columns>
2. <ValueType_of_column_1> <canBeEmpty_of_column_1> <tableName_of_column_1>
.
.
.
n+1. <ValueType_of_column_n> <canBeEmpty_of_column_n> <tableName_of_column_n>
n+2. <1.column_value _of_1.row> <2.column_value_of_1.row> . . . <n.column_value_of_1.row>
.
.
.
n+k+1. <1.column_value_of_k.row> <2.column_value_of_k.row> . . . <n.column_value_of_k.row>
There are k rows and n columns.
ValueType: 0=bool, 1=int, 2=double, 3=std::string
canBeEmpty: 0=false, 1=true
If a value can be empty, than empty value is '_'.
If a value is std::string, than you can find the value in the file in this format: '<str>value</str>'.
Bool values are saved as TRUE and FALSE.
You can look at the [Class Diagram and Set Up] of the program.
Only Handler::run() will be communicate with the user.
Here's an overview of the relation of classes (maybe it's helpful for the File operations section above):