diff options
1 files changed, 0 insertions, 253 deletions
| -rw-r--r-- | Sem. 02/studentsDatabase.cpp | 253 |
diff --git a/Sem. 02/studentsDatabase.cpp b/Sem. 02/studentsDatabase.cpp deleted file mode 100644 index 7f9a5f5..0000000 --- a/Sem. 02/studentsDatabase.cpp +++ /dev/null @@ -1,253 +0,0 @@ -#include <iostream> -#include <fstream> - -using namespace std; - -const int FIELD_MAX_SIZE = 50; -const int BUFFER_LINE_SIZE = 1024; - -struct OOPstudent -{ - char firstName[FIELD_MAX_SIZE]; - char lastName[FIELD_MAX_SIZE]; - char email[FIELD_MAX_SIZE]; - int fn = 0; - -}; - -int countLines(const char* fileName) -{ - ifstream f(fileName); - if (!f.is_open()) - return -1; - int linesCount = 0; - - while (!f.eof()) - { - char buff[1024]; - f.getline(buff, 1024); - linesCount++; - } - f.close(); - - return linesCount; - -} -// abc,bcd,ab@Abv.bg,fn -void readStudent(const char* input, OOPstudent& student) -{ - int ind = 0; - - // first name - while (input[ind] != ',') - { - student.firstName[ind] = input[ind]; - ind++; - } - student.firstName[ind] = '\0'; - ind++; - - //last name - int lastNameInd = 0; - while (input[ind] != ',') - student.lastName[lastNameInd++] = input[ind++]; - student.lastName[lastNameInd] = '\0'; - ind++; - - //email - int emailInd = 0; - - while (input[ind] != ',') - student.email[emailInd++] = input[ind++]; - student.email[emailInd] = '\0'; - ind++; - - //fn - while (input[ind] != '\0') - (student.fn *= 10) += (input[ind++] - '0'); - -} - -bool saveStudentsToFile(const OOPstudent* studentsCollection, int len, const char* fileName) -{ - ofstream outFile(fileName); - - if (!outFile.is_open()) - return false; - - outFile << "First name, Last name, email, fn" << endl; - - for (int i = 0; i < len; i++) - outFile << studentsCollection[i].firstName << "," << studentsCollection[i].lastName << "," << studentsCollection[i].email << "," << studentsCollection[i].fn << endl; - - outFile.close(); - - return true; -} - -int indexOfFirstSpaceOrTerminatingZero(const char* command) -{ - int ind = 0; - while (*command != ' ' && *command != '\t' && *command != '\0') - { - command++; - ind++; - } - return ind; - -} - -bool printStudent(const OOPstudent* arrayOfStudents, int len, int fn) -{ - for (int i = 0; i < len; i++) - { - if (arrayOfStudents[i].fn == fn) - { - cout << arrayOfStudents[i].firstName << "," << arrayOfStudents[i].lastName << "," << arrayOfStudents[i].email << "," << arrayOfStudents[i].fn << endl; - return true; - } - } - return false; -} -bool editFirstName(OOPstudent* arrayOfStudents, int len, int fn, const char* newFirstName) -{ - for (int i = 0; i < len; i++) - { - if (arrayOfStudents[i].fn == fn) - { - strcpy(arrayOfStudents[i].firstName, newFirstName); - return true; //success! - } - } - return false; //no such student -} -int main() -{ - - cout << "Open file:" << endl << ">"; - - char fileName[BUFFER_LINE_SIZE]; - cin.getline(fileName, BUFFER_LINE_SIZE); - - int studentsCount = countLines(fileName) - 1; // We ignore the first line - - - if (studentsCount <= 0) - { - cout << "Error while reading data from the file " << endl; - return -1; - } - - OOPstudent* studentsCollection = new OOPstudent[studentsCount]; - - - ifstream f(fileName, ios::_Nocreate); - - if (!f.is_open()) - { - cout << "Error!" << endl; - delete[] studentsCollection; - return -1; - } - - int line = 1; - while (!f.eof()) - { - char buff[BUFFER_LINE_SIZE]; - f.getline(buff, BUFFER_LINE_SIZE); - - if (line == 1) - { - line++; - continue; - } - - readStudent(buff, studentsCollection[line - 2]); - line++; - } - f.close(); - - cout << "File successfully opened!" << endl; - - char commandLine[BUFFER_LINE_SIZE]; - do - { - cout << ">"; - cin.getline(commandLine, 1024); - size_t len = strlen(commandLine); - - - - //first argument (edit, save ...) - size_t firstArgSize = indexOfFirstSpaceOrTerminatingZero(commandLine); - char* commandFirstArg = new char[firstArgSize + 1]; - - for (int i = 0; i < firstArgSize; i++) - commandFirstArg[i] = commandLine[i]; - commandFirstArg[firstArgSize] = '\0'; - - - - - if (len == firstArgSize) //no more arguments - quit? Check is bellow - continue; - - //second argument (students.csv, 45543 ...) - size_t secondArgSize = len - firstArgSize - 1; - char* commandSecondArg = new char[secondArgSize + 1]; - - for (int i = 0; i < secondArgSize; i++) - commandSecondArg[i] = commandLine[firstArgSize + 1 + i]; - commandSecondArg[secondArgSize] = '\0'; - if (strcmp(commandFirstArg, "print") == 0) - { - int fn = atoi(commandSecondArg); - - bool res = printStudent(studentsCollection, studentsCount, fn); - - if (!res) - cout << "Student with fn: " << fn << " doesn't exist!" << endl;; - } - else if (strcmp(commandFirstArg, "edit") == 0) - { - int fn = atoi(commandSecondArg); - - //we have a third argument here. It's in the second arguments string - - size_t seprator = indexOfFirstSpaceOrTerminatingZero(commandSecondArg); - - size_t thirdArgumentSize = secondArgSize - seprator; - char* commandThirdArg = new char[thirdArgumentSize + 1]; - - for (int i = 0; i < thirdArgumentSize; i++) - commandThirdArg[i] = commandSecondArg[seprator + 1 + i]; - commandThirdArg[thirdArgumentSize] = '\0'; - - bool result = editFirstName(studentsCollection, studentsCount, fn, commandThirdArg); - - if (result) - cout << "Succesfully changed name!" << endl; - else - cout << "Student with fn: " << fn << "doesn't exist!" << endl; - - delete[] commandThirdArg; - } - else if (strcmp(commandFirstArg, "save") == 0) - { - - bool res = saveStudentsToFile(studentsCollection, studentsCount, commandSecondArg); - - if (res) - cout << "Successfully saved to file: " << commandSecondArg << endl; - else - cout << "Error while saving in file: " << commandSecondArg << endl; - - } - delete[] commandFirstArg; - delete[] commandSecondArg; - - } while (strcmp(commandLine, "Quit")); - - delete[] studentsCollection; - return 0; -} |
