课程设计——图书管理新系统

来源:互联网 发布:淘宝素材主图怎么做 编辑:程序博客网 时间:2024/06/04 18:02
/***********************************************
*版权所有 (c++)2015 于东林
*文件名:main.cpp
*文件标识 :无
*内容摘要:图书馆体系统代码
*作者:于东林
*完成日期:2015 12.29
************************************************/

//主登陆界面

void denglu()         {    cout<<"请输入管理员账号:";    cin>>m;    cout<<"请输入密码:";    getPass(n);    bool blogon=false;    while(blogon != true)    {        if(strcmp(m,"admin")==0&&strcmp(n,"admin")==0)        {            system("cls");            main1();            blogon=true;            break;        }        else        {            system("cls");            cout<<"管理员账号或密码错误,请重新输入"<<endl;            denglu();        }    }}int main()   //主登陆界面{    //system("color f5");    cout<<"请输入管理员账号和密码\n"<<endl;    denglu();    return 0;}
//进入图书馆理菜单,在此处可以选择操作

#include "touwenjian.h"char m[100];char n[100];void main1(){    system("color f9");    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\t     【 1 借 书 管 理 】\n\n\t\t\t     【 2 还 书 管 理 】\n\n\t\t\t     【 3 图 书 管 理 】 \n\n\t\t\t     【 4 读 者 管 理 】\n\n\t\t\t     【 0 离 开 系 统 】"<<endl;        cin >> choice;        switch (choice)        {        case '1':            cout <<" 借书 读者学号:";            cin >>readerid;            cout <<" 图书编号: ";            cin >>bookid;            r=ReaderDB.query(readerid);//按编号查找            if (NULL==r)            {                cout <<" 不存在该读者,不能借书" ;                system("pause");                system("cls");                break;            }            b=BookDB.query(bookid);            if (b==NULL)            {                cout <<" 不存在该图书,不能借书" ;                system("pause");                system("cls");                break;            }            if (b->borrowbook()==0)            {                cout << " 该图书已借出,不能借书" ;                system("pause");                system("cls");                break;            }            r->borrowbook(b->getno());            cout<<"借书成功";            system("pause");            system("cls");            break;        case '2':            cout<<"还书\n 读者学号:";            cin >>readerid;            cout << " 图书编号:";            cin >>bookid;            r=ReaderDB.query(readerid);            if (r==NULL)            {                cout <<" 不存在该读者,不能还书";                system("pause");                system("cls");                break;            }            b=BookDB.query(bookid);            if (b==NULL)            {                cout <<" 不存在该图书,不能还书" ;                system("pause");                system("cls");                break;            }            b->retbook();            r->retbook(b->getno());            cout<<"还书成功";            system("pause");            system("cls");            break;        case '3':            system("cls");            BookDB.bookdata();            break;        case '4':            system("cls");            ReaderDB.readerdata();            break;        default:            cout<<"输入错误";            system("pause");            system("cls");        }    }}
//图书类,实现对图书的描述,图书的编号,书名,借出,还入等

