C++实现图书馆系统
更新时间:2022年3月12日 22:44 点击:241 作者:格格不入ち
本文实例为大家分享了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.总结
这个程序已经可以实现基本的功能,但是当重新选择身份进入系统时,上次的访问记录就会被清除。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。
原文出处:https://blog.csdn.net/qq_45234177/article/details/103630465
上一篇: C++ Clock类模拟实现闹钟运行
下一篇: C++实现信息管理系统
相关文章
- vector是表示可以改变大小的数组的序列容器,本文主要介绍了C++STL标准库std::vector的使用详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2022-03-06
- 这篇文章主要介绍了C++中取余运算的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
- 本篇文章主要介绍了C++中四种加密算法之AES源代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2020-04-25
- 整数拆分,指把一个整数分解成若干个整数的和。本文重点给大家介绍C++ 整数拆分方法详解,非常不错,感兴趣的朋友一起学习吧...2020-04-25
- 这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
- 这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
- 这篇文章主要介绍了C++ bitset用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章小编并不是为大家讲解string类型的用法,而是讲解我个人比较好奇的问题,就是string 类型占几个字节...2020-04-25
- 这篇文章主要为大家详细介绍了C++ Eigen库计算矩阵特征值及特征向量,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- 这篇文章主要介绍了C++ pair的用法实例详解的相关资料,需要的朋友可以参考下...2020-04-25
- 这篇文章主要介绍了VSCode C++多文件编译的简单使用方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-29
- 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。下面通过实例代码给大家介绍c++中的循环引用,一起看看吧...2020-04-25
- 这篇文章主要给大家介绍了关于C++随机点名生成器的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
- 这篇文章主要介绍了C++ 约瑟夫环问题案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...2021-08-15
- 这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
- 本篇文章是对C++中的常见编译错误进行了详细的分析介绍,需要的朋友参考下...2020-04-25
- 在本篇内容里小编给大家分享了关于C++实现递归函数的教学步骤,需要的朋友跟着参考下。...2020-04-25