Website Summary Files Commits Branches @commit @diff @stats
path: root / Sem. 02 / task3_temp.cpp
diff options
context:
space:
mode:
1 files changed, 95 insertions, 14 deletions
-rw-r--r--Sem. 02/task3_temp.cpp109
diff --git a/Sem. 02/task3_temp.cpp b/Sem. 02/task3_temp.cpp
index 910e8a1..6bee5ef 100644
--- a/Sem. 02/task3_temp.cpp
+++ b/Sem. 02/task3_temp.cpp
@@ -1,23 +1,27 @@
#include <iostream>
#include <fstream>
+#pragma warning(disable:4996)
using namespace std;
-
const size_t capacity = 1024;
-enum class Spec
+enum class Speciality
{
computerScience,
- softEng
+ softwareEngineering
};
+
struct StudentRecord
{
char firstName[capacity];
char lastName[capacity];
+
char fnRaw[capacity];
- Spec spec;
+ //parsed by fnRaw
+ Speciality studentSpeciality;
int fn;
+ //
char email[capacity];
};
@@ -43,27 +47,104 @@ size_t getLinesCount(const char* fileName)
count++;
}
- file.close ();
+ file.close();
return count;
}
-int main()
+//Angel,
+
+void parseField(char* dest, const char*& source)
{
-
- char inputFileName[] = "lists/si.csv";
- size_t studentsCount = getLinesCount(inputFileName) - 1;
+ while (*source != ',' && *source != '\0')
+ {
+ *dest = *source;
+ dest++;
+ source++;
+ }
+ source++;
+ *dest = '\0';
+}
- StudentCollection myCollection;
- myCollection.data = new StudentRecord[studentsCount];
+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;
- //parse
- //...
+ 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;
- delete[] myCollection.data;
+ 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;
}