回复 2楼 ying8501
#include<string.h>
#include<stdio.h>
#include<malloc.h>
#define ERROR 0
#define OK 1
#define FALSE 0
#define MAXSIZE 10000000
typedef struct LNode
{
//定义记录书籍的结构体
char ISBN[20];//定义图书的ISBN码
char
name[20];//定义图书的名字
char auth[20];//定义图书的作者
char output[20];//定义图书的出版社
char outday[20];//定义图书的出版日期
char
money[20];//定义图书的价格
int
num;//定义图书的册数
struct
LNode *next;
} LNode,*LinkList;
typedef struct Book
{
//定义记录书籍信息的结构体数组
char ISBN[20];//定义图书的ISBN码
char
name[20];//定义图书的名字
char auth[20];//定义图书的作者
char output[20];//定义图书的出版社
char outday[20];//定义图书的出版日期
char
money[20];//定义图书的价格
int
num;//定义图书的册数
} book[MAXSIZE];
book ook;
int Seek_Book_Publish(book &ook )//把文件中的数据载入数组中,查找该出版社的所有图书
{
FILE *fp;
int i=0,j=0,e=0,count=1;
char output[20];
if((fp = fopen("book.txt","r"))==NULL) //以读的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
while(!feof(fp)) //判断文件是否读到文件末尾
{
fscanf(fp,"%s%s%s%s%s%s%d",ook[i].ISBN,ook[i].name,ook[i].auth,ook[i].output,ook[i].outday,ook[i].money,&ook[i].num);//从文件中读取数据放到链表中
i++;
j++;
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
return FALSE;
}
printf("请输入你要找的出版社名称:");
scanf("%s",output);
for(i=0; i<=j; i++)//查找该出版社所有图书的算法
if(strcmp(output,ook[i].output)==0)
{
printf("第%d本:\n",count);
printf("该书的ISBN码是:");
printf("%s\n",ook[i].ISBN);
printf("该书的名字是
:");
printf("%s\n",ook[i].name);
printf("该书的作者是
:");
printf("%s\n",ook[i].auth);
printf("该书的出版社
:");
printf("%s\n",ook[i].output);
printf("该书出版日期是:");
printf("%s\n",ook[i].outday);
printf("该书的售价是
:");
printf("%s\n",ook[i].money);
printf("该图书的册数是:");
printf("%d\n",ook[i].num);
e=1;
count++;
printf("\n");
}
if(e==0) printf("不存在该出版社的图书:\n");
return OK;
}
int Seek_Book_auth(book ook )//把文件中的数据载入数组中,查找该作者的所有图书
{
FILE *fp;
int i=0,j=0,e=0,count=1;
char auth[20];
if((fp = fopen("book.txt","r"))==NULL) //以读的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
while(!feof(fp)) //判断文件是否读到文件末尾
{
fscanf(fp,"%s%s%s%s%s%s%d",ook[i].ISBN,ook[i].name,ook[i].auth,ook[i].output,ook[i].outday,ook[i].money,&ook[i].num);//从文件中读取数据放到链表中
i++;
j++;
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
return FALSE;
}
printf("请输入你要找的作者名称:");
scanf("%s",auth);
for(i=0; i<=j; i++)//查找该出版社所有图书的算法
if(strcmp(auth,ook[i].auth)==0)
{
printf("第%d本:\n",count);
printf("该书的ISBN码是:");
printf("%s\n",ook[i].ISBN);
printf("该书的名字是
:");
printf("%s\n",ook[i].name);
printf("该书的作者是
:");
printf("%s\n",ook[i].auth);
printf("该书的出版社
:");
printf("%s\n",ook[i].output);
printf("该书出版日期是:");
printf("%s\n",ook[i].outday);
printf("该书的售价是
:");
printf("%s\n",ook[i].money);
printf("该图书的册数是:");
printf("%d\n",ook[i].num);
e=1;
count++;
printf("\n");
}
if(e==0) printf("不存在该作者的图书:\n");
return OK;
}
int Seek_Book_name(book ook )//把文件中的数据载入数组中,按照图书名称查找
{
FILE *fp;
int i=0,j=0,e=0,count=1;
char name[20];
if((fp = fopen("book.txt","r"))==NULL) //以读的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
while(!feof(fp)) //判断文件是否读到文件末尾
{
fscanf(fp,"%s%s%s%s%s%s%d",ook[i].ISBN,ook[i].name,ook[i].auth,ook[i].output,ook[i].outday,ook[i].money,&ook[i].num);//从文件中读取数据放到链表中
i++;
j++;
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
return FALSE;
}
printf("请输入你要找的图书名称:");
scanf("%s",name);
for(i=0; i<=j; i++)//查找该出版社所有图书的算法
if(strcmp(name,ook[i].name)==0)
{
printf("第%d本:\n",count);
printf("该书的ISBN码是:");
printf("%s\n",ook[i].ISBN);
printf("该书的名字是
:");
printf("%s\n",ook[i].name);
printf("该书的作者是
:");
printf("%s\n",ook[i].auth);
printf("该书的出版社
:");
printf("%s\n",ook[i].output);
printf("该书出版日期是:");
printf("%s\n",ook[i].outday);
printf("该书的售价是
:");
printf("%s\n",ook[i].money);
printf("该图书的册数是:");
printf("%d\n",ook[i].num);
e=1;
count++;
printf("\n");
}
if(e==0) printf("不存在该你要找的图书:\n");
return OK;
}
int Seek_Book_isbn (book ook )//把文件中的数据载入数组中,按照图书isbn码查找
{
FILE *fp;
int i=0,j=0,e=0;
char isbn[20];
if((fp = fopen("book.txt","r"))==NULL) //以读的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
while(!feof(fp)) //判断文件是否读到文件末尾
{
fscanf(fp,"%s%s%s%s%s%s%d",ook[i].ISBN,ook[i].name,ook[i].auth,ook[i].output,ook[i].outday,ook[i].money,&ook[i].num);//从文件中读取数据放到链表中
i++;
j++;
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
return FALSE;
}
printf("请输入你要找的图书的ISBN:");
scanf("%s",isbn);
for(i=0; i<=j; i++)//查找该出版社所有图书的算法
if(strcmp(isbn,ook[i].ISBN)==0)
{
printf("\n");
printf("该书的名字是
:");
printf("%s\n",ook[i].name);
printf("该书的作者是
:");
printf("%s\n",ook[i].auth);
printf("该书的出版社
:");
printf("%s\n",ook[i].output);
printf("该书出版日期是:");
printf("%s\n",ook[i].outday);
printf("该书的售价是
:");
printf("%s\n",ook[i].money);
printf("该图书的册数是:");
printf("%d\n",ook[i].num);
e=1;
printf("\n");
}
if(e==0) printf("不存在该你要找的图书:\n");
return OK;
}
int Write_To_File(LinkList &L)
{
//将链表中的数据输入文本中储存
FILE *fp;//定义文件指针
LinkList p=L;
if((fp=fopen("book.txt","w"))==NULL) //以写的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
p=p->next;
while( p!=NULL)//判断链表是否读到末尾了
{
fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%d\n",p->ISBN,p->name,p->auth,p->output,p->outday,p->money,p->num);//把数据输入到文本中
p= p->next;//指针后移
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
exit(0);
}
return OK;
}
int Read_From_File(LinkList &L)//从文本中把数据读到链表中
{
FILE *fp;
//
char ch;
LinkList s,p=L;//定义指针p指向头结点
if((fp = fopen("book.txt","r"))==NULL) //以读的方式打开
{
printf("打开文件失败\n");
return FALSE;
}
p->next=NULL;
while(!feof(fp)) //判断文件是否读到文件末尾
{
s=(LinkList)malloc(sizeof(LNode));//生成新结点
fscanf(fp,"%s%s%s%s%s%s%d",s->ISBN,s->name,s->auth,s->output,s->outday,s->money,&s->num);//从文件中读取数据放到链表中
if(feof(fp)) break;
s->next=p->next;
p->next=s;
p=p->next;
}
if(fclose(fp))//关闭文件
{
printf("关闭文件失败\n");
exit(0);
}
return OK;
}
int CreateLink_L(LinkList &L)
{
// 创建单链表
LinkList p,q;
L= (LinkList)malloc(sizeof(LNode));
L->next = NULL;
// 先建立一个带头结点的单链表
//q = (LinkList)malloc(sizeof(LNode));
q= L;//新生成的一个结点指针指向头结点
return OK;
}
int Seek_Book_ISBN(LinkList &L)//查找图书
{
LinkList p=L;
char isbn[20];
printf("请输入你要增加的图书的ISBN码,以回车结束:\n");
scanf("%s",isbn);
while (p!=NULL)
//当指针不为空的时候继续向后查找
{
if(strcmp(isbn,p->ISBN)==0) break;
p=p->next;
}
if(p==NULL) return OK;
}
int Link_Book_Insert_L(LinkList &L)
{
// 在带头结点的单链线性表L中末尾之前插入新增加的图书信息
LinkList p=L,s;
s=(LinkList)malloc(sizeof(LNode));
printf("请输入该书的ISBN码
:");
scanf("%s",s->ISBN);
printf("请输入该书的名字是
:");
scanf("%s",s->name);
printf("请输入该书的作者是
:");
scanf("%s",s->auth);
printf("请输入该书的出版社
:");
scanf("%s",s->output);
printf("请输入该书出版日期
:");
scanf("%s",s->outday);
printf("请输入该书的售价是
:");
scanf("%s",s->money);
printf("请输入该图书的册数 :");
scanf("%d",&s->num);//从键盘录入图书信息
printf("\n");
s->next=p->next;
p->next=s;
p=p->next;
return OK;
}//LinkInsert_L
int LoadLink_L(LinkList &L)
{
// 单链表遍历
LinkList p=L;
if(!p) printf("链表为空");
else
{
printf("链表是:");
while(p)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t\n",p->ISBN,p->name,p->auth,p->output,p->outday,p->money);
p=p->next;
}
}
printf("\n");
return OK;
}
int List_Book_Delete_L(LinkList &L, char ISBN[20])
//在带头结点的单链线性表L中,删除相应ISBN码的图书。
{
LinkList p,q;
p = L;
int e=0;
char isbn[20];
printf("请输入你要删除图书的ISBN码,以回车键结束\n");
scanf("%s",isbn);
while (p!=NULL)
//当指针不为空的时候继续向后查找
{
if(strcmp(isbn,p->ISBN)==0) //判断该ISBN码是否存在,如果存在删除它
{
if(p->next==NULL) free(p);//当只有一个节点时
else{
q=p->next;
p->next=q->next;
free(q);}
e=1;
break;
}
p=p->next;
}
if(e==0)
{
printf("此图书不存在\n");
exit(0);
}
return OK;
}
int Change_Book(LinkList &L, char ISBN[20])
{
char isbn[20];
char
name1[20];
char auth1[20];
char output1[20];
char outday1[20];
char
money1[20];
int num1;
LinkList p=L;
printf("请输入你要修改图书的ISBN码,以回车键结束\n");
scanf("%s",isbn);
while (p!=NULL)
//当指针不为空的时候继续向后查找
{
if(strcmp(isbn,p->ISBN)==0)
//判断该ISBN码是否存在
{
printf("要修改图书的ISBN码: %s\n",p->ISBN);
printf("要修改图书的名字是: %s\n",p->name);
printf("要修改图书的作者是: %s\n",p->auth);
printf("要修改图书的出版社: %s\n",p->output);
printf("要修改图书出版日期: %s\n",p->outday);
printf("要修改图书的售价是: %s\n",p->money);
printf("要修改图书的册数是: %d\n",p->num);
break;
}
p=p->next;
}
if(p==NULL)
{
printf("此图书不存在\n");
exit(0);
}
else
printf("\n");
printf("请输入该书的ISBN码
:");
scanf("%s",isbn);
printf("请输入该书的名字是
:");
scanf("%s",name1);
printf("请输入该书的作者是
:");
scanf("%s",auth1);
printf("请输入该书的出版社
:");
scanf("%s",output1);
printf("请输入该书出版日期
:");
scanf("%s",outday1);
printf("请输入该书的售价是
:");
scanf("%s",money1);
printf("请输入该图书的册数 :");
scanf("%d",&num1);//从键盘输入修改的图书信息
strcpy(p->ISBN,isbn);
strcpy( p->name,name1);
strcpy(p->auth,auth1) ;
strcpy(p->output,output1);
strcpy(p->outday,outday1);
strcpy(p->money,money1);
p->num=num1;
printf("\n");
printf("修改后该书的ISBN码:%s\n",p->ISBN);
printf("修改后该书的名字是:%s\n",p->name);
printf("修改后该书的作者是:%s\n",p->auth);
printf("修改后该书的出版社:%s\n",p->output);
printf("修改后该书出版日期:%s\n",p->outday);
printf("修改后该书的售价是:%s\n",p->money);
printf("要修改图书的册数是:%d\n",p->num);
return OK;
}
void Insert_Book_xinx()//增加图书信息函数
{
/*int Write_To_File(LinkList &L);
int Read_From_File(LinkList &L);
int CreateLink_L(LinkList &L);
int Link_Book_Insert_L(LinkList &L);
函数声明 */
LinkList T;//定义一个图书结构体类型
CreateLink_L(T);//创建链表
Read_From_File(T);//从文本中把数据读到链表中
if(Seek_Book_ISBN(T)==1)
{
printf("此图书未存在:\n");
Link_Book_Insert_L(T);//新增图书新
Write_To_File(T);//把数据从链表中储存到文本中
}
else
printf("此图书已存在:\n");
}
void Detele_Book()//图书删除函数
{
LinkList T;
char ISBN[20];//\定义记录ISBN码的数组
CreateLink_L(T);//创建链表
Read_From_File(T);//从文本中把数据读到链表中
List_Book_Delete_L(T,ISBN);//删除对应ISBN码的图书
Write_To_File(T);//把数据从链表中储存到文本中
}
void Change_Book_xinxi()//修改图事故信息的函数
{
LinkList T;
char ISBN[20];
CreateLink_L(T);//创建链表
Read_From_File(T);//从文本中把数据读到链表中
Change_Book(T, ISBN);//|更改相应的ISBN码的图书信息
Write_To_File(T);//把数据从链表中储存到文本中
}
void search_Book()//查找图书
{
int i;
printf("1:按出版社查找\t2:按作者名称查找\t3:按图书名称查找\t4:按照图书的ISBN码查找\t请选择:\n");
scanf("%d",&i);
switch(i)
{
case 1:
Seek_Book_Publish(ook );
break;
case 2:
Seek_Book_auth(ook );
break;
case 3:
Seek_Book_name( ook );
break;
case 4:
Seek_Book_isbn( ook );
break;
default:
printf("你是输入有误:\n");
}
}
int main()
{
int i;
printf("1:增加图书\t2:修改图书信息\t3:删除图书\t4:查找图书\t请选择\n");
scanf("%d",&i);
switch(i)
{
case 1:
Insert_Book_xinx();
break;
case 2:
Change_Book_xinxi();
break;
case 3:
Detele_Book();
break;
case 4:
search_Book();
break;
default:
printf("~~~~~~~");
}
return OK;
}
~~~~~~~~~~~~能不能帮我调试一下~~~搞死我了~·其他的都没问题,就删除有问题~~