设计一个管理图书的简单程序

设计一个管理图书的简单程序,提供的基本功能包括:可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。为简单起见,描述一本书的信息包括:书号,书名,出版社和作者。


#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
class book
{
private:
    char id[10];
    char name[20];
    char press[30];
    char writer[10];
public:
    book(){};
    ~book(){};
    void set_id()
    {
        cout<<"id:"<<endl;
        cin>>id;
    }
    void set_name()
    {
        cout<<"name:"<<endl;
        cin>>name;
    }
    void set_press()
    {
        cout<<"press:"<<endl;
        cin>>press;
    }
    void set_writer()
    {
        cout<<"writer:"<<endl;
        cin>>writer;
    }
    string get_id()
    {
        return id;
    }
    string get_name()
    {
        return name;
    }
    string get_press()
    {
        return press;
    }
    string get_writer()
    {
        return writer;
    }
    void book_input();
    void book_search();
    void book_show();
};
void book::book_input()
{
    fstream f1("C:\\Personal\\Desktop\\C++实验\\实验四\\图书馆\\book.dat",ios_base::out|ios_base::app);
    book B;
    cout<<"输入book信息"<<endl;
    B.set_id();
    B.set_name();
    B.set_press();
    B.set_writer();

    f1.write(reinterpret_cast<char*>(&B),sizeof(B));
    f1.flush();
    f1.close();
}
void book::book_search()
{
    fstream f1("C:\\Personal\\Desktop\\C++实验\\实验四\\图书馆\\book.dat",ios_base::in|ios_base::app);
    book B;
    char book_name[20];
    cout<<"输入书名:"<<endl;
    cin>>book_name;
    while(f1.read(reinterpret_cast<char*>(&B),sizeof(B)));
    {
        if(!strcmp(book_name,B.get_name().c_str()))//.c_str() 将string型转化为
        {
            cout << "书号:" << B.get_id() << "书名:" << B.get_name() << "出版社:" << B.get_press() << "作者:" << B.get_writer() << endl;
        }
    }
    f1.close();
}
void book::book_show()
{
    fstream f1("C:\\Personal\\Desktop\\C++实验\\实验四\\图书馆\\book.dat",ios_base::in);
    fstream f2("C:\\Personal\\Desktop\\C++实验\\实验四\\图书馆\\book.dat",ios_base::in);
    book B;
    book A;
    int flag=0; //标记不同
    int sp_flag=0;
    int sp_number=0;
    while(f1.read(reinterpret_cast<char*>(&B),sizeof(B)))
    {
        while(f2.read(reinterpret_cast<char*>(&A),sizeof(A)))
            {
                if(strcmp(A.get_name().c_str(),B.get_name().c_str())==0)
                {
                    cout << "书号:" << A.get_id() << "书名:" << A.get_name() << "出版社:" <<A.get_press() << "作者:" << A.get_writer() << endl;
                }
                else if(flag==0)
                {
                    flag=1;    //出现不同的书
                    sp_number=sp_flag;
                }
                sp_flag+=1;
            }
            if(flag==0)
            {
                break;
            }
            flag=0;
            f1.seekg(sp_number);
            f2.close();
            f2.open("C:\\Personal\\Desktop\\C++实验\\实验四\\图书馆\\book.dat",ios_base::in);
            f2.seekg(sp_number);
    }
    f1.close();
    f2.close();
}
int main()
{
    book A;
    int n;
    while(1)
    {
         cout << "              简易图书管理系统           " << endl;
        cout << endl;
        cout << "      添加书目请输入1 " << endl;
        cout << "      查询书目请输入2     " << endl;
        cout << "      显示相同的书输入3  " << endl;
        cout << "      程序结束请输入4    " << endl;
        cin >> n;

        switch (n)
        {
            case 1:A.book_input();break;
            case 2:A.book_search();break;
            case 3:A.book_show();break;
            case 4:return 0;
        }
    }
    return 0;
}

阅读更多

没有更多推荐了,返回首页