大佬们,这是一个图书馆录入与查询系统,有个问题:怎么使得输入的图书编号不能重复,重复就会报错!可以帮我改下代码吗。谢谢各位大佬指点
#include<stdio.h>#include<math.h>
#include<string.h>
#include<stdlib.h>
struct books_list
{
char author[20]; /*作者名*/
char bookname[20]; /*书名*/
char publisher[20]; /*出版单位*/
char booknum[10]; /*书号*/
char category[20];/*类别*/
struct books_list * next; /*链表的指针域*/
};
struct books_list * Create_Books_Doc(); /*新建链表*/
void InsertDoc(struct books_list * head); /*插入*/
void Print_Book_Doc(struct books_list * head);/*浏览*/
void search1_book(struct books_list * head); /*查询*/
void search2_book(struct books_list * head); /*查询*/
void search3_book(struct books_list * head); /*查询*/
void search4_book(struct books_list * head); /*查询*/
void search5_book(struct books_list * head); /*查询*/
void save(struct books_list * head);/*保存数据至文件*/
/*新建链表头节点*/
struct books_list * Create_Books_Doc()
{
struct books_list * head;
head=(struct books_list *)malloc(sizeof(struct books_list)); /*分配头节点空间*/
head->next=NULL; /*头节点指针域初始化,定为空*/
return head;
}/*保存数据至文件*/
void save(struct books_list * head)
{
struct books_list *p;
FILE *fp;
p=head;
fp=fopen("data.txt","w+"); /*以写方式新建并打开data.txt文件*/
fprintf(fp,"┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━┳\n"); /*向文件输出表格*/
fprintf(fp,"┃书号┃书名 ┃作者 ┃出版单位┃类别 ┃\n");
fprintf(fp,"┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━╋\n");
/*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/
while(p->next!= NULL)
{
p=p->next;
fprintf(fp,"┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-10.10s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->category);
}
fprintf(fp,"┗━━━┻━━━━━┻━━━━━┻━━━━━┻━━━━━┻\n");
fclose(fp);
printf(" 已将图书数据保存到data.txt 文件\n");
}
/*插入*/
void InsertDoc(struct books_list *head)
{
/*定义结构体指针变量s指向开辟的新结点首地址p为中间变量*/
struct books_list *s, *p;
char flag='Y'; /*定义flag,方便用户选择重复输入*/
p=head;
/*遍历到尾结点,p指向尾结点*/
while(p->next!= NULL)
{
p=p->next;
}
/*开辟新空间,存入数据,添加进链表*/
while(flag=='Y'||flag=='y')
{
s=(struct books_list *)malloc(sizeof(struct books_list));
printf("\n 请输入图书号:");
fflush(stdin);
scanf("%s",s->booknum);
printf("\n 请输入图书书名:");
fflush(stdin);
scanf("%s",s->bookname);
printf("\n 请输入图书作者名:");
fflush(stdin);
scanf("%s",s->author);
printf("\n 请输入图书出版社:");
fflush(stdin);
scanf("%s",s->publisher);
printf("\n 请输入图书类别:");
fflush(stdin);
scanf("%s",s->category);
printf("\n");
p->next=s; /*将新增加的节点添加进链表*/
p=s; /*p指向尾节点,向后移*/
s->next=NULL;
printf(" ━━━━添加成功!━━━━");
printf("\n 继续添加?(Y/N):");
fflush(stdin);
scanf("%c",&flag);
printf("\n");
if(flag=='N'||flag=='n')
{break;}
else if(flag=='Y'||flag=='y')
{continue;}
}
save(head); /*保存数据至文件*/
return;
}
/*查询操作*/
void search1_book(struct books_list *head)
{
struct books_list * p;
char Number[10];
p=head;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf(" ━━━━图书库为空!━━━━\n");
}
else
{
printf("请输入您要查找的书号: ");
fflush(stdin);
scanf("%s",&Number);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->booknum,Number)==0)
{
printf("\n图书已找到!\n");
printf("\n");
printf("书号: %s\t\n",p->booknum);
printf("书名: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("类别:%s\t\n",p->category);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
void search2_book(struct books_list *head)
{
struct books_list * p;
char temp[20];
p=head;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf(" ━━━━图书库为空!━━━━\n");
}
else
{
printf("请输入您要查找的书名: ");
fflush(stdin);
scanf("%s",&temp);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->bookname,temp)==0)
{
printf("\n图书已找到!\n");
printf("\n");
printf("书号: %s\t\n",p->booknum);
printf("书名: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("类别:%s\t\n",p->category);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
void search3_book(struct books_list *head)
{
struct books_list * p;
char writer[20];
p=head;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf(" ━━━━图书库为空!━━━━\n");
}
else
{
printf("请输入您要查找的作者名: ");
fflush(stdin);
scanf("%s",&writer);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->author,writer)==0)
{
printf("\n图书已找到!\n");
printf("\n");
printf("书号: %s\t\n",p->booknum);
printf("书名: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("类别:%s\t\n",p->category);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
void search4_book(struct books_list *head)
{
struct books_list * p;
char press[20];
p=head;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf(" ━━━━图书库为空!━━━━\n");
}
else
{
printf("请输入您要查找的出版社: ");
fflush(stdin);
scanf("%s",&press);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->publisher,press)==0)
{
printf("\n图书已找到!\n");
printf("\n");
printf("书号: %s\t\n",p->booknum);
printf("书名: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("类别:%s\t\n",p->category);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
void search5_book(struct books_list *head)
{
struct books_list * p;
char type[20];
p=head;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf(" ━━━━图书库为空!━━━━\n");
}
else
{
printf("请输入您要查找的类别: ");
fflush(stdin);
scanf("%s",&type);
/*指针从头节点开始移动,遍历至尾结点,查找书目信息*/
while(p->next!= NULL)
{
p=p->next;
if(strcmp(p->category,type)==0)
{
printf("\n图书已找到!\n");
printf("\n");
printf("书号: %s\t\n",p->booknum);
printf("书名: %s\t\n",p->bookname);
printf("作者名: %s\t\n",p->author);
printf("出版单位: %s\t\n",p->publisher);
printf("类别:%s\t\n",p->category);
}
if(p->next==NULL)
{
printf("\n查询完毕!\n");
}
}
}
return;
}
/*浏览操作*/
void Print_Book_Doc(struct books_list * head)
{
struct books_list * p;
if(head==NULL || head->next==NULL) /*判断数据库是否为空*/
{
printf("\n ━━━━没有图书记录! ━━━━\n\n");
return;
}
p=head;
printf("┏━━━┳━━━━━┳━━━━━┳━━━━━┳━━━━━┳\n");
printf("┃书号┃书名 ┃作者 ┃出版单位┃类别 ┃\n");
printf("┣━━━╋━━━━━╋━━━━━╋━━━━━╋━━━━━╋\n");
/*指针从头节点开始移动,遍历至尾结点,依次输出图书信息*/
while(p->next!= NULL)
{
p=p->next;
printf("┃%-6.6s┃%-10.10s┃%-10.10s┃%-10.10s┃%-10.10s┃\n",p->booknum,p->bookname,p->author,p->publisher,p->category); /*循环输出表格*/
}
printf("┗━━━┻━━━━━┻━━━━━┻━━━━━┻\n");
printf("\n");
}
int main(void)
{
struct books_list * head;
char choice;
head=NULL;
for(;;) /*实现反复输入选择*/
{
system("color 3C");
printf(" ┏━┓***************************************┏━┓\n");
printf(" ┃┃图书管理系统┃┃\n");
printf(" ┃┗━━━━━━━━━━━━━━━━━━━┛┃\n");
printf(" ┃[1]图书信息录入┃\n");
printf(" ┃┃\n");
printf(" ┃[2]图书信息浏览┃\n");
printf(" ┃┃\n");
printf(" ┃[3]按书号查询┃\n");
printf(" ┃┃\n");
printf(" ┃[4]按书名查询┃\n");
printf(" ┃┃\n");
printf(" ┃[5]按作者查询┃\n");
printf(" ┃┃\n");
printf(" ┃[6]按出版社查询┃\n");
printf(" ┃┃\n");
printf(" ┃[7]按类别查询┃\n");
printf(" ┃┃\n");
printf(" ┃[8]退出系统┃\n");
printf(" ┗**********************************************┛\n");
printf(" 请选择:");
fflush(stdin);
scanf("%c",&choice);
if(choice=='1')
{
if(head==NULL)
{
head=Create_Books_Doc();
}
InsertDoc(head);
}
else if(choice=='2')
{
Print_Book_Doc(head);
}
else if(choice=='3')
{
search1_book(head);
}
else if(choice=='4')
{
search2_book(head);
}
else if(choice=='5')
{
search3_book(head);
}
else if(choice=='6')
{
search4_book(head);
}
else if(choice=='7')
{
search5_book(head);
}
else if(choice=='8')
{
printf("\n");
printf(" ━━━━━━━━感谢使用图书管理系统━━━━━━━━\n");
break;
}
else
{
printf(" ━━━━输入错误,请重新输入!━━━━");
break;
}
}
return 0;
}