⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 用c++写的图书管理系统.Using.cpp.to.write.the.book.management.system
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*******************************************
//本程序有个缺陷是时间效益不是很好
//每个函数都要大量的时间去读取与写入
//当文件很大的时候就会很慢
//同时还有许多的缺点,如:注释、数据的定义等
*****************************************/
#include<iostream>
#include<fstream>
#include<string>

using namespace std;
//定义图书的数据结构
const int shulian=5;//可借总数
struct BOOK
{
	int	t_ID;//图书编号
	char		tmode;//图书状态
	char		t_name[20];//图书名
	char		tc_time[14];//出版时间,如:20081202122030
	char		chbsh[20];//出版社名称
};
//定义读者的数据结构
struct READERSHIP
{
	int d_ID;//读者编号
	char d_name[8];//读者姓名
	char sex[2];//性别
	int age;//年龄
	char address[28];//地址
	int kejie[shulian];//已借标记

};
//图书类
class book
{
protected:
	int j_sum;//借出总数
	int t_sum;//图书总书
	BOOK *tb;
	
public:
	book(int n=0,int m=0):t_sum(n),j_sum(m){}
	void update(fstream &file);//更新图书库
	void duqu(fstream &file);//读取图书库
	void display();//显示查询状态
	int chaxun(int ID,int ztai);//查询图书与更改借书状态2、可借,1不可借
	
};

void book::duqu(fstream &file)
{
	file.seekg(0,ios::beg);
	file.read((char *)&t_sum,sizeof(t_sum));
	file.seekg(sizeof(t_sum),ios::beg);
	file.read((char *)&j_sum,sizeof(j_sum));
	file.seekg(sizeof(t_sum)+sizeof(j_sum),ios::beg);
	cout<<"图书总数:"<<t_sum<<" "<<"借书总数:"<<j_sum<<endl;
	tb=new BOOK[t_sum];
	if(tb==NULL)cout<<"空间不足,出错了"<<endl;
	file.read((char *)tb,t_sum*sizeof(BOOK));
}
void book::display( )
{
	//duqu(file);
	int i=0;	
	while(i<t_sum)
	{
		cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;
		i++;
	}
	//update(file);
}
int book::chaxun(int ID,int ztai)
{
	int i=0;
	while(i!=t_sum){
		if(ID==tb[i].t_ID){
			
			if(ztai==1){
				if(tb[i].tmode=='F') return 0;
			cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;
			tb[i].tmode='F';
				j_sum++;
			return 1;
			}
			else if(ztai==2){
				if(tb[i].tmode=='T') return 0;
			cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;
				tb[i].tmode='T';
				j_sum--;
			return 1;
			}
			return i;
		}
	i++;
	}
	return -1;
}
void book::update(fstream &file)
{
	file.seekp(0,ios::beg);
	file.write((char *)&t_sum,sizeof(t_sum));
	file.seekp(sizeof(t_sum),ios::beg);
	file.write((char *)&j_sum,sizeof(j_sum));
	file.seekp(sizeof(t_sum)+sizeof(j_sum),ios::beg);
	for(int i=0;i<t_sum;i++){
	file.write((char *)&tb[i],sizeof(BOOK));
	file.seekp(sizeof(t_sum)+sizeof(j_sum)+(i+1)*sizeof(BOOK),ios::beg);
	}
	delete tb;
}

////图书处理类
class tbook:public book
{
public:
	int a;
	tbook(int n=0,int m=0):book(n,m){}
	void select();//主要的界面,用于选择
	void addbook(fstream &file);//添加图书
	void display(fstream &file);//显示查询状态
	void tchaxun(fstream &file);//显示查询状态
	void xiugai(fstream &file);//修改图书信息
	void del(fstream &file);//删除图书库

};
void tbook::select()
{
	int i;
	fstream ofile("1.txt",ios::in|ios::out);
	while(1)
	{
		cout<<"\t\t\t图书信息"<<endl;
		cout<<"\t\t\t1、显示"<<endl;
		cout<<"\t\t\t2、查询"<<endl;
		cout<<"\t\t\t3、添加"<<endl;
		cout<<"\t\t\t4、修改"<<endl;
		cout<<"\t\t\t5、删除"<<endl;
		cout<<"\t\t\t6、退出"<<endl;
		cout<<"请选择:";
		cin>>i;
		switch(i)
		{
		case 1:display(ofile);break;
		case 2:tchaxun(ofile);break;
		case 3:addbook(ofile);break;
		case 4:xiugai(ofile);break;
		case 5:del(ofile);break;
		case 6:break;
		default:cout<<"输入有误"<<endl;
		}
		if(i==6)break;
	}
	ofile.close();

}
void tbook::addbook(fstream &file)
{
	BOOK b;
	duqu(file);
	cout<<"输入你的图书编号:";
	cin>>b.t_ID;
	if(t_sum!=0&&chaxun(b.t_ID,0)!=-1)
	{
		cout<<"此书已经从在!"<<endl;
		return ;
	}
	cout<<"输入你的图书名:";
	cin>>b.t_name;
	cout<<"输入你的出版时间(如:2008/01/01,输入20080101):";
	cin>>b.tc_time;
	cout<<"输入你的图书出版社:";
	cin>>b.chbsh;

	b.tmode='T';
	
			t_sum++;
	file.seekp(0,ios::beg);
	file.write((char *)&t_sum,sizeof(t_sum));
	file.seekp(sizeof(t_sum),ios::beg);
	file.write((char *)&j_sum,sizeof(j_sum));
	file.seekp(sizeof(t_sum)+sizeof(j_sum),ios::beg);
	if(t_sum!=1){
	for(int i=0;i<t_sum-1;i++){
	file.write((char *)&tb[i],sizeof(BOOK));
	file.seekp(sizeof(t_sum)+sizeof(j_sum)+(i+1)*sizeof(BOOK),ios::beg);
	}
	}
	file.write((char *)&b,sizeof(BOOK));
	cout<<"添加成功!"<<endl;
	//if(t_sum!=1)
		delete tb;
}
void tbook::display(fstream &file)
{
	duqu(file);
	book::display();
	delete tb;
}

