From bd9ffde20d67674041712a6686340b0c619b791b Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 15 May 2021 12:31:51 +0300 Subject: minor fixes --- Sem. 02/selfPrintingTask.cpp | 26 ---- Sem. 02/students.csv | 10 -- Sem. 02/studentsDatabase.cpp | 253 ------------------------------------- Sem. 02/task1/selfPrintingTask.cpp | 26 ++++ Sem. 02/task2/students.csv | 10 ++ Sem. 02/task2/studentsDatabase.cpp | 253 +++++++++++++++++++++++++++++++++++++ 6 files changed, 289 insertions(+), 289 deletions(-) delete mode 100644 Sem. 02/selfPrintingTask.cpp delete mode 100644 Sem. 02/students.csv delete mode 100644 Sem. 02/studentsDatabase.cpp create mode 100644 Sem. 02/task1/selfPrintingTask.cpp create mode 100644 Sem. 02/task2/students.csv create mode 100644 Sem. 02/task2/studentsDatabase.cpp (limited to 'Sem. 02') diff --git a/Sem. 02/selfPrintingTask.cpp b/Sem. 02/selfPrintingTask.cpp deleted file mode 100644 index 862cf07..0000000 --- a/Sem. 02/selfPrintingTask.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include -#include - -using namespace std; - -const int MAX_SIZE = 1024; -int main() -{ - ifstream inputFile("selfPrintingTask.cpp"); - - if (inputFile.fail()) - { - cout << "Error!" << endl; - return -1; - } - - while (!inputFile.eof()) - { - char buff[MAX_SIZE]; - inputFile.getline(buff, MAX_SIZE); - cout << buff << endl; - } - inputFile.close() - - return 0; -} diff --git a/Sem. 02/students.csv b/Sem. 02/students.csv deleted file mode 100644 index 1d7debc..0000000 --- a/Sem. 02/students.csv +++ /dev/null @@ -1,10 +0,0 @@ -Име,Фамилия,"Имейл адрес","Факултетен номер" -Peter,Ivanov,peter@mail.bg,81235 -Alexander,Popov,popov@abv.bg,81234 -Stefan,Velikov,velikov@mail.bg,81876 -Krasimir,Petkov,krasi@abv.bg,81234 -Stefani,Angelova,stef@gmail.com,81876 -Ivana,Marinova,ivana@abv.bg,81321 -Stefan,Velkov,stefan@yahoo.com,80000 -Krasimira,Markova,krasi@mail.bg,81234 -Wladimir,Klitschko,wlad@kiev.com,89999 \ No newline at end of file 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 -#include - -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; -} diff --git a/Sem. 02/task1/selfPrintingTask.cpp b/Sem. 02/task1/selfPrintingTask.cpp new file mode 100644 index 0000000..862cf07 --- /dev/null +++ b/Sem. 02/task1/selfPrintingTask.cpp @@ -0,0 +1,26 @@ +#include +#include + +using namespace std; + +const int MAX_SIZE = 1024; +int main() +{ + ifstream inputFile("selfPrintingTask.cpp"); + + if (inputFile.fail()) + { + cout << "Error!" << endl; + return -1; + } + + while (!inputFile.eof()) + { + char buff[MAX_SIZE]; + inputFile.getline(buff, MAX_SIZE); + cout << buff << endl; + } + inputFile.close() + + return 0; +} diff --git a/Sem. 02/task2/students.csv b/Sem. 02/task2/students.csv new file mode 100644 index 0000000..1d7debc --- /dev/null +++ b/Sem. 02/task2/students.csv @@ -0,0 +1,10 @@ +Име,Фамилия,"Имейл адрес","Факултетен номер" +Peter,Ivanov,peter@mail.bg,81235 +Alexander,Popov,popov@abv.bg,81234 +Stefan,Velikov,velikov@mail.bg,81876 +Krasimir,Petkov,krasi@abv.bg,81234 +Stefani,Angelova,stef@gmail.com,81876 +Ivana,Marinova,ivana@abv.bg,81321 +Stefan,Velkov,stefan@yahoo.com,80000 +Krasimira,Markova,krasi@mail.bg,81234 +Wladimir,Klitschko,wlad@kiev.com,89999 \ No newline at end of file diff --git a/Sem. 02/task2/studentsDatabase.cpp b/Sem. 02/task2/studentsDatabase.cpp new file mode 100644 index 0000000..7f9a5f5 --- /dev/null +++ b/Sem. 02/task2/studentsDatabase.cpp @@ -0,0 +1,253 @@ +#include +#include + +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; +} -- cgit v1.3.1-23-gd82d