非常适合数据结构中的课程设计——图书管理系统

#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

  • 7
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了不起的企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值