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

📄 booksystem.cpp

📁 基于MFC实现的图书管管理系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:

#include "StdAfx.h"
#include "BookSystem.h"

int BookSystem::j=5;
int BookSystem::storage=0;
BookSystem* BookSystem::t=new BookSystem;
BookSystem* BookSystem::re=new BookSystem;
BookSystem::BookSystem()
{
	press_next=NULL;bookname_next=NULL;author_next=NULL;same=NULL;other=NULL;
	note[0]=1;note[1]=1,note[2]=1,ID=0;booknameID=0;
	
}
BookSystem::~BookSystem()
{
}
void BookSystem::Set(CString y,CString m,CString d)
{press=y;bookname=m;author=d;
}
int BookSystem::ReturnStorage()
{return storage;}

/////////////////////////////////////////////////////////////////////////////////////////
  //对出版社的坐标链表查找
 //J付1说明确实找到了该书名    
 //J不等于1说明确实找不到了该书名    
BookSystem* BookSystem::Search_Press(CString s,BookSystem* root)                         //对出版社的坐标链表查找
{BookSystem* temp=NULL;
j=3;//先对J设定一个不会冲突的值
if(root->press==s)
{t->press_next=root;j=1;return root;}  //先看根节点,看其出版设是否是要查找的出版社,是就返回                
if(root->press_next==NULL)//若第一步不成功,看是否还有另外的出版社,若另外的出版社为空。也就是说没有
{t->press_next=root;j=0;return root;}  //那么就返回,把J付0   
temp=root->press_next; //当还存在别的出版社                                          
while((temp->press!=s)&&(temp->press_next!=NULL))//再看其出版设是否是要查找的出版社,是就返回          
{t->press_next=temp;temp=temp->press_next;}         //指向随后的节点
if(temp->press==s)
{t->press_next=temp;j=1;return temp;}                             
if(temp->press_next==NULL)
{t->press_next=temp;j=2;return temp;}            
return temp;
}

/////////////////////////////////////////////////////////////////////////////////////
  //对书名的坐标链表查找
BookSystem* BookSystem::Search_Bookname(CString s,BookSystem*root)
{BookSystem* temp=NULL;
temp=root;
j=3;
if(root->bookname==s)
{t->bookname_next=root;j=1;return root;}
if(root->bookname_next==NULL)
{t->bookname_next=root;j=0;return temp;}
while((temp->bookname!=s)&&(temp->bookname_next!=NULL))
{t->bookname_next=temp;temp=temp->bookname_next;}
if(temp->bookname==s)
{t->bookname_next=temp;j=1;return temp;}                       //加1说明确实找到了该书名
if(temp->bookname_next==NULL)
{t->bookname_next=temp;j=2;return temp;}                    //没有加1说明找不到该书名,找到了只是该书名前面的一个书名
return temp;
}

////////////////////////////////////////////////////////////////////////////////////////
  //对作者的坐标链表查找
BookSystem* BookSystem::Search_Author(CString s,BookSystem* root)
{BookSystem* temp=NULL;
temp=root;
j=3;
if(root->author==s)
{t->author_next=root;j=1;return root;}
if(root->author_next==NULL)
{t->author_next=root;j=0;return t->author_next;}
while((temp->author!=s)&&(temp->author_next!=NULL))
{t->author_next=temp;temp=temp->author_next;}
if(temp->author==s)
{t->author_next=temp;j=1;return temp;}                     
else if(temp->author_next==NULL)
{t->author_next=temp;j=2;return temp;} 
return temp;
}

////////////////////////////////////////////////////////////////////////////////////////
  //对类型的坐标链表查找,与上面的几个查找不同,因为这个是基于跳跃链表的
