HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    图书管理系统设计

    发布时间:2023-03-31 14:10:48     稿源: 创意岭    阅读: 50        当前文章关键词排名出租

    大家好!今天让创意岭的小编来大家介绍下关于图书管理系统设计的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    创意岭作为行业内优秀企业,服务客户遍布全国,相关业务请拨打175-8598-2043,或微信:1454722008

    本文目录:

    图书管理系统设计

    一、c语言课程设计 图书管理系统

    高级语言程序设计(2)课程设计

       

    一 程序设计说明书

    【设计题目】 图书馆借阅管理

    【问题描述】图书馆,适合用C++面向对象的功能来描述。图书馆管理系统分为借书、还书、图书管理和读者服务等四个部分。设计一个读者类Reader,记录每个读者基本信息;读者库类Rdatabase,记录所有读者信息;图书类Book, 记录每本书的基本信息;图书库类Bdatabase, 记录所有图书信息。

    【基本要求】

    1读者库类RDatabase中,其构造函数中,将read.txt文件中所有读入读者记录rede[]中。处理完毕,在析构函数中将read[]中的所有未删记录写入到read.txt中。

    2图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。处理完毕,在析构函数中将book[]中的所有未删记录写入到book.txt中。

    3 利用构造函数完成读者和图书数据初始化,完成内存分配。程序结束前,析构函数完成所申请的堆内存空间。

    4 编写主函数,对所编写的矩阵类进行全面测试。要求用户界面采用菜单方式。测试中需要读者和图书数据通过I/O流从磁盘文件读入,同时显示在屏幕上。得到的数据通过I/O流写入磁盘文件保存,同时显示在屏幕上。

    5 源程序中要有充分的注释,报告中要有详细的流程图和文字材料。

    【类的设计】

    该程序包含了四个类,如下:

    1.Reader类,有读者的基本管理功能,具有以下私有数据:

    int tag;//删除标记 1:已删;0:未删

    int no;//读者编号

    char name[10];//读者姓名

    int borbook[Maxbor];//所借图书

    2.读者库类Rdatabase, 具有以下私有数据:

    int top;//读者记录指针

    Reader read[Maxr];//读者记录

    3.图书库类Book,有一本图书的基本功能,有以下私有数据:

    int tag;//删除标记 1:已删;0:未删

    int no;//图书编号

    char name[20];//书名

    int onshelf;//是否在架 1在架 0已借

    4.图书库类BDatabase,有以下私有数据:

    int top;//图书记录指针

    Book book[Maxb];//图书记录

    【特殊函数的设计说明】

    构造函数

    1.Reader类中构造函数Reader(),初始化函数;

    2.读者库类RDatabase中,其构造函数Rdatabase(),将read.txt文件中所有读入读者记录rede[]中。

    3.Book类中构造函数Book(),初始化函数;

    4.图书库类BDatabase中,其构造函数中,将book.txt文件中所有读入图书记录book[]中。

     

    拷贝构造函数

    Reader类中的拷贝构造函数将getname()的返回值读者姓名拷贝到setname()中,Book类中的拷贝构造函数将getname()函数的返回值图书名拷贝到图书名设置函数setname()中。

     

    析构函数

    1.读者库类RDatabase中,其析构函数~Rdatabase(),将read[]中的所有未删记录写入到read.txt中;

    2.图书库类BDatabase中,其析构函数~Bdatabase(),将book[]中的所有未删记录写入到book.txt中。

     

    运算符重载

    重载了“=”,当比较读者编号和图书编号时,重载;重载位运算符“〈〈”和“〉〉”等。

     

    【主要函数算法流程图】

     

    【程序的使用方法】

    1.进入操作页面,按提示操作;

    2.首先,新增图书和读者信息,之后就可以对以存在的信息进行操作;

    3.操作当中,可以随时增加,更改和删除图书或读者信息;

    4.当选择退出时,进行清屏。

     

    二 程序上机调试报告

    【语法错误及其排除】

    1.在敲程序时,有很多拼写错误,例好多处把Readdata()误打Readdate();结束的分号,在不同的输入法状态下输入,这些小错误刚开始很难发现,不过有了经验,就很容易了。

    2.创建新的构造函数时,使用出现了错误。重载构造函数要注意函数的访问权限,结果就不会出现错误。

    【算法错误及其排除】

    1.读者类中借书操作函数中,采用循环语句时判断读者已借图书量时for(int i=0;i<Maxbor;i++)误写为for(int i=1;i<Maxbor;i++),使循环发生错误。

    2.指针使用错误,指针b和r混淆,导致编译错误得到“error C2660: 'retbook' : function does not take 1 parameters”错误报告。

    三 程序测试结果

    【收获及体会】

    除了课堂外,课程设计是最能学到东西的,最考验人的。在做课程设计这段时间,时刻都感觉自己有好多不懂,要学的太多了!经过这次课程设计,让我对C++这门语言有了更深的认识,操作能力有了提高。要想得到敲的代码运行出来后的满足感,需要耐心细心,毅力以及充沛的体力。只有经过多次编辑,多次编译,再多次运行,才能编写出更好的程序,有时候需要多次的更正才达到所要的运行结果。学习编程,需要多揣摩,实践,实践,再实践,编程技能才能更上一层楼,此外还得多向高手请教!

    【源程序代码】

    //********************

    //图书馆借阅管理

    //班级:

    //学号:

    //姓名:

    //********************

    #include<iostream.h>

    #include<iomanip.h>

    #include<string.h>

    #include<fstream.h>

    const int Maxr=1000;//最多的读者

    const int Maxb=10000;//最多的图书

    const int Maxbor=8;//每位读者最多借8本书

    class Reader //读者类

    {

    int tag;//删除标记 1已删;0未删

    int no;//读者编号

    char name[10];//读者姓名

    int borbook[Maxbor];//所借图书

    public :

    Reader(){}//构造函数

    char *getname(){return name;}//获取读者姓名

    int gettag(){return tag;}//获取删除标记

    int getno(){return no;}//获取读者编号

    void setname(char na[])//设置读者姓名

    {

    strcpy(name,na);

    }

    void delbook(){tag=1;}//设置删除标记

    void addreader(int n,char *na)//增加读者

    {

    tag=0;

    no=n;

    strcpy(name,na);

    for(int i=0;i<Maxbor;i++)

    borbook[i]=0;

    }

    void borrowbook(int bookid)//借书操作

    {

    for(int i=0;i<Maxbor;i++)

    {

    if(borbook[i]==0)

    {

    borbook[i]=bookid;

    }

    }

    }

    int retbook(int bookid)//还书操作

    {

    for(int i=0;i<Maxbor;i++)

    {

    if (borbook[i]==bookid)

    {

    borbook[i]=0;

    return 1;

    }

    }

    return 0;

    }

    void disp()//输出读者信息

    {

    cout<<setw(5)<<no<<setw(10)<<name<<"借书编号:";

    for(int i=0;i,Maxbor;i++)

    if(borbook[i]!=0)

    cout<<borbook[i]<<endl;

    }

    };

     

    class RDatabase//读者库类

    {

    int top;//读者记录指针

    Reader read[Maxr];//读者记录

    public:

    RDatabase()//构造函数,将reader.txt读到read[]中

    {

    Reader s;

    top=-1;

    fstream file("reader.txt",ios::in);

    while(1)

    {

    file.read((char*)&s,sizeof(s));

    if(!file)break;

    top++;

    read[top]=s;

    }

    file.close();

    }

    void clear()//删除所有读者信息

    {

    top=-1;

    }

    int addreader(int n,char *na)//添加读者,检查是否已存在

    {

    Reader *p=query(n);

    if(p==NULL)

    {

    top++;

    read[top].addreader(n,na);

    return 1;

    }

    return 0;

    }

    Reader*query(int readerid)//按编号查找

    {

    for(int i=0;i<=top;i++)

    if(read[i].getno()==readerid&&read[i].gettag==0)

    return &read[i];

    return NULL;

    }

    void disp()//删除读者所有信息

    {

    for(int i=0;i<=top;i++)

    read[i].disp();

    }

    void readerdata();//读者库维护

    ~RDatabase()//析构函数,将read[]写入reader.txt文件中

    {

    fstream file("reader.txt",ios::out);

    for(int i=0;i<=top;i++)

    if(read[i].gettag()==0)

    file.write((char*)&read[i],sizeof(read[i]));

    file.close();

    }

    };

    void RDatabase::readerdata()

    {

    int choice=1;

    char rname[20];

    int readerid;

    Reader*r;

    while(choice!=0)

    {

    cout<<"读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;

    cin>>choice;

    switch(choice)

    {

    case 1:

    cout<<"请输入读者编号:";

    cin>>readerid;

    cout<<"读入读者姓名:";

    cin>>rname;

    addreader(readerid,rname);

    break;

    case 2:

    cout<<"请输入读者编号:";

    cin>>readerid;

    r=query(readerid);

    if(r==NULL)

    {

    cout<<"读者不存在"<<endl;

    break;

    }

    cout<<"请输入新读者姓名:";

    cin>>rname;

    r->setname(rname);

    break;

    case 3:

    cout<<"请输入读者编号:";

    cin>>readerid;

    r=query(readerid);

    if(r==NULL)

    {

    cout<<"读者不存在"<<endl;

    break;

    }

    r->delbook();

    break;

    case 4:

    cout<<"请输入读者编号:";

    cin>>readerid;

    r=query(readerid);

    if(r==NULL)

    {

    cout<<"该读者编号不存在"<<endl;

    break;

    }

    case 5:

    disp();

    break;

    case 6:

    clear();

    break;

    }

    }

    }

     

    class Book//图书类

    {

    int tag;//删除标记 1:已删;0:未删

    int no;//图书编号

    char name[20];//书名

    int onshelf;//是否在架 1在架 0已借

    public:

    Book(){}

    char*getname(){return name;}//获取读者姓名

    int getno(){return no;}//获取图书编号

    int gettag(){return tag;}//获取删除标记

    void setname(char na[])//设置书名

    {

    strcpy(name,na);

    }

    void delbook(){tag=1;}//删除图书

    void addbook(int n,char*na)//增加图书

    {

    tag=0;

    no=n;

    strcpy(name,na);

    onshelf=1;

    }

    int borrowbook()//借书操作

    {

    if(onshelf==1)

    {

    onshelf=0;

    return 1;

    }

    return 0;

    }

    void retbook()//还书操作

    {

    onshelf=1;

    }

    void disp()//输出图书

    {

    cout<<setw(6)<<no<<setw(18)<<name<<setw(10)<<(onshelf==1?"在架":"已借")<<endl;

    }

    };

     

    class BDatabase//图书库类

    {

    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)//增加图书

    {

    Book*p=query(n);

    if(p==NULL)

    {

    top++;

    book[top].addbook(n,na);

    return 1;

    }

    cout<<"新增成功!"<<endl;

    }

    Book*query(int bookid)//查找图书

    {

    for(int i=0;i<=top;i++)

    if(book[i].getno()==bookid&&book[i].gettag()==0)

    return NULL;

    }

    void bookdata();//图书库维护

    void disp()

    {

    for(int i=0;i<=top;i++)

    if(book[i].gettag()==0)

    book[i].disp();

    }

    ~BDatabase()//析构函数,将book[]写入book.txt文件中

    {

    fstream file("book.txt",ios::out);

    for (int i=0;i<=top;i++)

    if(book[i].gettag()==0)

    file.write((char*)&book[i],sizeof(book[i]));

    file.close();

    }

    };

    void BDatabase::bookdata()

    {

    int choice;

    char bname[40];

    int bookid;

    Book *b;

    while(choice!=0)

    {

    cout<<"图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出"<<endl;

    cin>>choice;

    switch(choice)

    {

    case 1:

    cout<<"输入图书编号:";

    cin>>bookid;

    cout<<"输入图书书名:";

    cin>>bname;

    addbook(bookid,bname);

    break;

    case 2:

    cout<<"输入图书编号:";

    cin>>bookid;

    b=query(bookid);

    if(b==NULL)

    {

    cout<<"该图书不存在"<<endl;

    break;

    }

    cout<<"输入新书名:";

    cin>>bname;

    b->setname(bname);

    cout<<"更名成功!"<<endl;

    break;

    case 3:

    cout<<"输入图书编号:";

    cin>>bookid;

    b=query(bookid);

    if(b==NULL)

    {

    cout<<"该图书不存在!"<<endl;

    break;

    }

    b->delbook();

    break;

    case 4:

    cout<<"请输入图书编号:";

    cin>>bookid;

    b=query(bookid);

    if(b==NULL)

    {

    cout<<"该书不存在!"<<endl;

    break;

    }

    b->disp();

    break;

    case 5:

    disp();

    break;

    case 6:

    clear();

    break;

    }

    }

    }

     

    void main()

    {

    int choice=1,bookid,readerid;

    RDatabase ReaderDB;

    Reader *r;

    BDatabase BookDB;

    Book *b;

    while(choice!=0)

    {

    cout<<" 1借书      "<<endl;

    cout<<" 2还书      "<<endl;

    cout<<" 3图书维护  "<<endl;

    cout<<" 4读者维护  "<<endl;

    cout<<" 0离开      "<<endl;

    cin>>choice;

    switch(choice)

    {

    case 1:

    cout<<"借书,请输入读者编号:";

    cin>>readerid;

    cout<<"图书编号:";

    cin>>bookid;

    r=ReaderDB.query(readerid);

    if(r==NULL)

    {

    cout<<"哈哈,借书成功!";

    break;

    }

    b=BookDB.query(bookid);

    if(b==NULL)

    {

    cout<<"不存在该书!"<<endl;

    break;

    }

    if(b->borrowbook()==0)

    {

    cout<<"该书已借"<<endl;

    break;

    }

    r->borrowbook(b->getno());

    break;

    cout<<"借书成功!"<<endl;

    case 2:

    cout<<"还书,请输入读者编号:";

    cin>>readerid;

    cout<<"请输入图书编号;";

    cin>>bookid;

    r=ReaderDB.query(readerid);

    if(r==NULL)

    {

    cout<<"不存在该读者!"<<endl;

    break;

    }

    b->retbook();

    r->retbook(b->getno());

    break;

    cout<<"还书成功!"<<endl;

    case 3:

    BookDB.bookdata();

    break;

    case 4:

    ReaderDB.readerdata();

    break;

    }

    }

    }

    【输出结果】

    1借书

    2还书

    3图书管理

    4读者服务

    0退出

    3

    图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    1

    输入图书编号:1111

    输入图书书名:武林外传

    新增成功!

    图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    1

    输入图书编号:2222

    输入图书书名:今夜无眠

    新增成功!

    图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    0

    1借书

    2还书

    3图书管理

    4读者服务

    0退出

    4

    读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    1

    请输入读者编号:001

    读入读者姓名:周强

    读者服务 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    0

    1借书

    2还书

    3图书管理

    4读者服务

    0退出

    1

    借书,请输入读者编号:001

    图书编号:1111

    哈哈,借书成功! 1借书

    2还书

    3图书管理

    4读者服务

    0退出

    2

    还书,请输入读者编号:001

    请输入图书编号;1111

    还书成功!

    1借书

    2还书

    3图书管理

    4读者服务

    0退出

    3

    图书管理 1新增 2更该 3删除 4查找 5显示 6全删 0退出

    2

    输入图书编号:2222

    输入新书名:金庸全集

    更名成功!

    Press any key to continue

    这样可以么?

    二、如何设计一个图书借阅管理系统数据库ER图?

    1、要了解ER图的核心要素:实体,属性,关系,实体就是一个个对象,比如猫,属性就是实体所有的某个属性,比如猫的性别,关系就是实体和实体之间或者实体内部之间的关系。

    2、要了解ER图中怎么表示1中描述的三个核心要素:在ER图中矩形代表实体,椭圆代表属性,菱形代表关系,各个形状之间用线段连接。

    3、以同样的方式定义课程实体后建关系表,拖进关系线段,连接两个实体,注意两头都是红色才是真正的连接起来了。会自动在关系属性里建立起连接。

    扩展资料:

    图书借阅管理系统注意事项:

    一个实体型转换为一个关系模式。关系的属性:实体型的属性,关系的码:实体型的码。

    一个1:1联系可以转换为一个独立的关系模式,也可以与任何一端对应的关系模式合并。一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。一个m:n联系转换为一个关系模式。

    三个或三个以上实体间的一个多元联系可以转换为一个关系模式,具有相同码的关系模式可合并,同一实体集的实体之间的联系即自联系,也可以按1:1,1:n和m:n三种情况分别处理。

    参考资料来源:百度百科-图书管理系统

    三、C语言程序设计的图书管理系统

    #include <iostream>

    #include <iomanip>

    #include <string>

    #include <fstream>//输入/输出文件流类

    using namespace std;

    const int Maxr=100;//最多的读者

    const int Maxb=100;//最多的图书

    const int Maxbor=5;//每位读者最多借五本书

    //读者类,实现对读者的信息的描述

    class Reader

    {

    private:

    int tag; //删除标记 1:已删 0:未删

    int no; //读者编号

    char name[10]; //读者姓名

    int borbook[Maxbor];//所借图书

    public:

    Reader() {}

    char *getname() //获取姓名

    int gettag() //获取删除标记

    int getno() //获取读者编号

    void setname(char na[]) //设置姓名

    {

    strcpy(name,na);

    }

    void delbook()//设置删除标记 1:已删 0:未删

    void addreader(int n,char *na)//增加读者

    {

    tag=0;

    no=n;

    strcpy(name,na);

    for(int i=0;i<Maxbor;i++)

    borbook[i]=0;

    }

    void borrowbook(int bookid)//借书操作

    {

    for(int i=0;i<Maxbor;i++)

    {

    if (borbook[i]==0)

    {

    borbook[i]=bookid;

    return;

    }

    }

    }

    int retbook(int bookid)//还书操作

    {

    for(int i=0;i<Maxbor;i++)

    {

    if(borbook[i]==bookid)

    {

    borbook[i]=0;

    return 1;

    }

    }

    return 0;

    }

    void disp()//读出读者信息

    {

    cout << setw(5) << no <<setw(10) << name<<"借书编号:[";

    for(int i=0;i<Maxbor;i++)

    if(borbook[i]!=0)

    cout << borbook[i] << "|";

    cout << "]"<<endl;

    }

    };

    //读者类库,实现建立读者的个人资料

    class RDatabase

    {

    private:

    int top; //读者记录指针

    Reader read[Maxr];//读者记录

    public:

    RDatabase() //构造函数,将reader.txt读到read[]中

    {

    Reader s;

    top=-1;

    fstream file("reader.txt",ios::in);//打开一个输入文件

    while (1)

    {

    file.read((char *)&s,sizeof(s));

    if (!file)break;

    top++;

    read[top]=s;

    }

    file.close(); //关闭 reader.txt

    }

    void clear()//删除所有读者信息

    {

    top=-1;

    }

    int addreader(int n,char *na)//添加读者时先查找是否存在

    {

    Reader *p=query(n);

    if (p==NULL)

    {

    top++;

    read[top].addreader(n,na);

    return 1;

    }

    return 0;

    }

    Reader *query(int readerid)//按编号查找

    {

    for (int i=0;i<=top;i++)

    if (read[i].getno()==readerid &&

    read[i].gettag()==0)

    {

    return &read[i];

    }

    return NULL;

    }

    void disp() //输出所有读者信息

    {

    for (int i=0;i<=top;i++)

    read[i].disp();

    }

    void readerdata();//读者库维护

    ~RDatabase() //析构函数,将read[]写到reader.txt文件中

    {

    fstream file("reader.txt",ios::out);

    for (int i=0;i<=top;i++)

    if (read[i].gettag()==0)

    file.write((char *)&read[i],sizeof(read[i]));

    file.close();

    }

    };

    void RDatabase::readerdata()

    {

    char choice;

    char rname[20];

    int readerid;

    Reader *r;

    while (choice!='0')

    {

    cout <<"\n\n\t\t\t读 者 维 护\n\n\n\t\t 1 新 增\n\n\t\t 2 更 改\n\n\t\t 3 删 除\n\n\t\t 4 查 找\n\n\t\t 5 显 示\n\n\t\t 6 全 删\n\n\t\t 0 退 出"<<endl;

    cin >> choice;

    switch (choice)

    {

    case '1':

    cout << "输入读者编号:";

    cin >> readerid;

    cout << "输入读者姓名:";

    cin >> rname;

    addreader (readerid,rname);

    break;

    case '2':

    cout << "输入读者编号:";

    cin >> readerid;

    r=query(readerid);

    if (r==NULL)

    {

    cout << " 该读者不存在 "<<endl;

    break;

    }

    cout << "输入新的姓名:";

    cin >> rname;

    r->setname(rname);

    break;

    case '3':

    cout << " 输入读者编号:";

    cin >> readerid;

    r=query(readerid);

    if (r==NULL)

    {

    cout <<" 该读者不存在" << endl;

    break;

    }

    r->delbook();

    break;

    case '4':

    cout << "读入读者编号:";

    cin >> readerid;

    r=query(readerid);

    if (r==NULL)

    {

    cout <<"该读者不存在"<< endl;

    break;

    }

    r->disp();

    break;

    case '5':

    disp();

    break;

    case '6':

    clear();

    break;

    default:cout<<"输入错误,请从新输入:";break;

    }

    }

    }

    //图书类,实现对图书的描述,图书的编号,书名,借出,还入等

    class Book

    {

    private:

    int tag;//删除标记 1:已删 0:未删

    int no;//图书编号

    char name[20];//书名

    int onshelf;//是否再架 1:再架 2:已借

    public:

    Book(){}

    char *getname() //获取姓名

    int getno()//获取图书编号

    int gettag()//获取删除标记

    void setname(char na[])//设置书名

    {

    strcpy(name,na);

    }

    void delbook()//删除图书

    void addbook(int n,char *na)//增加图书

    {

    tag=0;

    no=n;

    strcpy(name,na);

    onshelf=1;

    }

    int borrowbook()//借书操作

    {

    if (onshelf==1)

    {

    onshelf=0;

    return 1;

    }

    return 0;

    }

    void retbook()//还书操作

    {

    onshelf=1;

    }

    void disp()//输出图书

    {

    cout << setw(6) << no << setw(18) << name << setw(10)

    <<(onshelf==1? "在架":"已借") <<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)//增加图书

    {

    Book *p=query(n);

    if (NULL==p)

    {

    top++;

    book[top].addbook(n,na);

    return 1;

    }

    return 0;

    }

    Book *query(int bookid)//查找图书

    {

    for (int i=0;i<=top;i++)

    if (book[i].getno()==bookid &&book[i].gettag()==0)

    {

    return &book[i];

    }

    return NULL;

    }

    void bookdata();//图书库维护

    void disp()

    {

    for (int i=0;i<=top;i++)

    if (book[i].gettag()==0)

    book[i].disp();

    }

    ~BDatabase()//析构函数,将book[]写到book.txt文件中

    {

    fstream file("book.txt",ios::out);

    for (int i=0;i<=top;i++)

    if (book[i].gettag()==0)

    file.write((char *)&book[i],sizeof(book[i]));

    file.close();

    }

    };

    void BDatabase::bookdata()

    {

    char choice;

    char bname[40];

    int bookid;

    Book *b;

    while (choice!='0')

    {

    cout <<"\n\n\n\t\t\t图 书 维 护 "<<endl<<endl;

    cout<<"\t\t1 新 增\n \t\t2 更 改\n\t\t3 删 除\n\t\t4 查 找\n\t\t5 显 示\n\t\t6 全 删\n\t\t0 退 出"<<endl;

    cin >> choice;

    switch (choice)

    {

    case '1':

    cout << "输入图书编号:"<<endl;

    cin >> bookid;

    cout << "输入图书书名:"<<endl;

    cin >> bname;

    addbook(bookid,bname);

    break;

    case '2':

    cout << "输入图书编号:"<<endl;

    cin >> bookid;

    b=query(bookid);

    if (b==NULL)

    {

    cout << " 该图书不存在 "<<endl;

    break;

    }

    cout << "输入新的书名:"<<endl;

    cin >> bname;

    b->setname(bname);

    break;

    case '3':

    cout <<" 读入图书编号:"<<endl;

    cin >> bookid;

    b=query(bookid);

    if (b==NULL)

    {

    cout <<" 该图书不存在" << endl;

    break;

    }

    b->delbook();

    break;

    case '4':

    cout << " 读入图书编号:"<<endl;

    cin >> bookid;

    b=query(bookid);

    if (b==NULL)

    {

    cout <<" 该图书不存在"<< endl;

    break;

    }

    b->disp();

    break;

    case '5':

    disp();

    break;

    case '6':

    clear();

    break;

    default:cout<<"输入错误,请从新输入:";

    }

    }

    }

    //main() 函数的实现,程序的主界面的引导

    void main()

    {

    char choice;

    int bookid,readerid;

    RDatabase ReaderDB;

    Reader *r;

    BDatabase BookDB;

    Book *b;

    while(choice!='0')

    {

    cout <<endl<<endl<<"\t\t\t 图 书 管 理 系 统\n\n\n";

    cout <<"\t\t\t1 借 书\n\n\t\t\t2 还 书 \n\n\t\t\t3 图 书 维 护\n\n\t\t\t4 读 者 维 护\n\n\t\t\t0 离 开"<<endl;

    cin >> choice;

    switch (choice)

    {

    case '1':

    cout <<" 借书 读者编号:";

    cin >>readerid;

    cout <<" 图书编号: ";

    cin >>bookid;

    r=ReaderDB.query(readerid);//按编号查找

    if (NULL==r)

    {

    cout <<" 不存在该读者,不能借书"<< endl;

    break;

    }

    b=BookDB.query(bookid);

    if (b==NULL)

    {

    cout <<" 不存在该图书,不能借书"<< endl;

    break;

    }

    if (b->borrowbook()==0)

    {

    cout << " 该图书已借出,不能借书"<< endl;

    break;

    }

    r->borrowbook(b->getno());

    break;

    case '2':

    cout<<"还书\n 读者编号:";

    cin >>readerid;

    cout << " 图书编号:";

    cin >>bookid;

    r=ReaderDB.query(readerid);

    if (r==NULL)

    {

    cout <<" 不存在该读者,不能还书" << endl;

    break;

    }

    b=BookDB.query(bookid);

    if (b==NULL)

    {

    cout <<" 不存在该图书,不能还书" <<endl;

    break;

    }

    b->retbook();

    r->retbook(b->getno());

    break;

    case '3':

    BookDB.bookdata();

    break;

    case '4':

    ReaderDB.readerdata();

    break;

    default:cout<<"输入错误,请从新输入:";

    }

    }

    }

    四、c语言 图书信息管理系统设计

    通过测试!

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    #include<conio.h>

    #define MAX 100

    struct Student

    {

    int num;/*登录号*/

    char name[100];/*书名*/

    char author[100];/*作者名*/

    char fn[100];/*分类号*/

    char place[100];/*出版单位*/

    char day[100];/*出版时间*/

    float money;/*价格*/

    }stu[MAX];

    main()/*主函数*/

    {

    void Input();/*输入*/

    void Display();/*输出*/

    void Find();/*查找*/

    void Modify();/*删除*/

    void Change();/*修改*/

    int n;

    for(;;)

    {

    printf("\n");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

    printf("※ ※\n");

    printf("※ 欢迎来到图书信息管理系统 ※\n");

    printf("※ ※\n");

    printf("※ ※\n");

    printf("※ 主菜单 ※\n");

    printf("※ ※\n");

    printf("※ ▲1.图书信息录入 ▲ ※\n");

    printf("※ ※\n");

    printf("※ ▲2.图书信息浏览 ▲ ※\n");

    printf("※ ※\n");

    printf("※ ▲3.图书信息查询 ▲ ※\n");

    printf("※ ※\n");

    printf("※ ▲4.图书信息删除 ▲ ※\n");

    printf("※ ※\n");

    printf("※ ▲5.图书信息修改 ▲ ※\n");

    printf("※ ※\n");

    printf("※ ▲6.退出系统 ▲ ※\n");

    printf("※ ※\n");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");

    printf("请输入选择项(1-6):");

    scanf("%d",&n);

    printf("\n\n\n\n");

    if(n>0&&n<7)

    {

    switch(n)

    {

    case 1:Input();break;

    case 2:Display();break;

    case 3:Find();break;

    case 4:Modify();break;

    case 5:Change();break;

    case 6:printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");

    printf("※ ※\n");

    printf("※ 谢谢使用! ※\n");

    printf("※ 再见! ※\n");

    printf("※ ※\n");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");

    exit(0);

    }

    }

    else

    {

    printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");

    printf("※ ※\n");

    printf("※ 输入错误! ※\n");

    printf("※ 请退出! ※\n");

    printf("※ ※\n");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※\n");

    break;

    }

    }

    }

    void Find()/*查找*/

    {

    FILE *fp;

    int i;

    int choose,t;

    char ans[100];

    do

    {

    printf("1.按书名查找\n");

    printf("2.按作者名查找\n");

    printf("返回主菜单(其他数字)\n");

    scanf("%d",&choose);

    if(choose==1)

    {

    printf("输入所查书名:\n");

    scanf("%s",ans);

    t=-1;

    if(choose==1)

    {

    for(i=0;i<MAX;i++) if(strcmp(ans,stu[i].name)==0)

    {

    t=i;

    fp=fopen("student","rb");

    for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)

    printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);

    }

    }

    if(t==-1) printf("不存在该信息\n");

    }

    else if(choose==2)

    {

    printf("输入所查作者名:\n");

    scanf("%s",ans);

    t=-1;

    if(choose==2)

    {

    for(i=0;i<MAX;i++)

    if(strcmp(ans,stu[i].author)==0)

    { t=i;

    fp=fopen("student","rb");

    for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)

    printf("%d %s %s %s %s %s %f\n",stu[t].num,stu[t].name,stu[t].author,stu[t].fn,stu[t].place,stu[t].day,stu[t].money);

    }

    }

    if(t==-1) printf("不存在该信息\n");

    }

    else return;

    }while(1);

    }

    void Display()/*输出*/

    {

    FILE *fp;

    int i;

    fp=fopen("student","rb");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

    printf(" 图书列表\n");

    printf("-----------------------------------------------------------\n");

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    printf("-----------------------------------------------------------\n");

    for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)

    {

    printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);

    }

    fclose(fp);

    }

    void Input()/*输入*/

    {

    FILE *fp;

    int n;

    fp=fopen("student","wb");

    for(n=0;n<MAX;n++)

    {

    printf("n=%d 输入序号n(当输入n=-1时,返回),n=",n++);

    scanf("%d",&n);

    if(n==-1)

    {

    fclose(fp);

    return;

    }

    else

    {

    printf("请输入登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);

    fwrite(&stu[n],sizeof(struct Student),1,fp);

    }

    }

    fclose(fp);

    }

    void Modify()/*删除*/

    {

    FILE *fp;

    int i,flag,n,s,j;

    fp=fopen("student","rb+");

    rewind(fp);

    printf(" 图书列表\n");

    printf("-----------------------------------------------------------\n");

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    printf("-----------------------------------------------------------\n");

    for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)

    {

    printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);

    printf("\n");

    }

    n=i;

    printf("输入待删除图书号:\n");

    scanf("%d",&s);

    for(i=0,flag=1;flag&&i<n;i++)

    {

    if(s==stu[i].num)

    {

    for(j=i;j<n-1;j++)

    {

    stu[j].num=stu[j+1].num;

    strcpy(stu[j].name,stu[j+1].name);

    strcpy(stu[j].author,stu[j+1].author);

    strcpy(stu[j].fn,stu[j+1].fn);

    strcpy(stu[j].place,stu[j+1].place);

    strcpy(stu[j].day,stu[j+1].day);

    stu[j].money=stu[j+1].money;

    }

    flag=0;

    }

    }

    if(!flag)

    n=n-1;

    else

    printf("没有此号\n");

    fp=fopen("student","wb");

    for(i=0;i<n;i++)

    fwrite(&stu[i],sizeof(struct Student),1,fp);

    fclose(fp);

    fp=fopen("student","r");

    printf(" 图书列表\n");

    printf("-----------------------------------------------------------\n");

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    printf("-----------------------------------------------------------\n");

    for(i=0;i<n;i++)

    {

    fread(&stu[i],sizeof(struct Student),1,fp);

    printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);

    printf("\n");

    }

    fclose(fp);

    }

    void Change()/*修改*/

    {

    FILE *fp;

    int i,num,n;

    int flag=0;

    printf("请输入要修改的图书号:");

    scanf("%d",&num);

    for(i=0;i<=MAX;i++)

    if(stu[i].num==num)

    {

    printf(" 图书列表\n");

    printf("-----------------------------------------------------------\n");

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    printf("-----------------------------------------------------------\n");

    printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);

    printf("-----------------------------------------------------------\n\n");

    n=i;

    flag=1;

    break;

    }

    if(flag==0)

    {

    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

    printf(" 输入错误!\n");

    printf(" 请返回!\n");

    printf("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

    return;

    }

    printf("\n\n\n");

    fp=fopen("student","rb+");

    fseek(fp,n*sizeof(struct Student),0);

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    scanf("%d%s%s%s%s%s%f",&stu[n].num,stu[n].name,stu[n].author,stu[n].fn,stu[n].place,stu[n].day,&stu[n].money);

    fwrite(&stu[i],sizeof(struct Student),1,fp);

    fclose(fp);

    fp=fopen("student","rb");

    printf(" 图书列表\n");

    printf("-----------------------------------------------------------\n");

    printf("登录号 书名 作者名 分类号 出版单位 出版时间 价格\n");

    printf("-----------------------------------------------------------\n");

    for(i=0;fread(&stu[i],sizeof(struct Student),1,fp)==1;i++)

    {

    printf("%6d %8s %8s %8s %8s %8s %8.2f\n",stu[i].num,stu[i].name,stu[i].author,stu[i].fn,stu[i].place,stu[i].day,stu[i].money);;

    }

    printf("-----------------------------------------------------------\n\n");

    fclose(fp);

    }

    以上就是关于图书管理系统设计相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    废墟图书馆进去就黑屏(废墟图书馆 进不去)

    畅销图书排行榜(畅销图书排行榜小说)

    图书馆室外景观设计

    bing最新版下载(bing安卓版下载)

    自媒体真能月入上万吗-(自媒体真能月入上万吗现在)