C++图书馆系统
格格不入ち 人气:01.目的
用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.总结
这个程序已经可以实现基本的功能,但是当重新选择身份进入系统时,上次的访问记录就会被清除。
加载全部内容