BookSystem* BookSystem::ResearchInsert_Type(BookSystem* root,BookSystem* tt)                         //对类型查找
{BookSystem* temp=NULL;
BookSystem* temp1=NULL;
BookSystem* temp2=NULL;
if(root->same==NULL&&root->other==NULL)            //既这是插入第二个节点时,在这之前只有根节点root一个节点
{if(root->type==tt->type)   //若和根节点同类型
{root->same=tt;return root;}//把根节点的same指针指向该节点
root->other=tt;return tt;//否则,也就是说第二个节点和跟节点不同类型,就把根节点的other指针指向该节点
}
temp=root;  //但上面第一个条件语句不成立,也就是说现在是插如第三个或以上的节点
while(temp->type!=tt->type&&temp->other!=NULL){temp2=temp;temp=temp->other;}//找寻同样的类型
if(temp->type==tt->type)//若该类型已经存在,则把与它是同类型的节点的same指针指向它
{if(temp->same==NULL){temp->same=tt;return temp;};
	temp2=temp->same;temp->same=tt;tt->same=temp2;return temp;}
temp->other=tt;return tt;//否则,说明这是一个新的类型,把最后一种类型的other指针指向它
return tt;
}




//////////////////////////////////////////////////////////////////////////////////////
  //对出版社和书名查找
BookSystem* BookSystem::Search_PandB(CString a, CString b,BookSystem* root)                        //以出版社和书名为关键字来查找                    
{BookSystem* temp=NULL;
int a1=3,b1=3;
BookSystem* temp1=NULL;
BookSystem* temp2=NULL;
temp1=Search_Press(a,root);
a1=j;
temp2=Search_Bookname(b,root);
b1=j;
if((a1)!=1||(b1)!=1){j=0;return temp;}
else {temp=temp2  ;                                      //即两样要素都存在
while(temp->press!=a&&temp->press_next!=NULL){temp=temp->press_next;}
if(temp->press==a){j=1;return temp;}  
else{ j=0;return temp;}	                            //找到
}
}

///////////////////////////////////////////////////////////////////////////////////////////
  //对出版社和作者查找
BookSystem* BookSystem::Search_BandA(CString a, CString b,BookSystem* root)                        //以人名和书名为关键字来查找                    
{BookSystem* temp=NULL;
int a1=3;
int b1=3;
BookSystem* temp1=NULL;
BookSystem* temp2=NULL;
temp1=Search_Bookname(a,root);
a1=j;
temp2=Search_Author(b,root);
b1=j;
if((a1)!=1||(b1)!=1){j=0;return temp;}
else {temp=temp2 ;                                         //即两样要素都存在
while(temp->bookname!=a&&temp->bookname_next!=NULL){temp=temp->bookname_next;}
if(temp->bookname==a){j=1;return temp;}  //已找尽
else{j=0;return temp;}	                            //找到
}
}

//////////////////////////////////////////////////////////////////////////////////
  //对书名和作者查找
BookSystem* BookSystem::Search_PandA(CString a, CString b,BookSystem* root)                        //以出版社和书名为关键字来查找                    
{BookSystem* temp=NULL;
BookSystem* temp1=NULL;
BookSystem* temp2=NULL;
int a1=3,b1=3;
temp1=Search_Press(a,root);
a1=j;
temp2=Search_Author(b,root);
b1=j;
if((a1)!=1||(b1)!=1){j=0;return temp;}
else {temp=temp2;                                         //即两样要素都存在
while(temp->press!=a&&temp->press_next!=NULL){temp=temp->press_next;}
if(temp->press==a){j=1;return temp;}  //已找尽
else{ j=0;return temp;}	                            //找到
};
}

//////////////////////////////////////////////////////////////////////////////////////////////////
  //对出版社,书名和作者查找
