#include<iostream>
#include<string>
#include<iomanip>
#include<fstream>
using namespace std;
struct Book//书籍的基本信息:名称,作者,出版社,存在数量
{
string name;
string author;
string published;
int Booksum;
};
struct BookNode//节点:书籍的信息和指针
{
Book data;
BookNode *next;
};
class Books//书籍类
{
private:
BookNode *first;
public:
Books();//构造
Books(Book b);
~Books();//析构
void addBook(Book b);//添加书籍
int sumBook();//求书籍的总数
bool searchBook();//根据书籍的名称查找,并显示书籍的所有信息;
void deleteBook(string name);//根据书籍的名称删除书籍
void changeInformation();//更改书籍的信息
void DispBook();//显示输出所有的书籍清单
void DispNode(BookNode *p);//显示p所指向的信息
};
struct Reader
{
int Readerid;
string name;
string phoneNumber;
string address;
string key;
};
struct ReaderNode
{
Reader data;
ReaderNode *next;
};
class Readers//readers类
{
private:
ReaderNode *first;
int id;
string key;
public:
Readers();//构造1
Readers(Reader r);//带参数的构造函数1
~Readers();//析构1
void readfile();//从文件中获取1
void savefile();//保存1
int sumReader();//求数量1
void ReadersDisplay();//显示所有读者的信息1
void addReaders(Reader b);//增加读者1
void deleteReaders(string name);//删除读者信息1
void searchReaders();//按照姓名查找读者信息1
void changeReader();//更改读者的信息
void ReadersDisplay(ReaderNode *);//根据姓名输出读者的个人信息1
};
class ALLface:public Books,Readers /界面类
{
public:
void Mainface();//主界面
void AdmManagement();//管理员界面
void ReaManagement();//读者界面
bool AdmBookManagerment();//管理员对书籍的管理界面
void AdmReaerManagerment();//管理员对读者的管理界面
};
Books::Books()
{
first=new BookNode;
first->next=NULL;
}
Books::Books(Book b)
{
BookNode *s;
s=new BookNode;
s->data=b;
s->next=NULL;
first=new BookNode;
first->next=s;
}
Books::~Books()
{
BookNode *p;
p=first;
while(p!=NULL)
{
first=first->next;
delete p;
p=first;
}
}
bool Books::searchBook()
{
BookNode *p;
bool flag=false;
string name1;
cout<<"请输入查找的书名"<<endl;
cin>>name1;
for(p=first->next;p;p=p->next)
if(p->data.name==name1)
{
flag=true;
DispNode(p);
}
if(!flag)
{
cout<<"您所查找的书不存在!"<<endl;
return false;
}
else
{
cout<<"查找成功!"<<endl;
return true;
}
}
void Books::DispNode(BookNode *p)
{
cout<<"-----------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<p->data.name;
cout<<"|"<<setw(10)<<p->data.author;
cout<<"|"<<setw(20)<<p->data.published;
cout<<"|"<<setw(10)<<p->data.Booksum<<"|";
cout<<endl;
}
void Books::addBook(Book b)//头后插入
{
BookNode *p;
if(first->next==NULL)
{
BookNode *s;
s=new BookNode;
s->data=b;
s->next=first->next;
first->next=s;
}
else
{
for(p=first->next;p;p=p->next)
{
if(p->data.name==b.name&&p->data.author==b.author&&
p->data.published==b.published)
{
p->data.Booksum+=b.Booksum;
}
else
{
BookNode *s;
s=new BookNode;
s->data=b;
s->next=first->next;
first->next=s;
}
}
}
}
void Books::deleteBook(string name)//删除
{
BookNode *p,*s;
for(p=first;p->next;)
{
s=p->next;
if(s->data.name==name)
{
p->next=s->next;
delete s;
}
else
p=p->next;
}
}
void Books::changeInformation()//更改信息
{
string name;
bool flag=true;
cout<<"请输入修改的书名"<<endl;
cin>>name;
BookNode *p;
for(p=first->next;p;p=p->next)
if(p->data.name==name)break;
if(p!=NULL)
{
while(flag)
{
int x;
cout<<"请选择修改的信息"<<endl;
cout<<"1 书名"<<endl;
cout<<"2 作者"<<endl;
cout<<"3 出版社"<<endl;
cout<<"0 放弃修改"<<endl;
cin>>x;
switch(x)
{
case 1:
cout<<"请输入书名:";
cin>>name;
p->data.name=name;
flag=false;
break;
case 2:
cout<<"请输入作者:";
cin>>name;
p->data.author=name;
flag=false;
break;
case 3:
cout<<"请输入出版社名字:";
cin>>name;
p->data.published=name;
flag=false;
break;
case 0:
flag=false;
break;
default:
cout<<"输入错误,请重新选择!"<<endl;
}
}
}
else
cout<<"你所输入的图书在馆内不存在!"<<endl;
}
int Books::sumBook()//求总的数量
{
BookNode *p;
int count=0;
p=first->next;
while(p)
{
count++;
p=p->next;
}
return count;
}
void Books::DispBook()
{
cout<<"图书馆中共有书:"<<sumBook()<<"种"<<endl;
BookNode *p;
cout<<"-----------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<"名称";
cout<<"|"<<setw(10)<<"作者";
cout<<"|"<<setw(20)<<"出版社";
cout<<"|"<<setw(10)<<"图书数量"<<"|";
cout<<endl;
for(p=first->next;p;p=p->next)
{
cout<<"-----------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<p->data.name;
cout<<"|"<<setw(10)<<p->data.author;
cout<<"|"<<setw(20)<<p->data.published;
cout<<"|"<<setw(10)<<p->data.Booksum<<"|";
cout<<endl;
}
cout<<endl;
}
Readers::Readers()//构造
{
key="000000";
id=1000000;
first=new ReaderNode;
first->next=NULL;
}
Readers::Readers(Reader r)
{
key="000000";
id=100000;
ReaderNode *s;
s=new ReaderNode;
s->data=r;
s->data.Readerid=id;
s->data.key=key;
id++;
s->next=NULL;
first=new ReaderNode;
first->next=s;
}
Readers::~Readers()//析构
{
ReaderNode *p;
p=first;
while(p!=NULL)
{
first=first->next;
delete p;
p=first;
}
}
void Readers::deleteReaders(string name)//删除
{
ReaderNode *p,*s;
for(p=first;p->next;)
{
s=p->next;
if(s->data.name==name)
{
p->next=s->next;
delete s;
}
else
p=p->next;
}
}
void Readers::searchReaders()//按姓名查找
{
ReaderNode *p;
bool flag=false;
string name1;
cout<<"请输入查找的姓名"<<endl;
cin>>name1;
for(p=first->next;p;p=p->next)
if(p->data.name==name1)
{
flag=true;
ReadersDisplay(p);
}
if(!flag)
cout<<"您所查找的读者不存在!"<<endl;
}
void Readers::ReadersDisplay(ReaderNode *p)//根据p的地址进行输出信息
{
cout<<"----------------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<p->data.Readerid;
cout<<"|"<<setw(10)<<p->data.name;
cout<<"|"<<setw(20)<<p->data.phoneNumber;
cout<<"|"<<setw(20)<<p->data.address<<"|";
cout<<endl;
}
int Readers::sumReader()//求总的数量
{
ReaderNode *p;
int count=0;
p=first->next;
while(p)
{
count++;
p=p->next;
}
return count;
}
void Readers::addReaders(Reader b)//添加读者
{
ReaderNode *p,*q;
for(p=first->next;p;p=p->next)
{
if(p->data.name==b.name&&p->data.address==b.address&&
p->data.phoneNumber==b.phoneNumber)
{
cout<<"该用户已经存在!"<<endl;
}
else
{
ReaderNode *s;
s=new ReaderNode;
s->data=b;
s->data.Readerid=id;
id++;
s->data.key=key;
q=first;
while(q->next!=NULL)
q=q->next;
q->next=s;
s->next=NULL;
}
}
}
void Readers::ReadersDisplay()//显示所有读者信息
{
ReaderNode *p;
cout<<"----------------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<"读者证号";
cout<<"|"<<setw(10)<<"姓名";
cout<<"|"<<setw(20)<<"电话号码";
cout<<"|"<<setw(20)<<"地址"<<"|";
cout<<endl;
for(p=first->next;p;p=p->next)
{
cout<<"----------------------------------------------------------------"<<endl;
cout<<"|"<<setw(10)<<p->data.Readerid;
cout<<"|"<<setw(10)<<p->data.name;
cout<<"|"<<setw(20)<<p->data.phoneNumber;
cout<<"|"<<setw(20)<<p->data.address<<"|";
cout<<endl;
}
cout<<endl;
}
void Readers::readfile()
{
int Readerid;
string name;
string phoneNumber;
string address;
//ReaderNode *p;
ifstream infile("file.txt",ios::in);
if(!infile)
{
cerr<<"con't open file!"<<endl;
abort();
}
for(int i=0;i<2;i++)
{
infile>>setw(10)>>Readerid>>setw(10)>>name>>setw(20)>>phoneNumber>>setw(20)>>address;
Reader r;
r.name=name;
r.phoneNumber=phoneNumber;
r.address=address;
r.Readerid=Readerid;
addReaders(r);
}
infile.close();
}
void Readers::savefile()
{
ReaderNode *p;
ofstream outfile("file.txt",ios::out);
if(!outfile)
{
cerr<<"con't open file!"<<endl;
abort();
}
for(p=first->next;p;p=p->next)
outfile<<setw(10)<<p->data.Readerid<<setw(10)<<p->data.name<<
setw(20)<<p->data.phoneNumber<<setw(20)<<p->data.address<<endl;
outfile.close();
}
void Readers::changeReader()
{
string name;
bool flag=true;
cout<<"请输入修改的读者姓名:";
cin>>name;
ReaderNode *p;
for(p=first->next;p;p=p->next)
if(p->data.name==name)break;
if(p!=NULL)
{
while(flag)
{
int x;
cout<<"请选择修改的信息"<<endl;
cout<<"1 姓名"<<endl;
cout<<"2 电话号码"<<endl;
cout<<"3 地址"<<endl;
cout<<"0 放弃修改"<<endl;
cin>>x;
switch(x)
{
case 1:
cout<<"请输入姓名:";
cin>>name;
p->data.name=name;
flag=false;
break;
case 2:
cout<<"请输入电话号码:";
cin>>name;
p->data.phoneNumber=name;
flag=false;
break;
case 3:
cout<<"请输入地址:";
cin>>name;
p->data.address=name;
flag=false;
break;
case 0:
flag=false;
break;
default:
cout<<"输入错误,请重新选择!"<<endl;
}
}
}
else
cout<<"你所输入的图书在馆内不存在!"<<endl;
}
void ALLface::Mainface()//主界面
{
bool flag=true;
while(flag)
{
cout<<" "<<"图书管理系统"<<" "<<endl;
cout<<" "<<"1 读者登录 "<<" "<<endl;
cout<<" "<<"2 管理员登录"<<" "<<endl;
cout<<" "<<"0 离开 "<<" "<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
ReaManagement();
flag=false;
break;
case 2:
AdmManagement();
flag=false;
break;
case 0:
flag=false;
cout<<"谢谢使用!"<<endl;
break;
default:
cout<<"输入错误,请重新选择!"<<endl;
}
}
}
void ALLface::AdmManagement()//图书和读者管理界面
{
bool flag=true;
while(flag)
{
cout<<" "<<"1 图书管理"<<" "<<endl;
cout<<" "<<"2 读者管理"<<" "<<endl;
cout<<" "<<"0 退出 "<<" "<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
flag=AdmBookManagerment();
break;
case 2:
flag=AdmBookManagerment();
break;
case 0:
flag=false;
cout<<"谢谢使用!"<<endl;
break;
default:
cout<<"输入错误,请重新选择!"<<endl;
}
}
}
void ALLface::ReaManagement()
{
bool flag=true;
while(flag)
{
cout<<" "<<"1 借书 "<<" "<<endl;
cout<<" "<<"2 还书 "<<" "<<endl;
cout<<" "<<"3 个人信息"<<" "<<endl;
cout<<" "<<"4 更改信息"<<" "<<endl;
cout<<" "<<"5 查找图书"<<" "<<endl;
cout<<" "<<"0 退出 "<<" "<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
flag=false;
break;
case 2:
flag=false;
break;
case 3:
Readers::ReadersDisplay();
flag=false;
break;
case 4:
Readers::changeReader();
flag=false;
break;
case 5:
flag=!Books::searchBook();
break;
case 0:
flag=false;
cout<<"谢谢使用!"<<endl;
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
}
}
}
bool ALLface::AdmBookManagerment()
{
string name="红楼梦";
Book b;
b.name="红楼梦";
b.Booksum=3;
b.published="商务印刷出版社";
b.author="曹雪芹";
bool flag=true,flag2=true;
while(flag)
{
cout<<" "<<"图书维护管理"<<" "<<endl;
cout<<" "<<"1 新增书籍"<<" "<<endl;
cout<<" "<<"2 查找书籍"<<" "<<endl;
cout<<" "<<"3 删除书籍"<<" "<<endl;
cout<<" "<<"4 更改书籍"<<" "<<endl;
cout<<" "<<"5 显示所有"<<" "<<endl;
cout<<" "<<"0 返回 "<<" "<<endl;
cout<<" "<<"9 返回上一层"<<" "<<endl;
int x;
cin>>x;
switch(x)
{
case 1:
Books::addBook(b);
break;
case 2:
flag=!Books::searchBook();
break;
case 3:
Books::deleteBook(name);
break;
case 4:
Books::changeInformation();
break;
case 5:
Books::DispBook();
break;
case 0:
flag=false;
break;
case 9:
flag=false;
flag2=false;
break;
default:
cout<<"输入错误,请重新输入!"<<endl;
}
}
if(flag2)
return false;
else
return true;
}
void ALLface::AdmReaerManagerment()
{
cout<<" "<<"读者维护管理"<<" "<<endl;
cout<<" "<<"1 新增读者"<<" "<<endl;
cout<<" "<<"2 查找读者"<<" "<<endl;
cout<<" "<<"3 删除读者信息"<<" "<<endl;
cout<<" "<<"4 更改读者信息"<<" "<<endl;
cout<<" "<<"5 显示所有读者信息"<<" "<<endl;
cout<<" "<<"0 返回 "<<" "<<endl;
cout<<" "<<"# 直接退出"<<" "<<endl;
}
int main()
{
ALLface a;
a.Mainface();
return 0;
}
下载链接:https://download.csdn.net/download/user_name_CSDN/12026841