求大家关于统计信息的思路代码

需要统计图书信息
我的思路是按出版社、书名、主编分别进行统计
有一个选择选项
给出所有的出版社、书名、主编
for循环
找到就加一
然后运行不了
实践好难..

#include "record.h"
BOOK stastic(BOOK *top)
{
BOOK *p;

int num=0,cnum=0,znum=0,snum=0,i;
char str[2];
int cn=0;
char cname[][10]={"北京出版社","上海出版社","青海出版社","武汉出版社","广州出版社","长春出版社"};
char zname[][6]={"韩寒","陈新宏","马健会","郭涛","刘艺","冰心"};
char sname[][8]={"one一个","管理学","概率论","线性代数","资本论","繁星春水"};
p=top;
while(1)
{   
     printf("请输入统计的方式:\n");
     printf("1.按出版社\n");
     printf("2.按主编\n");
     printf("3.按书名\n");
}   
gets(str);

while(1)
    {
        cn = atoi(str);
       if(cn<1|| cn>3 )
       {
           printf("\n输入错误,重选1-3:");
           gets(str);
       }
       else    break;
        }


while(p)
{
    switch(cn)
    {
        case 1:         num++;
                        for(i=0;i<7;i++)
                        {   
                            if(strcmp(p->Publisher,cname[i]))
                            {   cnum++;
                                printf("%c共出版%d本书",p->Publisher,cnum);
                            }
                            else i++;
                                 cnum=0;
                                 p=p->next;

                        }
                        break;

/* capart[10]; //用于统计的数组

p=head;
while(p!=NULL){
for(i=0;i //在现有数组节点中能找到,则数量+1
}
//如果找不到,数组节点增+1,数量=1
p=p->next;
}
*/}
case 2: num++;
for(i=0;i {
if(strcmp(p->Editor,zname[i]))
{ znum++;
printf("%c共主编%d本书",p->Editor,znum);
}
else i++;
znum=0;
p=p->next;

                        }
                        break;


            case 3:     num++;
                        for(i=0;i<7;i++)
                        {   
                            if(strcmp(p->BookName,sname[i]))
                            {   snum++;
                                printf("图书馆有书名为“%c”%d本书",p->BookName,snum);
                            }
                            else i++;
                                 snum=0;
                                 p=p->next;

                        }
                        break;

}}
return(top);
}