BookSystem* BookSystem::Search_PandBandA(CString a, CString b, CString c, BookSystem* root)                        //以出版社,书名和人名为关键字来查找 
{
	BookSystem*temp4=NULL;
	BookSystem* temp1=NULL;
	BookSystem* temp2=NULL;
	BookSystem* temp3=NULL;
	int a1=3,b1=3,c1=3;
	j=3;                                                          //每个位标记一样属性
	temp1=Search_Press(a,root);a1=j;
	temp2=Search_Bookname(b,root);b1=j;
	temp3=Search_Author(c,root);c1=j;
	if(a1!=1){j=0;}                                    //如果没有该书的出版社
	if(b1!=1){j=0;}                                    //如果没有该书的书名
	if(c1!=1){j=0;}                                    //如果没有该书的人名
	if(j==0){return temp4;}
	if(a1==1){temp2=Search_Bookname(b,temp1);b1=j;
	if(b1==1)
	{temp3=Search_Author(c,temp2);c1=j;
	if(c1==1){j=1;return temp3;}
	}
	}
	return temp4;
	j=0;
	return temp4;
}

///////////////////////////////////////////////////////////////////////////////////////////////
//在出版社和书名的稀疏距阵查找和插入节点
BookSystem* BookSystem::InsertMatrix_PandB(CString f,CString s,BookSystem*root)
{
	BookSystem*temp1=NULL;
	BookSystem*temp2=NULL;
	BookSystem*temp4=NULL;
	BookSystem*temp5=NULL;
	int a2,b2;
	a2=b2=3;
	
	temp1=Search_Press(f,root);a2=j;    //先对出版社进行查找,看是否是一个新的出版社
	if(a2!=1)//a2不等于一,说明找不到这个出版社,说明是一个新的出版社
	{BookSystem*p1;p1=new BookSystem;p1->Set(f,root->bookname,root->author);
	p1->note[0]=t->press_next->note[0]+1;
	temp1->press_next=p1;t->press_next=p1;temp5=p1;}//创建需要的节点
	temp2=Search_Press(s,root);b2=j;//同理可得
	if(b2!=1){BookSystem*b1;b1=new BookSystem;b1->Set(root->press,s,root->author);
	b1->note[1]=(t->bookname_next->note[1]+1);t->bookname_next->bookname_next=b1;re->bookname_next=b1;temp5=b1;}
	temp4=Search_PandB(f,s,root);//对出版社和书名同时查找,看是否已经存在
	if(j!=1){ BookSystem*k=NULL;//不存在的话,需要创建,对创建的节点进行相应的付值
	k=new BookSystem;k->Set(f,s,root->author);
	temp1=Search_Press(f,root);
	
	temp2=Search_Bookname(s,root);
	
	k->note[0]=temp1->note[0];k->note[1]=temp2->note[1];
	temp4=temp1;
	temp5=temp1;
	//将新建的节点插入到适当的位置
	while(temp4->bookname_next!=NULL&&temp4->note[1]<k->note[1])
	{temp5=temp4;temp4=temp4->bookname_next;}
	if(temp4->bookname_next==NULL&&temp4->note[1]<k->note[1])
	{temp4->bookname_next=k;}
	else{k->bookname_next=temp4;temp5->bookname_next=k;}
	temp4=temp2;
	temp5=temp2;
	while(temp4->press_next!=NULL&&temp4->note[0]<k->note[0])
	{temp5=temp4;temp4=temp4->press_next;}
	if(temp4->bookname_next==NULL&&temp4->note[0]<k->note[0])
	{temp4->press_next=k;}
	else{k->press_next=temp4;temp5->press_next=k;}
	return k;
	}
	else{j=7;return temp5;
	}
}

