Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 02 / task3_not_done.cpp
diff options
context:
space:
mode:
Commit3d586a19350213a01bdc4bbeea0cb781ab6f8a4b (patch)
Author
 Angel Dimitriev <angel_dimitriev@abv.bg>
2022-03-08 20:28:11 +0200
Committer
 GitHub <noreply@github.com>
2022-03-08 20:28:11 +0200
Files640b6b152824bdc405bcb4ec7918acb634bacff8 /Sem. 02/task3_not_done.cpp
Object-oriented_programming_FMI-3d586a19350213a01bdc4bbeea0cb781ab6f8a4b.tar
Object-oriented_programming_FMI-3d586a19350213a01bdc4bbeea0cb781ab6f8a4b.tar.gz
Object-oriented_programming_FMI-3d586a19350213a01bdc4bbeea0cb781ab6f8a4b.zip
Parent1aea6e36371919f67cd915590356e373a8cbdac8 (diff)
Rename task3_temp.cpp to task3_not_done.cpp
1 files changed, 148 insertions, 0 deletions
-rw-r--r--Sem. 02/task3_not_done.cpp148
diff --git a/Sem. 02/task3_not_done.cpp b/Sem. 02/task3_not_done.cpp
new file mode 100644
index 0000000..d473e70
--- /dev/null
+++ b/Sem. 02/task3_not_done.cpp
@@ -0,0 +1,148 @@
+#include <iostream>
+#include <fstream>
+#pragma warning(disable:4996)
+using namespace std;
+
+const size_t capacity = 1024;
+
+enum class Speciality
+{
+ computerScience,
+ softwareEngineering
+};
+
+struct StudentRecord
+{
+ char firstName[capacity];
+ char lastName[capacity];
+
+ char fnRaw[capacity];
+
+ //parsed by fnRaw
+ Speciality studentSpeciality;
+ int fn;
+ //
+
+ char email[capacity];
+};
+
+struct StudentCollection
+{
+ StudentRecord* data;
+};
+
+size_t getLinesCount(const char* fileName)
+{
+ ifstream file(fileName);
+
+ if (!file.is_open())
+ return 0;
+
+ size_t count = 0;
+
+ while (!file.eof())
+ {
+ char buff[capacity];
+ file.getline(buff, capacity);
+ count++;
+ }
+
+ file.close();
+
+ return count;
+
+}
+
+void parseField(char* dest, const char*& source)
+{
+ while (*source != ',' && *source != '\0')
+ {
+ *dest = *source;
+ dest++;
+ source++;
+ }
+ source++;
+ *dest = '\0';
+}
+
+void parseFn(StudentRecord& currentStudent)
+{
+ if (strlen(currentStudent.fnRaw) < 5)
+ return;
+
+ if (currentStudent.fnRaw[4] == '6')
+ currentStudent.studentSpeciality = Speciality::softwareEngineering;
+ else if (currentStudent.fnRaw[4] == '8')
+ currentStudent.studentSpeciality = Speciality::computerScience;
+
+ currentStudent.fn = atoi(currentStudent.fnRaw + 5);
+
+}
+
+void parseStudent(StudentRecord& currentStudent, const char* line)
+{
+ parseField(currentStudent.firstName, line);
+ parseField(currentStudent.lastName, line);
+ parseField(currentStudent.fnRaw, line);
+ parseField(currentStudent.email, line);
+ parseFn(currentStudent);
+}
+
+void printStudent(const StudentRecord& st)
+{
+ std::cout << "First name: " << st.firstName << ", second name: " << st.lastName << ", speciality: ";
+
+ if (st.studentSpeciality == Speciality::computerScience)
+ std::cout << "computer science, ";
+ else
+ std::cout << "software engineering, ";
+
+ std::cout << "number: " << st.fn << ", email: " << st.email << std::endl;
+
+}
+
+size_t initStudentCollection(StudentCollection& collection, const char* fileName)
+{
+ size_t studentsCount = getLinesCount(fileName) - 1;
+
+ collection.data = new StudentRecord[studentsCount];
+
+ ifstream file(fileName);
+ if (!file.is_open())
+ {
+ cout << "error";
+ return 0;
+ }
+
+ char buff[capacity];
+ file.getline(buff, capacity);
+ for (int i = 0; i < studentsCount; i++)
+ {
+ file.getline(buff, capacity);
+ parseStudent(collection.data[i], buff);
+ }
+
+ return studentsCount;
+}
+
+void saveToFile(const char* fileName, const StudentCollection& collection, size_t studentsCount)
+{
+ ofstream file(fileName);
+ if (!file.is_open())
+ return;
+ file << "Ime, Familiya, Fakulteten nomer, Imeyl adres" << std::endl; //header;
+ for (int i = 0; i < studentsCount; i++)
+ file << collection.data[i].firstName << "," << collection.data[i].lastName << "," << collection.data[i].fnRaw << "," << collection.data[i].email << std::endl;
+}
+int main()
+{
+ const char* fileName = "lists/all_students.csv";
+
+ StudentCollection collection;
+ size_t studentsCount = initStudentCollection(collection, fileName);
+
+ //changes to students email
+
+ saveToFile(fileName, collection, studentsCount);
+ delete[] collection.data;
+}