class Book{private:    int tag;//删除标记 1:已删 0:未删    int no;//图书编号    char name[20];//书名    int onshelf;//是否再架 1:再架 2:已借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{private:    int top; //图书记录指针    Book book[Maxb]; //图书记录public:    BDatabase()//构造读取二进制函数,将book.txt读到book[]中    {        Book b;        top=-1;        ifstream infile("book.txt",ios::binary);        if(!infile)        {            cerr<<"open error"<<endl;            abort();        }        while (1)        {            infile.read((char *)&b,sizeof(b));            if (!infile) break;            top++;            book[top]=b;        }        infile.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)//查找图书    {        int i=0;        //for (int i=0; i<=top; i++)        while(i<=top)        {            if (book[i].getno()==bookid &&book[i].gettag()==0)            {                return &book[i];            }            i++;        }        return NULL;    }    void bookdata();//图书库维护    void disp()    {        for (int i=0; i<=top; i++)            if (book[i].gettag()==0)                book[i].disp();    }


//读者管理系统可以添加学生学号,姓名进行绑定,以便于借书
//读者类,实现对读者的信息的描述

class Reader{private:    int tag; //删除标记 1:已删 0:未删    long long no; //读者学号    char name[10]; //读者姓名    int borbook[Maxbor];//所借图书public:    Reader(){}    char *getname()    {        return name;   //获取姓名    }    int gettag()    {        return tag;   //获取删除标记    }    int getno()    {        return no;   //获取读者学号号    }    void delbook()    {        tag=1;    }//设置删除标记 1:已删 0:未删    void addreader(long long 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;        ifstream infile("reader.txt",ios::binary);//打开一个输入文件        if (!infile)        {            cerr<<"open error"<<endl;            abort();        }        while (1)        {            infile.read((char *)&s,sizeof(s));            if (!infile) break;            top++;            read[top]=s;        }        infile.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文件中    {        ofstream outfile("reader.txt",ios::binary|ios::trunc);        if(!outfile)        {            cerr<<"open error"<<endl;            abort();        }        for (int i=0; i<=top; i++)            if (read[i].gettag()==0)                outfile.write((char *)&read[i],sizeof(read[i]));        outfile.close();    }};//这是输出图书馆理菜单:void RDatabase::readerdata(){    char choice;    char rname[20];    long long readerid;    Reader *r;    while (choice!='0')    {        cout <<"\n\n\t\t\t◤读 者 管 理◢\n\n\n\t\t\t◤1 新 增◢\n\n\t\t\t◤2 删 除◢\n\n\t\t\t◤3 查 找◢\n\n\t\t\t◤4 显 示◢\n\n\t\t\t◤5 全 删◢\n\n\t\t\t◤0 退 出◢"<<endl;        cin >> choice;        switch (choice)        {        case '0':            system("cls");            break;        case '1':            cout << "输入读者学号:";            cin >> readerid;            cout << "输入读者姓名:";            cin >> rname;            addreader (readerid,rname);            cout<<"已保存";            system("pause");            system("cls");            break;        case '2':            cout << " 输入读者学号:";            cin >> readerid;            r=query(readerid);            if (r==NULL)            {                cout <<" 该读者不存在 " ;                system("pausc");                system("cls");                break;            }            r->delbook();            break;        case '3':            cout << "读入读者学号:";            cin >> readerid;            r=query(readerid);            system("pause");            system("cls");            if (r==NULL)            {                cout <<"该读者不存在" ;                system("pause");                system("cls");                break;            }            r->disp();            break;        case '4':            disp();            system("pause");            system("cls");            break;        case '5':            clear();            cout<<"已全部删除";            system("pause");            system("cls");            break;        default:            cout<<"输入错误 ";            system("pause");            system("cls");            break;        }    }}
//这是读者管理菜单:

void BDatabase::bookdata(){    char choice;    char bname[40];    int bookid;    Book *b;    while (choice!='0')    {        cout <<"\n\n\n\t\t       〖 图 书 管 理 〗"<<endl<<endl<<endl;        cout<<"\t\t\t■ 1 新 增 ■\n\n \t\t\t■ 2 更 改 ■\n\n\t\t\t■ 3 删 除 ■\n\n\t\t\t■ 4 查 找 ■\n\n\t\t\t■ 5 显 示 ■\n\n\t\t\t■ 6 全 删 ■\n\n\t\t\t■ 0 退 出 ■"<<endl;        cin >> choice;        switch (choice)        {        case '0':            system("cls");            break;        case '1':            cout << "输入图书编号:"<<endl;            cin >> bookid;            cout << "输入图书书名:"<<endl;            cin >> bname;            addbook(bookid,bname);            cout<<"已保存";            system("pause");            system("cls");            break;        case '2':            cout << "输入图书编号:"<<endl;            cin >> bookid;            b=query(bookid);            if (b==NULL)            {                cout << " 该图书不存在 ";                system("pause");                system("cls");                break;            }            b->setname(bname);            cout<<"已改名";            system("pause");            system("cls");            break;        case '3':            cout <<" 输入图书编号:"<<endl;            cin >> bookid;            b=query(bookid);            if (b==NULL)            {                cout <<" 该图书不存在" ;                system("pause");                system("cls");                break;            }            b->delbook();            break;        case '4':            cout << " 输入图书编号:"<<endl;            cin >> bookid;            b=query(bookid);            if (b==NULL)            {                cout <<" 该图书不存在";                system("pause");                system("cls");                break;            }            b->disp();            system("pause");            system("cls");            break;        case '5':            disp();            system("pause");            system("cls");            break;        case '6':            clear();            cout<<"已清空";            system("pause");            system("cls");            break;        default:            cout<<"输入错误";            system("pause");            system("cls");        }    }}
运行结果:



知识点总结:

        用了类、链表、查找等方法,解决这个存储,查找,等问题。


0 0