/////////////////////////////////////////////////////////////////////
//在出版社和作者的稀疏距阵查找和插入节点
BookSystem* BookSystem::InsertMatrix_PandA(CString f,CString s,BookSystem*root)
{
	BookSystem*temp1=NULL;
	BookSystem*temp2=NULL;
	BookSystem*temp4=NULL;
	BookSystem*temp5=NULL;
	int a2,b2;
	a2=b2=3;
	
	temp1=Search_Press(f,root);a2=j; 
	if(a2!=1){BookSystem*p1;p1=new BookSystem;p1->Set(f,root->bookname,root->author);
	p1->note[0]=t->press_next->note[0]+1;t->press_next->press_next=p1;t->press_next=p1;temp5=p1;}
	temp2=Search_Author(s,root);b2=j;
	if(b2!=1){BookSystem*b1;b1=new BookSystem;b1->Set(root->press,root->bookname,s);
	b1->note[2]=(t->author_next->note[2]+1);t->author_next->author_next=b1;re->bookname_next=b1;temp5=b1;}
	
	temp4=Search_PandA(f,s,root);
	if(j!=1){temp1=Search_Press(f,root);
	a2=j;
	temp2=Search_Author(s,root);
	b2=j;
	BookSystem*k;
	k=new BookSystem;k->Set(f,root->bookname,s);
	k->note[0]=temp1->note[0];k->note[2]=temp2->note[2];
	temp4=temp1;
	temp5=temp1;
	while(temp4->author_next!=NULL&&temp4->note[2]<k->note[2])
	{temp5=temp4;temp4=temp4->author_next;}
	if(temp4->author_next==NULL&&temp4->note[2]<k->note[2])
	{temp4->author_next=k;}
	else{k->author_next=temp4;temp5->author_next=k;}
	temp4=temp2;
	temp5=temp2;
	while(temp4->press_next!=NULL&&temp4->note[0]<k->note[0])
	{temp5=temp4;temp4=temp4->press_next;}
	if(temp4->press_next==NULL&&temp4->note[0]<k->note[0])
	{temp4->press_next=k;}
	else{k->press_next=temp4;temp5->press_next=k;}
	return k;
	}
	else{j=7;return temp5;
	}
}


/////////////////////////////////////////////////////
//在出书名和作者的稀疏距阵查找和插入节点
BookSystem* BookSystem::InsertMatrix_BandA(CString f,CString s,BookSystem*root)
{
	BookSystem*temp1=NULL;
	BookSystem*temp2=NULL;
	BookSystem*temp4=NULL;
	BookSystem*temp5=NULL;
	int a2,b2;
	a2=b2=3;
	
	temp1=Search_Bookname(f,root);a2=j; 
	if(a2!=1){BookSystem*p1;p1=new BookSystem;p1->Set(root->press,f,root->author);
	p1->note[1]=t->bookname_next->note[1]+1;t->bookname_next->bookname_next=p1;t->bookname_next=p1;temp5=p1;}
	temp2=Search_Author(s,root);b2=j;
	if(b2!=1){BookSystem*b1;b1=new BookSystem;b1->Set(root->press,root->bookname,s);
	b1->note[2]=(t->author_next->note[2]+1);t->author_next->author_next=b1;t->author_next=b1;temp5=b1;}
	temp4=Search_BandA(f,s,root);
	if(j!=1){
		temp1=Search_Bookname(f,root);
		temp2=Search_Author(s,root);
		BookSystem*k;k=new BookSystem;k->Set(root->press,f,s);
		k->note[1]=temp1->note[1];k->note[2]=temp2->note[2];
		temp4=temp1;
		while(temp4->author_next!=NULL&&temp4->note[2]<k->note[2]){temp5=temp4;temp4=temp4->author_next;}
		if(temp4->author_next==NULL&&temp4->note[2]<k->note[2]){temp4->author_next=k;}
		else{k->author_next=temp4;temp5->author_next=k;}
		temp4=temp2;
		while(temp4->bookname_next!=NULL&&temp4->note[1]<k->note[1]){temp5=temp4;temp4=temp4->bookname_next;}
		if(temp4->bookname_next==NULL&&temp4->note[1]<k->note[1]){temp4->bookname_next=k;}
		else{k->bookname_next=temp4;temp5->bookname_next=k;}
		return k;
	}
	else {j=7;return temp5;}
}

/////////////////////////////////////////////////////////////////////////////////
//对于需要插入的书,先把它当作一个节点,在把他插进结构当中
bool BookSystem::InsertBookSystem(CString p,CString b,CString m, CString ty,BookSystem *temp)
{if(temp==NULL){                       //判断是否存在第一个节点,创立第一个节点
	temp->Set(p,b,m);
	temp->ID=1;

⌨️ 快捷键说明

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