Как работать с VAR из файла? - PullRequest
0 голосов
/ 19 января 2019

Hyah, я пытаюсь написать приложение базы данных в cpp для управления библиотекой. Моя база данных находится в .txt, и у меня есть некоторые проблемы в начале моей работы. Вот мой класс Книга, где книгу можно добавлять и просматривать. Проблема в том, что у меня проблема с управлением ID книги. Я попытался получить последнюю строку, где хранится последний идентификатор, и увеличить его. Программа компилируется, но когда я пытался добавить книгу, она вылетала. я буду очень рад вашей помощи.

#include "Book.h"
#include <iostream>
#include <string>
#include <fstream>

using namespace std;



Book::Book()
{

}


Book::~Book()
{
}


void Book::add_book()
{
    cin.clear();
    cin.ignore();
    cout << "Podaj tytul ksiazki" << endl;
    getline(cin, title);
    cout << "Podaj autora" << endl;
    getline(cin, author);
    id = next_id();
    //adding to txt
    books_base.open("books_base.txt", ios::out | ios::app);
    books_base << title << endl;
    books_base << author << endl;
    books_base << id << endl;
    cout << "#ID dodanej ksiazki to:  " << id << endl;
    books_base.close();


}


int Book::next_id()
{

    int id = get_id();
    return id++;
}


void Book::view_book()
{
    int line_number;
    int book_number;
    string line;
    books_base.open("books_base.txt", ios::in);
    if (books_base.good() == false)
    {
        cout << "Nie udalo sie uzyskac dostepu do bazy" << endl;
    }
    cout << "Podaj id ksiazki" << endl;
    cin >> book_number;
    if (book_number == 0) line_number = book_number + 1;
    else if (book_number > 0) 
    {


    }

    while (getline(books_base, line))
    {
        switch (line_number)
        {
        case 1: title = line;                       break;
        case 2: author = line;                      break;
        case 3: id = atoi(line.c_str());            break;
        }
        line_number++;
    }
    cout << "Tytul ksiazki: " << title << endl;
    cout << "Autor ksiazki: " << author << endl;
    cout << "#ID:" << id << endl;

    books_base.close();
}

int Book::get_id()
{
    ifstream books_base("books_base.txt");
    string line, buffer[1];
    const size_t size = sizeof buffer / sizeof *buffer;
    size_t i = 0;
    //read all lines, load to buffer
    while (getline(books_base, line))
    {
        buffer[i] = line;
        if (i++ >= size)
        {
            i = 0;
        }
    }
    //sign line to var
    id = atoi(buffer[i].c_str());
    return id;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...