HOME 首頁
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    圖書管理系統(tǒng)設(shè)計

    發(fā)布時間:2023-03-31 14:10:48     稿源: 創(chuàng)意嶺    閱讀: 50        當(dāng)前文章關(guān)鍵詞排名出租

    大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于圖書管理系統(tǒng)設(shè)計的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀企業(yè),服務(wù)客戶遍布全國,相關(guān)業(yè)務(wù)請撥打175-8598-2043,或微信:1454722008

    本文目錄:

    圖書管理系統(tǒng)設(shè)計

    一、c語言課程設(shè)計 圖書管理系統(tǒng)

    高級語言程序設(shè)計(2)課程設(shè)計

       

    一 程序設(shè)計說明書

    【設(shè)計題目】 圖書館借閱管理

    【問題描述】圖書館,適合用C++面向?qū)ο蟮墓δ軄砻枋?。圖書館管理系統(tǒng)分為借書、還書、圖書管理和讀者服務(wù)等四個部分。設(shè)計一個讀者類Reader,記錄每個讀者基本信息;讀者庫類Rdatabase,記錄所有讀者信息;圖書類Book, 記錄每本書的基本信息;圖書庫類Bdatabase, 記錄所有圖書信息。

    【基本要求】

    1讀者庫類RDatabase中,其構(gòu)造函數(shù)中,將read.txt文件中所有讀入讀者記錄rede[]中。處理完畢,在析構(gòu)函數(shù)中將read[]中的所有未刪記錄寫入到read.txt中。

    2圖書庫類BDatabase中,其構(gòu)造函數(shù)中,將book.txt文件中所有讀入圖書記錄book[]中。處理完畢,在析構(gòu)函數(shù)中將book[]中的所有未刪記錄寫入到book.txt中。

    3 利用構(gòu)造函數(shù)完成讀者和圖書數(shù)據(jù)初始化,完成內(nèi)存分配。程序結(jié)束前,析構(gòu)函數(shù)完成所申請的堆內(nèi)存空間。

    4 編寫主函數(shù),對所編寫的矩陣類進(jìn)行全面測試。要求用戶界面采用菜單方式。測試中需要讀者和圖書數(shù)據(jù)通過I/O流從磁盤文件讀入,同時顯示在屏幕上。得到的數(shù)據(jù)通過I/O流寫入磁盤文件保存,同時顯示在屏幕上。

    5 源程序中要有充分的注釋,報告中要有詳細(xì)的流程圖和文字材料。

    【類的設(shè)計】

    該程序包含了四個類,如下:

    1.Reader類,有讀者的基本管理功能,具有以下私有數(shù)據(jù):

    int tag;//刪除標(biāo)記 1:已刪;0:未刪

    int no;//讀者編號

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

    int borbook[Maxbor];//所借圖書

    2.讀者庫類Rdatabase, 具有以下私有數(shù)據(jù):

    int top;//讀者記錄指針

    Reader read[Maxr];//讀者記錄

    3.圖書庫類Book,有一本圖書的基本功能,有以下私有數(shù)據(jù):

    int tag;//刪除標(biāo)記 1:已刪;0:未刪

    int no;//圖書編號

    char name[20];//書名

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

    4.圖書庫類BDatabase,有以下私有數(shù)據(jù):

    int top;//圖書記錄指針

    Book book[Maxb];//圖書記錄

    【特殊函數(shù)的設(shè)計說明】

    構(gòu)造函數(shù)

    1.Reader類中構(gòu)造函數(shù)Reader(),初始化函數(shù);

    2.讀者庫類RDatabase中,其構(gòu)造函數(shù)Rdatabase(),將read.txt文件中所有讀入讀者記錄rede[]中。

    3.Book類中構(gòu)造函數(shù)Book(),初始化函數(shù);

    4.圖書庫類BDatabase中,其構(gòu)造函數(shù)中,將book.txt文件中所有讀入圖書記錄book[]中。

     

    拷貝構(gòu)造函數(shù)

    Reader類中的拷貝構(gòu)造函數(shù)將getname()的返回值讀者姓名拷貝到setname()中,Book類中的拷貝構(gòu)造函數(shù)將getname()函數(shù)的返回值圖書名拷貝到圖書名設(shè)置函數(shù)setname()中。

     

    析構(gòu)函數(shù)

    1.讀者庫類RDatabase中,其析構(gòu)函數(shù)~Rdatabase(),將read[]中的所有未刪記錄寫入到read.txt中;

    2.圖書庫類BDatabase中,其析構(gòu)函數(shù)~Bdatabase(),將book[]中的所有未刪記錄寫入到book.txt中。

     

    運(yùn)算符重載

    重載了“=”,當(dāng)比較讀者編號和圖書編號時,重載;重載位運(yùn)算符“〈〈”和“〉〉”等。

     

    【主要函數(shù)算法流程圖】

     

    【程序的使用方法】

    1.進(jìn)入操作頁面,按提示操作;

    2.首先,新增圖書和讀者信息,之后就可以對以存在的信息進(jìn)行操作;

    3.操作當(dāng)中,可以隨時增加,更改和刪除圖書或讀者信息;

    4.當(dāng)選擇退出時,進(jìn)行清屏。

     

    二 程序上機(jī)調(diào)試報告

    【語法錯誤及其排除】

    1.在敲程序時,有很多拼寫錯誤,例好多處把Readdata()誤打Readdate();結(jié)束的分號,在不同的輸入法狀態(tài)下輸入,這些小錯誤剛開始很難發(fā)現(xiàn),不過有了經(jīng)驗,就很容易了。

    2.創(chuàng)建新的構(gòu)造函數(shù)時,使用出現(xiàn)了錯誤。重載構(gòu)造函數(shù)要注意函數(shù)的訪問權(quán)限,結(jié)果就不會出現(xiàn)錯誤。

    【算法錯誤及其排除】

    1.讀者類中借書操作函數(shù)中,采用循環(huán)語句時判斷讀者已借圖書量時for(int i=0;i<Maxbor;i++)誤寫為for(int i=1;i<Maxbor;i++),使循環(huán)發(fā)生錯誤。

    2.指針使用錯誤,指針b和r混淆,導(dǎo)致編譯錯誤得到“error C2660: 'retbook' : function does not take 1 parameters”錯誤報告。

    三 程序測試結(jié)果

    【收獲及體會】

    除了課堂外,課程設(shè)計是最能學(xué)到東西的,最考驗人的。在做課程設(shè)計這段時間,時刻都感覺自己有好多不懂,要學(xué)的太多了!經(jīng)過這次課程設(shè)計,讓我對C++這門語言有了更深的認(rèn)識,操作能力有了提高。要想得到敲的代碼運(yùn)行出來后的滿足感,需要耐心細(xì)心,毅力以及充沛的體力。只有經(jīng)過多次編輯,多次編譯,再多次運(yùn)行,才能編寫出更好的程序,有時候需要多次的更正才達(dá)到所要的運(yùn)行結(jié)果。學(xué)習(xí)編程,需要多揣摩,實(shí)踐,實(shí)踐,再實(shí)踐,編程技能才能更上一層樓,此外還得多向高手請教!

    【源程序代碼】

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

    //圖書館借閱管理

    //班級:

    //學(xué)號:

    //姓名:

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

    #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;//刪除標(biāo)記 1已刪;0未刪

    int no;//讀者編號

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

    int borbook[Maxbor];//所借圖書

    public :

    Reader(){}//構(gòu)造函數(shù)

    char *getname(){return name;}//獲取讀者姓名

    int gettag(){return tag;}//獲取刪除標(biāo)記

    int getno(){return no;}//獲取讀者編號

    void setname(char na[])//設(shè)置讀者姓名

    {

    strcpy(name,na);

    }

    void delbook(){tag=1;}//設(shè)置刪除標(biāo)記

    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()//構(gòu)造函數(shù),將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();//讀者庫維護(hù)

    ~RDatabase()//析構(gòu)函數(shù),將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<<"讀者服務(wù) 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;//刪除標(biāo)記 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;}//獲取刪除標(biāo)記

    void setname(char na[])//設(shè)置書名

    {

    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()//構(gòu)造函數(shù),將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();//圖書庫維護(hù)

    void disp()

    {

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

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

    book[i].disp();

    }

    ~BDatabase()//析構(gòu)函數(shù),將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圖書維護(hù)  "<<endl;

    cout<<" 4讀者維護(hù)  "<<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;

    }

    }

    }

    【輸出結(jié)果】

    1借書

    2還書

    3圖書管理

    4讀者服務(wù)

    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讀者服務(wù)

    0退出

    4

    讀者服務(wù) 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出

    1

    請輸入讀者編號:001

    讀入讀者姓名:周強(qiáng)

    讀者服務(wù) 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出

    0

    1借書

    2還書

    3圖書管理

    4讀者服務(wù)

    0退出

    1

    借書,請輸入讀者編號:001

    圖書編號:1111

    哈哈,借書成功! 1借書

    2還書

    3圖書管理

    4讀者服務(wù)

    0退出

    2

    還書,請輸入讀者編號:001

    請輸入圖書編號;1111

    還書成功!

    1借書

    2還書

    3圖書管理

    4讀者服務(wù)

    0退出

    3

    圖書管理 1新增 2更該 3刪除 4查找 5顯示 6全刪 0退出

    2

    輸入圖書編號:2222

    輸入新書名:金庸全集

    更名成功!

    Press any key to continue

    這樣可以么?

    二、如何設(shè)計一個圖書借閱管理系統(tǒng)數(shù)據(jù)庫ER圖?

    1、要了解ER圖的核心要素:實(shí)體,屬性,關(guān)系,實(shí)體就是一個個對象,比如貓,屬性就是實(shí)體所有的某個屬性,比如貓的性別,關(guān)系就是實(shí)體和實(shí)體之間或者實(shí)體內(nèi)部之間的關(guān)系。

    2、要了解ER圖中怎么表示1中描述的三個核心要素:在ER圖中矩形代表實(shí)體,橢圓代表屬性,菱形代表關(guān)系,各個形狀之間用線段連接。

    3、以同樣的方式定義課程實(shí)體后建關(guān)系表,拖進(jìn)關(guān)系線段,連接兩個實(shí)體,注意兩頭都是紅色才是真正的連接起來了。會自動在關(guān)系屬性里建立起連接。

    擴(kuò)展資料:

    圖書借閱管理系統(tǒng)注意事項:

    一個實(shí)體型轉(zhuǎn)換為一個關(guān)系模式。關(guān)系的屬性:實(shí)體型的屬性,關(guān)系的碼:實(shí)體型的碼。

    一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與任何一端對應(yīng)的關(guān)系模式合并。一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨(dú)立的關(guān)系模式,也可以與n端對應(yīng)的關(guān)系模式合并。一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式。

    三個或三個以上實(shí)體間的一個多元聯(lián)系可以轉(zhuǎn)換為一個關(guān)系模式,具有相同碼的關(guān)系模式可合并,同一實(shí)體集的實(shí)體之間的聯(lián)系即自聯(lián)系,也可以按1:1,1:n和m:n三種情況分別處理。

    參考資料來源:百度百科-圖書管理系統(tǒng)

    三、C語言程序設(shè)計的圖書管理系統(tǒng)

    #include <iostream>

    #include <iomanip>

    #include <string>

    #include <fstream>//輸入/輸出文件流類

    using namespace std;

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

    const int Maxb=100;//最多的圖書

    const int Maxbor=5;//每位讀者最多借五本書

    //讀者類,實(shí)現(xiàn)對讀者的信息的描述

    class Reader

    {

    private:

    int tag; //刪除標(biāo)記 1:已刪 0:未刪

    int no; //讀者編號

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

    int borbook[Maxbor];//所借圖書

    public:

    Reader() {}

    char *getname() //獲取姓名

    int gettag() //獲取刪除標(biāo)記

    int getno() //獲取讀者編號

    void setname(char na[]) //設(shè)置姓名

    {

    strcpy(name,na);

    }

    void delbook()//設(shè)置刪除標(biāo)記 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;

    }

    };

    //讀者類庫,實(shí)現(xiàn)建立讀者的個人資料

    class RDatabase

    {

    private:

    int top; //讀者記錄指針

    Reader read[Maxr];//讀者記錄

    public:

    RDatabase() //構(gòu)造函數(shù),將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(); //關(guān)閉 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();//讀者庫維護(hù)

    ~RDatabase() //析構(gòu)函數(shù),將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讀 者 維 護(hù)\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;

    }

    }

    }

    //圖書類,實(shí)現(xiàn)對圖書的描述,圖書的編號,書名,借出,還入等

    class Book

    {

    private:

    int tag;//刪除標(biāo)記 1:已刪 0:未刪

    int no;//圖書編號

    char name[20];//書名

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

    public:

    Book(){}

    char *getname() //獲取姓名

    int getno()//獲取圖書編號

    int gettag()//獲取刪除標(biāo)記

    void setname(char na[])//設(shè)置書名

    {

    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;

    }

    };

    //圖書庫類,實(shí)現(xiàn)對圖書的維護(hù),查找,刪除等

    class BDatabase

    {

    private:

    int top; //圖書記錄指針

    Book book[Maxb]; //圖書記錄

    public:

    BDatabase()//構(gòu)造函數(shù),將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();//圖書庫維護(hù)

    void disp()

    {

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

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

    book[i].disp();

    }

    ~BDatabase()//析構(gòu)函數(shù),將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圖 書 維 護(hù) "<<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() 函數(shù)的實(shí)現(xiàn),程序的主界面的引導(dǎo)

    void main()

    {

    char choice;

    int bookid,readerid;

    RDatabase ReaderDB;

    Reader *r;

    BDatabase BookDB;

    Book *b;

    while(choice!='0')

    {

    cout <<endl<<endl<<"\t\t\t 圖 書 管 理 系 統(tǒng)\n\n\n";

    cout <<"\t\t\t1 借 書\n\n\t\t\t2 還 書 \n\n\t\t\t3 圖 書 維 護(hù)\n\n\t\t\t4 讀 者 維 護(hù)\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語言 圖書信息管理系統(tǒng)設(shè)計

    通過測試!

    #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()/*主函數(shù)*/

    {

    void Input();/*輸入*/

    void Display();/*輸出*/

    void Find();/*查找*/

    void Modify();/*刪除*/

    void Change();/*修改*/

    int n;

    for(;;)

    {

    printf("\n");

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

    printf("※ ※\n");

    printf("※ 歡迎來到圖書信息管理系統(tǒng) ※\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.退出系統(tǒng) ▲ ※\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("返回主菜單(其他數(shù)字)\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(當(dāng)輸入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);

    }

    以上就是關(guān)于圖書管理系統(tǒng)設(shè)計相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。


    推薦閱讀:

    廢墟圖書館進(jìn)去就黑屏(廢墟圖書館 進(jìn)不去)

    暢銷圖書排行榜(暢銷圖書排行榜小說)

    圖書館室外景觀設(shè)計

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

    自媒體真能月入上萬嗎-(自媒體真能月入上萬嗎現(xiàn)在)