本文实例为大家分享了c++实现图书馆系统的具体代码,供大家参考,具体内容如下
1.目的
用c++语言实现图书馆系统
2.分析
图书馆系统中要实现的功能有:图书的分类存储,不同身份的人员进行不同的操作。在这个程序中,
我把图书分为两类:小说类和专业书类,这两种类都有相同的功能,所以设一个基类,这两种类分别
继承基类。人员有两类:管理员和学生,这两类有部分相同的私有数据成员,所以设一个人员的基类,
这两种类分别继承基类。在图书类中,小说类和专业书类都要设自己的结构体数组,用来存储书的信
息,同时都要有增加书、删除书、搜索书的功能。管理员类的函数要有增加各类书、浏览全部书的功
能。学生类要有搜索书、借书、还书等功能。
3.代码
// 图书馆系统#include<iostream>#include<string>using namespace std;typedef struct book //结构体定义书的基本信息{ string book_name; //书名 string author; //作者 string kind; //书的种类}book;class ba //抽象类{public: ba(); 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;};ba::ba(){}class novel:public ba //小说类{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 nove农村养殖啥赚钱lnumber; //目前书的数目 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_na新疆财经大学me = 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 fal;//没有则返回fal}class professional:public ba //专业书类{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 fal;//没有则返回fal}class people //人员类{public: people();protected: ba* 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(); //增加一本小说类的图书 } el if(2 == temp) { q = &professional1; q->deposit();//增加一本专业类的图书 } el { 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) { ca 1: add(); break; ca 2: all(); break; ca 3: exit(); break; default : { cout << "无此操作!" << endl; display(); } break; }}void library::exit() //退出{ cout << "感谢您的使用!" <<endl;}class student:public people{public: student(); void arch_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::arch_book()//搜索{ int temp; string temp_author; string temp_bookname; string temp_kind; cout << "1.按作者搜索 2.按书名搜索 3.按种类搜索 请输入:"; cin >> temp; int f; switch(temp) { ca 1: //按作者搜索 cout << "请输入作者名:"; cin >> temp_author; q = &novel1; //从小说类中搜索 f = q->isauthor(temp_author); if(1 == f) { q->display(t例假期间吃什么emp_author); //若存在则显示这本书的信息 } el { cout << "小说类中没有这本书" <<endl; } q = &professional1;//从专业类类中搜索 f = q->isauthor(temp_author); if(1 == f) { q->display(temp_author);//若存在则显示这本书的信息 } el { cout << "专业类中没有这本书" <<endl; } break; ca 2: cout << "请输入书名:"; cin >> temp_bookname; q = &novel1;//从小说类中搜索 if(q->isbookname(temp_bookname)) { q->display(temp_bookname);//若存在则显示这本书的信息 } el { cout << "小说类中没有这本书" <<endl; } q = &professional1;//从专业类类中搜索 if(q->isbookname(temp_bookname)) { q->display(temp_bookname);//若存在则显示这本书的信息 } el { cout << "专业类中没有这本书" <<endl; } break; ca 3: cout << "请输入种类:"; cin >> temp_kind; if("novel" == temp_kind) //显示小说类的全部书 { q = &novel1; q->display(); } el if("professional" == temp_kind)//显示专业类的全部书 { q = &professional1; q->display(); } el { 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++; //借阅书的数目加一 } el { cout <红莲花;< "没有这本书!" << endl; } display();}void student::return_book() //还书{ int i; cout << "1.小说类 2.专业书类 请选择书的种类:"; cin >> i; if(1 == i) { q = &novel1; } el { 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) { ca 1:arch_book(); break; ca 2:borrow_book(); break; ca 3:return_book(); break; ca 4:information(); break; ca 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.总结
这个程序已经可以实现基本的功能,但是当重新选择身份进入系统时,上次的访问记录就会被清除。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。
本文发布于:2023-04-06 03:24:57,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/31e131a59af45847fb031d39508db372.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++实现图书馆系统.doc
本文 PDF 下载地址:C++实现图书馆系统.pdf
留言与评论(共有 0 条评论) |