我正在创建一个图书馆管理系统。系统意味着从.dat文件写入和读取。但是,系统在将用户输入写入dat文件时遇到问题。这意味着在同一行写下书名,作者姓名和书条形码,然后当用户输入另一本书时,它意味着将其添加到另一行,但它只是覆盖现有数据,当我使用选项显示时它显示的所有数据都是混乱的文本。
有些人可以告诉我我做错了什么。
我已经包含了一些代码。 Main.cpp的
#include <iostream>
#include <string>
#include "Library.h"
int main() {
Library lib1;
while(1)
{
std::cout << "* 1 Add a new book *\n";
std::cout << "* 2 Show all books *\n";
std::cin >> name;
bookOption = name;
switch(bookOption)
{
case '1':
{
lib1.insertBook();
break;
}
case '2':
{
lib1.showallBooks();
break;
}
}
return 0;
};
Book.h
#ifndef BOOK_H_
#define BOOK_H_
#include <string>
#include <iostream>
#include <fstream>
#include "Media.h"
class Book : public Media
{
public:
std::string author;
public:
void newBook();
void report();
};
Book.cpp
#include <string>
#include "Book.h"
#include "Student.h"
void Book::newBook()
{
std::cout<<"Enter the Book Name: \n";
getline(std::cin,name);
std::cin.ignore();
std::cout<<"Enter the Name of Author: \n";
getline(std::cin,author);
std::cin.ignore();
std::cout<<"Enter the book barcode: \n";
getline(std::cin,barcode);
std::cin.ignore();
std::cout<<"Book Added to the library\n";
}
void Book::report()
{
std::cout<<"______________"<<" __________________"<<" _________________\n";
std::cout<<"|Name of Book| "<<"|Director of Book| "<<"|Barcode of Book| \n";
std::cout<<name<<author<<barcode<<"\n";
}
Media.h
#ifndef MEDIA_H_
#define MEDIA_H_
#include <string>
class Media
{
public:
std::string barcode;
std::string name;
std::string num;
std::string retBarcode()
{
return barcode;
}
};
#endif
Library.h
#ifndef _Library_H_
#define _Library_H_
#include <string>
#include <stdio.h>
class Library
{
public:
void insertBook();
void showallBooks();
};
#endif
Library.cpp
void Library::insertBook()
{
std::ofstream bookData("book.dat", std::ios::app);
if(!bookData)
{
std::cout<<"cannot open the user.dat file. \n";
}
book1.newBook();
bookData << book1.name << book1.author << book1.barcode<<std::endl;
bookData.close();
}
void Library::showallBooks()
{
std::ifstream bookData("book.dat");
if(!bookData)
{
std::cout<<"Error: File could not be opened. \n";
}
while(!bookData.eof())
{
bookData >> book1.name >> book1.author >> book1.barcode;
book1.report();
}
bookData.close();
}
答案 0 :(得分:0)
如果您要使用>>
从文件中提取数据,则文件中的数据之间需要有空格。目前您正在使用:
bookData << book1.name << book1.author << book1.barcode<<std::endl;
这会将您的所有数据放在一行中,而它们之间没有任何内容。所以“foo”“foobar”“条形码”在文件中变成“foofoobarbarcode”,这将使用>>
运算符回读。如果您将代码更改为:
bookData << book1.name << " " << book1.author << " " << book1.barcode << std::endl;
现在数据将按空格分隔,并且可以轻松读回。