开发者社区> 问答> 正文

c++如何实现图书管理系统

c++
http://codepad.org/dskHmrVU 能看到代码吗?
为什么增加借阅者信息之后安回车自己就退了。还有,程序哪里有问题,谢谢

展开
收起
a123456678 2016-03-05 14:10:17 3119 0
1 条回答
写回答
取消 提交回答
  • #include <iostream> 
    using namespace std;
    #include <string> 
    #include <fstream>
    #include <iomanip>  
    
    
    const int Maxr=300; 
    
    const int Maxb=300; 
    
    const int Maxbor=10;
    
    
    
    
    
    
    
    
    class Reader 
    { 
    private: 
    int tag; 
    int No; 
    char name[20]; 
    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; 
    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(10) << No <<setw(15) << 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 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() 
    { 
    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; 
    
    
    
    
    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 0 退出"<<endl; 
    cin >> choice; 
    switch (choice) 
    { 
    case '1': 
    cout << "输入借阅者学号:"; 
    cin >> readerid; 
    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; 
    } r->disp(); 
    break; 
    break; 
    case '5': 
    disp(); 
    break; 
    
    default:cout<<"信息错误,请重新输入:";
        break; 
    } 
    } 
    
    class Book 
    { 
    private: 
    float price; 
    char author[10]; 
    int tag; 
    int No; 
    char place[40];
    char name[20]; 
    int onshelf; 
    public: 
    Book(){} 
    char *getname() { return name; } 
    int getNo(){ return No; } 
    char *getplace(){ return place;}
    int gettag(){ return tag; } 
    char*getauthor(){return author;} 
    char getprice(){return price;} 
    void setname(char na[]) 
    { 
    strcpy(name,na); 
    } 
    void setauthor(char au[]) 
    { 
    strcpy(author,au);} 
    void delbook(){ tag=1;} 
    void addbook(int N,char *na,char*au,int pr,char *bp)
    { 
    tag=0; 
    No=N; 
    price=pr; 
    strcpy(author,au); 
    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) <<"作者: "<<author<<setw(18)<<"单价: "<<price<<setw(10) <<(onshelf==1? "有现存":"已借完") <<endl; 
    } 
    };  
    class BDatabase 
    { 
    
    private: 
    int top;
    Book book[Maxb]; 
    public: 
    BDatabase() 
    { 
    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*au,int pr,char *bp) 
    { 
    Book *p=query(n); 
    if (NULL==p) 
    { 
    top++; 
    book[top].addbook(n,na,au,pr,bp); 
    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() 
    { 
    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 bauthor[10];
    int bprice; 
    char bname[40]; 
    int bookid; 
    char bplace[40];
    Book *b; 
    
    
    
    cout <<"\n\n\n\t\t\t图书信息"<<endl<<endl; cout<<"\t\t1 增加图书信息\n \t\t2 修改图书信息\n\t\t3 删除图书信息\n\t\t4 查询图书信息\n\t\t0 退出"<<endl; 
    cin >> choice; 
    switch (choice) 
    { 
    case '1': 
    cout << "输入图书检索号:"<<endl; 
    cin >> bookid; 
    cout << "输入图书书名:"<<endl; 
    cin >> bname; 
    cout<<" 输入作者名:"; 
    cin>>bauthor;
    cout << "输入图书价格:"<<endl; 
    cin >> bprice; 
    cout << "输入图书出版社:"<<endl; 
    cin >> bplace; 
    addbook(bookid,bname,bauthor,bprice,bplace); 
    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; 
    
    default:cout<<"信息错误,请重新输入:"; 
    } 
    } 
    
    void main()
    { 
    char choice; 
    int bookid,readerid; 
    RDatabase ReaderDB; 
    Reader *r; 
    BDatabase BookDB; 
    Book *b; 
    
    
    
    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\t0 退出"<<endl; 
    cin >> choice; 
    switch (choice) 
    { 
    case '1': 
    cout <<"\t\t\t1 借书\n\n\t\t\t2 还书\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<<"借阅者学号:";
        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 '2':
        BookDB.bookdata();
    break; 
    case '3': 
    ReaderDB.readerdata(); 
    break; 
    default:cout<<"信息错误,请从新输入:"; 
    } 
    }
    2019-07-17 18:53:25
    赞同 1 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载