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;
}