图书管理源程序

来源:互联网 发布:外交 知乎 编辑:程序博客网 时间:2024/04/30 03:21
#include <iostream>#include <iomanip>#include <string>#include <fstream>//输入/输出文件流类using namespace std;const int Maxr=100;//最多的读者const int Maxb=100;//最多的图书const int Maxbor=5;//每位读者最多借五本书//读者类,实现对读者的信息的描述class Reader{private:int tag; //删除标记 1:已删 0:未删int no; //读者编号char name[10]; //读者姓名int borbook[Maxbor];//所借图书public:Reader() {}char *getname() {return name;} //获取姓名int gettag() {return tag;} //获取删除标记int getno() {return no;} //获取读者编号void setname(char na[]) //设置姓名{strcpy(name,na);}void delbook(){ tag=1; }//设置删除标记 1:已删 0:未删void addreader(int 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 0;}}}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;fstream file("reader.txt",ios::in);//打开一个输入文件while (1){file.read((char *)&s,sizeof(s));if (!file)break;top++;read[top]=s;}file.close(); //关闭 reader.txt}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文件中{fstream file("reader.txt",ios::out);for (int i=0;i<=top;i++)if (read[i].gettag()==0)file.write((char *)&read[i],sizeof(read[i]));file.close();}};void RDatabase::readerdata(){char choice;char rname[20];int readerid;Reader *r;while (choice!='0'){cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃wwwwwwww   ><^^^:>             读者管理             <:^^^><   wwwwwwwww ┃"<<endl; cout<<"┃◇◇◇◇◇                                                    ◇◇◇◇◇┃"<<endl;cout<<"┣━━━━━━━━━━━━        ◆            ━━━━━━━━━━━━━┫"<<endl;cout<<"┃***********                                                  ***********┃"<<endl;cout<<"┃                                                                        ┃"<<endl;cout<<"┃                                1.新增                                  ┃"<<endl;cout<<"┃                                2.更改                                  ┃"<<endl;cout<<"┃                                3.删除                                  ┃"<<endl;cout<<"┃                                4.查找                                  ┃"<<endl;cout<<"┃                                5.显示                                  ┃"<<endl;cout<<"┃                                6.全删                                  ┃"<<endl;cout<<"┃                                7.退出                                  ┃"<<endl;cout<<"┃***********                                                  ***********┃"<<endl; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;cin >> choice;switch (choice){case '1':cout << "输入读者编号:";cin >> readerid;cout << "输入读者姓名:";cin >> rname;addreader (readerid,rname);break;case '2':cout << "输入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout << " 该读者不存在 "<<endl;break;}cout << "输入新的姓名:";cin >> rname;r->setname(rname);break;case '3':cout << " 输入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout <<" 该读者不存在" << endl;break;}r->delbook();break;case '4':cout << "读入读者编号:";cin >> readerid;r=query(readerid);if (r==NULL){cout <<"该读者不存在"<< endl;break;}r->disp();break;case '5':disp();break;case '6':clear();break;default:cout<<"输入错误,请从新输入:";break;}}}//图书类,实现对图书的描述,图书的编号,书名,借出,还入等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;fstream file("book.txt",ios::in);while (1){file.read((char *)&b,sizeof(b));if (!file) break;top++;book[top]=b;}file.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)//查找图书{for (int i=0;i<=top;i++)if (book[i].getno()==bookid &&book[i].gettag()==0){return &book[i];}return NULL;}void bookdata();//图书库维护void disp(){for (int i=0;i<=top;i++)if (book[i].gettag()==0)book[i].disp();}~BDatabase()//析构函数,将book[]写到book.txt文件中{fstream file("book.txt",ios::out);for (int i=0;i<=top;i++)if (book[i].gettag()==0)file.write((char *)&book[i],sizeof(book[i]));file.close();}};void BDatabase::bookdata(){char choice;char bname[40];int bookid;Book *b;while (choice!='0'){cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"<<endl;cout<<"┃wwwwwwww   ><^^^:>               图书管理            <:^^^><   wwwwwwwww┃"<<endl; cout<<"┃◇◇◇◇◇                                                    ◇◇◇◇◇┃"<<endl;cout<<"┣━━━━━━━━━━━━          ◆          ━━━━━━━━━━━━━┫"<<endl;cout<<"┃***********                                                  ***********┃"<<endl;cout<<"┃                                                                        ┃"<<endl;cout<<"┃                                1.新增                                  ┃"<<endl;cout<<"┃                                2.更改                                  ┃"<<endl;cout<<"┃                                3.删除                                  ┃"<<endl;cout<<"┃                                4.查找                                  ┃"<<endl;cout<<"┃                                5.显示                                  ┃"<<endl;cout<<"┃                                6.全删                                  ┃"<<endl;cout<<"┃                                7.退出                                  ┃"<<endl;cout<<"┃***********                                                  ***********┃"<<endl; cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"<<endl;cin >> choice;switch (choice){case '1':cout << "输入图书编号:"<<endl;cin >> bookid;cout << "输入图书书名:"<<endl;cin >> bname;addbook(bookid,bname);break;case '2':cout << "输入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout << " 该图书不存在 "<<endl;break;}cout << "输入新的书名:"<<endl;cin >> bname;b->setname(bname);break;case '3':cout <<" 读入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该图书不存在" << endl;break;}b->delbook();break;case '4':cout << " 读入图书编号:"<<endl;cin >> bookid;b=query(bookid);if (b==NULL){cout <<" 该图书不存在"<< endl;break;}b->disp();break;case '5':disp();break;case '6':clear();break;default:cout<<"输入错误,请从新输入:"<<endl;}}}//main() 函数的实现,程序的主界面的引导void main(){char choice;int bookid,readerid;RDatabase ReaderDB;Reader *r;BDatabase BookDB;Book *b;while(choice!='0'){ cout<<"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"<<endl;cout<<"┃ wwwwwwww  ><^^^:>       图 书 管 理 系 统        <:^^^><  wwwwwwwww┃\n"<<endl; cout<<"┃◇◇◇◇◇                                                ◇◇◇◇◇┃\n"<<endl;cout<<"┣━━━━━━━━━━━          ◆          ━━━━━━━━━━━━┫\n"<<endl;cout<<"┃***********                                              ***********┃\n"<<endl;cout<<"┃                                                                    ┃\n"<<endl;cout<<"┃                              1.借书                                ┃\n"<<endl;cout<<"┃                              2.还书                                ┃\n"<<endl;cout<<"┃                              3.图书管理                            ┃\n"<<endl;cout<<"┃                              4.读者管理                            ┃\n"<<endl;cout<<"┃                              5.退出                                ┃\n"<<endl;cout<<"┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n";cin >> choice;switch (choice){case '1':cout<<"┏━◇◇◇◇◇          借书           ◇◇◇◇◇━┓\n"<<endl;cout<<"          读者编号:\n"<<endl;cin >>readerid;cout<<"          图书编号:\n"<<endl;cin >>bookid;r=ReaderDB.query(readerid);//按编号查找if (NULL==r){cout <<" 不存在该读者,不能借书"<< endl;break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在该图书,不能借书"<< endl;break;}if (b->borrowbook()==0){cout << " 该图书已借出,不能借书"<< endl;break;}r->borrowbook(b->getno());break;case '2':cout<<"┏━◇◇◇◇◇          还书         ◇◇◇◇◇━┓\n "<<endl;cout<<"           读者编号:\n"<<endl;cin >>readerid;cout<<"           图书编号:\n"<<endl;cin >>bookid;r=ReaderDB.query(readerid);if (r==NULL){cout <<" 不存在该读者,不能还书" << endl;break;}b=BookDB.query(bookid);if (b==NULL){cout <<" 不存在该图书,不能还书" <<endl;break;}b->retbook();r->retbook(b->getno());break;case '3':BookDB.bookdata();break;case '4':ReaderDB.readerdata();break;default:cout<<"输入错误,请从新输入:"<<endl;}}}

0 0
原创粉丝点击