void tbook::tchaxun(fstream &file)
{
	char		t_name[20];//图书名
	cout<<"输入你要查询的书名:";
	cin>>t_name;
	duqu(file);
	int i=0;
	while(i!=t_sum){
		if(!strcmp(t_name,tb[i].t_name)){
		cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;
		break;}
	i++;
	}
	if(i==t_sum)cout<<"没有你找到你想要的书!";
	delete tb;

}
void tbook::xiugai(fstream &file)
{
	int i;
	duqu(file);
	cout<<"请输入图书编号:";
	cin>>i;
	i=chaxun(i,0);
	if(i==-1)
	{
		
		cout<<"你要修改的书不存在。"<<endl;
		delete tb;
	}
	else {
		cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;

		cout<<"输入你要修改的图书名:";
		cin>>tb[i].t_name;
		cout<<"输入你要修改的出版时间:";
		cin>>tb[i].tc_time;
		cout<<"输入你要修改的出版社:";
		cin>>tb[i].chbsh;
		update(file);
	}

}

void tbook::del(fstream &file)
{
	int i;
	duqu(file);
	cout<<"全部删除请输入:-1"<<endl;
	cout<<"输入你要删除的图书编号:";
	cin>>i;
	if(i==-1) {
		t_sum=0;
		j_sum=0;
		file.seekp(0,ios::beg);
		file.write((char *)&t_sum,sizeof(t_sum));
		file.seekp(sizeof(t_sum),ios::beg);
		file.write((char *)&j_sum,sizeof(j_sum));
	}
	else
	{
	i=chaxun(i,0);
	if(i==-1)
	{
		
		cout<<"找不到图书编号。"<<endl;
		
	}
	else {
		cout<<tb[i].t_ID<<" "<<tb[i].tmode<<" "<<tb[i].t_name<<" "<<tb[i].tc_time
			<<" "<<tb[i].chbsh<<endl;
	t_sum--;
	file.seekp(0,ios::beg);
	file.write((char *)&t_sum,sizeof(t_sum));
	file.seekp(sizeof(t_sum),ios::beg);
	file.write((char *)&j_sum,sizeof(j_sum));
	int j=0;
	int k;
	for(k=0;j<t_sum+1;j++)
	{
		if(i!=j){
	file.seekp(sizeof(t_sum)+sizeof(j_sum)+(j-k)*sizeof(BOOK),ios::beg);
	file.write((char *)&tb[j],sizeof(BOOK));
		}
		else k=1;

	}
	cout<<"删除成功"<<endl;
	}
	}
	delete tb;
}

//读者信息类
class reader
{
protected:
	READERSHIP *dz;
	int d_sum;
public:
	reader(int n=0):d_sum(n){}
	void duqu(fstream &file);//读取读者库
	void update(fstream &file);//更新读者库
	int chaxun(int ID,int k=1);//查询读者,1、带输出读者
	int xieru(int i,int tID,int j)//1、借2、还
	{
		int k;
		if(j==1){
			
			for(k=0;k<shulian;k++)
				if(dz[i].kejie[k]==0){
					dz[i].kejie[k]=tID;
				return 1;}
		}
		else if(j==2){
			for(k=0;k<shulian;k++)
				if(dz[i].kejie[k]==tID){
					dz[i].kejie[k]=0;
					return 1;
				}
		}
		return 0;
	}

};
void reader::duqu(fstream &file)
{
	file.seekg(0,ios::beg);
	file.read((char *)&d_sum,sizeof(d_sum));
	file.seekg(sizeof(d_sum),ios::beg);
	cout<<"读者总数:"<<d_sum<<endl;
	dz=new READERSHIP[d_sum];
	if(dz==NULL)cout<<"空间不足,出错了"<<endl;
	file.read((char *)dz,d_sum*sizeof(READERSHIP));
}
void reader::update(fstream &file)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -