C++利用链表插入信息,编译器报错主函数部分有问题?

#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;
}


img

调用 Insert();时要输入参数,你主函数里调用Insert();时没输入参数啊