#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct Book //声明结构体
{
int num; /*编号*/
char cla[10]; /*分类名*/
char name[15]; /*书名*/
char author[8]; /*作者名*/
char company[20]; /*出版单位*/
int count; /*数量*/
float price; /*价格*/
};
typedef struct Book DataType; //结构体变量
typedef struct LNode
{
DataType data; //数据域
struct LNode *next; //指针域
}LinkList; //结构体类型
LinkList *head; //链表头指针
void DispList(LinkList *head); //初始化
LinkList*InitList()
{
head=(LinkList*)malloc(sizeof(LinkList));
head->next=NULL; //头指针置空
return head;
}
void ReadFile() //读取文件
{
FILE*fp; //指向文件的指针
// int i=0;
LinkList Books,*s,*last;//声明指针变量
last=head;//令两节点地址相同
if((fp=fopen("jk62107_08_bk.txt","r+"))==NULL)
{
printf("找不到此文件再试试!!!!\n");
return;
}
fscanf(fp,"%s\t %s\t %s %s %s %s %s\n",&Books.data.num,&Books.data.cla,&Books.data.name,&Books.data.author,&Books.data.company,&Books.data.count,&Books.data.price);
printf("\n\n 编号 分类\t 书名\t \t 作者 \t出版社 \t数量 \t\t价格\n");
while(!feof(fp))
{
s=(LinkList*)malloc(sizeof(LinkList));
fscanf(fp,"%d %s %s %s %s %d %f\n",&s->data.num,&s->data.cla,&s->data.name,&s->data.author,&s->data.company,&s->data.count,&s->data.price);
printf(" %d %s\t %s\t %s %s\t %d\t \t%f\n",s->data.num,s->data.cla,s->data.name,s->data.author,s->data.company,s->data.count,s->data.price);
s->next=NULL;//s的下一节点置空
last->next=s; //节点的指针域存放s节点的地址
last=s;
}
printf("\n\n文件读取成功\n\n");
fclose(fp);
}
void Searchname()//按书名查找图书
{
int flag=0; //标记变量的初值
char name[15];
LinkList Books,*s,*p; //定义指针变量
printf ("\n请输入需要查询的书名:");
scanf("%s",name);
printf("\n\t\t*+*+*+*+*+*+*+*+*+以下是您查找的信息*+*+*+*+*+*+*+*+*+");
p=head->next;//p指向首元节点
while(p!=NULL)
{
if(strcmp(p->data.name,name)==0)//查找符合的图书
{
printf("\n\t编号:%-10d",p->data.num);
printf("\n\t书名:%-20s",p->data.name );
printf("\n\t作者名:%-20s",p->data.author );
printf("\n\t分类名:%-10s",p->data.cla);
printf("\n\t出版单位:%-20s",p->data.company);
printf("\n\t数量:%-20d",p->data.count);
printf("\n\t价格:%5f",p->data.price);
flag=1; //找到标记变量设为1
p=p->next; //指针走到下一个节点
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同书名");
getchar();
}
void Searchauthor() //按作者名查找图书
{
int flag=0;
char author[10];
LinkList Books,*s,*p;
printf("\n请输入需要查询的作者名:");
scanf("%s",author);
printf("\n\t\t*+*+*+*+*+*+*+*+*+以下是您查找的信息*+*+*+*+*+*+*+*+*+");
p=head->next;
while(p!=NULL)//查找符合的图书
{
if(strcmp(p->data.author,author)==0)/*找到图书显示信息*/
{
printf("\n\t编号:%-10d",p->data.num);
printf("\n\t书名:%-20s",p->data.name );
printf("\n\t作者名:%-20s",p->data.author );
printf("\n\t分类名:%-10s",p->data.cla);
printf("\n\t出版单位:%-20s",p->data.company);
printf("\n\t数量:%-20d",p->data.count);
printf("\n\t价格:%-10f",p->data.price);
flag=1;
p=p->next;
}
else
p=p->next;
}
if(flag==0)
printf("\n\t\t没有相同作者名");
getchar();
}
void Insert(LinkList *head,int n,DataType Books){
LinkList *s,*p;
p=head;
int i=0;
while (i < n - 1 && p ) { //找到第n-1个位置
p = p->next;
i++;
}
if (!p) printf("不好意思!!入库失败!!!");
else { //入库
s= new LNode();
s->data = Books;
s->next = p->next;
p->next = s;
}
printf("插入成功!!!");
}
/*
void Insert(LinkList *head,int i,DataType)//录入图书信息
{
char num[10];
char c;
LinkList *p,*q,*r;
printf("\n\t\t****************请输入图书信息****************\n");
printf("\n\t\t请输入图书编号:");
scanf("%s",num);
while(p!=NULL)
{
if(strcmp(p->data.num,num)==0)
{
printf("已经有相同的登录号:");
return;
}
else
{
q=p;p=p->next;
}
}
r=(LinkList*)malloc(sizeof(LinkList));
r->next=NULL;
if(r==NULL)
{
printf("分配空间失败!");
return;
}
if(q==NULL)
*head=r;
else
{
q->next=r;
}
strcpy(r->data.num,num);
printf("\n\t\t输入书名:");//录入图书信息
scanf("%s",r->data.name);
getchar();
printf("\n\t\t输入作者名:");
scanf("%s",r->data.author);
getchar();
printf("\n\t\t输入分类名:");
scanf("%s",r->data.cla);
getchar();
printf("\n\t\t输入出版单位:");
scanf("%s",r->data.company);
getchar();
printf("\n\t\t输入图书数量:");
scanf("%s",r->data.count);
printf("\n\t\t输入图书价格:");
scanf("%s",r->data.price);
do
{
printf("\n\t\t录入成功!!!!");
num++;
printf("选择是否继续录入(Y/N)?:"); /*连续录入图书信息*
getchar();
scanf("%c",&c);
if(c=='y'||c=='Y')
Insert(head);
else
{
if(c=='n'||c=='N')
return;
else
printf("\n\t\t输入错误,请重新输入!!!");
}
}
while(c!='y'&&c!='n'&&c!='Y'&&c!='N');
}
*/
int main()
{
InitList();
ReadFile();
Searchname();
Searchauthor();
Insert();
return 0;
}
调用 Insert();时要输入参数,你主函数里调用Insert();时没输入参数啊