2 qq 22752755 qq_22752755 于 2015.07.08 10:46 提问

C++出现 unexpected end of file found
c++

下面是代码:

 #define StrNum 20
#define Type 20
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>        //输入输出文件流
using namespace std;
const int Maxb=100;       //最多可存储的图书


class Book
{
private:
    int lab;               //删除标记
    int num;               //图书编号
    int add;               //增加标记
    char number[StrNum];    //编号
    char bookname[StrNum];  //书名
    char bookkind[Type];    //图书类型
public:
    Book(){}
    char getkind()                 //获取图书类型
    {
        return bookkind[Type];
    }
    char getname()                 //获取书名
    {
        return  bookname[StrNum];
    }
    int getnum()                     //获取图书编号
    {
        return num;
    }
    int getlab()                    //获取删除标记
    {
        return lab;
    }
    void setname(char na[])         //设置书名
    {
        strcpy(bookname,na);
    }
    void setkind(char kin[])        //设置类型
    {
        strcpy(bookkind,kin);
    }
    void delbook()                  //删除图书
    {
        lab=1;
    }
    void addbook(int n,char *na,char *kin)    //增加图书
    {
        lab=0;
        num=n;
        strcpy(bookname,na);
        strcpy(bookkind,kin);
    }
    void disp()                     //输出图书
    {
        cout.flags (ios::left);     //设置对齐的标志位为左
        cout<<setw(15)<<num<<setw(20)<<bookname<<setw(15)<<bookkind<<endl;
    }
};

class BDatabase
{
private:
    int top;
    Book book[Maxb];                //图书记录
public:
    BDatabase()                     //构造函数,将book.txt读到book[]中
    {
        Book b;
        top=-1;
        fstream file("book.txt",ios::in);
        while (1)
        {
            file.read((char *)&b,sizeof(b));
            if (!file)
                break;
            top++;
            book[top]=b;
        }
        file.close();
    }
    void clear()                    //全删
    {
        top=-1;
    }
    int addbook(int n,char *na,char *kin)     //增加图书
    {
        Book *p=query(n);
        if(NULL==p)
        {
            top++;
            book[top].addbook(n,na,kin);
            return 1;
        }
        return 0;
    }
    Book *query(int bookid)          //查找图书
    {
        for(int i=0;i<=top;i++)
            if(book[i].getnum()==bookid&&book[i].getlab()==0)
            {
                return &book[i];
            }
            return NULL;
    }

    void disp()            //图书库
    {
        for(int i=0;i<=top;i++)
            if (book[i].getlab()==0)
                book[i].disp();
    }
    ~BDatabase()           //析构函数,将book[]写到book.txt中,实现文本的写入
    {
        fastream file("book.txt",ios::out);
        for(int i=0;i<=top;i++)
            if(book[i].getlab()==0)
                file.write((char*)&book[i],sizeof(book[i]));
            file.close();
    }
    void main()
    {
        BDatabase BookDB;
        char choice;
        char bname[40];
        char bkind[40];
        char newType[20];
        int bookid;
        Book *b;
        while (choice!='0')
        {
            cout<<"\t******************************************************************\n";
            cout<<"                                           \n\n";
            cout<<"\t\t\t图  书  管  理  系  统\n\n";
            cout<<"\t\t\t1    新增图书记录\n";
            cout<<"\t\t\t2    更改图书记录\n";
            cout<<"\t\t\t3    删除图书记录\n";
            cout<<"\t\t\t4    查找图书记录\n";
            cout<<"\t\t\t5    显示图书记录\n";
            cout<<"\t\t\t6    清空全部记录(慎用)\n";
            cout<<"\t\t\t0    退出系统\n";
            cout<<"                                           \n\n";
            cout<<"\t******************************************************************\n";
                cout<<"请选择(1,2,3,4,5,6,0):";
            cin>>choice;
            switch (choice)
            {
            case'1':
                cout<<"输入图书编号:"<<endl;
                cin>>bookid;
                cout<<"输入图书类型:"<<endl;
                cin>>newType;
                cout<<"输入图书书名:"<<endl;
                cin>>bname;
                BookDB.addbook(bookid,bname,newType);
                break;
            case'2':
                cout<<"输入图书编号:"<<endl;
                cin>>bookid;
                b=BookDB.query(bookid);
                if(b==NULL)
                {
                    cout<<"该图书不存在"<<endl;
                    break;
                }
                    cout<<"输入新的书名:"<<endl;
                cin>>bname;
                b->setname(bname);
                cout<<"输入新的类型:"<<endl;
                cin>>bkind;
                b->setkind(bkind);
                break;
            case'3':
                cout<<"读入图书编号:"<<endl;
                cin>>bookid;
                b=BookDB.query(bookid);
                if(b==NULL)
                {
                    cout<<"该图书不存在"<<endl;
                    break;
                }
                char tg1;
                cout<<"确定要删除此记录吗?(Y/N)"<<endl;
                cin>>tg1;
                if(tg1!='n'&&tg1!='N')
                {
                    b->delbook();
                    cout<<"已成功删除该书记录!"<<endl;
                    break;
                }
            case '4':
                cout<<"读入图书编号:"<<endl;
                cin>>bookid;
                b=BookDB.query(bookid);
                if(b==NULL)
                {
                    cout<<"该图书不存在"<<endl;
                    break;
                }
                cout<<"图书编号      图书名称            图书类型          \n";
                b->disp();
                break;
            case '5':
                cout<<"图书编号      图书名称            图书类型          \n";
                b->disp();
                break;
            case '6':
                char tg2;
                cout<<"确定要清空所有记录吗?(Y/N)"<<endl;
                cin>>tg2;
                if(tg2!='n'&&tg2!='N')
                {
                    BookDB.clear();
                    cout<<"已成功清空记录!"<<endl;
                    break;
                }
            case '0':
                break;
            default:cout<<"输入错误,请从新输入(数字为0~6):";
            }
        }
    }

5个回答

wcg1988923
wcg1988923   2015.07.08 11:00

BDatabase类定义没有分号

oyljerry
oyljerry   Ds   Rxr 2015.07.08 11:01

你的main函数怎么 放在BDatabase类里面,main函数需要单独出来

u012377333
u012377333   Rxr 2015.07.08 11:16

字面意思就是异常的文件结尾,你这个代码有两个问题,一个是main函数怎么能放在类声明里面的呢?
再就是类声明需要结束要有一个分号,就像你的book类一样。

frank_20080215
frank_20080215   2015.07.08 11:30

BDatabase类定义没有分号。请采纳wcg1988923的建议

GKatHere
GKatHere   2015.07.10 14:37

void main() 前面增加一行加个 };
汗. 你 } 格式都没对齐

Csdn user default icon
上传中...
上传图片
插入图片