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

📄 sort_all.h

📁 本程序是使用数据结构的算法
💻 H
📖 第 1 页 / 共 2 页
字号:
//得到需要查找的图书名称
{   
	int j=0;
	printf("请输入你要的图书名称:");
L2:  gets(L.r[0].otheritems.bookname);
	for(int i=1;i<=L.recnum;i++)
	{	
	for(int k=0;k<60;k++)                          //"60"是equiname的最大长度
		if(Equal(L.r[i].otheritems.bookname,L.r[0].otheritems.bookname))
			j=i;
	}
	if(j)
	{
	for(int i=0;i<MAX_NUM_OF_KEY;i++) 
	key[i]=L.r[j].keys[i];
	if(key[2]>'Z') key[2]=(char)(key[2]-'a'+'A');
    return;
	}
	else 
	{
	printf("\a");                       //声音提示
	printf("该图书不存在,请重新输入:");
	goto L2;
	}
}//GetSearchEquiname

void GetSearchAuthor(SLList L,KeysType *key)
//得到需要查找的图书的作者
{
		int j=0;
	printf("请输入你要的图书的作者:");
L3:  gets(L.r[0].otheritems.author);
	for(int i=1;i<=L.recnum;i++)
	{	
	for(int k=0;k<60;k++)                          //"60"是equiname的最大长度
		if(Equal(L.r[i].otheritems.author,L.r[0].otheritems.author))
			j=i;
	}
	if(j)
	{
	for(int i=0;i<MAX_NUM_OF_KEY;i++) 
	key[i]=L.r[j].keys[i];
	if(key[2]>'Z') key[2]=(char)(key[2]-'a'+'A');
    return;
	}
	else 
	{
	printf("\a");                       //声音提示
	printf("该作者不存在,请重新输入:");
	goto L3;
	}
}//GetSearchAuthor

bool Little(KeysType key1[],KeysType key2[])
//判断较小
{
	for(int i=0;i<MAX_NUM_OF_KEY;i++)
	{
		if(LT(key1[i],key2[i])) return true;
		else if(BG(key1[i],key2[i])) return false;
	}
	return false;
}//Little

int Search_Bin(SLList L,KeysType key[])
{//二分查找
	int low=1,high=L.recnum,mid;
	while(low<=high){
		mid=(low+high)/2;
		if(Equal(key,L.r[mid].keys)) return mid;
		else if(Little(key,L.r[mid].keys)) high=mid-1;
		else low=mid+1;
	}
	return 0;
}//Search_Bin

void WriteFile(SLList &S)
//保存文件
{
	FILE *fptr;	
	char filename[60];
	char filename1[7]="save\\0";
	if(S.recnum<1)
	{	printf("\a");                      //声音提示
		cout<<"\n还没数据,不能保存空的记录!\n";return;
	}
Q:	cout<<"请输入你要存成的文件名称(可以包括文件的储存位置和后缀名,如:D:/a)";
	cin>>filename;                          //输入文件名
	for(int y=0;y<45;y++)                   //改变路径
	{
        filename[y+5]=filename[y];
	}
	for(int x=0;x<5;x++)
	{
        filename[x]=filename1[x];
	}
if((fptr=fopen(filename,"rb+"))==NULL)      //用此方法来判断重名的文件是否存在      
{
//	 cout<<"\n由于发生某种错误,不能打开您要的文件!\n";
//printf("没有重名的文件,可以直接保存!");
if((fptr=fopen(filename,"wb+"))==NULL)
	{	printf("\a");                       //声音提示
		cout<<"\n由于发生某种错误,不能保存您的文件(可能是磁盘已满无法建新文件或路径问题)!\n";
		exit(0);
	}
	fwrite(&S.r[1],sizeof(S.r[1]),S.recnum,fptr);        //注意是要从1开始的,而不是0
    fclose(fptr);
	cout<<"\n恭喜你,保存成功!共有"<<S.recnum<<"条记录!\n";
}
else{
	cout<<"此文件夹已经存在,要替换它吗?(Y/N)";
	char YorN3;
			cin>>YorN3;
		switch(YorN3)
		{
		case 'y':
		case 'Y':
		if((fptr=fopen(filename,"wb+"))==NULL)
	{	printf("\a");                       //声音提示
		cout<<"\n由于发生某种错误,不能保存您的文件(可能是磁盘已满无法建新文件或路径问题)!\n";
		exit(0);
	}
	fwrite(&S.r[1],sizeof(S.r[1]),S.recnum,fptr);        //注意是要从1开始的,而不是0
    fclose(fptr);
	cout<<"\n恭喜你,保存成功!共有"<<S.recnum<<"条记录!\n";
		break;

		case 'n':
		case 'N':
	    	printf("\a");                       //声音提示
			goto Q;
		break;

		default:
		printf("\a");                       //声音提示
        cout<<"非法输入,请输入y或n!";
		break;
		}//switch
}//if
}//WriteFile

void ReadFile(SLList &S)             //有&是很关键的
//读取文件
{   
	int n=1;                         //注意是要从1开始的,而不是0
	FILE *fptr;
	char filename1[7]="save\\0";
	char filename[60];
	cout<<"请输入你要读取的文件名称(可以包括文件的储存位置和后缀名,如:D:/a)";
	cin>>filename;
	for(int y=0;y<45;y++)
	{
        filename[y+5]=filename[y];
	}
	for(int x=0;x<5;x++)
	{
        filename[x]=filename1[x];
	}
 if((fptr=fopen(filename,"rb+"))==NULL)
 {	 printf("\a");                       //声音提示
	 cout<<"\n由于发生某种错误,不能打开您要的文件(可能是路径错误)!\n";
	 exit(0);
 }
	else
	{	
		while(fread(&S.r[n],sizeof(S.r[n]),1,fptr)==1)
		{
			n++;
		}	
		cout<<"\n恭喜你,导入成功!";	
		cout<<"共有"<<n-1<<"条记录!"<<endl;	
		S.recnum=n-1;
	    SLListTraverse(S);				//遍历
		fclose(fptr);
		}
}//ReadFile

