C++实现图书馆系统

C++实现图书馆系统

本文实例为大家分享了C++实现图书馆系统的具体代码,供大家参考,具体内容如下

1.目的

用c++语言实现图书馆系统

2.分析

   图书馆系统中要实现的功能有:图书的分类存储,不同身份的人员进行不同的操作。在这个程序中,
 我把图书分为两类:小说类和专业书类,这两种类都有相同的功能,所以设一个基类,这两种类分别
 继承基类。人员有两类:管理员和学生,这两类有部分相同的私有数据成员,所以设一个人员的基类,
 这两种类分别继承基类。在图书类中,小说类和专业书类都要设自己的结构体数组,用来存储书的信
 息,同时都要有增加书、删除书、搜索书的功能。管理员类的函数要有增加各类书、浏览全部书的功
 能。学生类要有搜索书、借书、还书等功能。

3.代码

// 图书馆系统 #include<iostream> #include<string> using namespace std; typedef struct book  //结构体定义书的基本信息 {     string book_name; //书名     string author;    //作者     string kind;  //书的种类 }Book; class base  //抽象类 { public:     base();     virtual void deposit() = 0;  //纯虚函数增加书     virtual void display(string name) = 0; //纯虚函数显示一本书的信息     virtual void display() = 0;  //纯虚函数显示书的信息     virtual int isauthor(string a) = 0; //判断是否存在这个作者的书     virtual bool isbookname(string b) = 0; //用书名判断是否存在这本书     virtual void clearbook(string name) = 0; }; base::base() {} class novel:public base   //小说类 { public:     novel();  //构造函数     virtual void deposit(); //增加图书     virtual void display(); //显示图书信息     virtual void display(string name); //显示一本书的信息     virtual int isauthor(string a); //判断是否存在这个作者的书     virtual bool isbookname(string b); //用书名判断是否存在这本书     virtual void clearbook(string name); //删除一本书 private:     int novelnumber;  //目前书的数目     Book mynovel[50];  //结构体数组,存放小说类书的信息     Book *p; //结构体类型的指针 }; novel::novel() {     novelnumber = 0;     p = mynovel;     mynovel[0].author = "1";     mynovel[0].book_name = "1";     mynovel[0].kind = "小说";     novelnumber++;     mynovel[1].author = "2";     mynovel[1].book_name = "2";     mynovel[1].kind = "小说";     novelnumber++;     for(int i = 2;i < 50;i++)     {         mynovel[i].author = "0";         mynovel[i].book_name = "0";     }   //初始化数组 } void novel::clearbook(string name) //删除一本书 {     Book* t;  //结构类型指针     t = mynovel;  //指向小说类的数组     while(t->book_name != name) //当书名不符时,指向下一空间     {         t++;     }     if(t->book_name == name)  //当找到这本书时,清空     {         t->author = "0";         t->book_name = "0";         novelnumber--;  //总数目减一     } } void novel::deposit()  //存入小说类的图书 {     Book* t;     string temp_author;     string temp_book_name;     cout << "请输入图书名称:";     cin >> temp_book_name;     cout << endl << "请输入作者:";     cin >> temp_author; //记录书的信息     t = mynovel;     while(t->author != "0")     {         t++;     } //找空的存储空间     if(t->author == "0")     {         t->author = temp_author;         t->book_name = temp_book_name;         t->kind = "小说";         novelnumber++;     } //如果存储空间为空,则存放该书信息 } void novel::display()  //显示该类书信息 {     Book* t;     int number = novelnumber;     cout << "小说类的图书有" << novelnumber << "本:" << endl;     t = mynovel;     while(number!=0)     {         if(t->author != "0")         {             cout << "图书名称为:" << t->book_name << endl;;             cout << "作者:" << t->author << endl;             cout << "书的种类为:" << t->kind << endl;             number--;         } //当存储空间有内容时,输出书的信息         t++;     }  //显示所有书的信息 } void novel::display(string name) //显示这本书的信息 {     Book* t;     t = mynovel;     while((t->book_name != name) && (t->author != name))     {         t++;     }  //书名或者作者不符时指向下一空间     if((t->book_name == name) || (t->author != name))     {         cout << "图书名称为:" << t->book_name << endl;;         cout << "作者:" << t->author << endl;         cout << "书的种类为:" << t->kind << endl;     } //若符合则输出这本书的信息 } int novel::isauthor(string a)  //用作者判断是否有这本书 {     Book* t;     t = mynovel;     while(t->author != "0")     {         if(t->author == a)         {             return 1;         }  //若有则返回1         t++;     }     return 0;  //没有则返回0 } bool novel::isbookname(string b)//用书名判断是否有这本书 {     Book* t;     t = mynovel;     while(t->book_name != "0")     {         if(t->book_name == b)         {             return true;             break;         }  //若有则返回true         t++;     }     return false;//没有则返回false } class professional:public base  //专业书类 { public:     professional();     virtual void deposit(); //存入     virtual void display();  //显示图书信息     virtual void display(string name); //显示这本书的信息     virtual int isauthor(string a); //判断是否存在这个作者的书     virtual bool isbookname(string b); //用书名判断是否存在这本书     virtual void clearbook(string name); //删除一本书 private:     int pronumber;  //书的数目     Book myprofessional[50]; //结构体数组,存放专业类书的信息     Book *p; //结构体类型的指针 }; professional::professional() //构造函数 {     pronumber = 0;     p = myprofessional;     myprofessional[0].author = "p1";     myprofessional[0].book_name = "p1";     myprofessional[0].kind = "专业书";     pronumber++;     myprofessional[1].author = "p2";     myprofessional[1].book_name = "p2";     myprofessional[1].kind = "专业书";     pronumber++;     for(int i = 2;i < 50;i++)     {         myprofessional[i].author = "0";         myprofessional[i].book_name = "0";     } //初始化数组 } void professional::clearbook(string name)//删除一本书 {     Book* t;//结构类型指针     t = myprofessional; //指向专业类的数组     while(t->book_name != name)//当书名不符时,指向下一空间     {         t++;     }     if(t->book_name == name)//当找到这本书时,清空     {         t->author = "0";         t->book_name = "0";         pronumber--;//总数目减一     } } void professional::deposit()  //存入专业类的图书 {     Book* t;     string temp_author;     string temp_book_name;     cout << "请输入图书名称:";     cin >> temp_book_name;     cout << endl << "请输入作者:";     cin >> temp_author;     t = myprofessional;     while(t->author != "0")     {         t++;     }     if(t->author == "0")     {         t->author = temp_author;         t->book_name = temp_book_name;         t->kind = "专业书";         pronumber++;     } } void professional::display()  //显示该类书信息 {     Book* t;     int number = pronumber;     cout << "专业类的图书有" << pronumber << "本:" << endl;     t = myprofessional;     while(number!=0)     {         if(t->author != "0")         {             cout << "图书名称为:" << t->book_name << endl;;             cout << "作者:" << t->author << endl;             cout << "书的种类为:" << t->kind << endl;             number--;         } //当存储空间有内容时,输出书的信息         t++;     }  //显示所有书的信息 } void professional::display(string name) //显示这本书的信息 {     Book* t;     t = myprofessional;     while((t->book_name != name) && (t->author != name))     {         t++;     }//书名或者作者不符时指向下一空间     if((t->book_name == name) || (t->author == name))     {         cout << "图书名称为:" << t->book_name << endl;;         cout << "作者:" << t->author << endl;         cout << "书的种类为:" << t->kind << endl;     }//若符合则输出这本书的信息 } int professional::isauthor(string a)//用作者判断是否有这本书 {     Book* t;     t = myprofessional;     while(t->author != "0")     {         if(t->author == a)         {             return 1;         }//若有则返回1         t++;     }     return 0;//没有则返回0 } bool professional::isbookname(string b)//用书名判断是否有这本书 {     Book* t;     t = myprofessional;     while(t->book_name != "0")     {         if(t->book_name == b)         {             return true; //若有则返回true         }         t++;     }     return false;//没有则返回false } class people  //人员类 { public:     people(); protected:     base* q;  //基类指针     novel novel1; //小说类对象     professional professional1;  //专业书类对象 }; people::people() {} class library:public people    //管理员类 { public:     library();     void add(); //增加图书     void all();     //浏览全部图书     void display();   //显示功能     void exit(); //退出 }; library::library() {} void library::add()//增加图书 {     int temp;     cout << "1.小说  2.专业书  请输入图书种类:" ;     cin >> temp;     if(1 == temp)     {         q = &novel1;         q->deposit();  //增加一本小说类的图书     }     else if(2 == temp)     {         q = &professional1;         q->deposit();//增加一本专业类的图书     }     else     {         cout << "无此操作!" << endl;     }     display(); } void library::all()//显示全部图书信息 {     q=&novel1;     q->display();     q=&professional1;     q->display();     display(); } void library::display() //显示功能 {     int temp;     cout << "1.增加图书  2.浏览全部图书  3.退出 请选择功能:";     cin >> temp;         switch(temp)         {             case 1: add();             break;             case 2: all();             break;             case 3: exit();             break;             default :             {                 cout << "无此操作!" << endl;                 display();             }             break;         } } void library::exit()  //退出 {     cout << "感谢您的使用!" <<endl; } class student:public people { public:     student();     void search_book();  //搜索     void borrow_book();  //借书     void return_book();  //还书     void information();  //显示该账户信息     void display();      //显示功能     void exit();         //退出 private:     int borrow_number;  //已借阅数目     int return_number;  //已还图书数目 }; student::student()     //欢迎界面 {     borrow_number = 0;     return_number = 0; } void student::search_book()//搜索 {     int temp;     string temp_author;     string temp_bookname;     string temp_kind;     cout << "1.按作者搜索  2.按书名搜索  3.按种类搜索 请输入:";     cin >> temp;     int f;     switch(temp)     {         case 1:   //按作者搜索             cout << "请输入作者名:";             cin >> temp_author;             q = &novel1;  //从小说类中搜索             f = q->isauthor(temp_author);             if(1 == f)             {                 q->display(temp_author);  //若存在则显示这本书的信息             }             else             {                 cout << "小说类中没有这本书" <<endl;             }             q = &professional1;//从专业类类中搜索             f = q->isauthor(temp_author);             if(1 == f)             {                 q->display(temp_author);//若存在则显示这本书的信息             }             else             {                 cout << "专业类中没有这本书" <<endl;             }             break;         case 2:             cout << "请输入书名:";             cin >> temp_bookname;             q = &novel1;//从小说类中搜索             if(q->isbookname(temp_bookname))             {                 q->display(temp_bookname);//若存在则显示这本书的信息             }             else             {                 cout << "小说类中没有这本书" <<endl;             }             q = &professional1;//从专业类类中搜索             if(q->isbookname(temp_bookname))             {                 q->display(temp_bookname);//若存在则显示这本书的信息             }             else             {                 cout << "专业类中没有这本书" <<endl;             }             break;          case 3:             cout << "请输入种类:";             cin >> temp_kind;             if("novel" == temp_kind)  //显示小说类的全部书             {                 q = &novel1;                 q->display();             }             else if("professional" == temp_kind)//显示专业类的全部书             {                 q = &professional1;                 q->display();             }             else             {                 cout << "没有该种类的书" <<endl;             }             break;     }     display(); } void student::borrow_book() //借书 {     string temp;     int i;     cout << "1.小说类 2.专业书类  请选择书的种类:";     cin >> i;     cout << "请输入书名:" ;     cin >> temp;     if(1 == i)     {         q = &novel1;     }     if(2 == i)     {         q = &professional1;     }     if(q->isbookname(temp))  //如果有这本书则执行下面步骤     {         q->clearbook(temp);  //清除这本书         borrow_number++;   //借阅书的数目加一     }     else     {         cout << "没有这本书!" << endl;     }     display(); } void student::return_book() //还书 {     int i;     cout << "1.小说类 2.专业书类  请选择书的种类:";     cin >> i;     if(1 == i)     {         q = &novel1;     }     else     {         q = &professional1;     }     q->deposit();  //录入这本书的信息     return_number++;  //已还书数加一     display(); } void student::information() //显示学生借阅信息 {     cout << "您已借阅" << borrow_number << "本书" <<endl;     cout << "您已还" << return_number << "本书" <<endl;     display(); } void student::exit() //退出 {     cout << "感谢您的使用!"; } void student::display() //显示功能 {     int i;     cout << "1.搜索图书 2.借书 3.还书 4.查询账户信息 5.退出 请选择功能:";     cin >> i;     switch(i)     {         case 1:search_book();         break;         case 2:borrow_book();         break;         case 3:return_book();         break;         case 4:information();         break;         case 5:exit();         break;         default :             {                 cout << "无此操作!" << endl;                 display();             }             break;     } } int main() {     int i;     student b1;     library a1;     cout << "1.学生  2.管理员 您的身份是:";     while(cin >> i)     {         if(1 == i)         {             b1.display();         }         if(2 == i)         {             a1.display();         }         cout <<endl << "1.学生 2.管理员 您的身份是:";     }     return 0; }

4.总结

这个程序已经可以实现基本的功能,但是当重新选择身份进入系统时,上次的访问记录就会被清除。

推荐阅读