#include <DataBase.hpp>
Public Methods | |
DataBase () | |
virtual | ~DataBase () |
int | read (const char *datafile) |
Private Methods | |
double | findID (int index) |
DataBase (const DataBase &src) | |
const DataBase & | operator= (const DataBase &src) |
Private Attributes | |
DBase * | _db |
DBase * | _current |
char * | cmd |
BinSearchTree * | BST |
double | pos |
double * | cmp |
double * | NbCmp |
|
Definition at line 5 of file DataBase.cpp. 00006 { 00007 BST = new BinSearchTree(); // Create a Binary Search Tree 00008 cmp = new double[4]; // Create an array for comparisons 00009 NbCmp = new double[4]; // informations for all the commands. 00010 00011 for(int k = 0; k < 4; k++) // Reset all the elements in the array, 00012 { 00013 cmp[k] = 0; // else we get "garbage += new_value;" 00014 NbCmp[k] = 0; 00015 } 00016 } |
|
Definition at line 18 of file DataBase.cpp. 00019 { 00020 if ( _current != NULL ) 00021 delete _current; 00022 00023 delete _db; // Delete pointer to objects 00024 delete BST; 00025 00026 delete [] cmp; // Delete comparison tables 00027 delete [] NbCmp; 00028 00029 } |
|
|
|
Definition at line 152 of file DataBase.cpp. Referenced by read().
00152 { // Find an ID and record 00153 double comp = 0; // the number of comparisons needed 00154 00155 pos = BST->findID( *_db->_id ); 00156 comp = pos; 00157 00158 // cout << msgCompare << cmd << index << " was "; // << endl; 00159 00160 comp = BST->search(); 00161 00162 _current = BST->getValue(); 00163 00164 // cout << comp << " out of " << BST->length() << endl; 00165 00166 if ( index >= 0 ) { 00167 cmp[index] += comp; 00168 NbCmp[index]++; 00169 } 00170 00171 return pos; 00172 } |
|
|
|
Definition at line 31 of file DataBase.cpp. Referenced by main().
00032 { 00033 FILE* record = NULL; // Initialize variable 00034 char c = 0; 00035 char command[80]; 00036 int p = 0; 00037 00038 // Open a file in read-only text mode, if the file exist. 00039 if ( (record = fopen(datafile, "rt") ) == NULL) 00040 { 00041 cout << "Cannot open the data file [" << datafile; 00042 cout << "] in the current directory." << endl; 00043 return 1; 00044 } 00045 00046 while ( !feof(record) ) // Loop until end of file 00047 { 00048 c = fgetc(record); // Read a Byte from the record file 00049 00050 if ( c != 13 && c != 10 ) // Scanning for CR, LF ASCII Code 00051 { 00052 command[p] = c; // Add the new char to the array. 00053 p++; 00054 command[p] = '\0'; 00055 } 00056 else if ( p > 0 ) // We reached a end of line byte. 00057 { 00058 command[p] = '\0'; 00059 00060 // cout << command << endl; 00061 00062 p = 0; // Reset the counter for the next file read 00063 _db = new DBase( command ); 00064 00065 switch ( command[0] ) 00066 { 00067 case 'I': cmd = "Insert"; 00068 if ( findID( 0 ) < 0 ) { // Insert 00069 BST->insert( _db ); // ID was not Found 00070 } else { 00071 cout << msgI_IDexist << endl; // ID was Found 00072 } 00073 break; 00074 00075 case 'S': cmd = "Search"; 00076 if ( findID( 1 ) < 0 ) { // Search 00077 cout << command << endl; 00078 cout << msgS_IDnotFound << endl; 00079 } else { 00080 cout << msgS_IDFound << endl; 00081 _current->display(); 00082 } 00083 break; 00084 00085 case 'C': cmd = "Change"; 00086 if ( findID( 2 ) < 0 ) { // Change 00087 cout << command << endl; 00088 cout << msgC_IDnotFound << endl; 00089 } else { 00090 cout << "The following element:" << endl; 00091 _current->display(); 00092 00093 if ( _db->_name->filled() ) { 00094 _current->_name = _db->_name; 00095 } 00096 00097 if ( _db->_tel->filled() ) { 00098 _current->_tel = _db->_tel; 00099 } 00100 00101 cout << "was changed to the following:" << endl; 00102 _current->display(); // Show modification 00103 } 00104 break; 00105 00106 case 'D': cmd = "Delete"; 00107 if ( findID( 3 ) < 0 ) { // Delete 00108 cout << msgD_IDnotFound << endl; 00109 } else { 00110 BST->remove(); 00111 } 00112 break; 00113 00114 default : // Invalid command 00115 cout << command << endl; 00116 cout << msgInvalidOp << endl; 00117 00118 } // End of switch 00119 00120 // Display all the BST Step by Step to debug: 00121 00122 // findID( -10 ); 00123 // BST->display(); 00124 00125 } // End of line 00126 00127 } // End of file while loop 00128 00129 // Show the results 00130 cout << endl << endl; 00131 cout << msgTotalCmp << " Insert was " << cmp[0]; 00132 cout << " with " << NbCmp[0] << " Insert commands.\n"; 00133 cout << msgAvgCmp << " Insert was " << (cmp[0] / NbCmp[0]) << ".\n"; 00134 00135 cout << msgTotalCmp << " Search was " << cmp[1]; 00136 cout << " with " << NbCmp[1] << " Search commands.\n"; 00137 cout << msgAvgCmp << " Search was " << (cmp[1] / NbCmp[1]) << ".\n"; 00138 00139 cout << msgTotalCmp << " Change was " << cmp[2]; 00140 cout << " with " << NbCmp[2] << " Change commands.\n"; 00141 cout << msgAvgCmp << " Change was " << (cmp[2] / NbCmp[2]) << ".\n"; 00142 00143 cout << msgTotalCmp << " Delete was " << cmp[3]; 00144 cout << " with " << NbCmp[3] << " Delete commands.\n"; 00145 cout << msgAvgCmp << " Delete was " << (cmp[3] / NbCmp[3]) << ".\n\n"; 00146 00147 fclose(record); 00148 00149 return 0; 00150 } |
|
Definition at line 31 of file DataBase.hpp. |
|
Definition at line 35 of file DataBase.hpp. |
|
Definition at line 28 of file DataBase.hpp. |
|
Definition at line 25 of file DataBase.hpp. |
|
Definition at line 29 of file DataBase.hpp. |
|
Definition at line 34 of file DataBase.hpp. |
|
Definition at line 33 of file DataBase.hpp. |