来大神帮忙啊!!vs2010C语言问题解决不了

源文件
void menu()
{

int quanxianflag = 0;
char name1[10];
char password1[15];
show();
initial_stuff();
initial_goods();
printf("请输入用户名:\n");
scanf("%s",name1);
printf("请输入用户密码:\n");
scanf("%s",password1);
stuffnode *p2;
p2 = stuffhead;
while(p2->next != NULL)
{
if ((strcmp( p2->s.name, name1) == 0 && strcmp( p2->s.password, password1) == 0 ) &&
((strcmp( p2->s.quanxian, "y") == 0 || strcmp( p2->s.quanxian, "Y") == 0 )))
{
quanxianflag = 1;
break;
}
else
{
p2 = p2->next;
}
}
结构体
struct stuff //员工数据结构体
{
char name[10];
char password[10];
char quanxian[2];
};

struct goods //货品数据结构体
{
char number[20];
char name[20];
int quantity;
char cost[20];
char volume[20];
char weight[20];
};

typedef struct a
{
struct stuff s;
struct a *next;
}stuffnode;

typedef struct b
{
struct goods g;
struct b *next;
}goodsnode;

stuffnode *stuffhead = NULL; //全局结构体链表指针变量头指针
stuffnode *stuffp1 = NULL;

goodsnode *goodshead = NULL;
goodsnode *goodsp1 = NULL;
显示错误
错误 23 error C2065: “p2”: 未声明的标识符

警告 25 warning C4047: “=”:“int”与“stuffnode *”的间接级别不同

错误 22 error C2275: “stuffnode”: 将此类型用作表达式非法
错误 27 error C2223: “->next”的左侧必须指向结构/联合
错误 33 error C2198: “strcmp”: 用于调用的参数太少

错误 29 error C2223: “->s”的左侧必须指向结构/联合

#include <stdio.h>
#include <string.h>

struct stuff //???????
{
char name[10];
char password[10];
char quanxian[2];
};
struct goods //???????
{
char number[20];
char name[20];
int quantity;
char cost[20];
char volume[20];
char weight[20];
};
typedef struct a
{
struct stuff s;
struct a *next;
}stuffnode;
typedef struct b
{
struct goods g;
struct b *next;
}goodsnode;


stuffnode *stuffhead = NULL; //??????????????
stuffnode *stuffp1 = NULL;
goodsnode *goodshead = NULL;
goodsnode *goodsp1 = NULL;

void show()
{

}
void initial_stuff()
{

}

void initial_goods()
{

}

void menu()
{
    int quanxianflag = 0;
    char name1[10];
    char password1[15];
    show();
    initial_stuff();
    initial_goods();
    printf("??????:\n");
    scanf("%s",name1);
    printf("???????:\n");
    scanf("%s",password1);
    stuffnode *p2;
    p2 = stuffhead; 
    while(p2->next != NULL)
    {
        if ((strcmp( p2->s.name, name1) == 0 && strcmp( p2->s.password, password1) == 0 ) && 
        ((strcmp( p2->s.quanxian, "y") == 0 || strcmp( p2->s.quanxian, "Y") == 0 )))
        {
        quanxianflag = 1;
        break;
        }
        else
        {
        p2 = p2->next;
        }
    }
}


int main(int argc, char* argv[])
{
    return 0;
}