1

Тема: Вивід з файлу

Доброго вечора, маю отаке завдання: Написати програму, яка буде додавати у текстовий файл введену з
клавіатури інформацю. Слід передбачити можливість вибору
користувачем режиму роботи: додавання чи відображення даних (меню).
Забезпечити зберігання даних у файлі у вигляді структурованої таблиці за
допомогою засобів форматування. При виводі на екран має відображатися
шапка з інформацією в якій колонці які дані відображаються. У файлі має
зберігатися лише структурована інформація без шапки.
З клавіатури вводиться прізвище, ім‘я і розмір
депозиту, а у файл виводиться прізвище, ім‘я і розмір
депозиту за 1, 3, 6 і 12 місяці з урахуванням ставки по
депозитам на рівні 4% на місяць.
написав програму:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>


using namespace std;

struct Deposit {
    string surname;
    string name;
    double amount;
};

const double vidsotok = 1.04;

void addDataToFile(fstream& file, const Deposit& deposit);
void displayDataFromFile(fstream& file);

void addDataToFile(fstream& file, const Deposit& deposit) {

    file << left << setw(20) << deposit.surname
        << left << setw(20) << deposit.name
        << right << setw(10) << deposit.amount;

        


    double deposit1Month = deposit.amount * vidsotok;
    double deposit3Months = deposit1Month * pow(vidsotok,3);
    double deposit6Months = deposit1Month * pow(vidsotok, 6);
    double deposit12Months = deposit1Month * pow(vidsotok, 12);

    file << right << setw(10) << deposit1Month
        << right << setw(10) << deposit3Months
        << right << setw(10) << deposit6Months
        << right << setw(10) << deposit12Months << endl;
}

void displayDataFromFile(fstream& file) {

    string surname;
    string name;
    double amount;
    double deposit1Month;
    double deposit3Months;
    double deposit6Months;
    double deposit12Months;
    
    
    
    cout << left << setw(20) << "Surname"
        << left << setw(20) << "Name"
        << right << setw(10) << "Amount"
        << right << setw(10) << "1 Month"
        << right << setw(10) << "3 Months"
        << right << setw(10) << "6 Months"
        << right << setw(10) << "12 Months" << endl;
    
}

int main() {
    fstream outFile("deposits.txt", ios::app);
    fstream inFile("deposits.txt");
    int choice;
    bool exitMenu = false;
    
    do {
        cout <<"Select an option:\n"
            << "1. Add data\n"
            << "2. Display data\n"
            << "3. Exit\n";
        cin >> choice;
        switch (choice) {
        case 1:
        {
            Deposit deposit;
            cout << "Enter surname: ";
            cin >> deposit.surname;
            cout << "Enter name: ";
            cin >> deposit.name;
            cout << "Enter amount: ";
            cin >> deposit.amount;
            addDataToFile(outFile, deposit);

            break;
        }
        case 2:
        {

            displayDataFromFile(inFile);
            break;
        }
        case 3:
        {
            exitMenu = true;
            break;
        }
        default:
        {
            cout << "Invalid option\n";
        }
        }
        
        
    }
    while (!exitMenu);
    outFile.close();
    inFile.close();

    return 0;
}

У блоці displayDataFromFile, потрібно зробити щоб воно читало з файлу та виводило на екран всі дані, спробував багато методів котрі знав, getline та простим читанням cin, нічого не виходило, підкажіть будь ласка як ще це можна зробити

2

Re: Вивід з файлу

1 дані про депозити потрібно зберігати в якомусь наборі даних.
2 запис/читання файлу на початку/кінці програми
3 внесення/відображення реалізувати з набору даних
4 зберігати структури краще у бінарний файл, але можна і текстовий

Прихований текст
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <iomanip>
#include <sstream>


using namespace std;

struct Deposit {
    string surname;
    string name;
    double amount;
    double deposit1Month;
    double deposit3Months;
    double deposit6Months;
    double deposit12Months;
};

const double vidsotok = 1.04;

void addDataToFile(std::string clientsTable, std::vector<Deposit>& clients);
void displayData(std::vector<Deposit>& clients);
void LoadClientsFromFile(std::string clientsTable, std::vector<Deposit> &clients);

void addDataToFile(std::string clientsTable, std::vector<Deposit>& clients) {
    fstream outFile("d:\\deposits.txt", ios::app);
    std::vector<Deposit>::iterator it;
    for (it = clients.begin(); it != clients.end(); ++it) {
        outFile << left << setw(20) << (*it).surname
            << left << setw(20) << (*it).name
            << right << setw(10) << (*it).amount
            << right << setw(10) << (*it).deposit1Month
            << right << setw(10) << (*it).deposit3Months
            << right << setw(10) << (*it).deposit6Months
            << right << setw(10) << (*it).deposit12Months << endl;
    }

    outFile.close();
}

void displayData(std::vector<Deposit>& clients) {

    cout << left << setw(20) << "Surname"
        << left << setw(20) << "Name"
        << right << setw(10) << "Amount"
        << right << setw(10) << "1 Month"
        << right << setw(10) << "3 Months"
        << right << setw(10) << "6 Months"
        << right << setw(10) << "12 Months" << endl;

    std::vector<Deposit>::iterator it;
    for (it = clients.begin(); it != clients.end(); ++it) {
        cout << left << setw(20) << (*it).surname
            << left << setw(20) << (*it).name
            << right << setw(10) << (*it).amount
            << right << setw(10) << (*it).deposit1Month
            << right << setw(10) << (*it).deposit3Months
            << right << setw(10) << (*it).deposit6Months
            << right << setw(10) << (*it).deposit12Months
            << endl;
    }
}

int main() {

    std::vector<Deposit> clients;
    clients.clear();
    std::string clientsTable = "d:\\deposits.txt";
    LoadClientsFromFile(clientsTable, clients);
    int choice = 3;
    bool exitMenu = false;

    do {
        cout << "Select an option:\n"
            << "1. Add data\n"
            << "2. Display data\n"
            << "3. Exit\n";
        cin >> choice;
        switch (choice) {
        case 1:
        {
            Deposit deposit;
            cout << "Enter surname: ";
            cin >> deposit.surname;
            cout << "Enter name: ";
            cin >> deposit.name;
            cout << "Enter amount: ";
            cin >> deposit.amount;

            deposit.deposit1Month = deposit.amount * vidsotok;
            deposit.deposit3Months = deposit.deposit1Month * pow(vidsotok, 3);
            deposit.deposit6Months = deposit.deposit1Month * pow(vidsotok, 6);
            deposit.deposit12Months = deposit.deposit1Month * pow(vidsotok, 12);

            clients.push_back(deposit);
            break;
        }
        case 2:
        {
            displayData(clients);
            break;
        }
        case 3:
        {
            exitMenu = true;
            addDataToFile(clientsTable, clients);
            break;
        }
        default:
        {
            cout << "Invalid option\n";
        }
        }
    } while (!exitMenu);

    return 0;
}

void LoadClientsFromFile(std::string clientsTable, std::vector<Deposit>& clients) {
    clients.clear();
    std::string str;
    fstream inFile("d:\\deposits.txt");
    while (std::getline(inFile, str)) {
        Deposit client;
        stringstream ss(str);
        ss >> client.surname >> client.name >> client.amount >> client.deposit1Month >> client.deposit3Months >> client.deposit6Months >> client.deposit12Months;
        clients.push_back(client);
    }
    inFile.close();
}
Подякували: Kenny1