diff --git a/lab11/README.md b/lab11/README.md new file mode 100644 index 0000000..6e773b9 --- /dev/null +++ b/lab11/README.md @@ -0,0 +1,14 @@ +# Лабораторна робота № 11 + +Тема Реалізація програмних засобів оброблення динамічних структур даних та бінарних файлів + +Мета роботи полягає у набутті ґрунтовних вмінь і практичних навичок командної (колективної) реалізації програмного забезпечення, розроблення функцій оброблення динамічних структур даних, використання стандартних засобів C++ для керування динамічною пам'яттю та бінарними файловими потоками. + +Завдання +1. У складі команди IT-проекта розробити програмні модулі оброблення динамічної структури даних. +2. Реалізувати програмний засіб на основі розроблених командою IT-проекта модулів. + +Варіант № 1 + + +Кропивницький | ЦНТУ | 2023 diff --git a/lab11/Report/Report.pdf b/lab11/Report/Report.pdf new file mode 100755 index 0000000..17734cf Binary files /dev/null and b/lab11/Report/Report.pdf differ diff --git a/lab11/TestSuite/TestSuite.doc b/lab11/TestSuite/TestSuite.doc new file mode 100755 index 0000000..68c0e64 Binary files /dev/null and b/lab11/TestSuite/TestSuite.doc differ diff --git a/lab11/prj/ModulesMykhailenko.h b/lab11/prj/ModulesMykhailenko.h new file mode 100755 index 0000000..1d4c466 --- /dev/null +++ b/lab11/prj/ModulesMykhailenko.h @@ -0,0 +1,14 @@ +#include +#include "struct_type_project_1.h" + +using namespace std; + +void add(vector&, wstring, wstring, wstring, wstring); + +void remove(vector&, wstring); + +bool read(vector&, string); + +bool save(vector&, string); + +void search(vector&, wstring); diff --git a/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cbp b/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cbp new file mode 100755 index 0000000..47d79af --- /dev/null +++ b/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cbp @@ -0,0 +1,41 @@ + + + + + + diff --git a/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cpp b/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cpp new file mode 100755 index 0000000..d1b90a3 --- /dev/null +++ b/lab11/prj/ModulesMykhailenko/ModulesMykhailenko.cpp @@ -0,0 +1,98 @@ +#include +#include +#include +#include +#include +#include +#include "ModulesMykhailenko.h" + +using namespace std; + +vector products; + +void add(vector &vec, wstring section, wstring sectionName, wstring code, wstring name) { + vec.push_back({}); + Product& back = vec.back(); + back.section = section; + back.sectionName = sectionName; + back.code = code; + back.name = name; +} + +void remove(vector &vec, wstring record) { + bool found = false; + for (vector::iterator it = vec.begin(); it != vec.end();) { + if (it->code == record) { + found = true; + it = vec.erase(it); + } else + ++it; + } + + if (found) + wcout << L"Видалено." << endl; + else + wcout << L"Не знайдено." << endl; +} + +bool read(vector &vec, string file) { + vector> content; + vector row; + wstring line, word; + + wifstream data; + data.open(file); + + data.imbue(locale(locale(), new codecvt_utf8)); + + if (data.is_open()) { + while(getline(data, line)) { + row.clear(); + + wstringstream str(line); + + while(getline(str, word, L'\u0009')) + row.push_back(word); + content.push_back(row); + } + } else + return false; + + for (unsigned int i = 0; i < content.size(); i++) { + vec.push_back({}); + Product& back = vec.back(); + back.section = content[i][0]; + back.sectionName = content[i][1]; + back.code = content[i][2]; + back.name = content[i][3]; + } + + return true; +} + +bool save(vector &vec, string file) { + wofstream data; + data.open(file); + + data.imbue(locale(locale(), new codecvt_utf8)); + + if (!data) + return false; + + for (unsigned int i = 0; i < vec.size(); i++) + data << vec[i].section << L'\u0009' << vec[i].sectionName << L'\u0009' << vec[i].code << L'\u0009' << vec[i].name << endl; + + return true; +} + +void search(vector &vec, wstring record) { + bool found = false; + for (unsigned int i = 0; i < vec.size(); i++) { + if (vec[i].code == record) { + found = true; + wcout << vec[i].code << L": " << vec[i].name << L", належить до розділу " << vec[i].section << L" (" << vec[i].sectionName << L")" << endl; + } + } + if (!found) + wcout << L"Не знайдено." << endl; +} diff --git a/lab11/prj/prj_1_Mykhailenko/main.cpp b/lab11/prj/prj_1_Mykhailenko/main.cpp new file mode 100755 index 0000000..1cd68a5 --- /dev/null +++ b/lab11/prj/prj_1_Mykhailenko/main.cpp @@ -0,0 +1,84 @@ +#include +#include +#include +#include +#include "ModulesMykhailenko.h" + +using namespace std; + +int main() { + + ios_base::sync_with_stdio(false); + wcout.imbue(locale(locale(), new codecvt_utf8)); + wcin.imbue(locale(locale(), new codecvt_utf8)); + setlocale(LC_ALL, ""); + + read(products, "data.tsv"); + + while (true) { + int choice; + + wcout << L"Довідник кодів товарів згідно з УКТЗЕД" << endl << + L"1. Пошук запису" << endl << + L"2. Зберігання довідника у заданий файл" << endl << + L"3. Додавання нового запису у довідник" << endl << + L"4. Вилучення запису із довідника" << endl << + L"5. Завершення роботи програми і запис даних" << endl << + L"Введіть необхідну дію: "; + + wcin >> choice; + wcin.ignore(); + switch (choice) { + case 1: + { + wstring record; + wcout << L"Введіть номер запису: "; + getline(wcin, record); + search(products, record); + break; + } + case 2: + { + wstring path; + wcout << L"Введіть шлях до файла: "; + getline(wcin, path); + wstring_convert, wchar_t> converter; + string converted_path = converter.to_bytes(path); + save(products, converted_path); + break; + } + case 3: + { + wstring section; + wstring sectionName; + wstring code; + wstring name; + wcout << L"Введіть код розділу: "; + getline(wcin, section); + wcout << L"Введіть назву розділу: "; + getline(wcin, sectionName); + wcout << L"Введіть код товару: "; + getline(wcin, code); + wcout << L"Введіть назву товару: "; + getline(wcin, name); + add(products, section, sectionName, code, name); + break; + } + case 4: + { + wstring record; + wcout << L"Введіть номер запису: "; + getline(wcin, record); + remove(products, record); + break; + } + case 5: + { + save(products, "data.tsv"); + return 0; + } + default: + wcout << L"Помилкові дані." << endl; + } + } +} diff --git a/lab11/prj/prj_1_Mykhailenko/prj_1_Mykhailenko.cbp b/lab11/prj/prj_1_Mykhailenko/prj_1_Mykhailenko.cbp new file mode 100755 index 0000000..4f2180c --- /dev/null +++ b/lab11/prj/prj_1_Mykhailenko/prj_1_Mykhailenko.cbp @@ -0,0 +1,40 @@ + + + + + + diff --git a/lab11/prj/struct_type_project_1.h b/lab11/prj/struct_type_project_1.h new file mode 100755 index 0000000..4e3ffb1 --- /dev/null +++ b/lab11/prj/struct_type_project_1.h @@ -0,0 +1,18 @@ +#ifndef STRUCT_TYPE_PROJECT_1_H_INCLUDED +#define STRUCT_TYPE_PROJECT_1_H_INCLUDED + +#include +#include + +using namespace std; + +struct Product { + wstring section; + wstring sectionName; + wstring code; + wstring name; +}; + +extern vector products; + +#endif // STRUCT_TYPE_PROJECT_1_H_INCLUDED diff --git a/lab11/tasks/L11-var--001.jpg b/lab11/tasks/L11-var--001.jpg new file mode 100755 index 0000000..69d0b53 Binary files /dev/null and b/lab11/tasks/L11-var--001.jpg differ