📄 sort_all.h
字号:
//得到需要查找的图书名称
{
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 + -