图书管理源程序
来源:互联网 发布:外交 知乎 编辑:程序博客网 时间: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
- 图书管理源程序
- 图书管理源程序
- 图书管理
- 图书管理
- 图书管理
- 图书管理
- 图书管理
- 学生管理系统源程序
- 学生管理系统源程序
- 图书管理系统论文
- 图书管理系统(1)
- 图书管理系统(2)
- 图书管理系统(3)
- java-图书管理系统
- 图书管理系统
- 图书管理系统
- 简单图书管理系统
- 图书管理系统
- 中断类型标志
- 黑马程序员-java基础-反射
- tcpdump一些选项的使用
- 22. Generate Parentheses
- 成员变量和局部变量的区别
- 图书管理源程序
- Libevent 学习笔记 (1)——Libevent 2.0安装与简单示例
- 面试题29:数组中出现次数超过一半的数字
- 格式化输出
- what is ELM
- 147.统计各年龄段人数
- java时间处理工具类--DateUtils
- Java程序设计第十七周之猜猜看
- 把树莓派用于YAAW离线下载的Mass Storage U盘用虚拟目录建到Vsftpd的子目录里去