Пожалуйста помогите дописать программу в С++

  • вывода значений элементов структуры данных из файла в таблицу;
  • изменения всей записи, номер которого был введен пользователем
  • удаление всей записи, номер которого был введен пользователем
  • сортировки выбранным самостоятельно способом записей файла
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <iomanip>

const char FILE_NAME[] = "driver.txt";

using namespace std;

size_t strlen_utf8(const string& str);
string InputDriver();
int SaveDriver(string);
int PrintDriversTable();

int main() {
    setlocale(LC_ALL, "ukr");
    PrintDriversTable();
    int choice = 1;
    while (choice) {
        cout << "Додати водія в базу - 1, вивести дані на екран - 2, вихід - 0: ";
        cin >> choice;
        switch (choice) {
        case 1:
            SaveDriver(InputDriver());
            break;
        case 2:
            PrintDriversTable();
            break;
        case 0:
            break;
        default:
            cout << "Це не спрацювало, спробуйте повторити..." << endl;
        }
    }

    return 0;
}

int PrintDriversTable() {
    fstream in;
    in.open(FILE_NAME, ios::in);
    if (!in) {
        cout << "Файлу з даними водіїв не існує, створюємо новий..." << endl;
        string header = "№Авто Прізвище Ім'я По-батькові Сплачено";
        SaveDriver(header);
        return 0;
    }

    string line;
    while (getline(in, line))
    {
        std::istringstream iss(line);
        string carNumber, surname, name, fatherName, penalty;
        if (!(iss >> carNumber >> surname >> name >> fatherName >> penalty)) { cout << "Error" << endl; break; } // якщо формат файлу не відповідає очікуваному

        //танці з бубном, щоб вирівняти стовпчики для UTF8, оскільки функція length дає довжину в байтах, а не в символах
        cout << setw(10 + (carNumber.length() - strlen_utf8(carNumber))) << setfill(' ') <<
            carNumber << setw(20 + (surname.length() - strlen_utf8(surname))) << surname <<
            setw(20 + (name.length() - strlen_utf8(name))) << name <<
            setw(20 + (fatherName.length() - strlen_utf8(fatherName))) << fatherName <<
            setw(10 + (penalty.length() - strlen_utf8(penalty))) << penalty << endl;
    }
}

int SaveDriver(string data) {
    fstream out;
    out.open(FILE_NAME, ios::out | ios::app);
    if (!out) return -1;
    out << data;
    out.close();
    return 0;
}

string InputDriver() {
    string carNumber, surname, name, fatherName, str = "";
    bool penalty = 0;
    cout << "Введіть номер автомобіля: ";
    cin >> carNumber;
    cout << "Введіть прізвище водія: ";
    cin >> surname;
    cout << "Ім'я: ";
    cin >> name;
    cout << "По-батькові: ";
    cin >> fatherName;
    cout << "Чи сплачено штраф? (1 - так, 0 - ні): ";
    cin >> penalty;

    str = carNumber + " " + surname + " " + name + " " + fatherName + " ";
    if (penalty)
        str += "Так\n";
    else
        str += "Ні\n";

    return str;
}

size_t strlen_utf8(const string& str) {
    size_t length = 0;
    for (char c : str) {
        if ((c & 0xC0) != 0x80) {
            ++length;
        }
    }
    return length;
}

Ответы (0 шт):