void InsertElem(SLList &L)
//插入数据
{  
	char numstr[60];
	KeysType key='0';
	cout<<"请输入图书编码,若图书编码为'#'则结束!"<<endl;
	cout<<"例如: 01b11"<<endl;
	while(key!='#')
	{
	cout<<endl<<"图书编号:";
	for(int k=0;k<MAX_NUM_OF_KEY;k++)
	{
		cin>>key;
		if(k==2&&key>'Z') key=(char)(key-'a'+'A');
		if(key=='#') break;
		L.r[0].keys[k]=key;
	}
	for(int i1=1;i1<=L.recnum;i1++)
{	while(Equal(L.r[0].keys,L.r[i1].keys))            //抛出重复的异常
	{if(key=='#') break;	
	    printf("\a");                       //声音提示
		cout<<"这个图书号已存在,请重新输入:";
		for(int k=0;k<MAX_NUM_OF_KEY;k++)
	{
		cin>>key;
		if(k==2&&key>'Z') key=(char)(key-'a'+'A');
		if(key=='#') break;
		L.r[0].keys[k]=key;
	}
	}
}
	if(key=='#') break;
	printf("图书名称:");
	gets(L.r[0].otheritems.bookname);
	while(L.r[0].otheritems.bookname[0]==0)        //抛出输入为空的异常
	{	printf("\a");                       //声音提示
		printf("图书名称不能为空,请重新输入:");
		gets(L.r[0].otheritems.bookname);
	}
	printf("作者:");
	gets(L.r[0].otheritems.author);
	while(L.r[0].otheritems.author[0]==0)        //抛出输入为空的异常
	{	printf("\a");                       //声音提示
		cout<<"作者不能为空,请重新输入:";
		gets(L.r[0].otheritems.author);
	}
	printf("出版时间:");
	gets(L.r[0].otheritems.publishtime);
	while(L.r[0].otheritems.publishtime[0]==0)        //抛出输入为空的异常
	{	printf("\a");                       //声音提示
		cout<<"作者不能为空,请重新输入:";
		gets(L.r[0].otheritems.publishtime);
	}
	printf("ISBN号:");
	gets(L.r[0].otheritems.ISBN);
	while(L.r[0].otheritems.ISBN[0]==0)        //抛出输入为空的异常
	{	printf("\a");                       //声音提示
		cout<<"作者不能为空,请重新输入:";
		gets(L.r[0].otheritems.ISBN);
	}
	printf("图书单价:");
	gets(numstr);
	while(!(atof(numstr)>0.0))
	{	printf("\a");                       //声音提示	
		printf("非法输入,请重新输入:");
		gets(numstr);
	}                                            //抛出输入单价的异常
    L.r[0].otheritems.price=atof(numstr);

	int i;
    L.recnum=L.recnum+1;
	for( i=L.recnum-1;i>=0;i--)
	{
        L.r[i+1]=L.r[i];
	}

	RadixSort(L);					//基数排序
	Arrange(L);						//重整
}//while	
    cout<<endl<<"恭喜你,插入成功!"<<endl<<"表更新为:"<<endl;
    SLListTraverse(L);
}//InsertElem

void DeleteElem(SLList &L,Lnode *p,LinkList &H)
//删除数据
{KeysType key[MAX_NUM_OF_KEY];	//用于存储存要查的关键字
int findnum;
L0:	cout<<"请输入你要删除的图书号(5位):";
		for(int j=0;j<MAX_NUM_OF_KEY;j++) 
		cin>>key[j];
	   if(key[2]>'Z') key[2]=(char)(key[2]-'a'+'A');	
findnum=Search_Bin(L,key);		
while(!findnum)
{	printf("\a");                       //声音提示
cout<<"对不起,没有这条记录!"<<endl;
cout<<"请重新输入:";
for(int j=0;j<MAX_NUM_OF_KEY;j++) 
cin>>key[j];
if(key[2]>'Z') key[2]=(char)(key[2]-'a'+'A');
findnum=Search_Bin(L,key);
}
cout<<"你要删除的图书是No."<<findnum<<endl;
DataTraverse(L,findnum);	//打印找到的数据
//*****以下是删除数组元素的代码*****
	    printf("\a");                       //声音提示
		cout<<"真的要删除它吗?"<<"是(y)  否(n)";
		char YorN;
		cin>>YorN;
		int i;
		switch(YorN)
		{
		case 'y':
	    for(i=findnum;i<=L.recnum;i++)
			{
                L.r[i]=L.r[i+1];
			}L.recnum=L.recnum-1;
            cout<<"删除成功!";
		if(L.recnum==0)
		{   printf("\a");  
           cout<<endl<<"您的数据表已为空!";//抛出异常
		}
		else
		{cout<<endl<<"您的数据更新为:"<<endl;SLListTraverse(L);}
		break;

		case 'n':
			goto L;
		break;

		default:
		printf("\a");                       //声音提示
        cout<<"非法输入,请输入y或n!";
		}
L:	while(L.recnum!=0)
	{	cout<<"还要继续此操作吗?"<<"是(y)  否(n)";
		char YorN1;
		cin>>YorN1;
		switch(YorN1)
		{
		case 'y':
			goto L0;
			break;	
		case 'n':
  return;
		break;

		default:
		printf("\a");                       //声音提示
        cout<<"非法输入,请输入y或n!";
		}
	}
}

⌨️ 快捷键说明

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