Professional Documents
Culture Documents
ОП КПІЗ
ОП КПІЗ
Виконав:
Студент групи ІПЗ-12
Строгий Є.В.
Перевірив:
Шпінталь М.Я.
Тернопіль
2022
Лабораторна робота №5
«Робота з файлами. Обробка текстової інформації»
Мета роботи: навчитися складати програми для роботи з файлами
заданої структури та виконання обробки текстової інформації.
Завдання:
В завданні №1 необхідно написати програму, яка виконує вказані
операції (кожну операцію оформити окремою функцією) з інформацією,
що знаходиться у текстовому файлі input.txt і записує всі результати
роботи у файл output.txt. Скласти блок-схему для алгоритму розв’язку
задачі.
Вхідний файл: input.txt
Вихідний файл: output.txt
В завданні №2 необхідно організувати файл даних з вказаною
нижче структурою та передбачити функції, які дозволяють:
коригування обраного запису файлу;
пошук інформації за різними полями;
додавання записів у кінець бази даних;
вилучення інформації з бази даних.
Варіант 13
1. Написати програму, яка копіює вміст вхідного файла у вихідний;
підраховує кількість слів, які містять однакову кількість голосних і
приголосних літер; визначає найбільше слово; видаляє з тексту всі слова-
паліндроми.
2. Структура з ім’ям SKLAD, яка містить наступні поля:
NAME – назва товару;
TYPE – одиниця виміру товару;
QUANTITY – кількість одиниць товару;
COST – ціна одиниці товару.
Програма
Завдання №1:
baseIncludeConfig.h
#pragma once
#include <iostream>
#include <vector>
#include <ostream>
#include <fstream>
#include <Windows.h>
#include <string>
#include <algorithm>
#include <ctype.h>
#include <locale>
using namespace std;
Main файл:
#include "baseIncludeConfig.h"
#include "firstTask.h"
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Ukr");
string path = "input.txt";
return 0;
}
Завдання:
#include "baseIncludeConfig.h"
if (!fin.is_open())
{
return "Під час відкриття файлу сталася помилка!";
}
vector<string> wordArr;
int wordPairCounter = 0;
string word = "";
string resStr = "";
char ch;
while (fin.get(ch))
{
resStr += ch;
}
fin.close();
int indexLongWord = 0;
int maxLongWord = 0;
ofstream fout;
fout.open("output.txt");
if (!fout.is_open())
{
return "Не вдалося відкрити файл для запису!";
}
fout << "\nКількість слів що містять однакову кількість голосних і приголосних букв: " <<
to_string(wordPairCounter) << '\n';
fout << "Найдовше слово: " << wordArr[indexLongWord] << '\n';
return "Операція пройшла успішно!";
}
Завдання №2
Main файл:
#include <iostream>
#include <string>
#include <Windows.h>
#include <vector>
#include <fstream>
struct SKLAD
{
string NAME;
string TYPE;
int QUANTITY;
double COST;
void clear() {
NAME = "";
TYPE = "";
QUANTITY = 0;
COST = 0;
}
};
return resStrNum;
}
vector<SKLAD> parse_data() {
SKLAD sklad;
vector<SKLAD> resArr;
ifstream fin;
fin.open("database.txt");
if (!fin.is_open())
{
cout << "Під час відкриття файлу сталася помилка :(" << endl;
return {};
}
int p = 1;
while (!fin.eof()) {
string line = "";
string value = "";
bool colonFound = false;
getline(fin, line);
for (int i = 0; i < line.length(); i++)
{
if (line[i] == ':')
{
colonFound = true;
continue;
}
if (colonFound)
{
value += line[i];
}
}
switch (p)
{
case 0:
p++;
continue;
case 1:
sklad.NAME = value;
p++;
continue;
case 2:
sklad.TYPE = value;
p++;
continue;
case 3:
sklad.QUANTITY = stoi(value);
p++;
continue;
case 4:
sklad.COST = stoi(value);
resArr.push_back(sklad);
sklad.clear();
p = 0;
continue;
}
}
fin.close();
return resArr;
}
fout.open("database.txt");
if (!fout.is_open())
{
cout << "Під час відкриття файлу сталася помилка :(" << endl;
return;
}
if (sel == 1)
{
while (getchar() != '\n');
cout << "Вкажіть назву товару: ";
getline(cin, arr[number].NAME);
}
if (sel == 2)
{
while (getchar() != '\n');
cout << "Вкажіть одиницю виміру товару: ";
getline(cin, arr[number].TYPE);
}
if (sel == 3)
{
cout << "Вкажіть кількість одиниць товару: ";
cin >> arr[number].QUANTITY;
}
if (sel == 4)
{
cout << "Вкажіть ціну товару: ";
cin >> arr[number].COST;
}
write_record_to_file(arr);
return "\nОперація пройшла успішно\n";
}
arr.push_back(sklad);
write_record_to_file(arr);
return "------------\nЗапис додано\n------------\nНомер запису: " + to_string(arr.size()) + "\nНазва товару : " +
sklad.NAME + '\n' + "Одиниця виміру товару : " + sklad.TYPE + '\n' + "Кількість одиниць товару : " +
to_string(sklad.QUANTITY) + '\n' + "Ціна одиниці товару : " + formatNum(sklad.COST) + " грн" + "\n------------\
n";
}
if (!resStr.empty())
{
return resStr;
}
return "\nЗАПИСІВ НЕ ЗНАЙДЕНО :( ";
}
if (!resStr.empty())
{
return resStr;
}
return "\nЗАПИСІВ НЕ ЗНАЙДЕНО :(\n";
}
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
vector<SKLAD> db{ parse_data() };
while (true)
{
int sel;
cout << "Виберіть операцію" << endl << "1.Додати запис" << endl << "2.Знайти товар по імені" << endl
<< "3.Переглянути всі записи в базі данних" << endl << "4.Видалити запис з бази данних" << endl <<
"5.Редагувати запис в базі данних" << endl;
cin >> sel;
if (sel == 1)
{
while (getchar() != '\n');
cout << create_record(db);
}
if (sel == 2)
{
while (getchar() != '\n');
cout << search_record_by_name(db);
}
if (sel == 3)
{
cout << view_all_record(db) << endl;
}
if (sel == 4)
{
int number;
cout << "Вкажіть номер запису: ";
cin >> number;
if (number >= 1)
{
number--;
}
if (!db[number].NAME.empty())
{
cout << delete_record(db, number);
}
}
if (sel == 5)
{
int number;
cout << "Вкажіть номер запису: ";
cin >> number;
if (number >= 1)
{
number--;
}
if (!db[number].NAME.empty())
{
while (getchar() != '\n');
cout << edit_record(db, number) << endl;
}
}
}
}