Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 02 / task2 / studentsDatabase.cpp
diff options
context:
space:
mode:
1 files changed, 0 insertions, 253 deletions
-rw-r--r--Sem. 02/task2/studentsDatabase.cpp253
diff --git a/Sem. 02/task2/studentsDatabase.cpp b/Sem. 02/task2/studentsDatabase.cpp
deleted file mode 100644
index 7f9a5f5..0000000
--- a/Sem. 02/task2/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;
-}