标题:大佬们,这是一个图书馆录入与查询系统,有个问题:怎么使得输入的图书编号 ...
取消只看楼主
ivent
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-11-21
结帖率:50%
 问题点数:0 回复次数:1 
大佬们,这是一个图书馆录入与查询系统,有个问题:怎么使得输入的图书编号不能重复,重复就会报错!可以帮我改下代码吗。谢谢各位大佬指点
#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;
}


搜索更多相关主题的帖子: struct next head NULL printf 
2018-12-17 09:52
ivent
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-11-21
得分:0 
回复 2楼 Mr_doge
谢谢谢谢!!
2018-12-30 13:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492074-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.371124 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved